"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > NestJS + Opentelemetry (Grafana Cloud)

NestJS + Opentelemetry (Grafana Cloud)

Publié le 2024-08-22
Parcourir:997

Utiliser Opentelemetry dans un environnement de production

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

méthodes

1. Déployer le collecteur Opentelemetry

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.

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.

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.

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

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

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.

variables 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éder à 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. Sur l'écran « Gérer votre pile », appuyez sur configurer pour la carte Opentelmetry
  5. Ici, vous pouvez obtenir OTEL_EXPORTER_OTLP_ENDPOINT,
  6. Cliquez sur Générer une clé dans le mot de passe/jeton API ci-dessous pour créer une clé
  7. Dans le champ Variables d'environnement, la partie commençant par Basic dans OTEL_EXPORTER_OTLP_HEADERS est la valeur de la variable OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION

Enregistrez les variables d'environnement et exécutez

Lancer Grafana Cloud

Cliquez sur Grafana Launch dans Grafana et examinez les données dans Explorer

NestJS   Opentelemetry (Grafana Cloud)

Déclaration de sortie Cet article est reproduit sur : https://dev.to/siisee11/nestjs-opentelemetry-grafana-cloud-328f?1 En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

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