"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > NestJS + Opentelemetry (Nube Grafana)

NestJS + Opentelemetry (Nube Grafana)

Publicado el 2024-08-22
Navegar:607

Usando Opentelemetry en un entorno de producción

La configuración de Opentelemetry en la aplicación y el lanzamiento de Otel Collector, Loki, Tempo y Grafana localmente para ver el seguimiento se completaron en la publicación anterior.

Ahora todo lo que queda es analizar el rastreo no solo localmente sino también en el entorno de producción real.

Lo que se necesita para eso es "guardar registros y seguimientos en la nube".

metodos

1. Implementar el recopilador Opentelemetry

Haga flotar un recopilador Opentelemetry (Loki, Tempo, etc.) en algún lugar y establezca la dirección OLTP enviada por la aplicación a este recopilador.

Como alternativa, para una mejor escalabilidad, existe un método para instalar una puerta de enlace para equilibrar la carga, recibir OLTP desde la puerta de enlace y pasarlo a recopiladores internos.

2. Instalar e implementar Grafana Alloy

Grafana Alloy es un recopilador de telemetría abierta configurable proporcionado por Grafana.

Si implementas con Docker o Kubernates usados ​​anteriormente, puedes agregarlo como un nuevo nodo.

3. Dispara directamente sin coleccionista.

Este es un método para enviar OLTP directamente al backend (Loki, Tempo, Jaeger, etc.) sin un recopilador.

Loki y Tempo de Grafana Cloud se pueden utilizar como backend, por lo que tiene la ventaja de introducirse rápidamente sin implementación.

En cambio, las ventajas como la escalabilidad y el procesamiento que se pueden obtener utilizando Collector desaparecen.

Adoptado: Disparos sin coleccionista.

Quería implementar y usar Collector de una manera interesante, pero pensé que llevaría demasiado tiempo implementar y configurar Collector por separado en un entorno donde no se usaba Kubernetes, así que elegí ejecutarlo directamente con Grafana. Nube.

En realidad, lo estamos introduciendo para experimentar, y como es una startup, la escalabilidad no es muy importante (ya que es registro) y podemos hacerlo rápidamente, por lo que no es una decisión elegante, pero es una buena decisión.

cable

El cambio de código es muy sencillo. Todo lo que necesita hacer es configurar el punto final y el protocolo OLTP correctamente.

Trazador

importar { OTLPTraceExporter como PROTOOTLPTraceExporter } desde "@opentelemetry/exporter-trace-otlp-proto"; const oltpTraceExporter = nuevo PROTOOTLPTraceExporter({ URL: proceso.env.OTEL_EXPORTER_OTLP_ENDPOINT "/v1/traces", encabezados: { Autorización: proceso.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,
  },
});
El punto final (nube de grafana) que recibirá el seguimiento que dispararemos recibe el protocolo http/protobuf, por lo que debe importarse y usarse desde exporter-trace-otlp-proto.

registrador

const logExporter = nuevo OTLPLogExporter({ URL: proceso.env.OTEL_EXPORTER_OTLP_ENDPOINT "/v1/logs", encabezados: { Autorización: proceso.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 ya estaba usando el protocolo Http, por lo que OTLPLogExporter se puede usar tal cual.

variables de entorno

Tenga en cuenta que en NestJS, las variables de entorno se configuran al inicializar AppModule, por lo que no se pueden usar en la configuración del rastreador y registrador que debe completarse antes de crear AppModule

.

Si estás usando dotenv, debes llamarlo primero.


// eslint-disable-importación/orden de siguiente línea importar {config} desde "dotenv"; // eslint-disable-importación/orden de siguiente línea importar { getEnvFilePath } desde "@/lib/utils/env-loader"; configuración(); // carga env antes de cargar tracer y logger // eslint-disable-importación/orden de siguiente línea importar otelSDK desde "./tracer"; // otelSDK debe importarse antes que cualquier otra importación // eslint-disable-importación/orden de siguiente línea importar createLogger desde "./logger";
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,
  },
});
Valor de la variable de entorno

Es bastante difícil de encontrar, así que síguelo con atención.

    Acceder a Grafana
  1. Haga clic en Mi cuenta en la esquina superior derecha
  2. Haga clic en el nombre de la pila en GRAFANA CLOUD en la barra de navegación izquierda (si no existe, cree una nueva pila)
  3. En la pantalla 'Administrar tu pila', presiona configurar para la tarjeta Opentelmetry
  4. Aquí puedes obtener OTEL_EXPORTER_OTLP_ENDPOINT,
  5. Haga clic en Generar clave en Contraseña/Token API a continuación para crear una clave
  6. En el campo Variables de entorno, la parte que comienza con Básico en OTEL_EXPORTER_OTLP_HEADERS es el valor de la variable OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION
  7. .
Registrar variables de entorno y ejecutar

.

Lanzar la nube de Grafana

Haga clic en Grafana Launch en Grafana y observe los datos en Explore

NestJS   Opentelemetry (Grafana Cloud)

Declaración de liberación Este artículo se reproduce en: https://dev.to/siisee11/nestjs-opentelemetry-grafana-cloud-328f?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3