Stackdriver Trace gebruiken met Zipkin

In deze handleiding wordt een Zipkin-server gebruikt om traceringen van Zipkin-clients te ontvangen en deze traceringen door te sturen naar Stackdriver Trace voor analyse.

De Zipkin-server is nuttig voor twee groepen mensen: ontwikkelaars die Stackdriver Trace willen gebruiken en waarvan de apps niet zijn geschreven in een taal of framework ondersteund door officiële bibliotheken, en eigenaars van apps die al zijn geïnstrumenteerd met Zipkin en die geen eigen traceringsbackend willen uitvoeren of toegang willen hebben tot de geavanceerde analysetools van Stackdriver Trace.

Deze handleiding bevat instructies voor drie verschillende scenario's:

Een container-image gebruiken om uw server in te stellen

Een container-image van de Stackdriver Trace Zipkin Collector is beschikbaar op GitHub. Deze opslagplaats bevat de Docker-builddefinitie en voegt GCP-ondersteuning toe aan de basis-image van Zipkin Docker.

U kunt dit op de containerhost van uw keuze uitvoeren.

Ga als volgt te werk om de image op te halen:

docker pull gcr.io/stackdriver-trace-docker/zipkin-collector

U moet ook uw Zipkin-tracers configureren.

Een JAR gebruiken op Google Compute Engine om uw server in te stellen

Als u de collector op Google Compute Engine wilt configureren, neemt u het .jar-bestand over van Maven en voert u het uit op een nieuwe VM.

Een project maken of selecteren en facturering inschakelen

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

  2. In the Cloud Console, on the project selector page, select or create a Cloud project.

    Go to the project selector page

  3. Zorg dat facturering is ingeschakeld voor uw project.

    Meer informatie over het inschakelen van facturering

Een Compute Engine-instantie maken

Voor het maken van uw instantie raden we de standaard Debian GNU/Linux-image aan.

Selecteer het standaard Compute Engine-serviceaccount wanneer daarom wordt gevraagd. Custom serviceaccounts werken ook als ze de rol Project Editor hebben gekregen.

  1. In the Cloud Console, go to the VM Instances page.

    Go to the VM Instances page

  2. Click Create instance.
  3. Click Create to create the instance.

Het script uitvoeren

Voer het volgende script uit. Als u een door Google geleverde Linux-image gebruikt, kunt u dit rechtstreeks in de Cloud Console configureren als een opstartscript. Hierdoor wordt de JAR automatisch opgehaald bij Maven.

set -e
set -v

# Talk to the metadata server to get the project id
PROJECT_ID=$(curl -s "http://metadata.google.internal/computeMetadata/v1/project/project-id" -H "Metadata-Flavor: Google")

apt-get update
apt-get install -yq openjdk-8-jre-headless

wget -O collector.jar 'https://search.maven.org/remote_content?g=com.google.cloud.trace.adapters.zipkin&a=collector&v=LATEST'

PROJECT_ID=$PROJECT_ID java -jar collector.jar

De firewall configureren

Als de collector telemetrie ontvangt van tracers die buiten Google Cloud Platform worden gehost, configureert u de firewall van uw project om TCP-verkeer op poort 9411 te accepteren.

Zipkin-tracers configureren

Volg de instructies in het algemene gedeelte Zipkin-tracers configureren.

De server uitvoeren buiten Google Cloud Platform

Ga als volgt te werk als u de collector buiten Google Cloud wilt bouwen en uitvoeren, bijvoorbeeld op een VM op Amazon Elastic Cloud Compute of een fysieke server die op locatie wordt uitgevoerd:

Een project maken of selecteren

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

  2. In the Cloud Console, on the project selector page, select or create a Cloud project.

    Go to the project selector page

Een factureringsaccount is niet vereist, omdat de collector niet wordt uitgevoerd op Google-resources.

Een serviceaccount maken

Ga als volgt te werk als u wilt dat uw service de Stackdriver Trace API kan verifiëren:

  1. Maak een serviceaccount.
    1. Zorg ervoor dat het nieuwe serviceaccount de rol Project Editor heeft, zodat het gegevens naar de Trace API kan schrijven.
    2. Selecteer Een nieuwe privésleutel verstrekken en kiest JSON.
    3. Sla het bestand met de JSON-gegevens op in een map op de computer waarop de collectorservice wordt uitgevoerd.

