Spring Cloud - Suchdienste mit Zipkin

1. Überblick

In diesem Artikel fügen wir Zipkin zu unserem Link hinzu:/spring-cloud-sicherung-dienstleistungen[spring-cloud-Projekt]. Zipkin ist ein Open Source-Projekt, das Mechanismen zum Senden, Empfangen, Speichern und Visualisieren von Spuren bietet. Auf diese Weise können wir die Aktivitäten zwischen Servern miteinander in Beziehung setzen und ein klareres Bild darüber erhalten, was genau in unseren Diensten passiert.

Dieser Artikel ist kein Einführungsartikel zu verteiltem Tracing oder einer Frühlingswolke. Wenn Sie weitere Informationen zum verteilten Tracing wünschen, lesen Sie unsere Einführung zu spring-sleuth .

2. Zipkin-Service

Unser Zipkin -Service dient als Speicher für alle unsere Spannweiten. Jede Spanne wird an diesen Dienst gesendet und zur späteren Identifizierung in Spuren gesammelt.

2.1. Konfiguration

Erstellen Sie ein neues Spring Boot-Projekt, und fügen Sie diese Abhängigkeiten zu pom.xml hinzu:

<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>

Als Referenz: Sie finden die neueste Version auf 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]).

Versionen der Abhängigkeiten werden von spring-boot-starter-parent vererbt.

2.2. Aktivieren von Zipkin Server

Um den Zipkin Server zu aktivieren, müssen wir der Hauptanwendungsklasse einige Anmerkungen hinzufügen:

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

Die neue Anmerkung @ EnableZipkinServer richtet diesen Server so ein, dass er auf eingehende Spannweiten wartet und als unsere Benutzeroberfläche für die Abfrage dient.

2.3. Aufbau

Zunächst erstellen wir eine Datei namens bootstrap.properties in src/main/resources . Denken Sie daran, dass diese Datei benötigt wird, um unsere Konfiguration von unserem Konfigurationsserver abzurufen.

Fügen wir diese Eigenschaften hinzu:

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/----

Nun fügen wir unserem Konfigurations-Repo eine Konfigurationsdatei hinzu, die sich unter __c: \ Users \\ {Benutzername} \ __ unter Windows oder __/Users/\ {Benutzername}/__ on **  nix befindet.

Fügen Sie in diesem Verzeichnis eine Datei mit dem Namen __zipkin.properties__ hinzu und fügen Sie folgenden Inhalt hinzu:

[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

Denken Sie daran, die Änderungen in diesem Verzeichnis festzuschreiben, damit der Konfigurationsdienst die Änderungen erkennt und die Datei lädt.

====  **  2.4. Lauf**

Lassen Sie uns nun unsere Anwendung ausführen und zu http://localhost: 9411 navigieren. Wir sollten mit der Homepage von __Zipkin's__ begrüßt werden:

link:/uploads/zipkinhomepage-1-1.png%201595w[]

Großartig! Jetzt können wir unseren Services einige Abhängigkeiten und Konfigurationen hinzufügen, die wir verfolgen möchten.

===  **  3. Dienstkonfiguration **

Das Setup für die Ressourcenserver ist ziemlich gleich. In den folgenden Abschnitten werden wir detailliert beschreiben, wie Sie den __book-service einrichten. Wir erläutern die erforderlichen Änderungen, um diese Updates für den __rating-service__ und __gateway-service ** **  anzuwenden.

====  **  3.1. Konfiguration**

Um das Senden von Übersichten an unseren __Zipkin__-Server zu beginnen, fügen wir diese Abhängigkeit zu unserer __pom.xml__-Datei hinzu:

[source,xml,gutter:,true]

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

Als Referenz: Sie finden die neueste Version auf __Maven Central__ (https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.springframework.cloud%22%20A%3A% 22spring-cloud-starter-zipkin% 22[spring-cloud-starter-zipkin]).

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

Wir müssen etwas Konfiguration hinzufügen, damit **  book-service **  __Eureka__ verwendet, um unseren __Zipkin__-Service zu finden. Öffnen Sie __BookServiceApplication.java__ und fügen Sie den folgenden Code der Datei hinzu:

[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);
            }
        }
    };
}
Die obige Konfiguration registriert einen benutzerdefinierten __ZipkinSpanReporter__, der seine URL von eureka erhält. Dieser Code verfolgt auch die vorhandene URL und aktualisiert den __HttpZipkinSpanReporter__ nur, wenn sich die URL ändert. Unabhängig davon, wo wir unseren Zipkin-Server einsetzen, können wir ihn immer finden, ohne den Dienst neu zu starten.

