CloudWatchのログをコマンドラインから見るawslogsを使ってみた

CloudWatchLogsが使いにくい!

ログの画面を開いておくと勝手にリロードされたり、リロードされるたびに「全て展開」を押したりと色々面倒です。

awslogsを試してみた

awslogs というpythonライブラリを見つけたので試してみました。 awslogsでは期間や条件を指定してログを取得たり、最新のログを取得し続けたりできます。

インストール

pip install awslogs

OSX El Capitanを使用している場合はこちらのコマンドでインストールするようです。

pip install awslogs --ignore-installed six

準備

CloudWatchLogsにアクセスできる権限を持った情報を設定します。

アクセスキーとシークレットキーを使う場合

# ~/.aws/credentials

[app_logs]
aws_access_key_id = AKXXXXXXXXXXXXXXXX
aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxx

AssumeRoleを使う場合

# ~/.aws/config

[profile app_logs]
source_profile = default
role_arn = arn:aws:iam::000000000000:role/developer
region = ap-northeast-1

使い方

1. 期間を指定してログを取得する

awslogs get <ロググループ名> --profile プロファイル名 --start='<取得期間>'

基本的な使い方としては、期間を指定してログを取得できます。

# 例
awslogs get /aws/lambda/api --profile app_logs --start='1h'

startの部分にはm(分)/h(時)/d(日)/w(週)が指定でき、20/3/2018 12:00のように日付を指定することもできます(dateutilを使っているとのことなので詳細な指定方法はこちら を参照)

2. 最新のログを取得し続ける

awslogs get <ロググループ名> --profile プロファイル名 --watch

これが一番便利なのですが、--watchをつけることで最新のログを常に取得してくれるようになりますこれで一つコンソールを開いて表示させておけば tailf のような使い方ができます。

# 例
awslogs get /aws/lambda/api --profile app_logs --watch

3. ログを絞って取得

awslogs get <ロググループ名> --profile プロファイル名 --filter-pattern <絞り込む文字列>

目的のログを探すのにステータスコードで絞り込みたいなどフィルタリングすることができます。

# 例
awslogs get /aws/lambda/api --profile app_logs --filter-pattern 500

4. ログストリーム名などを消す

行の最初に表示されるログストリーム名や時間などの表示が結構長くてスペースを取るので消したいときはcutコマンドで消しています。

awslogs get /aws/lambda/api --profile app_logs --start='1h' | cut -d ' ' -f 4-

[追記]ロググループ名とストリーム名を消せるオプションがありました

オプション 詳細
–no-group ロググループ名を消す
–no-stream ストリーム名を消す

参照

https://github.com/jorgebastida/awslogs