Upgrade to Pro — share decks privately, control downloads, hide ads and more …

メトリクス、ログ、トレースをうまく使い分けて可観測性を高めよう!

 メトリクス、ログ、トレースをうまく使い分けて可観測性を高めよう!

イベント名: オブザーバビリティ再入門 - 大切さと高め方を知ろう!
イベントURL: https://mackerelio.connpass.com/event/316449/
概要: 可観測性の概念を理解し、OpenTelemetryなどの実装に必要な道具があっても、自分たちのプロダクトやチームにどう適用させていけばよいのかは、自分たちで考え、設計しなければなりません。開発チームがメトリクス、ログ、トレースをどういった基準で採用していくかについて、具体例を用いながらお話します。

masayoshi

June 04, 2024
Tweet

More Decks by masayoshi

Other Decks in Technology

Transcript

  1. (結論)シグナル選択の基本方針 • メトリクス ◦ サービス全体の把握に必要な定量的な状態の記録に利用 ▪ アラート、SLI/SLO、キャパシティプランニング • ログ ◦

    網羅性を重視した重要イベントの記録に利用 ▪ エラーやアクセス情報の記録、セキュリティ、監査 • トレース ◦ サンプリングされた詳細なイベントの記録に利用 ▪ パフォーマンスチューニング、プロセス間の関係
  2. ログのメリット • 自然言語で状態、イベントを記録できる ◦ エラーの理由などを記述できる = 調査向き • ログに出すだけなら比較的簡単に実装できる ◦

    (他の2つと比べて)網羅性が高い • 時間単位でログを集計するとメトリクスにできる ◦ アラートにできる、グラフにできる
  3. { "name": "hello", "context": { "trace_id": "0x5b8aa5a2d2c872e8321cf37308d69df2", "span_id": "0x051581bf3cb55c13" },

    "parent_id": null, "start_time": "2022-04-29T18:52:58.114201Z", "end_time": "2022-04-29T18:52:58.114687Z", "attributes": { "http.route": "some_route1" }, "events": [ { "name": "Guten Tag!", "timestamp": "2022-04-29T18:52:58.114561Z", "attributes": { "event_attributes": 1 } } ] } { "name": "hello-salutations", "context": { "trace_id": "0x5b8aa5a2d2c872e8321cf37308d69df2", "span_id": "0x93564f51e1abe1c2" }, "parent_id": "0x051581bf3cb55c13", "start_time": "2022-04-29T18:52:58.114492Z", "end_time": "2022-04-29T18:52:58.114631Z", "attributes": { "http.route": "some_route3" }, "events": [ { "name": "hey there!", "timestamp": "2022-04-29T18:52:58.114561Z", "attributes": { "event_attributes": 1 } } ] } 参考: https://opentelemetry.io/docs/concepts/signals/traces/
  4. (結論)シグナル選択の基本方針 • メトリクス ◦ サービス全体の把握に必要な定量的な状態の記録に利用 ▪ アラート、SLI/SLO、キャパシティプランニング • ログ ◦

    網羅性を重視した重要イベントの記録に利用 ▪ エラーやアクセス情報の記録、セキュリティ、監査 • トレース ◦ サンプリングされた詳細なイベントの記録に利用 ▪ パフォーマンスチューニング、プロセス間の関係
  5. サービス全体の把握 • サービスの正常性 ◦ 今現在、あなたのサービスは正常or異常か答えられるか ◦ 障害対応を始めたほうが良いか ◦ 障害が発生したときにちゃんとアラートは出ていたか •

    キャパシティプランニング ◦ 今のサーバー台数やスケール設定でパフォーマンスが足りているか ◦ 中長期的なリクエスト数の増加やパフォーマンスの遷移を見れるか
  6. 何から力を入れていくか • 障害に気がつかない、アラートが来ない、正常性判断がつかない ◦ メトリクスの強化に力を入れる ▪ SLI/SLOを検討し、何をメトリクスにしていくかに時間を使う • 原因の発生場所の調査に問題がある ◦

    トレースの強化に力を入れる • 場所はある程度わかるけど、根本原因が不明で頻発している ◦ 基本的にはログの強化、トレースのSpanの実装や専用のメトリク スを用意するなども検討
  7. 初級のチーム • サービスが異常か気づける(判断できる)ようにする ◦ メトリクスの使い方(つまりアラーティング)を身につける ◦ まずは、サービスの異常は何かを議論し、簡単なSLOを考えよう ▪ クラウドサービスのメトリクスを使ってSLIを作る •

    例えば、ALBのメトリクスでSLIを実装してみる ◦ 5xx エラー率 ◦ 99%tile のレスポンスタイム ◦ ログは開発していれば何も出していないことはないと思う ▪ まずはログを出しておくでもよい
  8. 上級のチーム • 人間の判断ではなく、自動的に判断できるようにしていく ◦ より高度な定量化 ▪ ログに出していた定性的なエラー情報から、 定量的なメトリクスにすることで、 自動的にアラーティングできるようにする ◦

    より詳細な紐付け ▪ メトリクスやログからボトルネックを推測するのではなく、 トレースのSpanを実装することで、 遅い箇所が視覚的にわかるようにする
  9. 最後に • どのシグナルも重要で、一概には言えないが、 ◦ システムが、システムの状態を、人間に通知できるようにする ▪ システム障害の検知を強化 • メトリクス >

    ログ > トレース ◦ 人間が、システムの状態を、調べられるようにする ▪ システム障害の調査を強化 • トレース > ログ > メトリクス • チームに足りない箇所を把握して、強化していこう