Spring Cloud - Zipkinによるサービスの追跡

1概要

この記事では、リンクに Zipkin を追加します。/spring-cloud-secure-services Zipkin は、トレースを送信、受信、保存、および視覚化するためのメカニズムを提供するオープンソースプロジェクトです。これにより、サーバー間のアクティビティを関連付けて、私たちのサービスで起こっていることを正確に把握することができます。

この記事は、分散トレースやSpring Cloudの入門記事ではありません。分散トレースについてもっと知りたいのなら、 spring sleuth の紹介を読んでください。

2ジップキンサービス

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

2.1. セットアップ

新しいSpring Bootプロジェクトを作成し、これらの依存関係を__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 (https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22io.zipkin.java%22%20AND%20a%3A%)で最新バージョンを見つけることができます。 22zipkin-server%22[zipkin-server]、https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22io.zipkin.java%22%20AND%20a%3A%22zipkin- autoconfigure-ui%22[zipkin-autoconfigure-ui])

依存関係のバージョンはhttps://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22spring-boot-starter-parent%22[spring-boot-starter-parent]から継承されます。

2.2. Zipkin Serverを有効にする

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

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

新しいアノテーション @ EnableZipkinServer は、このサーバーを設定して受信スパンを監視し、クエリのためのUIとして機能します。

2.3. 構成

まず、 src/main/resources bootstrap.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:[email protected]:8082/eureka/----

それではWindowsの__c:\ Users \\ {username} \ __または**  nixの__/Users/\ {username}/__にある設定リポジトリに設定ファイルを追加しましょう。

このディレクトリに__zipkin.properties__という名前のファイルを追加して、次の内容を追加します。

[source,text,gutter:,true]

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

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

====  **  2.4. 実行**

それでは、アプリケーションを実行してhttp://localhost:9411に移動しましょう。私たちはジプキンのホームページに迎えられるべきです:

リンク:/uploads/zipkinhomepage-1-1.png%201595w[]

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

===  **  3サービス構成**

リソースサーバーの設定はほとんど同じです。以下のセクションでは、__book-serviceの設定方法について詳しく説明します。____rating-service__および__gateway-service ** ** にこれらの更新を適用するために必要な変更を説明することによって、それについて説明します。

====  **  3.1. セットアップ**

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

[source,xml,gutter:,true]

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

参考のために:あなたは__Maven Central__(https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.springframework.cloud%22%20AND%20a%3A%)で最新バージョンを見つけることができます。 22spring-cloud-starter-zipkin%22[スプリングクラウドスタータージップキン])。

====  **  3.2.  Spring Config **

**  book-service ** が私たちの__Zipkin__サービスを見つけるために__Eureka__を使うように設定を追加する必要があります。 __BookServiceApplication.java__を開き、このコードをファイルに追加します。

[source,java,gutter:,true]

@Autowired private EurekaClient eurekaClient;

@Autowired private SpanMetricReporter spanMetricReporter;

@Autowired private ZipkinProperties zipkinProperties;

@Value("${spring.sleuth.web.skipPattern}") private String skipPattern;

@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(baseUrl,
      zipkinProperties.getFlushInterval(),
      zipkinProperties.getCompression().isEnabled(),
      spanMetricReporter);
                if (!span.name.matches(skipPattern)) delegate.report(span);
            }
        }
    };
}
上記の設定は、eurekaからURLを取得するカスタム__ZipkinSpanReporter__を登録します。このコードは既存のURLも追跡し、URLが変更された場合にのみ__HttpZipkinSpanReporter__を更新します。この方法では、Zipkinサーバーをどこに展開しても、サービスを再起動しなくても常に見つけることができます。

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

====  **  3.3. 構成**

それでは、configリポジトリの__book-service.properties__ファイルに設定を追加しましょう。

[source,text,gutter:,true]

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

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

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

====  **  3.4. 評価サービス**

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

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

**  book-service ** と同じ手順に従ってください。しかし、ゲートウェイ____。properties____に設定を追加するときは、代わりにこれらを追加してください:

[source,text,gutter:,true]

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

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

====  **  3.6. 実行**

まだ行っていない場合は、**  config ** 、**  discovery ** 、**  gateway ** 、**  book ** 、**  rating ** 、および**  zipkin ** サービスを開始します。

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

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

リンク:/uploads/zipkintrace-1-1-1024x110.png%201024w[]

トレースページでは、リクエストがサービスごとに分類されているのがわかります。最初の2つのスパンは__gateway__によって作成され、最後のスパンは__book-serviceによって作成されています。 。

===  **  4結論**

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

これにより、アプリケーションを介してコミュニケーションがどのように進むのかについて、非常に必要とされる洞察が得られます。私たちのアプリケーションが複雑になるにつれて、Zipkinは要求がどこで時間を費やしているかについての非常に必要な情報を私たちに提供することができます。これは、状況がどこで減速しているのかを判断し、アプリケーションのどの部分に改善が必要かを示すのに役立ちます。

いつものように、あなたはソースコードhttps://github.com/eugenp/tutorials/tree/master/spring-cloud/spring-cloud-bootstrap[Githubで動く]を見つけることができます。