De code ontwerpen

  1. Download de nieuwste code van de hoofdvertakking van het Stackdriver Trace Zipkin Collector-project op GitHub. Dit kunt u op twee manieren doen:
  2. Bouw de code: mvn package
  3. Configureer inloggegevens door de omgevingsvariabelen GOOGLE_APPLICATION_CREDENTIALS en PROJECT_ID in te stellen door het volgende script uit te voeren in de werkmap van de opslagplaats. Vervang de tijdelijke aanduidingen door uw eigen specifieke waarden:
    export GOOGLE_APPLICATION_CREDENTIALS="/path/to/credentials.json" PROJECT_ID="my_project_id"
  4. Voer het gegenereerde JAR-bestand uit: java -jar collector/target/collector-*.jar
    1. Indien gewenst, kunt u deze JAR configureren om bij het opstarten van het systeem te worden uitgevoerd.

De firewall configureren

Configureer uw netwerkconfiguratie om TCP-verkeer op poort 9411 door te laten naar de machine waarop de Zipkin-collector wordt uitgevoerd.

Als u traceringen indient van apps die buiten de firewall worden gehost, moet u er rekening mee houden dat de Zipkin-tracer naar collectorverkeer niet wordt versleuteld en geverifieerd. Verbindingen tussen de Stackdriver Trace Zipkin Collector en de Stackdriver Trace API worden wel versleuteld en geverifieerd, evenals verbindingen afkomstig van de Stackdriver Trace-instrumentatiebibliotheken.

Zipkin-tracers configureren

Volg de instructies in het algemene gedeelte Zipkin-tracers configureren.

Hoe u Zipkin-tracers configureert

Ongeacht hoe u de Stackdriver Trace Zipkin Collector host, u moet uw Zipkin-tracers configureren om er gegevens naartoe te kunnen sturen.

Er kan naar de collector worden verwezen aan de hand van zijn interne IP-adres, zijn externe IP-adres (als deze traceringen ontvangt van apps die buiten Google Cloud Platform worden gehost), of de hostnaam. Elke Zipkin-tracer wordt anders geconfigureerd. Als u bijvoorbeeld wilt verwijzen naar een Brave-tracer bij een collector met het IP-adres 1.2.3.4, moeten de volgende regels aan uw Java-codebase worden toegevoegd:

Reporter reporter = AsyncReporter.builder(OkHttpSender.create("1.2.3.4:9411/api/v1/spans")).build();
Brave brave = Brave.Builder("example").reporter(reporter).build()

Veelgestelde vragen

Vraag: Wat zijn de beperkingen?

Deze release heeft twee bekende beperkingen:

  1. Zipkin-tracers moeten de juiste Zipkin-tijd- en duursemantiek ondersteunen.

  2. Zipkin-tracers en de Stackdriver Trace-instrumentatiebibliotheken kunnen bereikwaarden niet aan dezelfde traceringen toevoegen. Dit houdt in dat traceringen die in de ene bibliotheek zijn vastgelegd, geen bereikwaarden bevatten voor services die in het andere type bibliotheek zijn geïnstrumenteerd. Voorbeeld:

    Verzoeken aan de Node.js-web-app worden getraceerd met de Zipkin-bibliotheek en verzonden naar Stackdriver Trace. Deze traceringen bevatten echter geen bereikwaarden die zijn gegenereerd in de API-app of voor de RPC-aanroepen naar de database. Dit komt doordat Zipkin en Stackdriver Trace verschillende indelingen gebruiken voor het propageren van traceercontext tussen services.

    Daarom raden we aan dat u voor projecten waarbij u die Stackdriver Trace wilt gebruiken, uitsluitend Zipkin-compatibele tracers gebruikt, samen met de Zipkin-collector, of instrumentatiebibliotheken gebruikt die Stackdriver Trace als systeemeigen functie gebruiken (zoals de officiële Node.js-, Java- of Go-bibliotheken).

Vraag: Werkt dit als een volledige Zipkin-server?

Nee, omdat de initiële release alleen schrijfbewerkingen ondersteunt.

Vraag: Kan ik Stackdriver Trace gebruiken om mijn AWS-, lokale of hybride apps te analyseren of is dit uitsluitend voor services die worden uitgevoerd op Google Cloud Platform?

Dit wordt nu al bij verschillende project gedaan. Stackdriver Trace analyseert alle gegevens die via de API worden ingediend, ongeacht waar de geïnstrumenteerde service wordt gehost. Dit betekent dat traceringen en bereikwaarden die zijn verzameld uit de Stackdriver Trace-instrumentatiebibliotheken of via de Zipkin-collector, overal kunnen worden gebruikt.