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

推薦する

kuroit: 月額 10 ドル、米国 VPS (ロサンゼルス/フェニックス)、8G メモリ/4 コア/50g NVMe/8T トラフィック/10Gbps 帯域幅

現在、Kuroit は米国西海岸のロサンゼルスとフェニックスでプロモーションを実施しています。いくつ...

企業がパブリッククラウドを導入すべき10の理由

過去 18 か月間、テクノロジーは多くの企業にとって救世主であることが証明されました。パンデミックが...

米メディア:中国は世界第2位のクラウドコンピューティング市場になった

11月10日、米国のブルッキングス研究所のウェブサイトに「中国4.0 – デジタル化の利益の共有」と...

2019 APP トラフィック価値評価レポート

2019 APP トラフィック価値評価レポート 2019 APP トラフィック価値評価レポート..著...

タオバオのカテゴリー属性システムについて簡単に説明:商品検索の背後にある論理アーキテクチャ

【ポイント】Taobao には数百万の加盟店と 10 億以上の商品があります。ユーザーが希望する商品...

百度ファイナンスの最初の製品が発売されたが、年率8%の収益率の約束は控えめに述べられている。

【はじめに】百度は金融管理の最低投資額を1元に設定し、販売後の迅速な償還をサポートしています。テンセ...

「インテリジェンス+」は製造業の変革とアップグレードを強力にサポートします

中国の2019年の「政府活動報告」では、「インテリジェンス+」を提唱し、「伝統産業のモデルチェンジと...

#IndianVPS# yourlasthost - $22/年/512m メモリ/20g ハードドライブ/1T トラフィック

インドの VPS は高価ですか?それとも、インドでは VPS を見つけるのが難しく、プロバイダーが本...

SAP: 産業チェーンの連携を促進し、中国の新興企業の支援者となる

50 年にわたる発展を経て、SAP はスタートアップ企業からグローバル デジタル経済の運用基盤へと成...

ウェブサイト運営は全体の状況を把握してこそ成功できる

ウェブサイトの運営は、一つのコンテンツだけに頼っていては成功しません。ウェブサイトの運営は、ウェブサ...

デフォルトのホームページの301リダイレクトについて考える index/default

著者の SEO ブログでは、主に仮想ホストがサポートしていないため、301 リダイレクトは使用してい...

Baidu Shareは「羊の皮を被った大きな悪いオオカミ」である可能性が高い

Baidu Shareがいつから人気になったのかは分かりませんが、現在ではほとんどの映画サイト、小説...

Kubernetesはまだ歴史が浅く、ローカルでの導入がパブリッククラウドでの導入を上回っている

最近、VMware は Kubernetes に関する調査を実施し、5 年間の開発歴を持つ Kube...

contabo-10Gbps/無制限トラフィック/月額99ユーロから/2 x E5-2620V3/256Gメモリ

今後、contabo.com は 10Gbps 帯域幅の専用サーバーの提供を開始しますが、トラフィッ...

起業家キャンプが戻ってきました!フェーズ II: インド両国市場に重点を置きます。現在、予約を受け付けています。

10月26日、ホワイトホエール海外起業キャンプ第2フェーズ「インド・インドネシア向け海外起業キャンプ...