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で触れるのは興味があります。 これまでで一番楽しみかもしれません!!