構造化とコンテキストを活用したログ戦略

10.5K Views

November 08, 24

スライド概要

社内勉強会にて登壇した際の資料となっております

Webサーバーにおけるロギングをどう解決するかを説明しています

ログがただのテキストではなく、追える情報であることの重要性を強調しています。特に、構造化ログを活用することで情報量を増やし、検索性と可読性を向上させる方法について解説しています。また、コンテキストを用いたログ出力の技術的な側面や、実際のチームでの活用方法についても言及しています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

構造化とコンテキストを活用したログ戦略 株式会社BuySell Technologies 鴨野 誠

2.

自己紹介 鴨野 誠 株式会社BuySell Technologies 訪問買取アプリケーション バックエンド(Go) 音楽が好き ○ 最近はtoconoma推し ● 友達がアイドルの追っかけ ○ 同じ事務所のタレント(MC)に なったらしい ● ● ● ● ● 夏休み中に金沢 Jazz Streetに行ってきました 2

3.

今日言いたいこと 追えないログはただのテキスト あなたの出している「ログ」は本当に追えますか ? 3

4.

ゴール ● ログを整備することの価値がわかる ○ コストに対するリターン を認識できる ● 効果的なログの設計方針がわかる 4

5.

質問 Q.あなたのプロダクトではどのようなログを出していますか? 5

6.

質問 Q.あなたのプロダクトではどのようなログを出していますか? A.最低限は出してます ! 6

7.

質問 Q.あなたのプロダクトではどのようなログを出していますか? A.最低限は出してます ! ● とは? ○ エラーが起こったということ ○ 起こった時間 7

8.

質問 Q.あなたのプロダクトではどのようなログを出していますか? A.最低限は出してます ! ● とは? ○ エラーが起こったということ ○ 起こった時間 これが十分なログかは目的による 8

9.

ログを出す目的 ● 集計、メトリクス ○ New Relicなどはここ ○ アラートを出すためのクエリ ● 障害、問い合わせ対応 ○ 自分のチームはここがメイン 9

10.

どのようにログを使っていたか Slackで問い合わせが送られてくる @dev-team お疲れ様です ! 〇〇をしようとしたのですが、〇〇ができない状況です ! 解決策を教えていただきたいです ! 案件ID : xxxxxxxx ユーザー1 10

11.

どのようにログを使っていたか Google Cloudのログエクスプローラ 案件ID、従業員番号で全文検索 検索クエリ 結果 11

12.

どのようにログを使っていたか Google Cloudのログエクスプローラ 案件ID、従業員番号で全文検索 検索クエリ このあたり...? 結果 12

13.

何が問題か ? ● 情報が足りていない ○ どのリクエストのログか ○ 誰の操作によるログか ○ 最終的にどのステータスで返却されているのか ● 検索にヒットしないログがある ● 検索にはヒットしているが、今見たいログではない ○ 絞り込めない ○ 認知負荷になる ● ユーザーの行動をヒアリングによって推測 ○ 対応時間が長い ○ ユーザーに負担がかかる ● etc… 13

14.

何が問題か ? ● ログから得られる情報量が少ない ● 情報の純度が低い ● だから他の情報源に頼らざるを得ない 14

15.

ログの情報量を増やす ! これで追えるログになりました ! 15

16.

今日言いたいこと 追えないログはただのテキスト あなたの出している「ログ」は本当に追えますか ? 16

17.

今日言いたいこと 追えない ログはただのテキスト あなたの出している「ログ」は本当に追えますか ? 追えるログ ● 情報量が多い 17

18.

本当に? 18

19.

メッセージにすべてを込めるつらみ ● ● ● ● ● ● 情報量は確かに増えた 全文が長くなりすぎる 冗長 値を書き忘れる 一貫性の担保が難しい 書くのが辛い Goの実装 ○ 書くのが辛いコードは浸透 しない ログエクスプローラの例 19

20.

どうやって解決するか ? 20

21.

どうやって解決するか ? ● 構造化ログを使う 21

22.

構造化ログ ● 機械が読みやすいフォーマット(主にJSON)で吐き出されたログ ● 機械的に集計、分析が可能 New Relic blogより Go slogの実装 message key value 出力 22

23.

構造化ログのメリット ● ある程度テンプレート、ルール化し てコードを書ける ● ログを機械的に絞り込める ○ 機械にやさしい ○ 人間にやさしい 検索クエリ 結果 Go slogの実装 message key value ログの中身 23

24.

構造化ログを使う ● 情報量が多い ● 書きやすい これで追えるログになりました ! 24

25.

今日言いたいこと 追えない ログはただのテキスト あなたの出している「ログ」は本当に追えますか ? 追えるログ ● 情報量が多い 25

26.

今日言いたいこと 追えない ログはただのテキスト あなたの出している「ログ」は本当に追えますか ? 追えるログ ● 情報量が多い ● 構造化されている 26

