CloudWatch Logsに貯めたOSログをmacOSで確認してみた

Amazon CloudWatch Logsに貯めたOSログをAWS CLIで確認してみました。 ログの確認方法としては、CloudWatchコンソールやS3にエクスポートする方法などがあります。 手元のmacOSでサクッと確認したいなと思い、試してみました。
2018.03.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon CloudWatch Logsに貯めたOSログをAWS CLIで確認してみました。
他のログの確認方法としては、CloudWatchコンソールやS3にエクスポートする方法などがあります。
手元のmacOSでサクッと確認したいなと思い、試してみました。

AWS CLIでサクッと取得しよう

ログの確認には、aws logs get-log-eventsコマンドを使います。
最低限のオプションとして、ロググループ、ログストリームを指定します。
--start-time--end-timeを指定すれば、特定時刻のログを取得できます。
時刻はUnix timeをミリ秒で指定します。
例をあげてご説明します。

特定時刻のログを確認する

2018年3月30日10時00分から11時00分のログを確認する例です。
LogGroupName、LogStreamNameは環境に合わせて変更してください。
--query以下は不要であれば、削除してください。
Amazon Linuxの/var/log/messagesログが綺麗に見えるようにしました。

start="2018-03-30T10:00:00+0900"
end="2018-03-30T11:00:00+0900"
starttime=$(expr `date -j -f %FT%T%z ${start} +%s` \* 1000)
endtime=$(expr `date -j -f %FT%T%z ${end} +%s` \* 1000)
aws logs get-log-events --log-group-name LogGroupName --log-stream-name LogStreamName --start-time ${starttime} --end-time ${endtime} --query 'events[]' --output text | awk '{ $1 = ""; print }'

10分前から最新のログを確認する

dateコマンドで-v-10Mを指定すると10分前を指定できます。

start=`date -v-10M +"%FT%T%z"`
end=`date +"%FT%T%z"`
starttime=$(expr `date -j -f %FT%T%z ${start} +%s` \* 1000)
endtime=$(expr `date -j -f %FT%T%z ${end} +%s` \* 1000)
aws logs get-log-events --log-group-name LogGroupName --log-stream-name LogStreamName --start-time ${starttime} --end-time ${endtime} --query 'events[]' --output text | awk '{ $1 = ""; print }'

時刻の相対指定について、使いそうな例をあげておきます。
[-v[+|-]val[ymwdHMS]]の形式で指定できます。

30秒前

start=`date -v-30S +"%FT%T%z"`

1時間前

start=`date -v-1H +"%FT%T%z"`

3日前

start=`date -v-3d +"%FT%T%z"`

start-time, end-timeを使わないケース

CloudTrailのログをCloudWatch Logsに連携するようなケースでは、start-time、end-timeを使わずに ログ中のeventTimeで絞り込む形になると思います。
CloudWatch Logsの時刻とログの時刻が一致しないケースも、ログ中の時間で絞り込む形になるでしょう。

さいごに

Amazon CloudWatch LogsにためたOSログをAWS CLIで確認してみました。
macOS以外で試す場合、dateコマンドのオプションが異なる場合があるので、環境に合わせたオプションを指定してみてください。

検証環境

  • macOS High Sierra
  • aws-cli/1.11.129

参考