Wir importieren auch die standardmäßigen Zipkin-Eigenschaften, die vom Spring Boot geladen werden, und verwenden sie zur Verwaltung unseres benutzerdefinierten Reporters.

====  **  3.3. Aufbau**

Nun fügen wir unserer __book-service.properties__-Datei im config-Repository etwas Konfiguration hinzu:

[source,text,gutter:,true]

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

__Zipkin__ arbeitet mit Sampling-Aktionen auf einem Server. Indem wir __spring.sleuth.sampler.percentage__ auf 1,0 setzen, setzen wir die Abtastrate auf 100%. Das Überspringmuster ist einfach ein Regex, der zum Ausschließen von Bereichen verwendet wird, deren Name übereinstimmt.

Das Überspringmuster verhindert, dass alle Bereiche gemeldet werden, die mit dem Wort "Bereinigung" beginnen. Hiermit werden Spannweiten gestoppt, die von der Frühjahrssitzungscodebasis stammen.

====  **  3.4. Bewertungsservice **

Führen Sie die gleichen Schritte aus dem Abschnitt __book-service__ aus, und wenden Sie die Änderungen auf die entsprechenden Dateien für __rating-service.__ an.

====  **  3.5. Gateway-Dienst **

Folgen Sie den gleichen Schritten **  book-service ** . Fügen Sie jedoch beim Hinzufügen der Konfiguration zum Gateway ____. Properties____ diese hinzu:

[source,text,gutter:,true]

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

Dadurch wird der Gateway-Dienst so konfiguriert, dass keine Spannweiten über das Favicon oder die Frühjahrssitzung gesendet werden.

====  **  3.6. Lauf**

Wenn Sie dies noch nicht getan haben, starten Sie die Dienste **  config ** , **  discovery ** , **  gateway ** , **  book ** , **  rating **  und **  zipkin ** .

Navigieren Sie zu http://localhost: 8080/book-service/books.

Öffnen Sie eine neue Registerkarte und navigieren Sie zu http://localhost: 9411. Wählen Sie den Buchservice aus und drücken Sie die Taste "Spuren suchen". Sie sollten eine Spur in den Suchergebnissen sehen. Klicken Sie auf diese Spur des Öffnens:

link:/uploads/zipkintrace-1-1-1024x110.png%201024w[]

Auf der Trace-Seite sehen wir die Anforderung nach Service unterteilt. Die ersten beiden Bereiche werden vom __gateway__ erstellt, und der letzte wird vom __book-service erstellt. Dies zeigt uns, wie viel Zeit die Anforderung für den __book-service (__ 18.379 ms) und für das __gateway (__ 87.961 ms) aufgewendet hat .

===  **  4. Fazit**

Wir haben gesehen, wie einfach es ist, __Zipkin__ in unsere Cloud-Anwendung zu integrieren.

Dies gibt uns einen wichtigen Einblick, wie Kommunikation durch unsere Anwendung verläuft. Mit der zunehmenden Komplexität unserer Anwendung können wir mit Zipkin dringend benötigte Informationen darüber erhalten, wo die Anfragen ihre Zeit verbringen. Auf diese Weise können wir feststellen, wo sich die Dinge verlangsamen und welche Bereiche unserer Anwendung verbessert werden müssen.

Den Quellcode finden Sie wie immer unter https://github.com/eugenp/tutorials/tree/master/spring-cloud/spring-cloud-bootstrap auf Github].