Spring Cloud はマイクロサービス アーキテクチャを構築します: 分散サービス追跡 (logstash の統合)

Spring Cloud はマイクロサービス アーキテクチャを構築します: 分散サービス追跡 (logstash の統合)

これまでの導入事例を通じて、trace-1、trace-2にSpring Cloud Sleuthの基本モジュールspring-cloud-starter-sleuthを導入し、各マイクロサービスのログ情報にトレース情報を追加する機能を実現しました。ただし、ログ ファイルは各サービス インスタンスのファイル システムに個別に保存されるため、ログ ファイルを表示するだけでリクエスト リンクを分析するのは依然として面倒な作業です。そのため、これらの追跡情報を一元的に収集、保存、検索するのに役立つツールも必要です。これらのトレースログを簡単に収集して保存できる、ELK プラットフォームなどのログベースの分析システムを導入することは良い選択です。同時に、必要に応じて、Trace ID に基づいて、対応するリクエスト リンクに関連する詳細なログを簡単に検索することもできます。

[[224659]]

ELK プラットフォームは、主に ElasticSearch、Logstash、Kiabana という 3 つのオープンソースの無料ツールで構成されています。

  • Elasticsearch は、分散、ゼロ構成、自動検出、自動インデックス シャーディング、インデックス複製メカニズム、RESTful インターフェイス、複数のデータ ソース、自動検索ロードなどの機能を備えたオープン ソースの分散検索エンジンです。
  • Logstash は、ログを収集、フィルタリングし、後で使用するために保存できる完全にオープン ソースのツールです。
  • Kibana もオープンソースの無料ツールです。 Logstash および ElasticSearch 用のログ分析に適した Web インターフェイスを提供し、重要なデータ ログの集約、分析、検索に役立ちます。

Spring Cloud Sleuth を ELK プラットフォームに統合する場合、ログ収集を担当する Logstash とのデータドッキングを実現するだけでよいため、Logstash 用に json 形式のログ出力を準備する必要があります。 Spring Boot アプリケーションはデフォルトで logback を使用してログを記録し、Logstash 自体にも logback ログ記録ツールのサポート ツールがあるため、logback 構成に logstash のアペンダーを直接追加して、ログを json 形式に簡単に変換して保存および出力することができます。

次に、クイックスタートの例に基づいて、Logstash のログ出力構成を実装する方法を詳しく紹介します。

  • 次のように、pom.xml 依存関係に logstash-logback-encoder 依存関係を導入します。
  1. <依存関係>
  2. <groupId>net.logstash.logback</groupId>
  3. <artifactId>logstash-logback-encoder</artifactId>
  4. <バージョン>4.6</バージョン>
  5. </依存関係>
  • project/resource ディレクトリに bootstrap.properties 構成ファイルを作成し、spring.application.name=trace-1 構成をこのファイルに移動します。 logback-spring.xml は application.properties の前にロードされるため、以前の構成 logback-spring.xml は spring.application.name プロパティを取得できません。そのため、このプロパティは最初にロードされる bootstrap.properties 構成ファイルに移動されます。
  • project/resource ディレクトリに logback 構成ファイル logback-spring.xml を作成します。具体的な内容は以下のとおりです。
  1. <?xml バージョン = "1.0"エンコーディング = "UTF-8" ?>
  2. <構成>
  3. <include リソース = "org/springframework/boot/logging/logback/defaults.xml" />
  4.        
  5. <springProperty スコープ = "コンテキスト"  名前= "springAppName"ソース = "spring.application.name" />
  6. <! -- プロジェクト内のログ出力場所 -->  
  7. <プロパティ= "LOG_FILE"値 = "${BUILD_FOLDER:-build}/${springAppName}" />
  8. <! -- コンソールログ出力スタイル -->  
  9. <プロパティ= "CONSOLE_LOG_PATTERN"  
  10. 値 = "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){かすかな} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr([${springAppName:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}]){黄色} %clr(${PID:- }){マゼンタ} %clr(---){かすかな} %clr([%15.15t]){かすかな} %clr(%-40.40logger{39}){シアン} %clr(:){かすかな} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
  11.  
  12. <! -- コンソールアペンダー -->  
  13. <アペンダー= "console"クラス = "ch.qos.logback.core.ConsoleAppender" >
  14. <フィルタークラス= "ch.qos.logback.classic.filter.ThresholdFilter" >
  15. <レベル>情報</レベル>
  16. </フィルター>
  17. <エンコーダ>
  18. <パターン>${CONSOLE_LOG_PATTERN}</パターン>
  19. <charset>utf8</charset>
  20. </エンコーダ>
  21. </アペンダー>
  22.  
  23. <! -- logstash によって出力される json 形式のアペンダー -->  
  24. <アペンダー= "logstash"クラス = "ch.qos.logback.core.rolling.RollingFileAppender" >
  25. <ファイル>${LOG_FILE}.json</ファイル>
  26. <rollingPolicy クラス = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy" >
  27. <ファイル名パターン>${LOG_FILE}.json.%d{yyyy-MM-dd}.gz</ファイル名パターン>
  28. <maxHistory>7</maxHistory>
  29. </ローリングポリシー>
  30. <エンコーダクラス= "net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder" >
  31. <プロバイダー>
  32. <タイムスタンプ>
  33. <timeZone>UTC</timeZone>
  34. </タイムスタンプ>
  35. <パターン>
  36. <パターン>
  37. {
  38. 「重大度」 : 「%レベル」
  39. "サービス" : "${springAppName:-}"
  40. 「トレース」 : 「%X{X-B3-TraceId:-}」
  41. "スパン" : "%X{X-B3-スパンId:-}" ,
  42. "エクスポート可能" : "%X{X-Span-Export:-}" ,
  43. "pid" : "${PID:-}"
  44. "スレッド" : "%スレッド" ,
  45. 「クラス」 : 「%logger{40}」
  46. "残り" : "%メッセージ"  
  47. }
  48. </パターン>
  49. </パターン>
  50. </プロバイダー>
  51. </エンコーダ>
  52. </アペンダー>
  53.        
  54. <ルートレベル= "INFO" >
  55. <appender-ref ref= "コンソール" />
  56. <appender-ref ref= "logstash" />
  57. </ルート>
  58. </構成>

logstash のサポートは、主に logstash という名前のアペンダーを通じて実装されます。内容は複雑ではありません。主にログ情報をフォーマットします。デバッグと表示を容易にするために、まず json ログをファイルに出力します。

上記の変換が完了したら、クイック スタートの例を実行し、trace-1 へのインターフェイス アクセスを開始します。この時点で、trace-1 と trace-2 のプロジェクト ディレクトリの下にビルド ディレクトリが見つかります。それぞれのアプリケーションにちなんで名付けられた JSON ファイルが以下に作成されます。これらのファイルは、logback-spring.xml で設定された logstash という名前のアペンダーによって出力されるログ ファイルであり、次の形式で JSON ログを記録します。

  1. { "@timestamp" : "2016-12-04T06:57:58.970+00:00" "severity" : "INFO" "service" : "trace-1" "trace" : "589ee5f7b860132f" "span" : "a9e891273affb7fc" "exportable" : "false" "pid" : "19756" "thread" : "http-nio-9101-exec-1" "class" : "cdTraceApplication$$EnhancerBySpringCGLIB$$a9604da6" "rest" : "===<call tr​​ace-1>===" }
  2. { "@timestamp" : "2016-12-04T06:57:59.061+00:00" "severity" : "INFO" "service" : "trace-1" "trace" : "589ee5f7b860132f" "span" : "2df8511ddf3d79a2" "exportable" : "false" "pid" : "19756" "thread" : "http-nio-9101-exec-1" "class" : "oscaAnnotationConfigApplicationContext" "rest" : "org.springframework.context.annotation.AnnotationConfigApplicationContext@64951f38 を更新しています: 起動日 [Sun Dec 04 14:57:59 CST 2016]; 親: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4b8c8f15" }

上記の方法で json ファイルを生成することに加えて、LogstashTcpSocketAppender を使用して、ログ コンテンツを TCP ソケット経由で logstash サーバーに直接出力することもできます。次に例を示します。

  1. <アペンダー= "logstash"クラス = "net.logstash.logback.appender.LogstashTcpSocketAppender" >
  2. <宛先>127.0.0.1:9250</宛先>
  3. ...
  4. </アペンダー>

この記事の完全な例:

読者は、自分の好みに応じて、次の 2 つのリポジトリで trace-1 プロジェクトと trace-2 プロジェクトを表示することを選択できます。

  • Github: https://github.com/dyc87112/SpringCloud-Learning/
  • gitee: https://gitee.com/didispace/SpringCloud-Learning/

【この記事は51CTOコラムニスト「Zhai Yongchao」によるオリジナル記事です。転載の許可を得るには、51CTO を通じて著者に連絡してください。

この著者の他の記事を読むにはここをクリックしてください

<<:  クラウド コンピューティングとデータ センター: 組織がどちらが適しているかを判断する方法

>>:  Hadoop 分散ストレージと従来の SQL ストレージの比較とストレージ操作の説明

推薦する

Google が Google Driver をリリースし、オンライン ストレージ サービス戦争に参戦

Googleドライブ北京時間3月28日、テクノロジーブログGigaomは本日、Googleのオンライ...

vaicdn: 無料のバックアップ、無料の実名統合 CDN、大きな帯域幅/高い防御、多数の CN2 ハイエンド エンタープライズ レベルのノード アクセラレーション

vaicdnは現在、登録不要、実名登録不要、CDNとストレージの統合、超大容量帯域幅の提供、ハイエン...

IDC: 中国のEA SaaS市場規模は2026年に183.1億米ドルに達する

IDCの最新の「IDC中国エンタープライズアプリケーション管理(EA)SaaS市場2021年下半期追...

Bilibiliの富の夢はどこにあるのでしょうか?

BilibiliでUPホスト/フルタイムUPホストになるとどれくらいのお金を稼ぐことができますか? ...

オリジナルコンテンツが収集されないようにする方法

Baidu は継続的にアップデートを行い、ユーザー エクスペリエンスを重視してきたため、Web サイ...

ユーザーをつなぐクリエイティブマーケティング

ユーザーをつなぐクリエイティブマーケティングユーザー同士を結びつけるクリエイティブなマーケティングと...

グローバルエンタープライズKVMオープンソース貢献リストが発表、テンセントクラウドは5年連続でリスト入り

9月16日夜、世界トップの仮想化技術サミットKVMフォーラムで、2021年グローバルエンタープライズ...

工業情報化部:中国のモバイルユーザーは年間1億人増加、ネットユーザーの80%が携帯電話経由でインターネットにアクセス

C114ニュース、6月11日朝のニュース(江俊木) 先進的なブロードバンドモバイル通信技術が変化をも...

Samsung Galaxy S21 標準バージョンの人気はどのくらいですか? JD POPの複数店舗が200元のプレミアムで販売

最近、携帯電話市場で最も注目を集めている携帯電話はどれかと聞かれれば、答えはサムスン Galaxy ...

1 つの記事で DevOps を理解します。それでも分からないなら殴ってみろ

DevOps という言葉については、多くの人が知っていると思います。 DevOps は人気のある概念...

収益力のないSaaSにとって、スケーリングは大惨事になり得る

1. SaaS は収益性がありますか?私が受けたコンサルティング サービスの依頼の多くは規模と成長に...

m247: 安価なサーバー、大きな帯域幅と大きなトラフィック、ビデオ/ダウンロード/CDN などに適しています。

M247はM24Sevenグループに所属し、2000年に営業を開始しました。m247は200人以上の...

他の人の経験から学ぶ: リンクベイトの実装方法

『詩経』には「他山の石で玉を磨く」という慣用句がある。元々の意味は、他山の石を磨くことで美しい玉に変...

ビットコインが900ドルの最高値を記録、中国がビットコインの価格決定権を握る

人民元がアジアで認知されるのにまだ苦労している一方で、中国国民はもう一つの世界通貨であるビットコイン...