Как реализовать Service Structure рабочими в Tempo?

Ссылка скопирована
1 ответ

По вводным: подключил к своему Nuxt проекту Pino + OpenTelemetry для записи трейсов и логов в Loki + Tempo.
По вводным: все подключено через Grafana, все данные правильно визуализируются кроме:
690c2865cb13c219595297.png
690c2884c26a9751896059.png

Прикреплю конфиг:
Docker-compose

tempo: image: grafana/tempo:latest restart: unless-stopped command: ["-config.file=/etc/tempo.yaml"] volumes: - ./configs/tempo.yaml:/etc/tempo.yaml:ro - data-tempo:/var/tempo networks: - monitoring ports: - "4317:4317" # Для отправки данных GRPC - "3200:3200" # Для чтения данных prometheus: image: prom/prometheus:latest restart: unless-stopped command: - "--config.file=/etc/prometheus/prometheus.yaml" # Путь к конфигу - "--storage.tsdb.retention.time=15d" # Хранить метрики 15 дней - "--web.enable-remote-write-receiver" - "--enable-feature=exemplar-storage" - "--enable-feature=native-histograms" volumes: - ./configs/prometheus.yaml:/etc/prometheus/prometheus.yaml:ro # Основной конфиг - data-prometheus:/prometheus # Данные TSDB networks: - monitoring ports: - "9090:9090"

Prometheus.yaml

global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'tempo' static_configs: - targets: ['tempo:3200'] - job_name: 'tempo-usage-metrics' metrics_path: '/usage_metrics' static_configs: - targets: ['tempo:3200']

Tempo.yaml

server: http_listen_port: 3200 distributor: receivers: otlp: protocols: grpc: endpoint: "0.0.0.0:4317" log_received_spans: enabled: true compactor: compaction: block_retention: 48h metrics_generator: registry: external_labels: source: tempo cluster: docker-compose storage: path: /var/tempo/wal remote_write: - url: http://prometheus:9090/api/v1/write send_exemplars: true traces_storage: path: /var/tempo/traces processor: local_blocks: filter_server_spans: false flush_to_storage: true storage: trace: backend: local local: path: /var/tempo/traces wal: path: /var/tempo/wal overrides: defaults: cost_attribution: dimensions: service.name: "" span.http.target: "service_route" metrics_generator: processors: [service-graphs, span-metrics, local-blocks] generate_native_histograms: both

По вводным: вопрос соответственно как подключить эту опцию.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Алексей Денисов Ответ

В Grafana Tempo “Service Structure” строится не из названий контейнеров и не из логов Pino, а из OpenTelemetry resource attributes и span-данных. Главный атрибут — service.name. Если он не задан или везде одинаковый, Grafana не сможет нормально показать структуру сервисов.

В Nuxt/Node нужно убедиться, что SDK OpenTelemetry задаёт resource:

import { NodeSDK } from '@opentelemetry/sdk-node';
import { Resource } from '@opentelemetry/resources';
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
 
const sdk = new NodeSDK({
  resource: new Resource({
    [SemanticResourceAttributes.SERVICE_NAME]: 'nuxt-web',
    [SemanticResourceAttributes.SERVICE_VERSION]: '1.0.0',
    deployment_environment: 'production'
  })
});
 
sdk.start();

import { NodeSDK } from '@opentelemetry/sdk-node'; import { Resource } from '@opentelemetry/resources'; import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions'; const sdk = new NodeSDK({ resource: new Resource({ [SemanticResourceAttributes.SERVICE_NAME]: 'nuxt-web', [SemanticResourceAttributes.SERVICE_VERSION]: '1.0.0', deployment_environment: 'production' }) }); sdk.start();

Если у вас несколько частей системы, у каждой должен быть свой service.name: например nuxt-web, api, worker. Иначе все трейсы будут свалены в один сервис.

Для Service Graph в Grafana/Tempo может понадобиться metrics-generator. В конфиге Tempo проверьте, включён ли он и куда отправляются generated metrics. Без этого часть “структурных” визуализаций может быть пустой, хотя сами трейсы видны.

Также важно, чтобы в трейсе были client/server spans между сервисами. Если вы логируете только Pino-сообщения, но не инструментируете HTTP-запросы, базу, fetch/axios, Grafana не увидит связей между сервисами. Подключите авт-инструментации для HTTP и используемых библиотек.

Итог: задайте разные service.name, включите автоинструментации HTTP/fetch, проверьте Tempo metrics-generator и наличие spans между сервисами. Логи в Loki полезны, но Service Structure строится по traces/resources, а не по обычным строкам логов.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно