Maison  >  Article  >  interface Web  >  NestJS + Opentelemetry (Grafana Cloud)

NestJS + Opentelemetry (Grafana Cloud)

WBOY
WBOYoriginal
2024-08-19 17:14:38762parcourir

Utiliser Opentelemetry dans un environnement de production

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 ».

méthodes

1. Déployer le collecteur Opentelemetry

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.

2. Installez et déployez Grafana Alloy

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.

3. Tirez directement sans Collector

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.

Adopté : Tournage sans collectionneur

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.

corde

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.

Traceur

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.

Enregistreur

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.

variable d'environnement

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

Valeur de la variable d'environnement

C'est assez difficile à trouver, alors suivez attentivement.

  1. Accédez à Grafana
  2. Cliquez sur Mon compte dans le coin supérieur droit
  3. Cliquez sur le nom de la pile sous GRAFANA CLOUD dans la barre de navigation de gauche (s'il n'existe pas, créez une nouvelle pile)
  4. Appuyez sur configurer pour la carte Opentelmetry sur l'écran « Gérer votre pile »
  5. Ici, vous pouvez obtenir OTEL_EXPORTER_OTLP_ENDPOINT,
  6. Créez une clé en cliquant sur Générer une clé dans le mot de passe/jeton API ci-dessous
  7. La partie commençant par Basic dans OTEL_EXPORTER_OTLP_HEADERS dans le champ Variables d'environnement est la valeur de la variable OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION.

Enregistrez les variables d'environnement et exécutez.

Exécuter Grafana Cloud

Cliquez sur Grafana Launch dans Grafana et regardez les données dans Explore

NestJS + Opentelemetry (Grafana Cloud)

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn