サービスメッシュと OpenTelemetry の連携を探る: 分散トレース

サービスメッシュと OpenTelemetry の連携を探る: 分散トレース

この記事が公開された後、一部の読者から javaagent の「非侵入性」についてコメントがありましたが、ここで説明する必要があります。 「非侵入的」とは、主にアプリケーションのビジネス ロジック コードを変更せずに実装できる機能を指します。透過的でアプリケーションを意識する必要がないため、開発者はビジネス開発に集中できます。同時に、アプリケーションコードを変更する必要がないため、統合が容易になります。また、メンテナンスも簡単で、複数の言語やフレームワーク間での機能の一貫性も確保されます。

Java エージェントは JVM の起動時にロードされ、アプリケーションのソース コード レベルを変更するのではなく、実行時にバイトコードを変更して追跡コードを挿入します。

背景

分散トレース

分散トレースは、マイクロサービス リクエスト フローを監視および診断するための重要なテクノロジであり、可観測性の重要なコンポーネントであり、マイクロサービス アーキテクチャにおける複雑な相互作用やパフォーマンスの問題に関する深い洞察を提供します。サービス間のリクエスト リンクを明確に表示することで複雑さを管理し、パフォーマンスのボトルネックを特定し、リソース割り当てを最適化し、障害を迅速に特定して解決し、システム全体の信頼性を向上させるのに役立ちます。

サービスメッシュのための非侵入型分散トレース

再び非侵襲的!サービス メッシュ内のプロキシは、すべての受信および送信ネットワーク通信を自動的に処理し、要求時間、期間、ステータス コード、その他のメタデータなど、サービス間の要求と応答に関する詳細な情報を自動的にキャプチャ、記録、分析します。この実装[1]はアプリケーション自体に対して透過的であり、実行時にバイトコードを変更するJavaエージェントよりも徹底的です。

ここでの前提は、アプリケーションがリクエストでコンテキスト情報を渡すことができるため、サイドカー プロキシによって生成され、送信されたトレース情報が、切断されることなく最終的に連結されることです。

写真

メッシュの非侵入型分散トレースではリクエスト リンクが表示されますが、上図に示すように、各スパンはサイドカー プロキシの情報です。

前回の記事に続き、今日はService Mesh FSM[2]とOpenTelemetryを統合して、アプリケーションとメッシュのフルリンク分散トレースを実装する方法について説明します。

デモ

建築

写真

環境設定

Jaeger、cert-manager、Otel Operator のインストールについては、前の記事を参照してください。

計測の設定

次のステップは、プローブをインストールして構成することです。詳細な設定手順については、Instrumentation APIドキュメント[3]を参照してください。

FSM分散トレースドキュメント[4]によれば、FSMはZipkinプロトコルをサポートしています。したがって、プロパゲータでは b3multi を使用し、B3 マルチヘッダー形式を使用してリクエスト ヘッダーに次の情報を渡します。

  • x-b3-トレースID
  • x-b3-スパニッド
  • x-b3-親spanid
  • x-b3 サンプル
  • x-b3-フラグ

今回はサンプル名前空間を使用します。

 kubectl create namespace sample kubectl apply -n sample -f - <<EOF apiVersion: opentelemetry.io/v1alpha1 kind: Instrumentation metadata: name: instrumentation-sample spec: propagators: - b3multi sampler: type: parentbased_traceidratio argument: "1" env: - name: OTEL_EXPORTER_OTLP_ENDPOINT value: otel-collector.default:4318 EOF

OpenTelemetry Collector を構成する

Otelコレクターの詳細な設定については、公式ドキュメント[5]を参照してください。

  • 受信側では、アプリケーションからトレース情報を受信するように otlp を構成し、エンドポイント 0.0.0.0:9411 を使用して、サイドカーからレポートを受信するように zipkin を使用します。
  • エクスポーター、Jager の otlp エンドポイント jaeger.default:4317 を構成します。
  • 入力ソースとして otlp と zipkin を使用し、出力先として jaeger を使用するパイプライン サービス。
 kubectl apply -f - <<EOF apiVersion: opentelemetry.io/v1alpha1 kind: OpenTelemetryCollector metadata: name: otel spec: config: | receivers: otlp: protocols: grpc: http: zipkin: endpoint: "0.0.0.0:9411" exporters: otlp/jaeger: endpoint: "jaeger.default:4317" tls: insecure: true service: pipelines: traces: receivers: [otlp, zipkin] exporters: [otlp/jaeger] EOF

サービスメッシュ FSM のインストール

FSM は CLI 経由でインストールします。今すぐ FSM をダウンロードし、最新の公式バージョン 1.1.4 を使用してください。

 system=$(uname -s | tr '[:upper:]' '[:lower:]') arch=$(uname -m | sed -E 's/x86_/amd/' | sed -E 's/aarch/arm/') release=v1.1.4 curl -L https://github.com/flomesh-io/fsm/releases/download/$release/fsm-$release-$system-$arch.tar.gz | tar -vxzf - ./$system-$arch/fsm version

インストール中に、分散トレースを有効にし、アドレスを Otel Collector の zipkin シンクにポイントします。zipkin シンクのエンドポイントは /api/v2/spans です。

 fsm install \ --set=fsm.tracing.enable=true \ --set=fsm.tracing.address=otel-collector.default \ --set=fsm.tracing.port=9411 \ --set=fsm.tracing.endpoint=/api/v2/spans

