新しいテクノロジーを学び始める際は、億劫になりがちですが、たいていの場合は単に適切なツールがないというだけです。2019年に登場した OpenTelemetry は、もはや新しいものではありませんが、このメジャーなオープンソースのオブザーバビリティフレームワークをあなたのサービスに組み込もうとした場合、多くのことを学習する必要があるかもしれません。

OpenTelemetry でのサービスの計装方法を学ぶために多くの時間をかけてドキュメントに目を通す前に、まず試しにやってみて、生成されるデータを確認してはいかがでしょうか?このブログ記事では、そのために使用できるいくつかのツールをご紹介します。 

本ブログポストでは以下のリストの内容をご紹介します、関心がある項目があればその内容まで読み飛ばしていただいて構いません。

otel-cli

otel-cli は、OpenTelemetry のトレースを New Relic などのコレクター へ送信するコマンドラインのインターフェースツールです。このツールが OpenTelemetry を試してみるのにお勧めな理由として以下があげられます。

otel-cli には実働する Go 環境が必要ですが、幸いなことに Go のインストールはきわめてシンプルです。こちらの手順に従ってください Go の実行環境を作成することができます。ひとたび Go の設定が完了したら、New Relic のライセンスキーを手元に準備し、以下の手順に従ってotel-cli を使用してトレースを作成し、それを自身のNew Relicアカウントに送信します。

  1. otel-cli をインストールします。リポジトリでは otel-cli のいくつかのインストール方法が提供されていますが、次のコマンドを実行する方法がほとんどのプラットフォームで動作する最も簡単なインストール方法です
    • go install github.com/equinix-labs/otel-cli@latest
  2. 以下の環境変数を設定します
    • OTEL_EXPORTER_OTLP_HEADERS=api-key=[YOUR_NR_LICENSE_KEY]
      • [YOUR_NR_LICENSE_KEY] は自身のアカウントのインジェストライセンスキーを利用します
    • OTEL_EXPORTER_OTLP_ENDPOINT=https://otlp.nr-data.net:4317
    • OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
    • OTEL_TRACES_EXPORTER=otlp
  3. スパン内でプログラムを実行します
    • otel-cliexec --service my-service --name "curl google" curl https://google.com
  4. 自身の New Relicアカウント にて送信されたスパンデータを NRQL で確認します
    • SELECT * FROM Span SINCE 5 minutes ago
  5. All entities > Services - OpenTelemetry から「my-service」と呼ばれる新規の OpenTelemetry サービスを確認することもできます。そこからディストリビューティッド(分散)トレーシングにアクセスして、トレースグループ curl google をクリックし、次に属性や期間などスパンに関する詳細を確認します
  • [注意点] 作成されたスパンはスパンタイプの「クライアント (client)」であるため、概要ページのチャートは空になります。概要チャートは「コンシューマー (consumer)」または「サーバー (server)」タイプのスパンのみのクエリです

今見てきた通り、作成されるスパンはごくシンプルです。では、もう少し興味深いデータを見てみたい場合にはどうすればよいでしょうか?

telemetrygen

OpenTelemetry を試すためのもうひとつのツールは、telemetrygen です。telemetrygen は トレース、メトリクス、ログを生成するクライアントをシミュレーションすることができ、自身のアプリケーションがない場合でも OpenTelemetry データを手早く確認することができます。

telemetrygen は、主にテストやデモンストレーションの目的に使用されるため、作成されるデータは基本的もので、静的なもので、特に具体的なものではありません。また、テレメトリを受信、変換、エクスポートする OpenTelemetry のコンポーネントであるコレクターを実行する必要があります。

  1. Docker を使用して OpenTelemetry コレクターのイメージを取得し、コンテナでコレクターを実行します
    • docker pull otel/opentelemetry-collector:0.91.0
    • docker run  -p 127.0.0.1:4317:4317 otel/opentelemetry-collector:0.91.0
  2. 別のターミナルウィンドウもしくはタブで、telemetrygen のユーティリティをインストールします
    • go install github.com/open-telemetry/opentelemetry-collector-contrib/cmd/telemetrygen@latest
  3. このコマンドを実行してテレメトリを生成し、データをコレクターに送信します
    • telemetrygen traces --otlp-insecure --duration 5s
  4. 5秒後にユーティリティは停止し、コレクターを実行しているターミナルでトレースを確認できます

さらに実践を進め、より具体的なテレメトリを生成したいのであれば、次は OpenTelemetry コミュニティデモを確認するのがいいかもしれません。

OpenTelemetry コミュニティデモ

OpenTelemetry コミュニティデモのアプリケーションは、gRPC と HTTP で相互通信する異なる言語で書かれた複数のマイクロサービスで構成され、トラフィックをシミュレーションするロードジェネレータが含まれています。OpenTelemetry が計装された分散化システムの実サンプルを提供する目的で、OpenTelemetry コミュニティにより開発および管理されています。

デモは下記のような目的で使用できます。

  • Java、.NET、PHP を含む異なる言語での計装例
  • 計装設定やコレクターの設定ファイルを変更して、テストと実験を行う
  • OpenTelemetry のインストゥルメンテーションライブラリで生成されたデータを理解する 
  • 問題を解決するための OpenTelemetry データの解釈方法 (複数の問題解決シナリオ)

ベースのデモアプリにはいくつかのバックエンドが含まれるため、生成されたデータを可視化して確認できます。デプロイ方法と New Relic アカウントへのデータ送信方法については、こちらのブログ記事「OpenTelemetryの実践:インストゥルメントされたアプリで問題のトラブルシューティングを行う」の手順を参考ください。

New Relic OpenTelemetry のサンプル

よりシンプルなアプリケーションでハンズオンを行いたい場合、こちらのリポジトリに複数言語でサンプルを用意してあります。スタートガイドのディレクトリで、OpenTelemetry がインストゥルメンテーションされた、またはまだインストゥルメンテーションされていないサンプルアプリを見ることができ、インストゥルメントの前と後でコードがどうなっているかを確認できます。

「インストゥルメント済み」ディレクトリで、自身の選択した言語の README ファイルに従いサンプルを実行するか、「未インストゥルメント」ディレクトリの README の指示に従い、自身でアプリをインストゥルメントできます。