Linkerd 2.10 (ステップバイステップ) - Linkerd による分散トレース

Linkerd 2.10 (ステップバイステップ) - Linkerd による分散トレース

[[406175]]

Linkerd 2.10 の中国語マニュアルは継続的に改訂および更新されています。

https://linkerd.hacker-linner.com

分散トレースを実際に使用すると複雑になる可能性があるため、何が得られるか、どのように行われるかを大まかに説明するために、誤解のリストをまとめました。

このガイドでは、EmojiVoto の追跡の設定と有効化について説明します。 Linkerd で分散トレースを使用する最適な方法に関するアドバイスについては、最後まで読んでください。

分散トレースを使用するには、次のものが必要です。

  • Linkerd-Jaeger 拡張機能をインストールします。
  • スパンを発行するようにアプリケーションを変更します。

emojivoto の場合、これらの手順をすべて完了すると、次のようなトポロジが作成されます。

前提条件

  • このガイドを使用するには、クラスターに Linkerd がインストールされている必要があります。まだ行っていない場合は、Linkerd のインストール ガイドに従ってください。

Linkerd-Jaeger拡張機能をインストールする

分散トレースをセットアップするための最初のステップは、クラスターに Linkerd-Jaeger 拡張機能をインストールすることです。拡張機能は、コレクター、Jaeger バックエンド、および Jaeger インジェクターで構成されます。コレクターは、グリッドとアプリケーションから発行されたスパンを消費し、それらを Jaeger バックエンドに送信します。Jaeger バックエンドはそれらを保存し、それらを表示するためのダッシュボードを提供します。 Jaeger-injector は、スパンを発行するように Linkerd プロキシを構成する役割を担います。

Linkerd-Jaeger 拡張機能をインストールするには、次のコマンドを実行します。

  1. linkerd jaeger インストール | kubectl を適用 -f -

次のコマンドを実行すると、Linkerd-Jaeger 拡張機能が正しくインストールされたことを確認できます。

  1. リンカード・イェーガーチェック 

Emojivotoをインストールする

emojivoto をクラスターに追加し、Linkerd プロキシを使用して挿入します。

  1. リンカードインジェクト https://run.linkerd.io/emojivoto.yml | kubectl を適用 -f -

次のステップに進む前に、kubectl を使用して次のコマンドを実行し、すべてが稼働していることを確認します。

  1. kubectl -n emojivoto ロールアウトステータス deploy/web

アプリケーションを変更する

サービス メッシュのほとんどの機能とは異なり、分散トレースではアプリケーションのソースを変更する必要があります。トレースには、受信リクエストをアプリケーションに、送信リクエストを関連サービスに結び付ける何らかの方法が必要です。これを行うには、追跡用の一意の ID を含むいくつかのヘッダーが各リクエストに追加されます。 Linkerd は、b3 伝播形式を使用してこれらを結び付けます。

この情報を使用してリクエストを検出するように emojivoto を変更しました。このコミットでは、これがどのように行われるかを示します。ほとんどのプログラミング言語では、これを処理するためにクライアント ライブラリを追加するだけで済みます。 Emojivoto は OpenCensus クライアントを使用しますが、他のクライアントも使用できます。

emojivoto で追跡を有効にするには、次を実行します。

  1. kubectl -n emojivotoenv --all をデプロイし、OC_AGENT_HOST=collector.linkerd-jaeger:55678 を設定します。  

このコマンドは、アプリケーションがコンテキストを伝播してスパンを出力できるようにする環境変数を追加します。

イェーガーを探索

vote-bot が各リクエストのトレースを開始すると、Jaeger にスパンが表示されるようになります。 UI に入るには、次を実行します。

  1. linkerd jaeger ダッシュボード

ドロップダウン リストで任意のサービスを検索し、「トレースの検索」をクリックできます。投票ボットは始めるのに最適な方法です。

特定のトレースをクリックすると、すべての詳細が表示され、各エージェントの範囲を確認できます。

この出力には確かに多くの linkerd-proxy スパンが含まれています。内部的には、プロキシにはサーバー側とクライアント側があります。リクエストがプロキシを通過すると、サーバーによって受信され、クライアントによって送信されます。 2 つのメッシュ ポッド間で渡される単一のリクエストの場合、合計 4 つのスパンが存在します。リクエストがそのプロキシを通過すると、ソース側に 2 つ存在し、リモート プロキシがリクエストを受信すると、宛先側に 2 つ存在します。

