amareloのブログ(仮)

IT系勉強会で感じた想いや知見をメインに書いていきます。

JAWS-UG CLI専門支部 #163R CloudWatch Logs入門 ハンズオン実施

7/9(木)JAWS-UG CLI専門支部 #163R CloudWatch Logs入門 に参加する予定でしたが、出社勤務になったため参加できなくなってしまいました… しかし、帰宅後にハンズオンを実施し、CloudWatch Logsについて調べましたので、CloudWatch Logsの概要とハンズオンで使ったコマンドをまとめました。

目次

Amazon CloudWatch Logs について

今回、波田野さんのお話を聞けませんでしたので、自分で公式ドキュメント、Blackbeltの資料などで調べた内容を簡単にまとめます。

CloudWatch Logs とは
  • AWSサービスおよび顧客システムのログの監視、保存、アクセスができる。
    • EC2インスタンスのログのモニタリングやCloudTrailのログに記録されたイベントをモニタリングし、アラーム作成することができる。
  • ログの保存期間を設定できる(デフォルト無制限)。
  • アーカイブをS3に保存できる。
CloudWatch Logsの概念
  • CloudWatch Logs はディレクトリ構造

    • ロググループ
      • 同じ設定(ログ保持、監視、アクセス制御)を適用する複数のログストリームで構成される。
    • ログストリーム
      • 同じリソースを共有する一連のログイベント。タイムスタンプ順にイベントを表示する。
    • ログイベント
      • モニタリングしているアプリケーションやリソースが記録したアクティビティレコード(イベント)
  • メトリックスフィルタ

    • 取り込まれたログイベントから特定の文字列でフィルタリングすることができる。
    • フィルタリングデータは、CloudWatch メトリックスのデータポイントに記録される。
      • 特定の条件でアラートを出すことなどができる。

今回の手順

今回のハンズオン手順は以下を参照ください。

prototype-handson-cli.s3-website-ap-northeast-1.amazonaws.com

コマンド

1.ロググループの作成

まずはロググループを作成します。

作成するロググループ名--log-group-nameを指定して、logs create-log-groupを実行します。

aws logs create-log-group --log-group-name <ロググループ名>

作成したロググループは、logs describe-log-groups で確認します。 - ロググループ名--log-group-name-prefix と抽出したいグループの要素--query 'logGroups[].logGroupName'を指定してテキスト表示--output textします。

aws describe-log-groups --log-group-name-prefix <ロググループ名> \
--query 'logGroups[].logGroupName' \
--output text
2.CloudWatch Logsロググループの保持期間の設定

ロググループ名--log-group-nameとログ保持期間--retention-in-daysを指定し、logs put-retention-policyを実行します。

aws logs put-retention-policy --log-group-name <ロググループ名> --retention-in-days <ログ保持期間(数字)>
  • ロググループ名--log-group-nameとログ保持期間--retention-in-daysを指定し、logs describe-log-groups でログ保持期間を確認します。
aws describe-log-groups --log-group-name-prefix <ロググループ名> \
--query 'logGroups[].retentionInDays' \
--output text
3.CloudWatch Logsログストリームの作成

ロググループを作成したら、その配下に所属されるログストリームを作成します。

ロググループ名--log-group-nameと ログストリーム名--log-stream-nameを指定したら、logs create-log-streamを実行します。

aws logs create-log-stream --log-group-name <ロググループ名> --log-stream-name <ログストリーム名>

ログストリームを作成するロググループ --log-group-name とログストリーム名--log-stream-name-prefixを指定し、logs describe-log-streamsで存在確認をします。

aws logs describe-log-streams --log-group-name <ロググループ名> --log-stream-name-prefix <ログストリーム名> \
--query logStreams[].logStreamName --output text
4.CloudWatch Logsログイベントの作成

ログストリーム配下にログイベントの作成をします。

ログイベント作成先のログストリーム名--log-stream-name、ログイベント名--log-eventsを指定して、logs put-log-eventsを実行します。

aws logs put-log-events  --log-group-name <ロググループ名> \
--log-stream-name <ログストリーム名>
--log-events <ログイベント名>

ログイベントが作成されたか確認します。

ログイベントを取得するロググループ --log-group-name とログストリーム名--log-stream-name、取得ログイベント数--limitを指定して、logs get-log-eventsを実行します。

aws logs get-log-events \
  --log-group-name <ロググループ名> \
  --log-stream-name <ログストリーム名> \
  --query 'length(events[])'
5.CloudWatch Logsログイベントの取得

ログイベントを取得するロググループ --log-group-name とログストリーム名--log-stream-name、取得ログイベント数--limitを指定して、logs get-log-eventsを実行します。

aws logs get-log-events --log-group-name <ロググループ名> \
--log-stream-name <ログストリーム名> \
--limit <取得ログイベント数>
6.ログイベントの追加

ログイベントを追加する場合は、ログイベントを追加するロググループ --log-group-name とログストリーム名--log-stream-name、 ログイベント名--log-events、アップロードシーケンストーク--sequence-tokenを指定して、logs put-log-eventsを実行します。

aws logs put-log-events \
  --log-group-name <ロググループ名> \
  --log-stream-name <ログストリーム名> \
  --log-events "<ログイベント名>" \
  --sequence-token <アップロードシーケンストークン>
7.ログストリームの削除

ここからは、後片付けのための削除コマンドになります。

削除するログストリームが所属するロググループ名 --log-group-name と削除するログストリーム名--log-stream-nameを指定して、logs delete-log-streamを実行します。

aws logs delete-log-stream --log-group-name <ロググループ名> 
--log-stream-name <ログストリーム名>
8.CloudWatch Logsロググループの保持期間の削除

ロググループ名--log-group-nameを指定し、logs delete-retention-policyを実行します。

aws logs delete-retention-policy --log-group-name <ロググループ名>
9.ロググループの削除

ロググループ名--log-group-nameを指定し、logs delete-log-groupを実行します。

aws logs delete-log-group --log-group-name <ロググループ名>

感想

CloudWatch Logsはディレクトリ構造になっていることは、GUIでポチポチやっているとあまり実感できませんでした。 でも、今回CLIで動かしたことで、ロググループ名、ログストリーム名、ログイベント名をオプションに指定する必要があるので、階層構造を意識できた実感がしました。 ハンズオンをやる前は、今回は今までのIAMやEC2に比べると量が少なめかな?と思いましたが、CloudWatch Logsのディレクトリ構造をはっきりと実感できて大収穫でした。

今回、勉強会には参加できませんでしたので、手順書とAWS公式ドキュメントを見ながらハンズオンしました。 サービスの概要、手順書の意味を調べながら手を動かす。その方が理解が深まるのではないかと思いました。 今までもやっていなかったわけではないですが、意識は薄かったかなと反省しました。 コマンド操作を楽しむのも良いですが、ちゃんとサービスの意味や挙動を知ることが大事ですね。

また、最近は復習するときは、主要コマンド操作はコピペではなく、必ずキーボード打って体でも覚えるようにしています。 これも大事なことだと思いながら取り組んでいます。

次回はLambda入門。Lambdaは以前の勉強会でも少し触れましたが、LambdaをCLIで触れるのは興味があります。 これまでで一番楽しみかもしれません!!

jawsug-cli.connpass.com