次のコマンドを使用してログを表示できます。
aws logs get-log-events --log-group-name groupName --log-stream-name streamName --limit 100
ログをリアルタイムで確認できるように、tail -f
のような機能を取得するコマンドは何ですか
awslogs
とcwtail
には本当にがっかりしたので、CloudWatchログを効率的にコンソールにストリーミングする(そしてJSON出力を色付けする) Saw という独自のツールを作成しました。
次の方法でMacOSにインストールできます。
brew tap TylerBrock/saw
brew install saw
JSON出力を自動的に展開(インデント)する機能(--expand
):
saw watch my_log_group --expand
エラーログを表示するLambdaを取得しましたか?問題ない:
saw watch /aws/lambda/my_func --filter error
Sawは、出力が読みやすく、グループ内の単一のストリームだけでなく、ロググループ全体からログをストリーミングできるため、優れています。特定のプレフィックスを持つストリームのフィルタリングと視聴も簡単です!
cwtail を発見したばかりで、(ラムダ関数のCloudWatchログを監視するために)うまく機能しています。
インストールする:
npm install -g cwtail
ロググループを一覧表示するには:
cwtail -l
次に、どのロググループを「末尾」に選択したら:
cwtail -f /aws/lambda/ExampleFunction
CloudWatchログは遅延する可能性があるため(つまり、正確な定義により「リアルタイム」ではないため)、最後のタイムスタンプの以前のイベントを解析し、そこで次の反復を開始します。
#!/bin/bash
group_name='<log-group-name>'
stream_name='<log-stream-name>'
start_seconds_ago=300
start_time=$(( ( $(date -u +"%s") - $start_seconds_ago ) * 1000 ))
while [[ -n "$start_time" ]]; do
loglines=$( aws --output text logs get-log-events --log-group-name "$group_name" --log-stream-name "$stream_name" --start-time $start_time )
[ $? -ne 0 ] && break
next_start_time=$( sed -nE 's/^EVENTS.([[:digit:]]+).+$/\1/ p' <<< "$loglines" | tail -n1 )
[ -n "$next_start_time" ] && start_time=$(( $next_start_time + 1 ))
echo "$loglines"
sleep 15
done
または、ロググループ全体をテールする場合は、ストリーム名なしでfilter-log-events
を使用します。
#!/bin/bash
group_name='<log-group-name>'
start_seconds_ago=300
start_time=$(( ( $(date -u +"%s") - $start_seconds_ago ) * 1000 ))
while [[ -n "$start_time" ]]; do
loglines=$( aws --output text logs filter-log-events --log-group-name "$group_name" --interleaved --start-time $start_time )
[ $? -ne 0 ] && break
next_start_time=$( sed -nE 's/^EVENTS.([^[:blank:]]+).([[:digit:]]+).+$/\2/ p' <<< "$loglines" | tail -n1 )
[ -n "$next_start_time" ] && start_time=$(( $next_start_time + 1 ))
echo "$loglines"
sleep 15
done
GitHubの要点として使用するスクリプトも作成しました: https://Gist.github.com/tekwiz/964a3a8d2d84ff4c8b5288d9a703fbce 。
警告:上記のコードとスクリプトは、HomebrewとGNU coreutilsでカスタマイズされた(ろくでなし?大歓迎です:)
Awscli v2でのみですが、まだリリースされていないが、awsログのテーリングは公式のawscliのサポートされている機能であることに注意してください。ログのテーリングとフォロー(tail -f
など)は、次のような方法で実行できるようになりました。
aws logs tail $group_name --follow
V2バージョンをインストールするには、この page の手順を参照してください。これで実装されました [〜#〜] pr [〜#〜] 。前回のre:Inventカンファレンスでデモをご覧になるには、こちらの video をご覧ください。
ログの末尾に加えて、--since
パラメーターを使用して、指定した時刻までログを表示できます。これには絶対時間または相対時間を使用できます
aws logs tail $group_name --since 5d
Awscliのv1バージョンとv2バージョンを別々に保つために、awscli v2を別個のpython仮想環境にインストールし、awscli v2を使用する必要がある場合にのみアクティブにします。
JetBrains awstailと呼ばれるプラグイン を作成してこれを行います:)
Aws cliは、live tail -fオプションを提供しません。
上記の他のツールはテーリング機能を提供しますが、これらすべてのツール、awslogs、cwtailを試したところ、イライラすることがわかりました。イベントのダウンロードが遅く、多くの場合、信頼性が低く、JSONログデータの表示には役に立たず、クエリオプションのプリミティブなものでした。
アプリケーションのエラーとステータスを即座に簡単に確認できる、非常に高速でシンプルなログビューアが必要でした。 CloudWatch Logs Viewerは低速であり、CloudWatch Insightsは非常に基本的なクエリで1m以上かかる場合があります。
そこで、完全にブラウザで実行される無料のAWS CloudWatch LogsビューアーであるSenseLogsを作成しました。サーバー側のサービスは必要ありません。 SenseLogsは、ログデータを透過的にダウンロードし、ブラウザアプリケーションキャッシュにイベントを保存して、すぐに表示、スムーズな無限スクロール、全文クエリを実行できるようにします。 SenseLogsには、バックスクロールが無限に続くライブテールがあります。詳細については、 https://github.com/sensedeep/senselogs/blob/master/README.md を参照してください。
awslogs 、a pythonパッケージを使用して、aws logwatchログを追跡できます。
でインストールする
pip install awslogs
すべてのグループをリストします
awslogs groups
次に、ストリームを選択して、視聴します
awslogs get staging-cluster --watch
一致するパターンでログをフィルタリングすることもできます。
# tail logs of a cluster
awslogs get staging-cluster --watch
# tail logs of a lambda function
awslogs get /aws/lambda/some-service --watch
# print all logs containg "error"
awslogs get staging-cluster --watch --filter-pattern="error"
# print all logs *not* containg "error"
awslogs get staging-cluster --watch --filter-pattern="-error"
Awslogの使用の詳細については、 project readme を参照してください。