„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > NestJS + Opentelemetry (Grafana Cloud)

NestJS + Opentelemetry (Grafana Cloud)

Veröffentlicht am 22.08.2024
Durchsuche:753

Verwendung von Opentelemetry in einer Produktionsumgebung

Das Einrichten von Opentelemetry in der Anwendung und das lokale Starten von Otel Collector, Loki, Tempo und Grafana zur Anzeige der Ablaufverfolgung wurde im vorherigen Beitrag abgeschlossen.

Jetzt müssen wir uns nur noch mit dem Tracing nicht nur lokal, 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

Verschieben Sie irgendwo einen Opentelemetry Collector (Loki, Tempo usw.) und legen Sie die OLTP-Adresse fest, die von der Anwendung an diesen Collector gesendet wird.

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

2. Installieren Sie Grafana Alloy und stellen Sie es bereit

Grafana Alloy ist ein konfigurierbarer OpenTelemetry-Kollektor, der von Grafana bereitgestellt wird.

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

3. Schießen Sie direkt ohne Collector

Dies ist eine Methode, OLTP ohne Kollektor direkt an das Backend (Loki, Tempo, Jaeger usw.) zu senden.

Loki und Tempo von Grafana Cloud können als Backend verwendet werden und bieten daher den Vorteil einer schnellen Einführung ohne Bereitstellung.

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, in der Kubernetes nicht verwendet wurde, also habe ich beschlossen, 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 wir können es schnell machen, also ist es 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", Überschriften: { Autorisierung: process.env.OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION, }, });
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,
  },
});
Der Endpunkt (Grafana-Cloud), der den von uns aufgenommenen Trace empfängt, empfängt das http/protobuf-Protokoll, daher muss es aus exporter-trace-otlp-proto importiert und verwendet werden.

Logger

const logExporter = new OTLPLogExporter({ URL: process.env.OTEL_EXPORTER_OTLP_ENDPOINT "/v1/logs", Überschriften: { Autorisierung: process.env.OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION, }, });
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,
  },
});
Logger verwendete bereits das HTTP-Protokoll, daher kann OTLPLogExporter unverändert verwendet werden.

Umgebungsvariablen

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 dem Erstellen des AppModule abgeschlossen werden müssen.

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


// eslint-disable-next-line import/order import { config } aus „dotenv“; // eslint-disable-next-line import/order import { getEnvFilePath } from „@/lib/utils/env-loader“; config(); // Umgebung laden, bevor Tracer und Logger geladen werden // eslint-disable-next-line import/order otelSDK aus „./tracer“ importieren; // otelSDK sollte vor allen anderen Importen importiert werden // eslint-disable-next-line import/order importiere createLogger aus „./logger“;

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

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

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

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

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/siisee11/nestjs-opentelemetry-grafana-cloud-328f?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3