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

推薦する

タオバオアライアンスのルール変更がタオバオの顧客に与える影響(XII)

月給5,000~50,000のこれらのプロジェクトはあなたの将来です通常、ユーザーがタオバオのパスワ...

ブランドマーケティングプロモーション:「The Debaters」のプロダクトプレイスメントを学ぶには?

プロダクト・プレイスメントは、その誕生以来、「矛」と「盾」の間で避けられない争いに直面してきました。...

検索エンジン3.0時代に外部リンクを効果的に送る方法

検索エンジン3.0の時代に、外部リンクを効果的に掲載する方法。検索エンジンがどのように進歩しても、リ...

2022 年に予測される VMware の 5 つのトレンド

新年の初め、2022年という新しい年を迎えるにあたり、私たちが目にするのは変化と課題です。 COVI...

推奨: vpsblast-SSD ハードドライブ/30% 割引/24 時間以内有効

Vpsblast、データセンターの数が 5 つ (オランダ、ドイツ、ニューヨーク、フェニックス、テキ...

検索最適化: 検索マーケティングは「最適化の時代」に突入

これまで常に価格によってランキングが決定されてきた検索入札市場では、ゲームのルールに新たな変化が見ら...

クラウドガバナンスのベストプラクティスについてお話ししましょう

クラウド ガバナンスは、クラウドでサービスを実行する企業が採用する一連のルールとポリシーです。組織は...

クラウド コンピューティング: ビジネスを破滅させる可能性のある 10 の間違い

楽観主義者は「太陽はいつも雲の上に輝いている」と言うのが好きです。しかし、彼らが言及していないのは、...

米国、新たなネット中立性規則を可決

2月26日、米国連邦通信委員会(FCC)が提案・策定した「ネット中立性」がワシントンで賛成3対反対2...

DowntownHost プロモーション VPS 60% オフ (HE-Fremont 高速回線)

DowntownHost は 4 月に VPS の 60% 割引プロモーションを開始しました。割引コ...

タオバオライブ「タイトル防衛」

一年で最大のショッピングカーニバルであるダブル11が、今年も前倒しで開催されます。最近、アリババは今...

3 回の試行を経てウェブサイトが承認された後に学んだ教訓と心理的変動

出版からサイト立ち上げまで、経験不足で遠回りばかりでした。3回の挑戦を経て登録が承認されるまでに1ヶ...

2021年の仮想化トレンドはHCIとKubernetesに焦点

2021 年、仮想化の基礎はほぼ変わっていませんが、管理者が仮想サーバーの展開と管理に使用するテクノ...

crowncloud-256m メモリ KVM/Phoenix/年間支払い $18

crowncloud は、2017 年に設立されたと主張するオーストラリアの VPS 販売業者です。...