Maison > Article > interface Web > NestJS + Opentelemetry (Grafana Cloud)
La possibilité de visualiser les traces en configurant Opentelemetry dans l'application et en lançant localement Otel Collector, Loki, Tempo et Grafana a été complétée dans le post précédent.
Il ne reste plus qu'à examiner le traçage non seulement localement mais également dans l'environnement de production réel.
Pour cela, il faut « enregistrer les journaux et les traces sur le cloud ».
Vous pouvez placer un collecteur Opentelemetry (+ Loki, Tempo, etc.) quelque part et définir l'adresse OLTP envoyée par l'application à ce collecteur.
Alternativement, pour une meilleure évolutivité, il existe une méthode d'installation d'une passerelle pour l'équilibrage de charge et la réception de l'OLTP de la passerelle et sa transmission aux collecteurs internes.
Grafana Alloy est un collecteur de télémétrie ouverte configurable fourni par Grafana.
Si vous déployez avec Docker ou avez déjà utilisé Kubernates, vous pouvez l'ajouter en tant que nouveau nœud.
Il s'agit d'une méthode d'envoi d'OLTP directement au backend (Loki, Tempo, Jaeger, etc.) sans collecteur.
L'avantage est que Loki et Tempo de Grafana Cloud peuvent être utilisés comme backend, afin qu'ils puissent être rapidement introduits sans déploiement.
Au lieu de cela, les avantages tels que l'évolutivité et le traitement qui peuvent être obtenus en utilisant Collector disparaissent.
Je voulais déployer et utiliser Collector de manière sympa, mais je pensais que cela prendrait trop de temps de déployer et de configurer Collector séparément dans un environnement qui n'utilise pas Kubernetes, j'ai donc choisi de le lancer directement avec Grafana Nuage
En fait, nous l'introduisons à des fins d'expérimentation, et comme il s'agit d'une startup, l'évolutivité n'est pas très importante (puisqu'il s'agit de journalisation) et plus que tout, cela peut être fait rapidement, donc ce n'est pas une décision fantaisiste, mais c'est une bonne décision.
Le changement de code est très simple. Tout ce que vous avez à faire est de définir correctement le point de terminaison et le protocole OLTP.
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, }, });
Le point final (grafana cloud) qui recevra la trace que nous allons filmer reçoit le protocole http/protobuf, il doit donc être importé et utilisé depuis exportateur-trace-otlp-proto.
const logExporter = new OTLPLogExporter({ url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT + "/v1/logs", headers: { Authorization: process.env.OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION, }, });
Logger utilisait déjà le protocole Http, donc OTLPLogExporter peut être utilisé tel quel.
Veuillez noter que dans NestJS, les variables d'environnement sont définies lors de l'initialisation de l'AppModule, elles ne peuvent donc pas être utilisées dans les paramètres du traceur et de l'enregistreur qui doivent être complétés avant de créer l'AppModule.
Si vous utilisez dotenv, vous devez d'abord l'appeler.
// 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";
C'est assez difficile à trouver, alors suivez attentivement.
Enregistrez les variables d'environnement et exécutez.
Cliquez sur Grafana Launch dans Grafana et regardez les données dans Explore
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!