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 つのフェーズ

推薦する

プロフェッショナルな映画ウェブサイトを作成する方法

昨今、映画サイトは数え切れないほどあります。多くのウェブマスターが映画サイトの構築に挑戦したことがあ...

中央銀行副総裁は「ビットコインの合法性を認めない」と答えた。

研修記者 張月光インターン記者の張碩が北京からレポートします常に人気のビットコインは、ついに規制当局...

unesty: ドイツ VPS 春のセール、月額 3.75 ユーロ、9G メモリ/4 コア (AMD)/75g NVMe/10G 帯域幅/無制限トラフィック

ドイツのクラウド サーバー マーチャント unesty が春のプロモーションを実施しています。ドイツ...

「退化」したクラウドベンダーの財務報告:変化とともに安定し、業界の優位性は平準化される

今年も決算シーズンがやってきました。最近、クラウドコンピューティング分野のさまざまなメーカーが202...

ウェブサイトの最適化において初心者が犯す4つのよくある間違い

私がウェブサイト最適化、つまり SEO 業界で働き始めたとき、半年間、ある会社の SEO 部門で働い...

世界中の安価で安定したVPS業者をいくつかリストアップ

私たちは世界中から安価で安定した VPS をいくつか集め、安価で安定した VPS を必要とする友人に...

serversub-$8.99/香港/Xen/G ポート/無制限/512M メモリ/20gSSD

serversub からメールを受け取りました。香港に新しいデータ センターが追加されました。数日前...

競合他社を研究するための具体的な操作についての簡単な説明

競争はあらゆる業界に存在し、ウェブマスター コミュニティにおける競争は言葉では言い表せないほど熾烈で...

CrownCloud-7 USD/KVM/4 コア/1 GB RAM/250 GB HDD/ドイツ

ドイツのフランクフルトデータセンターにあるCrownCloudのKVM仮想VPSは、solusvmパ...

初心者ウェブマスターがSEOトレーニングについての意見を共有

正直に言うと、私がウェブマスター業界に関わるようになったのはごく最近のことです。周りの同僚のほとんど...

台湾当局は、著作権侵害サイト「PPS」をブロックする計画だ。リストに含まれるかどうかは、さらに評価する必要がある。

中国新聞社、5月22日。台湾の聯合晩報によると、台湾の関係当局は著作権法を改正し、IPアドレスやDN...

catalysthost-7 ブレード/1g メモリ/KVM/3 コア/60g ハードディスク/3T トラフィック/G ポート

Catalysthost のプロモーションは、年に 1 回しか行われないブラック フライデーなので、...

doteasy-com/net/org ドメイン名を初年度 1 ドルで登録

doteasy は、ドメイン名登録の初年度にDS1COM の割引コードを1 ドルで提供しています。d...

孟牧の三手からリンク交換の問題を解釈する

中国には、孟子の母親が3回引っ越したという非常に有名な話があります。この話は、文豪孟子の母親が、息子...

mod_pagespeed: 読み込み時間を 50% 短縮して、ウェブサイトの実行速度を速めます

mod_pagespeed は、Google が開発したオープンソースの Apache モジュールで...