«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > NestJS + Opentelemetry (Облако Grafana)

NestJS + Opentelemetry (Облако Grafana)

Опубликовано 22 августа 2024 г.
Просматривать:906

Использование Opentelemetry в производственной среде

Настройка Opentelemetry в приложении и локальный запуск Otel Collector, Loki, Tempo и Grafana для просмотра трассировки завершена в предыдущем посте.

Теперь остается только взглянуть на трассировку не только локально, но и в реальной производственной среде.

Для этого необходимо «сохранять журналы и трассировки в облаке».

методы

1. Развертывание коллектора Opentelemetry.

Разместите куда-нибудь сборщик Opentelemetry (Loki, Tempo и т. д.) и установите адрес OLTP, отправленный приложением этому сборщику.

В качестве альтернативы для лучшей масштабируемости существует метод установки шлюза для балансировки нагрузки, получения OLTP от шлюза и передачи его внутренним сборщикам.

2. Установите и разверните Grafana Alloy.

Grafana Alloy — это настраиваемый сборщик открытых телеметрических данных, предоставляемый Grafana.

Если вы выполняете развертывание с помощью Docker или ранее использовали Kubernates, вы можете добавить его как новый узел.

3. Снимайте напрямую, без коллектора.

Это метод отправки OLTP напрямую на бэкенд (Loki, Tempo, Jaeger и т. д.) без сборщика.

Loki и Tempo Grafana Cloud можно использовать в качестве бэкэнда, поэтому их преимущество заключается в быстром внедрении без развертывания.

Вместо этого исчезают такие преимущества, как масштабируемость и обработка, которые можно получить с помощью Collector.

Принято: Стрельба без коллектора

Мне хотелось развернуть и использовать Collector крутым способом, но я подумал, что отдельное развертывание и настройка Collector в среде, где Kubernetes не используется, займет слишком много времени, поэтому я решил просто запустить его напрямую с помощью Grafana. Облако.

Вообще-то, мы его вводим для экспериментов, и так как это стартап, то масштабируемость не очень важна (так как логирование) и сделать это можно быстро, так что это не замысловатое решение, но хорошее решение.

шнур

Изменить код очень просто. Все, что вам нужно сделать, это правильно настроить конечную точку и протокол OLTP.

Трейсер

import { OTLPTraceExporter as PROTOOTLPTraceExporter } из "@opentelemetry/exporter-trace-otlp-proto"; const oltpTraceExporter = новый PROTOOTLPTraceExporter({ URL:process.env.OTEL_EXPORTER_OTLP_ENDPOINT "/v1/traces", заголовки: { Авторизация: процесс.env.OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION, }, });
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,
  },
});
Конечная точка (облако Grafana), которая получит трассировку, которую мы будем снимать, получает протокол http/protobuf, поэтому его необходимо импортировать и использовать из экспортера-trace-otlp-proto.

Регистратор

const logExporter = новый OTLPLogExporter({ URL:process.env.OTEL_EXPORTER_OTLP_ENDPOINT "/v1/logs", заголовки: { Авторизация: процесс.env.OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION, }, });
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,
  },
});
Logger уже использовал протокол Http, поэтому OTLPLogExporter можно использовать как есть.

переменные среды

Обратите внимание, что в NestJS переменные среды устанавливаются при инициализации AppModule, поэтому их нельзя использовать в настройках трассировщика и регистратора, которые необходимо выполнить перед созданием AppModule.

Если вы используете dotenv, сначала необходимо вызвать его.


// импорт/заказ eslint-disable-next-line импортировать {конфигурацию} из "dotenv"; // импорт/заказ eslint-disable-next-line импортировать { getEnvFilePath } из "@/lib/utils/env-loader"; конфигурация(); // загружаем окружение перед загрузкой трассировщика и регистратора // импорт/заказ eslint-disable-next-line импортировать otelSDK из "./tracer"; // otelSDK следует импортировать перед любым другим импортом // импорт/заказ eslint-disable-next-line импортировать createLogger из "./logger";
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,
  },
});
Значение переменной среды

Найти довольно сложно, поэтому следите внимательно.

    Доступ к Графане
  1. Нажмите «Моя учетная запись» в правом верхнем углу
  2. Щелкните имя стека в разделе GRAFANA CLOUD на левой панели навигации (если оно не существует, создайте новый стек)
  3. На экране «Управление стеком» нажмите «Настроить» для карты Opentelmetry
  4. Здесь вы можете получить OTEL_EXPORTER_OTLP_ENDPOINT,
  5. Нажмите «Создать ключ в пароле/токене API» ниже, чтобы создать ключ
  6. В поле «Переменные среды» часть, начинающаяся с Basic в OTEL_EXPORTER_OTLP_HEADERS, является значением переменной OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION
  7. .
Зарегистрируйте переменные среды и выполните

Запустите облако Grafana

Нажмите «Запуск Grafana» в Grafana и просмотрите данные в разделе «Обзор»

NestJS   Opentelemetry (Grafana Cloud)

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/siisee11/nestjs-opentelemetry-grafana-cloud-328f?1 Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3