La configuration d'Opentelemetry dans l'application et le lancement local d'Otel Collector, Loki, Tempo et Grafana pour afficher la trace ont été effectués dans le message 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 ».
Faites flotter un collecteur Opentelemetry (Loki, Tempo, etc.) quelque part et définissez l'adresse OLTP envoyée par l'application à ce collecteur.
Alternativement, pour une meilleure évolutivité, il existe une méthode permettant d'installer une passerelle pour l'équilibrage de charge, de recevoir OLTP de la passerelle et de le transmettre 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.
Loki et Tempo de Grafana Cloud peuvent être utilisés comme backend, ils ont donc l'avantage d'ê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 où Kubernetes n'était pas utilisé, 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 d'une journalisation) et nous pouvons le faire rapidement, donc ce n'est pas une décision sophistiquée, 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 de terminaison (grafana cloud) qui recevra la trace que nous allons filmer reçoit le protocole http/protobuf, il doit donc être importé et utilisé depuis exporter-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 examinez les données dans Explorer
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3