Как реализовать Service Structure рабочими в Tempo?
Ссылка скопирована
По вводным: подключил к своему Nuxt проекту Pino + OpenTelemetry для записи трейсов и логов в Loki + Tempo.
По вводным: все подключено через Grafana, все данные правильно визуализируются кроме:
Прикреплю конфиг:
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
Другие ответы (0)
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопроскомментарий
Вам также может быть интересно
VPN
Как правильно настроить vless для Android TV?
1 ответ
Pyrogram
Как правильно зарегистрировать юзер бота в Telegram?
1 ответ
печатные-платы
Как заставить запускаться программу M3.exe от компании Hanxing AOI в инспекционной машине на Windows 7 Pro?
1 ответ
Safari
Почему снова флагнули домен в safari?
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, а не по обычным строкам логов.