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

推薦する

#新しいコンピュータルーム: hostus-$10/年/768m メモリ/20g ハードドライブ/2T トラフィック/ロサンゼルス/ダラス

Hostus は、ロサンゼルスの新しいデータ センターにサーバーを設置しました。ロサンゼルスで VP...

マルチクラウド環境を管理するための10の実践

また、マルチクラウドは組織の IT チームが直面しているすべての問題に対する解決策ではないことも理解...

観光電子商取引の進化:価格競争が始まると観光客は笑う

観光の進化における電子商取引近年、国の観光業の発展に伴い、オンライン旅行サイト、旅行電子商取引、モバ...

ウェブサイト構築の鍵はロングテールキーワードにある

ロングテールキーワードの役割は疑う余地がなく、ウェブサイトのコンバージョン率を高めたい場合は、主にロ...

ブランド活用マーケティングの根底にあるロジック!

多くのブランドは、マーケティングカレンダーを参考にして適切なノードを選択し、年間マーケティング計画を...

パブリック IP アドレスがなくてもリモート開発とデバッグが可能です。 VMware 仮想マシンのポート マッピングは 3 つのステップで実現できます。

多くのプロジェクトでは、開発プロセス中にさまざまなデモ環境やオペレーティング システムで実行およびデ...

Alibaba Cloud 2.0: スーパーコンピュータ + オペレーティングシステム

20 年目を迎えるにあたり、Alibaba Cloud は最も重要な総合的なアップグレードを実施して...

gigsgigscloud - 20% 割引クーポン、香港 VPS、中国電信 CN2 + 中国聯通 VIP 回線の特別最適化

gigsgigscloudの香港データセンターのVPSは、元のCN2に基づいて、まもなく(来週)Ch...

短い講演: クラウドネイティブの可観測性の未来

近年、エンタープライズ アプリケーションとインフラストラクチャが進化し続けるにつれて、複雑なシステム...

クラウドコンピューティングへの投資を最適化する方法

多くの組織は、業務をクラウドに移行することで、クラウド コンピューティングの拡張性、柔軟性、アクセシ...

電子商取引が伝統的な小売業を圧迫:オンラインとオフラインのチャネルの調整が困難

「すべての製造業トレーダーに、今日の状況は変化したことを知らせる必要があります。伝統的な産業にとって...

2019年上半期の広告・マーケティングトレンド!

PC時代であろうとモバイルインターネット時代であろうと、ほぼすべてのインターネット企業や製品には「勝...

2018年おすすめの海外VPS、安くて「信頼できる」「最安VPS」を厳選

来年に向けて、コストパフォーマンスに優れた海外VPSを厳選しました。 安価なVPSをレンタルする顧客...

2019年のオラクル、変化と苦戦

中国人なら誰でも、ウォーレン・バフェットと彼のバークシャー・ハサウェイ社についてよく知っているだろう...

TektonとArgo CDを組み合わせてGitOpsを実装する

以前は、アプリケーションの CI/CD プロセスを完了するために Tekton を使用していましたが...