"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > NestJS + Opentelemetria (Grafana Cloud)

NestJS + Opentelemetria (Grafana Cloud)

Publicado em 2024-08-22
Navegar:830

Usando Opentelemetry em um ambiente de produção

A configuração do Opentelemetry no aplicativo e o lançamento do Otel Collector, Loki, Tempo e Grafana localmente para visualizar o rastreamento foram concluídos na postagem anterior

Agora tudo o que resta é observar o rastreamento não apenas localmente, mas também no ambiente de produção real.

O que é necessário para isso é ‘salvar logs e rastreamentos na nuvem’.

métodos

1. Implante o coletor Opentelemetry

Coloque um Coletor Opentelemetry (Loki, Tempo, etc.) em algum lugar e defina o endereço OLTP enviado pela aplicação para este Coletor.

Alternativamente, para melhor escalabilidade, existe um método de instalação de um gateway para balanceamento de carga, recebendo OLTP do gateway e passando-o para coletores internos.

2. Instale e implante o Grafana Alloy

Grafana Alloy é um coletor de telemetria aberto configurável fornecido pela Grafana.

Se você implantar com Docker ou Kubernates usado anteriormente, poderá adicioná-lo como um novo nó.

3. Fotografe diretamente sem Collector

Este é um método de enviar OLTP diretamente para o backend (Loki, Tempo, Jaeger, etc.) sem um coletor.

Loki e Tempo do Grafana Cloud podem ser usados ​​​​como backend, por isso tem a vantagem de ser introduzido rapidamente sem implantação.

Em vez disso, as vantagens como escalabilidade e processamento que podem ser obtidas usando o Collector desaparecem.

Adotado: Fotografar sem Coletor

Eu queria implantar e usar o Collector de uma forma legal, mas achei que levaria muito tempo para implantar e configurar o Collector separadamente em um ambiente onde o Kubernetes não era usado, então optei por apenas iniciá-lo diretamente com o Grafana Nuvem.

Na verdade, estamos introduzindo para experimentação, e por ser uma startup, a escalabilidade não é muito importante (já que é logging) e podemos fazer isso rapidamente, então não é uma decisão sofisticada, mas é uma boa decisão.

cordão

A mudança de código é muito simples. Tudo o que você precisa fazer é definir o endpoint e o protocolo OLTP corretamente.

Rastreador

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,
  },
});

O endpoint (nuvem grafana) que receberá o trace que iremos filmar recebe o protocolo http/protobuf, portanto deve ser importado e utilizado do exporter-trace-otlp-proto.

Registrador

const logExporter = new OTLPLogExporter({
  url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT   "/v1/logs",
  headers: {
    Authorization: process.env.OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION,
  },
});

Logger já estava usando o protocolo Http, então OTLPLogExporter pode ser usado como está.

variáveis ​​de ambiente

Observe que no NestJS, as variáveis ​​de ambiente são definidas ao inicializar o AppModule, portanto, não podem ser usadas nas configurações do rastreador e do logger que devem ser concluídas antes de criar o AppModule

.

Se você estiver usando dotenv, você deve chamá-lo primeiro.

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

Valor da variável de ambiente

É muito difícil de encontrar, então acompanhe com atenção.

  1. Acesse o Grafana
  2. Clique em Minha conta no canto superior direito
  3. Clique no nome da pilha em GRAFANA CLOUD na barra de navegação esquerda (se não existir, crie uma nova pilha)
  4. Na tela ‘Gerenciar sua pilha’, pressione configurar para o cartão Opentelmetry
  5. Aqui você pode obter OTEL_EXPORTER_OTLP_ENDPOINT,
  6. Clique em Gerar chave na senha/token de API abaixo para criar uma chave
  7. No campo Variáveis ​​de Ambiente, a parte que começa com Básico em OTEL_EXPORTER_OTLP_HEADERS é o valor da variável OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION.
Registre variáveis ​​de ambiente e execute

Lançar nuvem Grafana

Clique em Grafana Launch no Grafana e veja os dados em Explore

NestJS   Opentelemetry (Grafana Cloud)

Declaração de lançamento Este artigo está reproduzido em: https://dev.to/siisee11/nestjs-opentelemetry-grafana-cloud-328f?1 Se houver alguma infração, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3