ようへいの日々精進XP

よかろうもん

小ネタ道場一本勝負 〜 AWS CLI と jq を使って CloudWatch Logs にログが転送されていることを確認する手順の一つ 〜

たのもう

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]