サンプルアプリケーションをデプロイする

サンプル名前空間をサービス グリッドに追加し、アプリケーションをデプロイします。

 fsm namespace add sample kubectl apply -n sample -f https://raw.githubusercontent.com/addozhang/http-sample/main/manifests/service-v1.yaml

アプリケーション ポッドにサイドカーが挿入され、正常に実行されることを確認します。

 kubectl get po -n sample NAME READY STATUS RESTARTS AGE service-c-66bf9dcc7b-pdj8p 2/2 Running 0 38s service-b-586cfc5ccd-k9qrs 2/2 Running 0 37s service-a-7cf7bc5bcc-tgjzz 2/2 Running 0 37s

テスト

pod_name="$(kubectl get pod -n sample -l app=service-a -o jsnotallow='{.items[0].metadata.name}')" kubectl port-forward -n sample $pod_name 8080:8080 & curl localhost:8080

リクエストを送信した後、Jaeger UI を開きます。

 jaeger_pod="$(kubectl get pod -l app=jaeger -o jsnotallow='{.items[0].metadata.name}')" kubectl port-forward $jaeger_pod 16686:16686 &

Jaeger UI では、リンクの内容がより豊富であることがわかります。これには、アプリケーションのスパン データとサイドカー プロキシが含まれています。

写真

参考文献

[1] 実装: https://fsm-docs.flomesh.io/guides/observability/tracing/

[2] サービスメッシュFSM: http://fsm-docs.flomesh.io

[3] インストルメンテーションAPIドキュメント: https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentation

[4] FSM分散トレースのドキュメント: https://fsm-docs.flomesh.io/guides/observability/tracing/

[5] 公式ドキュメント: https://opentelemetry.io/docs/collector/configuration/

<<:  オペレーション兄弟!なぜ Kafka は再び「タイムアウト」したのでしょうか?

>>:  実稼働の実践: GlusterFS を使用して Kubernetes ストレージ ボリューム クラスターを構築する

推薦する

画像読影時代の画像最適化手法

現在、ウェブマスターの 95% は、画像検索を無視して、通常の検索を通じてウェブサイトにもたらされる...

2013 年の Baidu の新しいアルゴリズムは SEO 業界にとって障害となるでしょうか?

青大根はリンク仲介市場全体を攻撃しました。有名なリンクプラットフォームである阿里巴巴がK-edされた...

マーケティング上のヒット作「華熙子」が「李佳奇ら」から離れたらどうなるのか?

国産化粧品が今流行っています。最も有名な「パーフェクトダイアリー」のほかに、もう一つ好調なブランドが...

frontrangehosting-ブラックフライデー、すべてのVPS(KVM/OPENVZ)が50%オフ

ブラック フライデーが近づいています。frontrangehosting のすべての VPS が 5...

オリジナルコンテンツ VS ユーザーエクスペリエンス: 優れたコンテンツとは?

2013年にBaiduアルゴリズムが継続的に導入されたことにより、「コンテンツが王、外部リンクが女王...

ウェブサイトの最適化をブランド構築のプロセスとして扱うことが核心です

Baiduのアルゴリズムが継続的にアップグレードされるにつれて、従来のウェブサイト運営モデルは深刻な...

ビッグデータとクラウドコンピューティングの関係

IT トレーニング業界では、ビッグデータやクラウド コンピューティング トレーニングという用語が常に...

v5.netの米国cn2クラウドサーバーの簡単なレビュー:中国電信双方向cn2 + 中国聯通AS9929 + 中国移動直接接続

v5.net は独立サーバー事業に従事しています。クラウドサーバー (VPS) の発売以来、ウェブマ...

楊万偉:企業はどうすれば百科事典のプロモーションを迅速に実行できるのでしょうか?

「百科」とは、インターネット上のオープンで無料のオンライン百科事典を指し、さまざまな分野の知識を網羅...

PaaS はクラウド コンピューティングの具体的な表現でしょうか?

PaaS は Platform as a Service の略で、サービスとしてのプラットフォームを...

私のSEO計画: 全体像を把握し、細部に注意を払う

休暇前に社会と触れ合い、自分を鍛えたいと思い、自分の趣味と能力を組み合わせて、蘇州にある電動機器を販...

ウェブサイト診断:小さな改善がトラフィックの大きな改善につながる

SEO について話すとき、最初に頭に浮かぶ要素は、キーワード、外部リンク、包含ステータスなどです。こ...

dedipath: 月額 30 ドルからという安価な米国サーバー (物理マシン)、ロサンゼルス、サンノゼ、ニューヨークなどに複数のデータ センターがあります。

dedipath は専用サーバーのプロモーションを頻繁に開催しており、安価な米国専用サーバーは最低で...

ウェブサイト最適化のヒント: ウェブサイトリンクの最適化テクニック

情報ネットワーク時代において、電子商取引の成熟度が高まり、オンラインショッピングが徐々に普及するにつ...

検索マーケティングとコミュニティ口コミマーケティング

インターネットが人々の生活に密接に関係するようになったため、伝統的な消費者行動であるAIDMA(注意...