Slide 1

Slide 1 text

CloudWatch Logs Insightsで 定期業務をスマートに みのるんのゲリラ勉強会&インフラ技術基礎勉強会 アイレット株式会社 ⼩巻玖美

Slide 2

Slide 2 text

⾃⼰紹介 2 所属:アイレット株式会社 アジャイル事業部 業務:TSやPythonでのWebアプリケーション開発    (最近は専ら⽣成AI系) ⼩巻 玖美 / こまきち @komakichidev https://zenn.dev/kumao

Slide 3

Slide 3 text

ある⽇、こんなことを⾔われました 3

Slide 4

Slide 4 text

やりたいこと 4 エンドユーザーから時々レスポンスが 遅いと報告が上がっている 数ヶ⽉間、定期的にログを確認して 原因を調査してくれ

Slide 5

Slide 5 text

やりたいこと 5 ● アプリケーションのパフォーマンスをあげたい ボトルネックを探す⼀助として、遅延が発⽣しているリクエストを知りたい ● 1ヶ⽉分のログが対象 API GatewayのLatencyやLambdaのDurationがx秒以上のものを探したい

Slide 6

Slide 6 text

やりたいこと 6

Slide 7

Slide 7 text

最初の数ヶ⽉間、こんな作業をしていました 7

Slide 8

Slide 8 text

これまで⾏っていたこと 8

Slide 9

Slide 9 text

これまで⾏っていたこと 9

Slide 10

Slide 10 text

これまで⾏っていたこと 10

Slide 11

Slide 11 text

これまで⾏っていたこと 11

Slide 12

Slide 12 text

これまで⾏っていたこと 12

Slide 13

Slide 13 text

これまで⾏っていたこと 13

Slide 14

Slide 14 text

これまで⾏っていたこと 14

Slide 15

Slide 15 text

これまで⾏っていたこと 15

Slide 16

Slide 16 text

これまで⾏っていたこと 16

Slide 17

Slide 17 text

これまで⾏っていたこと 17

Slide 18

Slide 18 text

これまで⾏っていたこと 18

Slide 19

Slide 19 text

そんな時に CloudWatch Logs Insights に出会った 19

Slide 20

Slide 20 text

CloudWatch Logs Insightsとは 20 AWS CloudWatchに保存されたログデータをリアルタイムで検索し、 分析するためのクエリツール

Slide 21

Slide 21 text

CloudWatch Logs Insightsとは 21 クエリ構⽂ ロググループをクエリし、特定のログデータを抽出‧分析するための⾔語 コマンド名 説明 display 特定のフィールドをクエリ結果に表⽰する filter クエリをフィルタリングし、条件に⼀致するログイベントのみを返す stats ログフィールドの値を使⽤して統計情報を算出する dedup 指定したフィールドの値に基づいて重複した結果を削除する unmask マスクされたデータの内容を表⽰する

Slide 22

Slide 22 text

CloudWatch Logs Insightsとは 22 クエリ構⽂ ロググループをクエリし、特定のログデータを抽出‧分析するための⾔語 コマンド名 説明 display 特定のフィールドをクエリ結果に表⽰する filter クエリをフィルタリングし、条件に⼀致するログイベントのみを返す stats ログフィールドの値を使⽤して統計情報を算出する dedup 指定したフィールドの値に基づいて重複した結果を削除する unmask マスクされたデータの内容を表⽰する こんな感じ

Slide 23

Slide 23 text

実際にやってみます 23

Slide 24

Slide 24 text

やってみる 24 CloudWatch Logs Insightsに移動する

Slide 25

Slide 25 text

やってみる 25 クエリを書きます <⼊⼒> 対象はLambda関数の実⾏に関するログイベント / 処理に4秒以上かかっている / タイムスタンプで ソート / 20個まで表⽰

Slide 26

Slide 26 text

やってみる 26 クエリを書きます <出⼒> タイムスタンプ / リクエストID / 処理にかかった時間 / CloudWatch Logsのログストリーム / メッセージ

Slide 27

Slide 27 text

やってみる 27

Slide 28

Slide 28 text

やってみる 28 @duration @log / @logStream @message

Slide 29

Slide 29 text

やってみる 29

Slide 30

Slide 30 text

やってみる 30 対象のリクエストもわかる!

Slide 31

Slide 31 text

やってみる 31 対象のリクエストもわかる! ログにも⾶べる!

Slide 32

Slide 32 text

やってみる 32 対象のリクエストもわかる! ログにも⾶べる!

Slide 33

Slide 33 text

やってみる 33 対象のリクエストもわかる! ログにも⾶べる! ただ、この沢⼭のログ ログ設計を⾒直すともっと⾒やすい!!

Slide 34

Slide 34 text

ログをもう少し⾒やすくする (ログ設計のおはなし) 34

Slide 35

Slide 35 text

ログを⾒やすくする 35 ログ形式を意識せずにLambdaを作成すると、取得できる@messageの 表⽰がバラバラ 例: Lambda(Python)でprint出⼒を混ぜた 天気を取得する実装の例 ↑

Slide 36

Slide 36 text

ログを⾒やすくする 36 そこでログ出⼒を共通化することで、欲しいログを探しやすくする fields @timestamp, @duration, @message, @logStream, @log | filter @message like "INFO" // ここではINFOを取り出してみる | limit 100

Slide 37

Slide 37 text

ログを⾒やすくする 37 TIPS:ログの共通化には「Powertools for AWS Lambda」が便利! フォーマットを指定しなくても、Powertoolsが良しなにやってくれる Loggerだけでなく、Validation‧Parser‧Data Maskingなどが簡単に導⼊可能

Slide 38

Slide 38 text

CloudWatch Logs Insights その他の機能 38

Slide 39

Slide 39 text

その他の機能 39 クエリを保存しておく クエリした結果を CloudWatchのダッシュボードに追加も可能 クエリ単体での保存

Slide 40

Slide 40 text

その他の機能 40 ⾃然⾔語を使⽤して Logs Insights CloudWatch クエリを⽣成および更新する ※バージニア北部、オレゴン、東京リージョンでのみ利⽤可能

Slide 41

Slide 41 text

その他の機能 41 ⾃然⾔語を使⽤して Logs Insights CloudWatch クエリを⽣成および更新する ※バージニア北部、オレゴン、東京リージョンでのみ利⽤可能 英語のみ対応…

Slide 42

Slide 42 text

まとめ 42 CloudWatch Logs Insightsを使⽤したことで… ● 数の多い⼿作業の調査から決まったクエリ結果を⾒るだけに ● 遅延の原因特定が迅速に ● ダッシュボードへのクエリ結果追加で、より楽にミスを少なく

Slide 43

Slide 43 text

Appendix 43 ・powertools-lambda-python https://docs.powertools.aws.dev/lambda/python/latest/ ・CloudWatch Logs Insights を使用したログデータの分析 https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/Analy zingLogData.html