SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

「OpenTelemetry」で始めるオブザーバビリティ入門

テレメトリーデータとは? OpenTelemetryで学ぶオブザーバビリティの基本


  • X ポスト
  • このエントリーをはてなブックマークに追加

4つのテレメトリーデータを活用し、アプリの問題原因を特定する

 ここまで、メトリクス、ログ、トレース、プロファイルについて見てきました。それぞれに得意・苦手とする部分があることをご理解いただけたと思います。

 さて、これらのテレメトリーデータを上手に活用して、オブザーバビリティを高めていきましょう(画像はSplunk Observability Cloudのスクリーンショット)。

システム概況把握から問題調査・原因特定まで

 まずは典型的な活用例を見てみましょう。

 (1):あるアプリケーションにおいて、あるタイミングからエラー率が高まっていることに気づきます。「なんらかの問題が起きているのでは」と考え、調査を始めます。

★スクリーンショット:CodeZine_errorrate.png
なぜかエラー率が高まっている

 (2):このアプリケーションが動いているノードのメトリクスを確認してみますが、リソースが逼迫している様子はなさそうです。

★スクリーンショット:CodeZine_infra.png
一見、リソースには問題がなさそう

 (3):エラー率が高まった時間帯の処理にフォーカスしてみると、いくつかエラーが含まれているトレースが確認できます。

★スクリーンショット:CodeZine_metric-trace.png
フォーカスしてみるといくつかエラーが含まれているトレースを発見

 (4):エラーが含まれているトレースを開いてみます。どうやら paymentservice でエラーが発生(赤い「!」マーク)し、それに影響を受けてcheckoutservice でもエラーが出ている(薄いピンクの「!」マーク)ようです。

★スクリーンショット:CodeZine_trace_waterfall.png
エラーが発生したサービスを特定

 (5):エラーとなっている paymentservice のスパンをクリックすると、トレースに付与されているタグ情報を確認できます。gRPC Status Code = 401が返っていることが分かります(401は認証エラーを示しますが、このことを知らなくても問題ありません。さらに調査を続けていきましょう)。

★スクリーンショット:CodeZine_trace_tag.png
スパンに含まれるタグから処理の概要を確認

 (6):このトレースに関連したログだけを抽出して確認してみます。該当のトレースIDを持ち、Severity = Error のログだけを表示すると、Invalid API Token というエラーメッセージや、”test”から始まるトークンの情報が確認できます。開発段階で利用していたトークンを誤って本番環境でも使ってしまっていることがエラー率上昇の原因だったと理解できそうです。

★スクリーンショット:CodeZine_trace_to_log.png
トレースに関連するログだけを抽出
★スクリーンショット:CodeZine_errorlog.png
問題原因を特定

 いかがでしょうか。この流れを見てみると、以下のように調査を進めていっていることが分かるはずです。

  • メトリクスから全体概況を理解……(1)(2)
  • メトリクスから問題に関連するトレースを発見して調査……(3)
  • トレースから問題発生箇所を特定し、その内容を確認……(4)(5)
  • トレースに関連するログを抽出し、ログから問題原因を特定……(6)

 別の例に派生しますが、トレースに含まれるスパンの処理時間が非常に長くなっている箇所が見受けられた場合、そのスパンが表す時間帯・処理のスタックトレースを確認するというようなこともできます。

★スクリーンショット:CodeZine_trace_callstack.png
スタックトレースの確認

 さらにその時間帯や、対応するスパンに関連するプロファイルにフォーカスして分析することもできます。フレームグラフだけでなく、関数やメソッドの実行時間や実行回数を統計処理して理解できるようになっています。

★スクリーンショット:CodeZine_profile.png
関連するプロファイルにフォーカスして分析

 このように、「メトリクスで状況把握、トレースで問題箇所を特定、ログで問題原因を特定、プロファイルでコード上のボトルネックを見つける」という、テレメトリーデータの長所を踏まえた活用によって、システム内部状態の理解を高めることができるようになっていくのです。

 もちろん、(1)(2)でメトリクスを参照するそのきっかけとして、メトリクスに基づく監視を設定することも可能です。一般的な監視と同様、メトリクスに対して、アラートを発生させる条件(静的・動的な閾値や監視間隔、アラートの重大度など)を指定しておくだけです。

 上の例で、メトリクスからトレース、トレースからログやプロファイルへと関連するデータに移動していきましたが、こういったデータの相関付けと調査の動線は、オブザーバビリティバックエンドがその機能を提供しています。そのため、基本的には、テレメトリーデータを同一のオブザーバビリティバックエンドに集約しておくことが推奨されます。

 仮にテレメトリーデータの送信先が別のバックエンドに分かれている場合だと、運用者が複数のコンソールやWebページを開いて、目視でデータを相関付けていくことになってしまいます。従来からの運用において、例えばCSV出力した統計情報をExcelでグラフ化し、一方でログファイルを別のコンソールで開いて目で追いかけて……といった問題調査をした経験をお持ちの方もいらっしゃるかと思いますが、目を皿にしてデータを読み解くのは効率的ではないですし、見逃してしまったり、熟練者でないとその関係性を理解できなかったりします。理解したい事象や状態が置かれているコンテキストを維持しながら、関連するデータを参照し理解を深めていくためには、同一のオブザーバビリティバックエンドにデータを集め、バックエンド側でデータを相関させユーザに提示してくれる機能を活用していくのがベストプラクティスと言えます。

次のページ
コスト削減にも! テレメトリーデータのコントロール方法

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
「OpenTelemetry」で始めるオブザーバビリティ入門連載記事一覧
この記事の著者

中上 健太朗(Splunk Services Japan合同会社)(ナカガミ ケンタロウ)

 Splunk Services Japan合同会社でオブザーバビリティソリューションを担当するエンジニア。Splunk Observabilityのご紹介・ご提案・導入支援などに従事。従来の運用から一歩進んだアプローチへとお客様がステップアップできるように日々活動を行っている。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/19974 2024/09/02 12:38

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング