web-dev-qa-db-ja.com

AWSログをリアルタイムで表示する方法(tail -fなど)

次のコマンドを使用してログを表示できます。

aws logs get-log-events --log-group-name groupName --log-stream-name streamName --limit 100

ログをリアルタイムで確認できるように、tail -fのような機能を取得するコマンドは何ですか

39
LynAs

awslogs をご覧ください。

特にLambda/API Gatewayを使用している場合は、 apilogs をご覧ください。

28
RyanG

awslogscwtailには本当にがっかりしたので、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は、出力が読みやすく、グループ内の単一のストリームだけでなく、ロググループ全体からログをストリーミングできるため、優れています。特定のプレフィックスを持つストリームのフィルタリングと視聴も簡単です!

69
Tyler Brock

cwtail を発見したばかりで、(ラムダ関数のCloudWatchログを監視するために)うまく機能しています。

インストールする:

npm install -g cwtail

ロググループを一覧表示するには:

cwtail -l

次に、どのロググループを「末尾」に選択したら:

cwtail -f /aws/lambda/ExampleFunction
8
Greg Sadetsky

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でカスタマイズされた(ろくでなし?大歓迎です:)

6
Travis Warlick

CloudWatch Logsを効率的に追跡するために、 cw というツールを作成しました。

インストールは非常に簡単で(醸造、スナップ、スクープをサポート)、高速(特定のハードウェアアーキテクチャをターゲットとし、中間ランタイムはありません)で、一連の features により、作業が楽になります。

cw の例は次のとおりです。

cw tail -f groupName:streamName
5
Luca Grulla

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を使用する必要がある場合にのみアクティブにします。

4
Anton I. Sipos

JetBrains awstailと呼ばれるプラグイン を作成してこれを行います:)

4
godzsa

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 を参照してください。

0
SenseDeep

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 を参照してください。

0
ChillarAnand