27.

本当に? 27

28.

抱えている問題 ● キー名がブレる ○ 検索性の低下 ● 情報が足りない ○ 誰が実行した? ○ どこから呼ばれた? ○ どのリクエスト? ↑これらの情報は関数には渡されない 28

29.

どうやって解決するか ? 29

30.

どうやって解決するか ? ● コンテキストを使う 30

31.

(Webサーバーにおける )コンテキストとは ● リクエストからレスポンスまでのライフサイクル内で共通 ● 自由に値の受け渡しができる ● 便利な箱 ○ 今回はkey-valueを保存、取得できればOK 31

32.

コンテキストをログに活用する handler usecase domain handler usecase domain infra 32

33.

コンテキストをログに活用する ログを出力with context {} handler usecase domain handler usecase domain infra 33

34.

コンテキストをログに活用する ログを出力with context {} contextに値を追加 user: kamono handler usecase domain handler usecase domain infra 34

35.

コンテキストをログに活用する ログを出力with context {} contextに値を追加 user: kamono ログを出力with context { user: kamono } handler usecase domain handler usecase domain infra 35

36.

コンテキストをログに活用する ログを出力with context {} contextに値を追加 user: kamono ログを出力with context { user: kamono } handler usecase domain handler usecase domain contextに値を追加 error: not found infra 36

37.

コンテキストをログに活用する ログを出力with context {} contextに値を追加 user: kamono ログを出力with context { user: kamono } handler usecase domain handler usecase domain contextに値を追加 error: not found infra ログを出力with context { user: kamono, error: not found } 37

38.

コンテキストをログに活用する ● ● ● ● 関数単体ではわからない情報もログに含められる 一度早い段階で値をセットするだけ良いので簡単 キー名のブレもなくなる 検索性が大幅に向上する 38

39.

今日言いたいこと 追えない ログはただのテキスト あなたの出している「ログ」は本当に追えますか ? 追えるログ ● 情報量が多い ● 構造化されている 39

40.

今日言いたいこと 追えない ログはただのテキスト あなたの出している「ログ」は本当に追えますか ? 追えるログ ● 情報量が多い ● 構造化されている ● コンテキストを持っている 40

41.

本当です ! (信じてください ) 41

42.

チームでの活用方法 42

43.

チームでの活用方法 ● 構造化ログに含めている内容 ○ HTTPメソッド ○ レスポンスステータス ○ リクエストエンドポイント ○ ファイル名 ○ 関数名 ○ 案件ID ○ 従業員番号 ○ トレースID ○ etc… 43

44.

チームでの活用方法 Slackで問い合わせが送られてくる @dev-team お疲れ様です ! 〇〇をしようとしたのですが、〇〇ができない状況です ! 解決策を教えていただきたいです ! 案件ID : xxxxxxxx ユーザー1 44

45.

チームでの活用方法 Google Cloudのログエクスプローラで案件IDに紐づくログを検索 検索クエリ このあたり ! → 結果 45

46.

チームでの活用方法 Google Cloudのログエクスプローラで案件IDに紐づくログを検索 46

47.

🗒Tips: ログにチップを出す ログの詳細画面から表示したい要素をクリック 概要行にフィールドを追加を押す 47

48.

🗒Tips: ログにチップを出す ログエクスプローラ右上の 設定>概要フィールドの管理 概要フィールドの一覧が出現 表示したいフィールドを入力 48

49.

チームでの活用方法 ユーザーの動線が知りたいとき →従業員番号で絞り込む 検索クエリ 結果 49

50.

チームでの活用方法 リクエストを分析したいとき →トレースIDで絞り込む 検索クエリ 結果 50

51.

ログが簡単に追えたことで楽になった ! ● ユーザーからの情報が不足していてもログから情報が得られる ○ 問い合わせ対応の時間が少なくなった ○ 情報を必ず得られるという安心感 ● 必要なログだけを絞り込めて認知の負荷が下がった ● ログの一覧画面が見やすくなった ● ログを保存しておいてユーザーの行動を統計的に分析できる 51

52.

今日言いたいこと 追えないログはただのテキスト あなたの出している「ログ」は本当に追えますか ? 52

53.

「ログ」の条件 ● ● ● ● 検索、絞り込みが容易かつ正確 ログ一つをとっても十分な情報量 人間にとっても読みやすい 出力するための実装が簡単 53

54.

「ログ」を作るために ● 構造化ログ ● コンテキスト 54

55.

「ログ」があると ● 集計、検索がしやすくなる ○ オブザーバビリティに貢献 ● 問い合わせや障害に迅速に対応できる ○ 障害状況の理解が容易 55

56.

今日言いたいこと 追えないログはただのテキスト あなたの出している「ログ」は本当に追えますか ? 56

57.

THANK YOU 57