たのもう
CloudWatch Logs Agent の設定をしたばってん、ちゃんとログが転送されていることを確認したい。しかも、AWS CLI で。
一本!
例えば、ロググループが oreno-dev-app というロググループにログを飛ばした場合、以下のように確認したい。
_ENV=dev _APP=app _AWS_PROFILE=oreno-profile _AWS_REGION=ap-northeast-1 # # ロググループを取得(dev と app という文字列を含んだロググループを取得する) # _LOG_GROUP=$(aws --profile ${_AWS_PROFILE} --region ${_AWS_REGION} logs describe-log-groups \ |jq -r ".logGroups[]|select(.logGroupName|contains(\"${_ENV}\"))|select(.logGroupName|contains(\"${_APP}\"))|.logGroupName") echo ${_LOG_GROUP} # # ログストリームから最新の lastEventTimestamp を持ったログストリームを取得 # _LOG_STREAM=$(aws --profile ${_AWS_PROFILE} --region ${_AWS_REGION} logs describe-log-streams --log-group-name ${_LOG_GROUP} \ |jq -r '.logStreams|sort_by(.lastEventTimestamp)|map(.logStreamName)|.[-1]') echo ${_LOG_STREAM} # # ログイベントから最新の timestamp を持ったログイベントを取得 # aws --profile ${_AWS_PROFILE} --region ${_AWS_REGION} logs get-log-events --log-group-name ${_LOG_GROUP} --log-stream-name ${_LOG_STREAM} \ | jq '.events|sort_by(.timestamp)|.[-1]'
ひとまず、動作確認なのでログイベントは最新の一件が確認出来れば良い。
ありがとうございました!
jq で配列の最後の要素を取り出す方法が解らなくて苦労したけど、以下のように書けば良かった。
$ jq --version jq-1.5 $ echo '["a", "b", "c"]' | jq .[-1]
元記事はこちら
「小ネタ道場一本勝負 〜 AWS CLI と jq を使って CloudWatch Logs にログが転送されていることを確認する手順の一つ 〜」