TGViewer
Мониторим ИТ Мониторим ИТ @monitorim_it · 8.54K subscribers
Post #2566 1.54K
Exemplars: как перейти от всплеска на графике сразу к проблемному запросу

(удобная штука, как оказалось, но полноценно работает только в Mimir и Prometheus)

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

Дальше идешь и ковыряешь трейсы, ищешь нужный временной интервал и нужные трейсы. Exemplars сокращают эту цепочку до одного клика.

Что это такое

Exemplar — ссылка на конкретный трейс, сохранённая рядом с метрикой. Кроме значения и времени оно обычно содержит trace_id или span_id и быть может еще какие-то дополнительные атрибуты.

Например, в гистограмме мы увидели в бакете запросы с плохим статусом. Exemplar говорит: смотри, вот пример конкретного трейса, он занял 1,82 секунды, а его trace_id — 7f3a…91c2.

При этом trace_id не становится обычным лейблом метрики и не создаёт новую серию для каждого запроса.

Как внедрить

1. Настройка на уровне инструментирования приложения. Метрика и трейсы должны создаваться в одном контексте. OpenTelemetry может связать метрику с активным трейсом. В Prometheus клиенте можно извлекать идентификаторы трейса из контекста OpenTelemetry.

2. Настройка на уровне бэкенда. Подойдёт Tempo или Jaeger.

3. Включить exemplar storage на уровне Prometheus. В Prometheus для этого используется флаг --enable-feature=exemplar-storage. В Mimir свои настройки.

4. Связать источники данных в Grafana. В настройках Prometheus data source → Exemplars выбрать internal link на Tempo/Jaeger и указать имя метки: например, trace_id.

5. Найти наличие проблемных запросов на гистограмме (предварительно можно проверить, что exemplar появляется в Explore) и, перейти в существующий trace.

Exemplar, конечно, не способ найти все связанные трейсы. Это лишь пример, а не архив всех запросов. Если trace отброшен tail-сэмплером, ссылка окажется пустой.

По итогу exemplars сравнительно недорогой способ построить прямой путь от графика к конкретному медленному спану.

Для лучшего понимания подхода, посмотрите на приложенные к посту скриншоты.

👉 расскажите в комментариях, если у вас был опыт использования exemplars.

Полезные ссылки

🚀 Документация Grafana

🚀 Настройка Prometheus data source

🚀 Exemplar storage в Prometheus

🚀 Спецификация OpenTelemetry

🚀 Пример для client_golang

📱 Telegram | 📲 MAX
  • 🔥 6
  • ⚡ 2
  • 👍 2
More from @monitorim_it
  1. Sep 23, 2026Quickwit — поисковый движок для логов и трейсов с хранением индексов в S3 Quickwit ориенти…
  2. Sep 21, 2026🚨 Prometheus Alertmanager или Grafana Alerting — что выбрать? Поговаривают, что существую…
  3. Sep 21, 2026🎤 SIP Dump Analyzer: как мы разработали open source-анализатор SIP и RTCP дампов Описание…
  4. Sep 21, 2026Дедупликация строк на доставщике логов: сравниваем OpenTelemetry, Vector, vlagent, Fluent…
  5. Sep 19, 2026Микросервисная архитектура ускоряет разработку, но усложняет эксплуатацию. Один сбой в рас…
  6. Sep 19, 2026Как создать собственный экспортер метрик для Kubernetes Это статья о том, как написать сво…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →