エクスポーター
OpenTelemetryコレクターにテレメトリーを送信し、正しくエクスポートされることを確認してください。 本番環境でコレクターを使用することはベストプラクティスです。 テレメトリーを可視化するために、Jaeger、Zipkin、 Prometheus、またはベンダー固有のようなバックエンドにエクスポートしてください。
使用可能なエクスポーター
レジストリには、Rust 用のエクスポーターのリストが含まれています。
エクスポーターの中でも、OpenTelemetry Protocol (OTLP)エクスポーターは、OpenTelemetryのデータモデルを考慮して設計されており、OTelデータを情報の損失なく出力します。 さらに、多くのテレメトリーデータを扱うツールがOTLPに対応しており(たとえば、Prometheus、Jaegerやほとんどのベンダー)、必要なときに高い柔軟性を提供します。 OTLPについて詳細に学習したい場合は、OTLP仕様を参照してください。
このページでは、主要なOpenTelemetry Rust エクスポーターとその設定方法について説明します。
OTLP エンドポイント
トレースデータを OTLP エンドポイント(コレクター や Jaeger など)に送信するには、opentelemetry-otlp のようなエクスポータークレートを使用します。
たとえば、Getting Started のサイコロサーバーに新しい依存関係を追加して更新できます。
[dependencies]
opentelemetry-otlp = { version = "0.28.0", features = ["grpc-tonic"] }
次に、dice_server.rs の init_tracer_provider を更新して、OTLP エンドポイントを指すようにエクスポーターを設定します。
use std::convert::Infallible;
use std::net::SocketAddr;
use std::sync::OnceLock;
use http_body_util::Full;
use hyper::{Method, Request, Response, body::Bytes, server::conn::http1, service::service_fn};
use hyper_util::rt::TokioIo;
use opentelemetry::global::{self, BoxedTracer};
use opentelemetry::trace::{Span, SpanKind, Status, Tracer};
use opentelemetry_otlp::SpanExporter;
use opentelemetry_sdk::{Resource, propagation::TraceContextPropagator, trace::SdkTracerProvider};
use rand::Rng;
use tokio::net::TcpListener;
// ...
fn init_tracer_provider() -> SdkTracerProvider {
let exporter = SpanExporter::builder()
.with_tonic()
.build()
.expect("Failed to create span exporter");
let provider = SdkTracerProvider::builder()
.with_resource(Resource::builder().with_service_name("dice_server").build())
.with_batch_exporter(exporter)
.build();
global::set_text_map_propagator(TraceContextPropagator::new());
global::set_tracer_provider(provider.clone());
provider
}
OTLP エクスポーターを素早く試すには、Docker コンテナで Jaeger を実行します。
Jaeger は OTLP をネイティブにサポートしているため、Web UI(16686)と OTLP gRPC エンドポイント(4317)を公開するだけで済みます。
docker run -d --rm --name jaeger \
-p 16686:16686 \
-p 4317:4317 \
jaegertracing/jaeger:latest
デフォルトでは、OTLP エクスポーターは http://localhost:4317 にデータを送信します。
これは上記の Jaeger が公開する OTLP gRPC エンドポイントと一致するため、追加のエンドポイント設定は不要です。
http://localhost:8080/rolldice にリクエストを送り、Jaeger でトレースを確認します。
- http://localhost:16686 を開いてリフレッシュします。
- Service ドロップダウンから
dice_serverを選択します。 - Find Traces をクリックします。
トレースをクリックするとトレース詳細ビューが開き、スパンの階層構造とタイミングがガントチャートとして表示されます。
確認が終わったら、Jaeger コンテナを停止します。
docker stop jaeger
フィードバック
このページは役に立ちましたか?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!