Примеры запросов TraceQL

Используйте эти запросы TraceQL в Grafana Explore с источником данных Tempo. Настройте имена служб, маршруты и значения атрибутов в соответствии с вашей средой.

Эти примеры используют семантические соглашения OpenTelemetry. Если ваше инструментирование использует другие имена атрибутов, подставьте их в запросы.

Полный синтаксис TraceQL см. в разделе Создание запроса TraceQL. Расширенную коллекцию рецептов см. в TraceQL cookbook for Grafana Cloud Traces.

Tip

Если запрос не возвращает результатов, расширьте диапазон времени и убедитесь, что выбран правильный источник данных Tempo. Предпочитайте внутренние поля уровня трассировки, такие как trace:duration и trace:rootService, для более быстрых запросов.

Поиск промежутков с ошибками

Фильтруйте по статусу ошибки или кодам ошибок HTTP:

traceql
{ status = error }
traceql
{ span.http.status_code >= 500 }
traceql
{ span.http.status_code > 399 }

Поиск медленных запросов

Фильтруйте по длительности промежутка. Распространённые пороги — 1 секунда и 5 секунд:

traceql
{ duration > 1s }
traceql
{ duration > 5s }

Фильтруйте конкретную конечную точку по длительности:

traceql
{ span.http.url = "/api/checkout" && duration > 2s }

Поиск исключений по типу

Запрашивайте события исключений, записанные в промежутках. Данные об исключениях используют область event, потому что OpenTelemetry записывает исключения как события промежутков:

traceql
{ event.exception.message =~ "context cancelled" }
traceql
{ event.exception.type = "NotFoundException" }

Найдите промежутки с ошибками, у которых есть сообщение об исключении:

traceql
{ status = error && event.exception.message != "" }

Фильтрация по службе

Выбирайте промежутки из конкретной службы или сопоставляйте службы по шаблону. Вы можете использовать представление Service Graph, чтобы определить, у каких служб высокая частота ошибок или задержка, а затем запросить эти службы с помощью TraceQL.

traceql
{ resource.service.name = "checkout" }
traceql
{ resource.service.name =~ "payment.*" && status = error }

Поиск ошибок и медленных промежутков вместе

Комбинируйте фильтры статуса ошибки и длительности, чтобы выявить вероятные первопричины:

traceql
{ resource.service.name = "api" && status = error && duration > 1s }

Анализ зависимостей служб

Найдите ошибки на конкретном пути API:

traceql
{ span.http.url =~ ".*/api/.*" && span.http.status_code >= 500 }

Используйте оператор потомка (>>), чтобы найти трассировки, где служба frontend вызывает нижестоящую службу, которая выдаёт ошибку:

traceql
{ resource.service.name = "frontend" } >> { resource.service.name = "database" && status = error }

Запрос метрик частоты и количества

Запускайте их в режиме Metrics в Explore. Запросы метрик TraceQL имеют ограничение диапазона времени по умолчанию в 24 часа:

traceql
{ } | rate()
traceql
{ status = error } | rate()
traceql
{ resource.service.name = "api" } | count_over_time()
traceql
{ duration > 1s } | rate()

Фильтрация по региону или среде

Сужайте результаты до конкретного облачного региона или среды развёртывания:

traceql
{ resource.cloud.region = "us-east-1" && status = error }
traceql
{ resource.deployment.environment = "production" && duration > 2s }

Использование переменных дашборда

Заменяйте жёстко заданные значения на переменные дашборда, когда используете эти запросы на панелях. Например, используя переменную $service:

traceql
{ resource.service.name = "$service" && status = error }

Дополнительные ресурсы