さらに、エージェントはアプリケーション メタデータをトレース属性として追加するため、ユーザーは、以下に示すように、メトリック テーブル内の Jaeger アイコンをクリックして、linkerd-web ダッシュボードから関連するリソース トレースに直接ジャンプできます。

クリーニング

クリーンアップするには、次のコマンドを実行して Linkerd-Jaeger 拡張機能と emojivoto をアンインストールします。

  1. linkerd jaeger アンインストール | kubectl削除-f -
  2. kubectl削除ns emojivoto

自分のイェーガーを持ってきてください

既存の Jaeger インストールがある場合は、Linkerd-Jaeger 拡張機能に組み込まれている Jaeger インスタンスではなく、そのインスタンスにトレースを送信するように OpenCensus コレクターを設定できます。

  1. linkerd jaeger をインストール--set collector.jaegerAddr='http://my-jaeger-collector.my-jaeger-ns:14268/api/traces' | kubectl を適用 -f -  

OpenCensus の設定を手動で編集して、サポートされている任意のバックエンドにエクスポートすることもできます。完全なリストについては、OpenCensus のドキュメントを参照してください。

トラブルシューティング

プロキシのスパンが表示されません

Linkerd プロキシは b3 伝播形式を使用します。 Jaeger などの一部のクライアント ライブラリでは、デフォルトで異なる形式が使用されます。エージェントがトレースに参加するには、b3 形式を使用するようにクライアント ライブラリを構成する必要があります。

提案

イングレス

イングレスは、各トレースのルート スパンを作成し、そのトレースをサンプリングするかどうかを決定する役割を担うため、分散トレースの特に重要なコンポーネントです。イングレスがすべてのサンプリング決定を行うことで、トレース全体がサンプリングされるかサンプリングされないかが保証され、「部分的なトレース」の作成が回避されます。

分散トレース システムはすべて、受信したリクエストから送信したリクエストまでの現在のトレースに関するメタデータを伝播するサービスに依存しています。このメタデータはトレース コンテキストと呼ばれ、通常は 1 つ以上のリクエスト ヘッダーにエンコードされます。トレース コンテキスト ヘッダー形式にはさまざまなものがあり、エコシステムが最終的には W3C トレース コンテキストのようなオープン スタンダードに収束することを期待していますが、現時点では b3 形式のみを使用します。最も古くから広く使用されている形式の 1 つとして、特に Nginx などのポータルで最も広くサポートされています。

このリファレンス アーキテクチャには、トレースの 50% をサンプリングし、トレース データをコレクターに送信する (Zipkin プロトコルを使用) シンプルな Nginx 構成が含まれています。ここでは、Nginx の代わりに任意の Ingress コントローラーを使用できます。ただし、次の条件を満たす必要があります。

  • 確率的サンプリングをサポート
  • トレースコンテキストをb3形式でエンコードします
  • OpenCensusコレクターがサポートするプロトコルでスパンを発行する

helm を使用して ingress-nginx をインストールした場合は、次のコマンドでトレースを設定できます。

  1. コントローラ:
  2. 設定:
  3. オープントレースを有効にする: "true"  
  4. zipkin-collector-ホスト: linkerd-collector.linkerd

クライアントライブラリ

サービスはトレース伝播ヘッダーを手動で伝播することもできますが、多くの場合、次の 3 つのことを実行するライブラリを使用する方がはるかに簡単です。

  • 受信リクエストヘッダーから送信リクエストヘッダーにトレースコンテキストを伝播する
  • トレースコンテキストを変更する(つまり、新しいスパンを開始する)
  • このデータをトレースコレクターに転送する

OpenCensus を使用してサービス内で設定することをお勧めします。

  • b3 伝播(これがデフォルト設定です)
  • OpenCensus エージェント エクスポーター

OpenCensus エージェント エクスポータは、gRPC API を介してトレース データを OpenCensus コレクターにエクスポートします。 OpenCensus を構成する方法の詳細は言語によって異なりますが、多くの一般的な言語のガイドがあります。サンプル アプリケーション Emojivoto を使用して、Go でのエンドツーエンドの例を確認することもできます。

OpenCensus プロジェクトはメンテナンス モードになっており、OpenTelemetry の一部となることにお気づきかもしれません。残念ながら、OpenTelemetry はまだ本番環境での使用には対応していないため、現在のところ OpenCensus が推奨されています。

他にも多くのトレース クライアント ライブラリが利用可能です。 b3 伝播形式を使用していること、およびクライアント ライブラリがコレクターが受信するように構成されている形式でスパンをエクスポートできることを確認してください。

コレクター: OpenCensus

OpenCensus コレクターは、OpenCensus エージェント エクスポーターからトレース データを受信し、データを Jaeger に送信する前に変換およびフィルタリングする場合があります。 OpenCensus エクスポーターを OpenCensus コレクターに送信すると、柔軟性が大幅に向上します。アプリケーションを中断することなく、OpenCensus でサポートされている任意のバックエンドに切り替えることができます。

バックエンド: Jaeger

Jaeger は最も広く使用されているトレース バックエンドの 1 つですが、それには十分な理由があります。それは、使いやすく、トレースを視覚化するのが非常に優れているからです。ただし、代わりに OpenCensus でサポートされている任意のバックエンドを使用できます。

リンカード

アプリケーションに Linkerd が挿入されている場合、Linkerd プロキシはトレースに参加し、トレース データを OpenCensus コレクターに送信します。これにより、トレース データが充実し、リクエストがプロキシ内およびネットワーク上で費やされる時間を正確に把握できるようになります。

Linkerd は b3 伝播形式を使用するトレースにのみアクティブに参加できますが、不明なリクエスト ヘッダーは常に透過的に転送されるため、他の伝播形式を使用するトレースに干渉することはありません。

<<:  Spark Technologyは「2020年第4位のICユニコーン」リストに掲載されました

>>:  従来型からクラウドへ: エンタープライズ近代化の 3 つのフェーズ

推薦する

簡単な分析: 問題のある Web サイトは改良すべきでしょうか?

誰もが、一夜にして成し遂げられることはなく、完璧なものなど存在しないことを知っています。時代の変化と...

中古品リサイクルサイトの最適化、プロモーション、運用利益について簡単に説明します。

インターネット業界の発展に伴い、さまざまな業界のウェブサイトはさらに細分化されてきました。中古品リサ...

タオバオの売り手がブログを宣伝するための5つの重要なポイント

以前、張立はA5「ウェブマスター記録」に参加し、タオバオの運営について語った際、タオバオの売り手のブ...

インターネット業界の運用:データ分析とは何ですか?

データ分析という言葉は、非常に流行っています。しかし、近年騒がれているさまざまな概念と同様に、落ち着...

「ニキビ除去製品」というキーワードを例に、キーワードの競争力をどのように解釈するか

SEO プロジェクトの場合、成功または失敗は主にキーワードの選択が正しいかどうかによって決まります。...

yesuphost: カナダのサーバー、苦情防止、ステーショングループ(ネイティブ)マルチIP、10Gbps帯域幅

カナダのサーバー(ネイティブ IP)を購入したいですか?苦情防止サーバー(著作権 DMCA を無視)...

電子商取引ウェブサイトにおけるBOMの適用

ここで説明する BOM は狭義の BOM であり、ERP で生産に使用される BOM とは大きく異な...

VMware は高度な自動化を使用してハイブリッド ワークスペースを簡素化します

ほとんどの企業は、ハイブリッド ワーキング モデルをすでに実装しているか、将来的に実装する予定です。...

修正済み - 30% 割引コード/40G 高防御 VPS/KVM/無制限トラフィック/ロサンゼルス

Rectified の 11 月の大きなプロモーションが始まりました: Sharktech のロサン...

SEO職場体験シーズン2: 挑戦してみよう

みなさんこんにちは。昨日、SEO 職場体験シーズン 1: 初心者という記事を書きました。今日も引き続...

マルチアクセス エッジ コンピューティング (MEC) = 未来?

最新のデバイス、アプリケーション、サービスのほとんどは、クラウド コンピューティング リソース (デ...

王立文氏は起業家の失敗を振り返る:人材の不適切な活用と弱い商業能力

3月28日、Youmi.comの創設者である王立文氏は、2012年の第1回中国リーダーシップ年次大会...

着実に優れたSEOインフラを構築する

ご存知のとおり、Baidu 検索エンジンの動作プロセスは非常に複雑です。長年にわたり、Baidu 検...

キーワード最適化パスをレイアウトして、合理的かつ完全な最適化状況を確立します。

キーワード最適化は、常にウェブサイト最適化の焦点でした。ウェブサイトの設立から立ち上げまで、キーワー...