Go概要マイクロサービス構成など分散システムにおいて分散トレーシングを行いたい場合は、サービス間でのContextの伝播が必要になります。OpenTelemetryでサービス間での伝播をしたい場合の実装方法を説明します。v1.14.0今回のアーキテクチャイメージは以下です。用語Contextの伝播に関わる用語は以下があります。伝播させるデータを載せる媒体。Carrierから値を取り出すイメージは以下です。https://github.com/openzipkin/b3-propagation#overall-process現状Propagatorの種類はTextMapPropagator1つだけです。今後バイナリデータを扱うPropagetorが追加される予定です。Format分散トレースはこれまで伝播に使う際のヘッダー名や値のフォーマットなどが以下のように複数存在します。OpenTelemetryそして依存するサービスによっては対応しているフォーマットが異なります。TraceContextをサポートしています。実装propagator先に結論を述べると次のようなPropagatorの設定がクライアント側(gateway)、サーバ側(backend)の両方に必要です。),)なのでtrace用packageを用意しておき、その中のinit()関数で上記を設定すると自動的にクライアント側もサーバ側も反映されるようになります。serverにotelhttp.NewHandler()というミドルウェアを入れます。下のtelemetry.NewHTTPMiddlewareはそれをラップしたものです。clientにinterceptorを設定します。serverにinterceptorを設定します。log.Fatal(err)}ヘルスチェックを除いたgRPCを対象とします。otelgrpc.UnaryServerInterceptor(opts...)}Filterを入れることで以下のようにサンプリング対象とならなくなります。https://github.com/openzipkin/b3-propagation#overall-process動作検証docker-composeで一気に立ち上げます。COLLECTOR_OTLP_ENABLED=truebackendサーバもトレースに含まれていることが確認できます。その他サンプルコード今回のサンプルコードはこちらです。github.comまとめOpenTelemetryでの分散トレースの実装方法を紹介しました。SDKで用意されているので簡単に導入ができるようになっています。トレーシングで重要なのがSamplingです。前回はHTTPのAPIサーバの監視の仕方を説明しました。»プロフィールid:quoll00AWAのサーバ・インフラのリードエンジニアを経て現在AbemaTVにて開発。Webフロントもやります。10はてなブログをはじめよう!quoll00さんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。