Описание синтаксиса TraceQL в Grafana
TraceQL — это язык запросов, используемый в Grafana Tempo для фильтрации и анализа трассировок. Он позволяет выбирать трейсы и их части (спаны) на основе заданных условий. Ниже приводится описание синтаксиса TraceQL, ключевых элементов языка и примеры использования.
Основы синтаксиса TraceQL
- Структура запроса
- Запрос состоит из выражения фильтрации и опциональной команды обработки:
12<фильтр> [| <обработка>]
- Запрос состоит из выражения фильтрации и опциональной команды обработки:
- Фильтр
Фильтрует трейсы или спаны на основе атрибутов, временных интервалов, названий или значений. - Обработка
Выполняет дополнительные операции, такие как ограничение количества результатов (limit
), агрегация, группировка.
Фильтрация (Filter Expressions)
Фильтр задаётся в фигурных скобках {}
и может включать условия по атрибутам, времени, статусу и т.д.
Базовый фильтр
{}
:
Возвращает все трейсы.{attribute_name="value"}
:
Возвращает трейсы, у которых атрибутattribute_name
равен"value"
.{duration_ms > 1000}
:
Возвращает трейсы с длительностью больше 1 секунды.
Операторы сравнения
= |
Равно |
!= |
Не равно |
< > |
Меньше / Больше |
<= >= |
Меньше или равно / Больше или равно |
=~ |
Регулярное выражение |
!~ |
Регулярное выражение (не соответствует) |
Примеры:
1 2 3 4 5 |
{service.name="frontend"} {status.code=2} {http.method="GET"} {span.name=~"^db.*"} |
Логические операторы
AND |
И |
OR |
Или |
NOT |
Не |
1 2 3 4 |
{http.status_code=500 AND service.name="backend"} {http.method="POST" OR http.method="PUT"} {NOT span.name="healthcheck"} |
Атрибуты трассировки
Вы можете фильтровать по стандартным и пользовательским атрибутам:
- Стандартные атрибуты:
service.name
: Название сервиса.span.name
: Название спана.duration_ms
: Длительность в миллисекундах.status.code
: Код статуса трейса.
- Пользовательские атрибуты: Атрибуты, добавленные вами в процессе трассировки, например:
12{user.id="12345"}
Команды обработки (Pipeline Commands)
Команды обработки применяются после фильтрации с использованием оператора |
.
Ограничение количества результатов
limit <число>
:
Ограничивает количество возвращаемых трейсов.
12{} | limit 10
Агрегация
count()
:
Возвращает количество трейсов.
12{service.name="frontend"} | count()
Выбор полей
fields()
:
Возвращает только указанные атрибуты.
12{service.name="frontend"} | fields(service.name, duration_ms)
Сортировка
sort <поле> [asc|desc]
:
Сортирует трейсы по указанному полю.
12{} | sort duration_ms desc
Примеры запросов TraceQL
- Получить все трейсы:
12{} - Фильтровать трейсы по имени сервиса:
12{service.name="backend"} - Выбрать трейсы с длительностью более 2 секунд:
12{duration_ms > 2000} - Найти трейсы с ошибками (status.code=2 — означает ошибки):
12{status.code=2} - Сортировать трейсы по длительности:
12{service.name="frontend"} | sort duration_ms desc - Посчитать количество трейсов:
12{service.name="backend"} | count() - Комбинировать фильтры:
12{service.name="backend" AND duration_ms > 5000} - Найти трейсы с конкретным методом HTTP:
12{http.method="GET"} - Ограничить результаты до 5 трейсов:
12{service.name="backend"} | limit 5
Полезные советы
- Тестируйте фильтры последовательно. Начинайте с простых запросов
{}
и постепенно добавляйте фильтры. - Используйте логические операторы. Упрощайте сложные запросы, комбинируя условия через
AND
,OR
,NOT
. - Фокусируйтесь на атрибутах. Заранее продумывайте, какие атрибуты полезны для фильтрации и анализа, и добавляйте их в трассировке.
- Анализируйте ошибки. Используйте
status.code
или пользовательские теги для быстрого выявления проблемных трейсов.
TraceQL — мощный инструмент для анализа трассировок в Grafana Tempo. Он позволяет глубоко исследовать данные, определять проблемы и оптимизировать ваши сервисы.
Recommended Posts
Golang Sarama: настройка Partitioner
20.03.2024