サービスメッシュと 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 ストレージ ボリューム クラスターを構築する

推薦する

掲示板やブログの価値を合理的に活用し、サイトの飛躍的発展を促進する(前編)

Baidu のアルゴリズムが継続的に変更されるにつれて、BBS と BLOG はもはや価値がないと感...

従来の企業はオンラインマーケティングをうまく行うにはどうすればよいのでしょうか?

インターネット技術の継続的な発展に伴い、インターネットユーザーの年間成長率は直線的に上昇しており、関...

ウェブサイト構築はSEOを満たすサイトを構築するためのブレークスルーを求めています

SEO 最適化を満たすウェブサイトを構築することは、SEO 担当者の夢ですが、実現するのはそれほど簡...

ウェブマスターのおすすめ:フィリピンVPSのおすすめ、フィリピンのネイティブIP、CN2、本土への高速直接接続、安い価格

VPS レンタルの料金、フィリピン VPS の推奨: フィリピンは中国に近いため、フィリピン VPS...

Google AdWords の 350 ドルの無料広告料を利用してウェブサイトのトラフィックを増やす方法

偶然ネットで、Google が最近、アカウント開設時に Google Adwords の手数料 35...

マイクロブログマーケティング教室:忘れてはならない原則

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスWeibo マーケティン...

分散システムの線形化可能性のテスト

最近、とてもよく書かれた記事を見ました。著者のアニッシュさんの同意を得て、中国語に翻訳することにしま...

SEOは生き残るために絶え間ない革新を必要とします

SEO 技術は、検索エンジンのアルゴリズムの調整ごとに常に変化しています。SEO 担当者が、従来の考...

H3C: ABC の緊密な統合により企業のデジタル変革を強化

[51CTO.comより引用] 2019年12月16日、中国電子技術標準化協会主催の「第9回中国クラ...

マーケティングの真実: WeChat ストアで収益を上げる秘訣

最初の真実おめでとうございます。もしあなたが「お金を稼ぐ秘訣」を知りたいという希望だけでタイトルだけ...

百度のスパムコンテンツ取り締まりで影響を受けるのは誰のケーキか

インターネット上でも、オフラインの物理的な企業でも、企業が一定のレベルに達すると、利益を得るためにそ...

微博とテンセントは左へ、新浪は右へ、その違いはますます明らかになっている

最近、アリババが新浪微博に投資するかもしれないという業界の噂について、新浪微博がアリババの資本と資源...

Heirloom: VULTR の最新ニュース、月額 2.5 ドルで 512M メモリの VPS

Vultr が月額 2.50 ドルの VPS をキャンセルしたことに気づきましたか? 512M メモ...

モバイルウェブサイトを最適化するには、SEOREはこれらの詳細に注意を払う必要があります。

月収10万元の起業の夢を実現するミニプログラム起業支援プランモバイルインターネットの急速な発展とモバ...