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

推薦する

ショッピングモールのウェブサイトを日常的に運用する際に行うべき5つの基本的なこと

ショッピングモールのウェブサイトを構築するのはどれほど難しいのでしょうか。今日はまだ売上を伸ばそうと...

RocketMQ プロデューサーにこれほど多くの用途があることをなぜ知らなかったのでしょうか?

[[383770]]この記事はWeChatの公開アカウント「大宇賢人」から転載したもので、著者は大宇...

24クーポンの共同購入の失敗の続報:資本ゲームは運命的な結末になるかもしれない

2012年10月20日、かつては共同購入サイトのトップ5に入っていた、もう一つの大手共同購入サイト「...

マーケティングの本質は私たちの日常生活の中にある

マーケティングの本当の意味は私たちの日常生活の中にあり、国内のマーケティングトレーニングマスターのト...

QingCloud が正式に発表: ジャカルタ パブリック クラウド ゾーンが正式にオープン

[元記事は51CTO.comより] 12月25日、 QingCloud副社長の林元氏はメディアに対し...

Instagramの成功の秘訣:商品に対する最大のタブーは貪欲さ

フェイスブックに10億ドルで売却するのは法外な値段のように聞こえるかもしれないが、計算してみてもイン...

サーバー: Joesdatacenter-20USD/2xL5420/8GB RAM/500GB HDD/20TB トラフィック/カンザス

joesdatacenter.com では、カンザス データ センターで特別価格のサーバーを 2 台...

#ニュース# gcorelabs: Alipay に正式に接続、中国ユーザーにとって便利

gcorelabsは2月16日頃、ウェブサイトに「饭」(中国語で米)の中国語翻訳ページがあることを発...

extravm: 米国製高周波サーバー (5.3GHz)、複数のモデル、月額 149 ドル、i9-10900K/32GDDR4/1TNVMe/4IP/1Gbps 帯域幅

extravm は、メインの DDoS 対策 VPS サービスに加えて、ハイエンド、高性能、高周波数...

chicagovps-$60/3 年/2g メモリ/50g ハード ドライブ/2IP/2T トラフィック

Chicagogovs がサイバー マンデーの超割引を発表しました。2G メモリ、50G ハード ド...

Canalys:中国のクラウドサービス支出は2021年第1四半期に60億ドルに達した

市場調査会社Canalysが発表した最新データによると、中国のクラウドインフラサービス支出は2021...

従来のストレージと分散ストレージの対立

1. 従来のストレージシステムの過去と現在1. 途中のストレージハードウェア従来のストレージ システ...

香港のクラウドホストと香港のクラウドサーバーのどちらが良いでしょうか?香港のクラウドベンダーが推奨!

どの香港のクラウドホストが優れていますか?どの香港クラウドサーバーが優れていますか?この記事は、香港...

コンテンツ創造性のトップ 10 ソースからコンテンツ マーケティングを行う方法

みなさんこんにちは。私は徐子宇です。先ほどの記事「3つの大きな目標を指針にウェブサイトコンテンツマー...

licloud 香港 VPS の簡単なレビュー - 香港合理化ネットワーク 100M 帯域幅、その仕組みを説明します

数日前、licloud の香港 VPS がリリースされました。これは、100Mbps の帯域幅を年間...