マイクロサービス分散アーキテクチャでログリンクトラッキングを実装するにはどうすればよいですか?

マイクロサービス分散アーキテクチャでログリンクトラッキングを実装するにはどうすればよいですか?

背景

システムの問題をトラブルシューティングするために最も一般的に使用される方法は、システム ログを確認することです。分散環境では、通常、ELK はログを統一された方法で収集するために使用されます。ただし、同時実行数が多い場合は、ログを使用して問題を特定するのは依然として面倒です。次の図を見てみましょう。

上の図では、ユーザーが URL を要求しています。リンク全体を図に示します。各処理層はログを生成します。では、これらのログを連結してリクエストのフルパス ログを形成するにはどうすればよいでしょうか?

既存のシステムでは、他のユーザー/他のスレッドのログも大量に出力され、通過してしまうため、指定したリクエストに関連するログをすべてフィルタリングすることが困難です。それで、これにどう対処すればいいのでしょうか?

解決

各リクエストに一意の識別子を付与し、ログを印刷するときに各リクエストに一意の識別子を使用できます。一意の識別子はダウンストリーム サービスに渡す必要があり、ダウンストリーム サービスもログを印刷するときにこの一意の識別子を含めます。この方法では、すべてのリンクを適切に追跡し、ログに表示することができます。

では、技術的な実装計画は何でしょうか?コードにできるだけ影響を与えないようにし、Logback の MDC メカニズムを使用して、ログ テンプレートに traceId 識別子を追加する必要があります。値は%X{traceId}です。

MDCとは

MDC (Mapped Diagnostic Context) は、マルチスレッド条件下でのログ記録を容易にするために log4j および logback によって提供される機能です。 MDC は、キーと値のペアを追加できる、現在のスレッドにバインドされたマップとして見ることができます。

MDC の内容には、同じスレッドで実行されるコードからアクセスできます。現在のスレッドの子スレッドは、親スレッドの MDC の内容を継承します。ログ記録が必要な場合は、MDC から必要な情報を取得するだけで済みます。 MDC の内容は、プログラムによって適切なタイミングで保存されます。 Web アプリケーションの場合、このデータは通常、処理されるリクエストの最初に保存されます。

ソリューションの実装

MDC は内部的に ThreadLocal を使用するため、このスレッドでのみ有効であり、子スレッドおよび下流のサービス MDC の値は失われます。したがって、ソリューションの主な難しさは、主に次の部分を含む価値転送問題を解決することです。

  • API Gateway の MDC データを下流のサービスに渡す方法
  • 他のリモート サービスを呼び出すときに、サービスはどのようにデータを受信して​​渡すのでしょうか?
  • 非同期の場合に子スレッドに渡す方法(スレッドプール)

ログテンプレートを変更する

このフラグをログバック設定ファイルのログフォーマットに追加します

ゲートウェイフィルターの追加

このフィルターは、ゲートウェイが MDC データをダウンストリーム サービスに渡す方法を解決します。

トレースIDを生成し、ヘッダーを介して下流のサービスに渡す

上記のコードには、org.slf4j.MDC に属する MDC があります。定数値は次のとおりです。

  1. /**
  2. * ログリンクトラッキングID情報ヘッダー
  3. */
  4. 文字列 TRACE_ID_HEADER = "x-traceId-header" ;
  5. /**
  6. * ログリンクトラッキングIDログフラグ
  7. */
  8. 文字列 LOG_TRACE_ID = "traceId" ;

下流サービスにスプリングインターセプターを追加

traceId の値を受け取って保存します。

ダウンストリーム サービスにフェイク インターセプターを追加する

現在のサービスの traceId 値をダウンストリーム サービスに渡し続けます。

親子スレッド転送の問題を解決する

スレッドプール(非同期・並列処理)は主にビジネスで使用され、Spring自体にもスレッドプールを使用するための@Asyncアノテーションがあります。この問題を解決するには、次の 2 つの手順が必要です。

logbackのLogbackMDCAdapterを書き換える

logback の MDC 実装は内部的に ThreadLocal を使用しており、子スレッドを転送できないため、書き直して Alibaba の TransmittableThreadLocal に置き換える必要があります。

TransmittableThreadLocal は、スレッドをキャッシュするスレッド プールなどのコンポーネントを使用するときに ThreadLocal を転送する問題を解決するために Alibaba によって開発されたオープン ソースの InheritableThreadLocal 拡張機能です。 TransmittableThreadLocal をスレッド プールとメイン スレッド間で転送する場合は、TtlRunnable および TtlCallable と一緒に使用する必要があります。

  • 残りのコードは ch.qos.logback.classic.util.LogbackMDCAdapter と同じですが、代わりに copyOnInheritThreadLocal が呼び出されます。

TtlMDCAdapterInitializer クラスは、プログラムの起動時に独自の mdcAdapter 実装をロードするために使用されます。

スレッドプールの実装の拡張

TtlRunnable および TtlCallable 拡張機能を追加します。

シナリオテスト

テストコードは次のとおりです。

  1. log.info( "テスト" )
  2. @非同期
  3. パブリックボイドテスト(){
  4. log.info( "テスト1" )
  5. }
  6. userService.findByUserName( "gu" );

APIゲートウェイによって出力されるログ

ELK 集計ログは、traceId でリンク ログ全体を照会します。

システムで例外が発生した場合、次の図のように、例外ログの traceId 値を通じて、ログ センターでリクエストのすべてのログ情報を直接照会できます。

要約する

この時点で分散ログ追跡が完了し、マイクロサービス全体のログリンクを簡単に確認できるようになりました。ありがとう!!!

著者: 教室を楽しむ

リンク: https://www.jianshu.com/p/a3ebc9249b69

出典:建書

<<:  JVMにおけるJavaポリモーフィズムは次のようになります

>>:  10 年以上前から話題になっている生物学クラウド コンピューティングが、いまだに停滞しているのはなぜでしょうか?

推薦する

張勇:アリババクラウドの2つの中心的な任務は、コンピューティングパワーをより手頃な価格にし、AIをより普及させることです。

4月11日、アリババグループの会長兼CEOであり、アリババクラウドインテリジェンスグループのCEOで...

Baidu に降格された動画収集サイトを復活させる方法

みなさんこんにちは。私は飛虎映画ウェブサイトの所有者です。タイトルの通り、私の映画コレクションウェブ...

locvps: 新年特別キャンペーン「年払い小額プラン」、252元/年、2Gメモリ/1コア/20g SSD/400Gトラフィック、香港(3データセンター)/大阪、日本

locvps は新年に向けて特別オファーをご用意しました。年間支払いの小規模プランで 20% 割引 ...

クラウドを意識した文化の 5 つの柱

ほとんどの CIO は、クラウドの利点、そのグローバルな展開、サービスのスケールアップとスケールダウ...

Baidu スナップショットが更新されない場合の対処法をパーソナライズした SEO 戦略

みなさんこんにちは。私は SEO を始めたばかりの初心者ウェブマスターです。最近、Giant Tao...

ミミ・メンは「インターネット全体で禁止」されたが、彼女の何百万人ものファンはどこへ行ったのだろうか?

ミミ・メンにとって、WeChatのパブリックアカウントは2か月間自主的に停止され、Weiboの永久閉...

SEO担当者はインデックス作成プロセスで重み付け手法をうまく活用すべきである

月収10万元の起業の夢を実現するミニプログラム起業支援プラン検索エンジンは各ページに一定の重み値を与...

arkecxのフィリピンサーバー、マニラデータセンター/デフォルトの1Gbps帯域幅の簡単なレビュー

arkecxはどうですか? arkecxのフィリピンサーバーはどうですか?現在、フィリピンでデータセ...

2021 年、企業にとってのクラウド コンピューティングのビジネス上のメリット トップ 10

[[359262]]今日の企業は、ビジネスと責任の面でますます大きなプレッシャーにさらされています。...

電子商取引の進化とは?小さくて美しいことを主張することが力の源

電子商取引の進化。今日の電子商取引は、Suning、JD.com、Dangdang、または他の一連の...

クラウドコンピューティングはモノのインターネットの基盤であり、モノのインターネットはクラウドアーキテクチャを変える可能性がある。

時間が経つにつれて、モノのインターネットの概念はますます多くのモノに関係するようになります。これらの...

#云者·奔跑# Huanxin: 厳しい品質により、300,000 個のアプリと 400,000 人の開発者をカバーする SDK を作成

今日の時代において、科学技術の進歩と革新は経済と社会の発展にとって決定的な力となっています。企業にと...

スマートホストのオレゴン-米国(ポートランド)データセンターVPSの簡単なレビュー、TikTok/Netflixのブロック解除

スマートホストはどうですか?スマートホストポートランドVPSはどうですか? Smarthost は、...

サンノゼにある raksmart の 100M 帯域幅専用サーバーの簡単なレビューです。raksmart がデータを通じてどのように機能するかを説明します。

Raksmartは、米国サンノゼに本社を置く歴史ある企業です。コンピュータルーム、設備、ネットワーク...

Baidu K-stationを一括してご利用になる場合は、ウェブサイトのコンテンツ構成にご注意ください。

7月2日、百度は公式発表を行い、6月22日と28日にサイトを大量に削除した主な理由を説明した。ユーザ...