1. 概要

この記事では、Zipkinスプリングクラウドプロジェクトに追加します。 Zipkin は、トレースを送信、受信、保存、および視覚化するためのメカニズムを提供するオープンソースプロジェクトです。 これにより、サーバー間のアクティビティを相互に関連付け、サービスで何が起こっているのかをより明確に把握できます。

この記事は、分散トレースやスプリングクラウドの紹介記事ではありません。 分散トレースの詳細については、 springsleuthの概要をお読みください。

2. Zipkinサービス

Zipkin サービスは、すべてのスパンのストアとして機能します。 各スパンはこのサービスに送信され、将来の識別のためにトレースに収集されます。

2.1. 設定

新しいSpringBootプロジェクトを作成し、これらの依存関係を pom.xml:に追加します

<dependency>
    <groupId>io.zipkin.java</groupId>
    <artifactId>zipkin-server</artifactId>
</dependency>
<dependency>
    <groupId>io.zipkin.java</groupId>
    <artifactId>zipkin-autoconfigure-ui</artifactId>
    <scope>runtime</scope>
</dependency>

参考:最新バージョンは Maven Central zipkin-server zipkin-autoconfigure-ui )にあります。 依存関係のバージョンは、spring-boot-starter-parentから継承されます。

2.2. Zipkinサーバーの有効化

Zipkin サーバーを有効にするには、メインアプリケーションクラスにいくつかの注釈を追加する必要があります。

@SpringBootApplication
@EnableZipkinServer
public class ZipkinApplication {...}

新しいアノテーション@EnableZipkinServerは、着信スパンをリッスンし、クエリのUIとして機能するようにこのサーバーを設定します。

2.3. 構成

まず、 src / main /resourcesbootstrap.propertiesというファイルを作成しましょう。 このファイルは、構成サーバーから構成をフェッチするために必要であることに注意してください。

これらのプロパティを追加してみましょう。

spring.cloud.config.name=zipkin
spring.cloud.config.discovery.service-id=config
spring.cloud.config.discovery.enabled=true
spring.cloud.config.username=configUser
spring.cloud.config.password=configPassword

eureka.client.serviceUrl.defaultZone=
  http://discUser:discPassword@localhost:8082/eureka/

次に、Windowsの c:\ Users \ {username}\または*nixの/home / {username}/にある構成リポジトリに構成ファイルを追加しましょう。

このディレクトリに、 zipkin.properties という名前のファイルを追加し、次のコンテンツを追加しましょう。

spring.application.name=zipkin
server.port=9411
eureka.client.region=default
eureka.client.registryFetchIntervalSeconds=5
logging.level.org.springframework.web=debug

configサービスが変更を検出してファイルをロードできるように、このディレクトリで変更をコミットすることを忘れないでください。

2.4. 走る

次に、アプリケーションを実行してhttp:// localhost:9411に移動します。 Zipkinのホームページで迎えられるはずです。

すごい! これで、トレースするサービスにいくつかの依存関係と構成を追加する準備が整いました。

3. サービス構成

リソースサーバーの設定はほとんど同じです。 次のセクションでは、book-serviceの設定方法について詳しく説明します。これらの更新をrating-serviceおよび[ X203X]ゲートウェイサービス。

3.1. 設定

Zipkin サーバーへのスパンの送信を開始するには、次の依存関係をpom.xmlファイルに追加します。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

参考:最新バージョンは Maven Central spring-cloud-starter-zipkin )にあります。

3.2. SpringConfig

book-serviceEurekaを使用してZipkinサービスを検索するように、いくつかの構成を追加する必要があります。 BookServiceApplication.java を開き、次のコードをファイルに追加します。

@Autowired
private EurekaClient eurekaClient;
 
@Autowired
private SpanMetricReporter spanMetricReporter;
 
@Autowired
private ZipkinProperties zipkinProperties;
 
@Value("${spring.sleuth.web.skipPattern}")
private String skipPattern;

// ... the main method goes here

@Bean
public ZipkinSpanReporter makeZipkinSpanReporter() {
    return new ZipkinSpanReporter() {
        private HttpZipkinSpanReporter delegate;
        private String baseUrl;

        @Override
        public void report(Span span) {
 
            InstanceInfo instance = eurekaClient
              .getNextServerFromEureka("zipkin", false);
            if (!(baseUrl != null && 
              instance.getHomePageUrl().equals(baseUrl))) {
                baseUrl = instance.getHomePageUrl();
                delegate = new HttpZipkinSpanReporter(new RestTemplate(), 
                  baseUrl, zipkinProperties.getFlushInterval(), spanMetricReporter);
                if (!span.name.matches(skipPattern)) delegate.report(span);
            }
        }
    };
}

上記の構成は、eurekaからURLを取得するカスタムZipkinSpanReporterを登録します。 このコードはまた、既存のURLを追跡し、URLが変更された場合にのみHttpZipkinSpanReporterを更新します。 このように、Zipkinサーバーをどこにデプロイしても、サービスを再起動しなくても常にサーバーを見つけることができます。

また、スプリングブートによってロードされるデフォルトのZipkinプロパティをインポートし、それらを使用してカスタムレポーターを管理します。

3.3. 構成

次に、構成リポジトリーのbook-service.propertiesファイルに構成を追加しましょう。

spring.sleuth.sampler.percentage=1.0
spring.sleuth.web.skipPattern=(^cleanup.*)

Zipkin は、サーバー上のアクションをサンプリングすることで機能します。 spring.sleuth.sampler.percentage を1.0に設定することにより、サンプリングレートを100%に設定しています。 スキップパターンは、名前が一致するスパンを除外するために使用される単なる正規表現です。

スキップパターンは、「クリーンアップ」という単語で始まるすべてのスパンが報告されないようにブロックします。 これは、Springセッションコードベースから発生するスパンを停止するためです。

3.4. 評価サービス

上記のbook-serviceセクションと同じ手順に従い、rating-service。の同等のファイルに変更を適用します。

3.5. ゲートウェイサービス

同じ手順book-serviceに従います。 ただし、ゲートウェイ .properties に構成を追加する場合は、代わりに次を追加してください。

spring.sleuth.sampler.percentage=1.0
spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*)

これにより、ファビコンまたはスプリングセッションに関するスパンを送信しないようにゲートウェイサービスが構成されます。

3.6. 走る

まだ行っていない場合は、構成検出ゲートウェイブック評価を開始します、およびzipkinサービス。

http:// localhost:8080 / book-service/booksに移動します。

新しいタブを開き、http:// localhost:9411に移動します。 book-serviceを選択し、[FindTraces]ボタンを押します。 検索結果にトレースが表示されるはずです。 それを開いたその痕跡をクリックします:

トレースページでは、サービスごとに分類されたリクエストを確認できます。 最初の2つのスパンはゲートウェイによって作成され、最後のスパンはブックサービスによって作成されます。これは、リクエストがブックで処理に費やした時間を示します-サービス、 18.379ミリ秒、ゲートウェイでは87.961ミリ秒。

4. 結論

Zipkinをクラウドアプリケーションに統合するのがいかに簡単かを見てきました。

これにより、コミュニケーションがアプリケーションをどのように通過するかについて、非常に必要とされている洞察が得られます。 アプリケーションの複雑さが増すにつれて、Zipkinは、リクエストがどこで時間を費やしているかについて、非常に必要な情報を提供してくれます。 これは、物事が減速している場所を特定し、アプリケーションのどの領域を改善する必要があるかを示すのに役立ちます。

いつものように、ソースコードはGithubにあります。