Heim > Web-Frontend > js-Tutorial > Hauptteil

NestJS + Opentelemetry (Grafana Cloud)

WBOY
Freigeben: 2024-08-19 17:14:38
Original
788 Leute haben es durchsucht

Verwendung von Opentelemetry in einer Produktionsumgebung

Die Möglichkeit, Spuren anzuzeigen, indem Opentelemetry in der Anwendung eingerichtet und Otel Collector, Loki, Tempo und Grafana lokal gestartet werden, wurde im vorherigen Beitrag abgeschlossen.

Jetzt müssen wir uns nur noch mit der Rückverfolgung nicht nur vor Ort, sondern auch in der tatsächlichen Produktionsumgebung befassen.

Dafür ist das „Speichern von Protokollen und Spuren in der Cloud“ erforderlich.

Methoden

1. Stellen Sie Opentelemetry Collector bereit

Sie können irgendwo einen Opentelemetry Collector (+ Loki, Tempo usw.) platzieren und die von der Anwendung an diesen Collector gesendete OLTP-Adresse festlegen.

Alternativ gibt es für eine bessere Skalierbarkeit eine Methode, ein Gateway für den Lastausgleich zu installieren und OLTP vom Gateway zu empfangen und an die internen Collectors weiterzuleiten.

2. Installieren Sie Grafana Alloy und stellen Sie es bereit

Grafana Alloy ist ein konfigurierbarer OpenTelemetry-Kollektor von Grafana.

Wenn Sie mit Docker oder zuvor verwendeten Kubernates bereitstellen, können Sie es als neuen Knoten hinzufügen.

3. Schießen Sie direkt ohne Collector

Dies ist eine Methode zum Senden von OLTP direkt an das Backend (Loki, Tempo, Jaeger usw.) ohne Collector.

Der Vorteil besteht darin, dass Loki und Tempo von Grafana Cloud als Backend verwendet werden können, sodass sie ohne Bereitstellung schnell eingeführt werden können.

Stattdessen verschwinden die Vorteile wie Skalierbarkeit und Verarbeitung, die durch die Verwendung von Collector erzielt werden können.

Angenommen: Schießen ohne Sammler

Ich wollte Collector auf eine coole Art und Weise bereitstellen und verwenden, dachte aber, dass es zu viel Zeit in Anspruch nehmen würde, Collector separat in einer Umgebung bereitzustellen und einzurichten, die kein Kubernetes verwendet, also habe ich mich dafür entschieden, es einfach direkt mit Grafana zu starten Wolke.

Eigentlich führen wir es zum Experimentieren ein, und da es sich um ein Startup handelt, ist die Skalierbarkeit nicht sehr wichtig (da es sich um Protokollierung handelt) und vor allem kann es schnell durchgeführt werden, es ist also keine ausgefallene Entscheidung, aber Es ist eine gute Entscheidung.

Kabel

Codeänderungen sind sehr einfach. Sie müssen lediglich den OLTP-Endpunkt und das Protokoll richtig einstellen.

Tracer

import { OTLPTraceExporter as PROTOOTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto";

const oltpTraceExporter = new PROTOOTLPTraceExporter({
  url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT + "/v1/traces",
  headers: {
    Authorization: process.env.OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION,
  },
});
Nach dem Login kopieren

Der Endpunkt (Grafana-Cloud), der den Trace empfängt, den wir aufnehmen werden, empfängt das http/protobuf-Protokoll, daher muss es von exporter-trace-otlp-proto importiert und verwendet werden.

Logger

const logExporter = new OTLPLogExporter({
  url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT + "/v1/logs",
  headers: {
    Authorization: process.env.OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION,
  },
});
Nach dem Login kopieren

Logger verwendete bereits das HTTP-Protokoll, sodass OTLPLogExporter unverändert verwendet werden kann.

Umgebungsvariable

Bitte beachten Sie, dass in NestJS Umgebungsvariablen beim Initialisieren des AppModule festgelegt werden, sodass sie nicht in den Tracer- und Logger-Einstellungen verwendet werden können, die vor der Erstellung des AppModule abgeschlossen werden müssen.

Wenn Sie dotenv verwenden, müssen Sie es zuerst aufrufen.

// eslint-disable-next-line import/order
import { config } from "dotenv";
// eslint-disable-next-line import/order
import { getEnvFilePath } from "@/lib/utils/env-loader";
config(); // load env before loading tracer and logger

// eslint-disable-next-line import/order
import otelSDK from "./tracer"; // otelSDK should be imported before any other imports
// eslint-disable-next-line import/order
import createLogger from "./logger";
Nach dem Login kopieren

Wert der Umgebungsvariablen

Es ist ziemlich schwer zu finden, also folgen Sie ihm sorgfältig.

  1. Greifen Sie auf Grafana
  2. zu
  3. Klicken Sie oben rechts auf „Mein Konto“
  4. Klicken Sie auf den Stack-Namen unter GRAFANA CLOUD in der linken Navigationsleiste (falls nicht vorhanden, erstellen Sie einen neuen Stack)
  5. Drücken Sie auf dem Bildschirm „Stack verwalten“ auf „Konfigurieren“ für die Opentelmetry-Karte.
  6. Hier erhalten Sie OTEL_EXPORTER_OTLP_ENDPOINT,
  7. Erstellen Sie einen Schlüssel, indem Sie unten im Passwort/API-Token auf Schlüssel generieren klicken
  8. Der Teil, der mit „Basic“ in OTEL_EXPORTER_OTLP_HEADERS im Feld „Umgebungsvariablen“ beginnt, ist der Wert der Variablen OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION.

Umgebungsvariablen registrieren und ausführen.

Ausführen von Grafana Cloud

Klicken Sie in Grafana auf „Grafana starten“ und sehen Sie sich die Daten in „Erkunden“ an

NestJS + Opentelemetry (Grafana Cloud)

Das obige ist der detaillierte Inhalt vonNestJS + Opentelemetry (Grafana Cloud). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage