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’.
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.
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ó.
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.
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.
A mudança de código é muito simples. Tudo o que você precisa fazer é definir o endpoint e o protocolo OLTP corretamente.
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.
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á.
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";
É muito difícil de encontrar, então acompanhe com atenção.
Lançar nuvem Grafana
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