この記事では、主にサービス追跡コンポーネントのZipkinについて説明しており、Spring Cloud SleuthはZipkinコンポーネントを統合しています。
1。はじめに
スプリングブートアプリケーションのクラスパスにスルースを追加すると(MavenおよびGradleの例については以下を参照)、ログがログに記録されている限り、ログで収集されている相関データが表示されます。
- 公式ウェブサイトから抜粋
Spring Cloud Sleuthの主な機能は、分散システムで追跡ソリューションを提供することであり、Zipkinと互換性があります。対応する依存関係をPOMファイルに導入するだけです。
2。サービスの追跡と分析
マイクロサービスアーキテクチャでは、サービスはサービスを通じて分割されます。外の世界にさらされるインターフェイスは、このインターフェイス関数を完了するために多くのサービスを協力する必要がある場合があります。リンク上のサービスに問題やネットワークのタイムアウトがある場合、インターフェイスコールが失敗します。ビジネスが拡大し続けるにつれて、サービス間の呼び出しはますます複雑になります。
ますます多くのサービスが利用可能になると、コールチェーンの分析はますます複雑になります。それらの間の呼び出し関係は次のとおりです。
iii。条項
スパン:基本的な作業単位。たとえば、新しく作成されたスパンでRPCを送信することは、RPCに応答要求を送信するのと同等です。スパンは64ビットIDによって一意に識別され、トレースは別の64ビットIDで表されます。 SPANには、ダイジェスト、タイムスタンプイベント、キー値アノテーション(タグ)、SPANのID、および進行ID(通常はIPアドレス)など、他のデータ情報があります。
スパンは絶えず始まり、停止しており、同時に時間情報を記録します。スパンを作成するときは、将来のある時点で停止する必要があります。
トレース:一連のスパンで構成されるツリー構造。たとえば、分散ビッグデータプロジェクトを実行している場合は、トレースを作成する必要がある場合があります。
注釈:イベントの存在を時間内に記録するために使用され、いくつかのコアアノテーションを使用して、リクエストの開始と終了を定義します。
1つのシステムでZipkin Annotationを使用するプロセスをグラフィカル化します。
4。建設プロジェクト
基本的な知識を説明した後、実際の仕事をしましょう。この記事のケースは、主に3つのプロジェクトで構成されています。サーバージプキンは、主にZipkinServerの関数を使用してコールデータを収集して表示します。 HIインターフェイスを外部に公開するService-HI。 Miyaインターフェイスを外部に公開するサービス - Miya。これらの2つのサービスは互いに呼び出すことができます。そして、それらが呼び出された後にのみ、サーバージプキンはデータを収集するため、サービス追跡と呼ばれます。
4.1ビルドサーバージプキン
Server-Zipkinという名前のスプリングブートプロジェクトを作成し、POMに依存関係を紹介します。
<Dependencies> <Dependency> <groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter </artifactid> </dependency> <dependency> <deprofid> org.springframework.boot </groupid> <artifactid> spring-webbeb <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-test </artifactid> <scope> test </scope> </dependency> <sependency> <shentency> <groupid> io.zipkin.java </groupid> <artifactid> zipkin-server </artifactid> </sepancy> <GroupId> io.zipkin.java </groupid> <artifactid> Zipkin-autoconfigure-ui </artifactid> </dependency> </dependency> </dependency> <sependency> <seplency> <ependency> <バージョン> camden.sr6 </version> <type> pom </type> <scope>インポート</scope> </dependency> </dependencies> </dependencymanagement>
プログラムエントリクラスで、annotation @enablezipkinserverを追加して、ZipkinServerの機能を有効にします。
@springbootapplication@enablezipkinserverpublic class serverzipkinapplication {public static void main(string [] args){springapplication.run(serverzipkinapplication.class、args); }}構成ファイルapplication.ymlでサービスポートを次のように指定します。
server.port = 9411
4.2 Service-hiを作成します
POMの紹介では、最初の依存関係はSpring-Cloud-Starter-Zipkinです。コードは次のとおりです。
<Dependencies> <Dependency> <groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> </dependency> <! - compile( 'org.springframework.cloud:spring-cloud-starter-zipkin') - > <Dependency> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-zipkin </artifactid> </dependency> <dependency> springframework.boot </groupid> <artifactid> spring-boot-startertest </supentid> </scope> </scope> </Dependency> </Dependency> <DependencyManagement> <Dependency> <Dependency> <shipidence> groupid> org.springframework.cloud </groupid> <artifactid> dalston.rc1 </version> <type> pom> desops </scope> </scope> desopmanage>
構成ファイルApplication.ymlで、Zipkinサーバーのアドレスを指定し、ヘッダーは「spring.zipkin.base-url」を構成することで指定されます。
server.port = 8988spring.zipkin.base-url = http:// localhost:9411spring.application.name = service-hi
Spring-Cloud-Starter-Zipkin依存関係を導入し、spring.zipkin.base-urlを設定しても構いません。
外部露出インターフェース:
@springbootapplication@restcontrollollerpublic class servicehiapplication {public static void main(string [] args){springapplication.run(servicehiapplication.class、args); } private static final logger log = logger.getLogger(servicehiapplication.class.getName()); @autowired privateRestemplateStemplate; @bean public rettemplate getRestTemplate(){return new RestTemplate(); } @RequestMapping( "/hi")public string callhome(){log.log(level.info、 "calling trace service-hi"); RESTTEMPLATE.getForObject( "http:// localhost:8989/miya"、string.class); } @RequestMapping( "/info")public string info(){log.log(level.info、 "calling trace service-hi"); 「I'm Service-hi」を返します。 } @bean public alentsampler defaultsampler(){return new alentSampler(); }}4.3 Service-Miyaを作成します
作成プロセスはService-HIを傷つけ、同じ依存関係を導入し、spring.zipkin.base-urlを構成します。
外部露出インターフェース:
@springbootapplication@restcontrollollerpublic class servicemiyaapplication {public static void main(string [] args){springapplication.run(servicemiyaapplication.class、args); } private static final logger log = logger.getLogger(servicemiyaapplication.class.getName()); @RequestMapping( "/hi")public string home(){log.log(level.info、 "hi is calking"); 「こんにちは、ミヤ!」を返します。 } @RequestMapping( "/miya")public string info(){log.log(level.info、 "infoが呼び出されている"); RESTTEMPLATE.getForObject( "http:// localhost:8988/info"、string.class); } @autowired privateRestemplateStemplate; @bean public rettemplate getRestTemplate(){return new RestTemplate(); }}4.4プロジェクトを開始し、実証して追跡します
上記の3つのプロジェクトを順番に開始し、アクセスするブラウザを開きます。http:// localhost:9411/、次のインターフェイスが表示されます。
ご覧ください:http:// localhost:8989/miya、ブラウザが表示されます:I'm Service-HI
次に、http:// localhost:9411/のインターフェイスを開き、依存関係をクリックしてサービスの依存関係を発見します。
[トレースの検索]をクリックして、互いに呼び出している特定のサービスのデータを表示します。
この記事のソースコードをダウンロードしてください:https://github.com/forezp/springcloudlearning/tree/master/chapter9
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。