エクスポーター
OpenTelemetryコレクターにテレメトリーを送信し、正しくエクスポートされることを確認してください。 本番環境でコレクターを使用することはベストプラクティスです。 テレメトリーを可視化するために、Jaeger、Zipkin、 Prometheus、またはベンダー固有のようなバックエンドにエクスポートしてください。
使用可能なエクスポーター
レジストリには、Erlang/Elixir 用のエクスポーターのリストが含まれています。
エクスポーターの中でも、OpenTelemetry Protocol (OTLP)エクスポーターは、OpenTelemetryのデータモデルを考慮して設計されており、OTelデータを情報の損失なく出力します。 さらに、多くのテレメトリーデータを扱うツールがOTLPに対応しており(たとえば、Prometheus、Jaegerやほとんどのベンダー)、必要なときに高い柔軟性を提供します。 OTLPについて詳細に学習したい場合は、OTLP仕様を参照してください。
このページでは、主要なOpenTelemetry Erlang/Elixir エクスポーターとその設定方法について説明します。
OpenTelemetry Collector へのエクスポート
Collector はテレメトリーデータを受信、処理、エクスポートするためのベンダー非依存の手段を提供します。 opentelemetry_exporter パッケージは、HTTP(デフォルト)と gRPC の両方を使用した Collector へのエクスポートをサポートしています。 Collector はスパンを Zipkin や Jaeger などのセルフホストサービスや、商用サービスにエクスポートできます。 利用可能なエクスポーターの一覧は、レジストリを参照してください。
Collector のセットアップ
テスト目的であれば、以下の Collector 設定をプロジェクトのルートに配置して利用できます。
# otel-collector-config.yaml
# OTLP を受信して Jaeger にエクスポートする OpenTelemetry Collector の設定
receivers:
otlp:
protocols:
grpc:
endpoint: '0.0.0.0:4317'
http:
endpoint: '0.0.0.0:4318'
exporters:
debug:
otlp/jaeger:
endpoint: jaeger-all-in-one:4317
tls:
insecure: true
sending_queue:
batch:
service:
pipelines:
traces:
receivers: [otlp]
exporters: [debug, otlp/jaeger]
より詳細な例として、opentelemetry-erlang がテストに使用している設定ファイルを確認できます。
このチュートリアルでは、アプリと並行して Collector を Docker イメージとして起動します。 このチュートリアルでは、はじめにガイドの Dice Roll のサンプルを引き続き使用します。
以下の docker-compose ファイルをアプリのルートに追加してください。
# docker-compose.yml
version: '3'
services:
otel:
image: otel/opentelemetry-collector-contrib:0.98.0
command: ['--config=/conf/otel-collector-config.yaml']
ports:
- 4317:4317
- 4318:4318
volumes:
- ./otel-collector-config.yaml:/conf/otel-collector-config.yaml
links:
- jaeger-all-in-one
jaeger-all-in-one:
image: jaegertracing/jaeger:latest
ports:
- '16686:16686'
この設定は、docker-compose.yml で HTTP と gRPC の両方のレシーバーを持つ Collector を起動し、docker-compose で同時に実行される Zipkin にエクスポートするために使用されます。
実行中の Collector にエクスポートするには、opentelemetry_exporter パッケージを他の opentelemetry 依存関係よりも前にプロジェクトの依存関係に追加する必要があります。
{deps, [{opentelemetry_exporter, "~> 1.8"},
{opentelemetry_api, "~> 1.4"},
{opentelemetry, "~> 1.5"}]}.
def deps do
[
{:opentelemetry_exporter, "~> 1.8"},
{:opentelemetry_api, "~> 1.4"},
{:opentelemetry, "~> 1.5"}
]
end
次に、SDK アプリケーションの設定より前に Release の設定に追加し、SDK がエクスポーターを初期化して使用する前にエクスポーターの依存関係が起動されるようにします。
rebar.config での Release 設定と mix の Release タスクの例を示します。
%% rebar.config
{relx, [{release, {my_instrumented_release, "0.1.0"},
[opentelemetry_exporter,
{opentelemetry, temporary},
my_instrumented_app]},
...]}.
# mix.exs
def project do
[
releases: [
my_instrumented_release: [
applications: [opentelemetry_exporter: :permanent, opentelemetry: :temporary]
],
...
]
]
end
最後に、opentelemetry と opentelemetry_exporter アプリケーションのランタイム設定を Collector にエクスポートするように設定します。
以下の設定は、何も設定されていない場合に使用されるデフォルト値を示しています。
デフォルトは HTTP プロトコルで、エンドポイントは localhost のポート 4318 です。
注意点:
otlp_protocolにgrpcを使用する場合、エンドポイントをhttp://localhost:4317に変更する必要があります。- 上記の docker compose ファイルを使用している場合、
localhostをotelに置き換える必要があります。
%% config/sys.config.src
[
{opentelemetry,
[{span_processor, batch},
{traces_exporter, otlp}]},
{opentelemetry_exporter,
[{otlp_protocol, http_protobuf},
{otlp_endpoint, "http://localhost:4318"}]}]}
].
# config/config.exs
config :opentelemetry,
resource: %{service: %{name: "roll_dice_app"}},
span_processor: :batch,
traces_exporter: :otlp
config :opentelemetry_exporter,
otlp_protocol: :http_protobuf,
otlp_endpoint: "http://localhost:4318"
# docker compose ファイルを使用している場合は otlp_endpoint: "http://otel:4318"
一方のターミナルで docker compose up を実行し、別のターミナルで mix phx.server を実行すると、トレースを確認できます。
アプリにいくつかリクエストを送信した後、http://localhost:16686 にアクセスし、Service ドロップダウンから roll_dice_app を選択して、「Find Traces」をクリックしてください。
注意点
一部の環境では、コンテナを root ユーザーとして実行できません。
そのような環境で作業する場合、このチュートリアルで使用する docker-compose.yml ファイルの otel サービスにトップレベルのキーバリューとして user: "1001" を追加できます。
フィードバック
このページは役に立ちましたか?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!