AwsPowerShellLambda?

2019-10-06

参照:https://docs.aws.amazon.com/powershell/latest/reference/Index.html

CloudWatchLogsの構造(基礎知識)

AWSの各サービスの各インスタンスが出すログの塊が「ロググループ」として扱われている。
また各インスタンスが出す個別のログが「ログストリーム」として呼ばれている。
更に、そのログストリームが出す1行(1回の出力)が「ログイベント」として表されている。

例:Lambda関数"my-lambda-func"のログについて

- ロググループ "my-lambda-func"
    - ログストリーム "yyyy/mm/dd/[$LATEST]0123456789abcdef0123456789abcd"
        - ログイベント "処理開始"
        - ログイベント "'Hello, World'"
        - ログイベント "処理終了"
        ...
    - ログストリーム "yyyy/mm/dd/[$LATEST]0123456789abcdef0123456789abce"
    ...
...

なので、あるインスタンスのある処理のログを見たい場合には、ロググループの他に実行時間から対象のログストリームを見つけだしてから、そのストリーム内のデータを参照する必要がある。

サンプル

Lambda関数 oreno-lambda-func のログデータを取得する

#sh(ruby){{

Import-Module -Name AWSPowerShell.NetCore


$group = @(Get-CWLLogGroup -LogGroupNamePrefix "/aws/lambda/oreno-lambda-func")[0];


$streams = Get-CWLLogStream -LogGroupName $group.LogGroupName -OrderBy ([Amazon.CloudWatchLogs.OrderBy]::LastEventTime) -Descending $true -Limit 10;

# 標準のソートキーはLastEventTimeかLogStreamNameしかないが
# 実際には「開始した時間(=CreationTimeやFirstEventTimestamp)」でソートし、直近開始したもののログを見たい、ということがほとんどだと思う
# その場合はPowerShellのソートを使うと良い
$streams = Get-CWLLogStream -LogGroupName $group.LogGroupName -NextToken $null;
while($AWSHistory.LastServiceResponse.NextToken -ne $null) {
$streams += @(Get-CWLLogStream -LogGroupName $group.LogGroupName -NextToken $AWSHistory.LastServiceResponse.NextToken)
}

$streams = $streams | Sort-Object -Descending -Property "CreationTime";


# 例えば、直近1件のログストリームの中身を確認する
$events = @();
$response = Get-CWLLogEvent -LogGroupName $group.LogGroupName -LogStreamName $streams[0].LogStreamName -NextToken $null;
$events += $response.Events;
while($AWSHistory.LastServiceResponse.NextToken -ne $null) {
$response = Get-CWLLogEvent -LogGroupName $group.LogGroupName -LogStreamName $streams[0].LogStreamName -NextToken $AWSHistory.LastServiceResponse.NextToken;
$events += $response.Events;
}

# "[時刻] メッセージ" の形式で出力
Write-Host -Object (@($events | Sort-Object -Property "IngestionTime" | % { "[{0}] {1}" -F $_.IngestionTime, $_.Message }) -join [Environment]::NewLine);

# リクエストが失敗(タイムアウト)したかチェック
$failed = @($events | ? { $_.Message.ToLower() -match 'requestid:\s+[a-z0-9\-]\s+process\s+exited\s+before\s+completing\s+request' }).Length -eq 0;

}}


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-10-06 (日) 04:17:36