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 | ストリーム名を消す |