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.
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.
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.
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.
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.
Codeänderungen sind sehr einfach. Sie müssen lediglich den OLTP-Endpunkt und das Protokoll richtig einstellen.
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 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.
const logExporter = new OTLPLogExporter({ url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT + "/v1/logs", headers: { Authorization: process.env.OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION, }, });
Logger verwendete bereits das HTTP-Protokoll, sodass OTLPLogExporter unverändert verwendet werden kann.
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";
Es ist ziemlich schwer zu finden, also folgen Sie ihm sorgfältig.
Umgebungsvariablen registrieren und ausführen.
Klicken Sie in Grafana auf „Grafana starten“ und sehen Sie sich die Daten in „Erkunden“ an
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!