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 ストレージの比較とストレージ操作の説明

推薦する

人気のない業界の企業にとって、ブランドワード、ターゲットワード、ロングテールワードだけを使うだけで十分でしょうか?

最近、企業サイトで働いている多くの友人と話をしたところ、インターネット上で非常に悪いことが起こってい...

ワールドカップがマーケティング戦争を引き起こした。ハイセンスはCポジションでどのようにデビューするのだろうか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています2018年...

春節のマーケティング戦争は祝祭の雰囲気を「救う」ことができるだろうか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス「親愛なるお母さんとお父...

Liziqi を「貪っている」のは誰ですか?

Liziqiは「消去」されています。 7月14日、李子奇は主要プラットフォームでビデオ「米、油、塩、...

AI、5G、クラウドコンピューティングは2021年にエッジコンピューティングにどのような影響を与えるでしょうか?

11 月 17 日のニュース、これまでのところ、エッジ コンピューティングは常に大きな可能性を秘めて...

ウェブサイト分析ツールをより有効に活用するための 10 のヒント (パート 2)

ほぼすべての SEO 担当者は UEO の概念を知っています。そうです、それはユーザー エクスペリエ...

ハーマン、自動車向けソリューションの提供にAmazon Web Servicesのサポートを発表

ハーマンは本日、アマゾン ウェブ サービス プラットフォームをベースとした自動車業界向けソリューショ...

クラウド3.0の3つの大きな課題

[51CTO.com クイック翻訳] Cloud 1.0 は、仮想化ベースの Infrastruct...

lunanode-$4.5/KVM/512 メモリ+5IPv4-[+13IP、VPS 月額支払い $8 を含む]

シカゴにデータセンターを持つVPSプロバイダーのlunanodeは、KVMベースの仮想VPSを提供し...

vpsserver - 香港 VPS/直接接続/$4.99/KVM/512m メモリ/250G トラフィック

vpsserver は 2009 年に設立されたアメリカのホスティング会社で、KVM 仮想化と純粋な...

オンライン採用の過去、現在、そして未来: トラフィック効果、敗者ユーザー、そして究極の体験

[IT Times Weekly 編集者注] 現在のオンライン求人市場には、51job や Zhao...

PieLayer - $15/年/256MB RAM/256vSwap/10GB SSD/250GB データトラフィック/サンディエゴ

PieLayer は、カリフォルニア州サンディエゴにデータ センターを置き、テスト IP: 204....

インフルエンサーマーケティングがユーザー行動に与える影響に関する4つの心理的要因の分析

月収10万元の起業の夢を実現するミニプログラム起業支援プラン最近、人気番組「The Rap of C...

ブランドマーケティングとプロモーション、若者層をどう捉えるか?

メンタルヘルス月間の5月に、バーガーキングは、このテーマに応えて「アンハッピーミール」シリーズを立ち...