Для чего используются оператор двоеточие и звездочка в запросах Kibana
Что проверяют
Умеете ли вы сами найти в логах нужные записи, не отвлекая разработчика. Двоеточие и звёздочка это база, поэтому следом обычно дают задачку: найти все ошибки конкретного сервиса за последний час или все записи, где поле вообще заполнено.
Как отвечать
Сначала уточните, что строка поиска Kibana по умолчанию работает на KQL (Kibana Query Language), а синтаксис Lucene включается переключателем. Базовые операторы похожи, но не одинаковы.
- двоеточие: связывает поле и значение,
service.name:payments,http.response.status_code:500. Это не всегда строгое равенство: дляkeywordи чисел значение сравнивается целиком, а в полеtextищется слово в проанализированном тексте, поэтомуmessage:timeoutнайдёт «Connection timeout after 30s»; - несколько значений:
status_code:(500 or 503), отрицание черезnot, условия черезandиor; - звёздочка как шаблон: заменяет любое число символов,
host.name:web*найдётweb01иweb02; - проверка существования:
error.message:*вернёт документы, где поле есть, аnot error.message:*те, где его нет; - звёздочка в имени поля:
kubernetes.labels.*:backendищет значение сразу во всех вложенных полях; - диапазоны: в KQL пишутся без двоеточия,
response_time > 100. Записьresponse_time:>100относится к синтаксису Lucene.
В работе QA это выглядит так: берёте trace.id или request_id из ответа API, одним запросом вытаскиваете все логи этого запроса по всем сервисам и прикладываете ссылку к баг-репорту.
Где спотыкаются
Берут шаблон в кавычки: message:"*failed*". В KQL кавычки означают точную фразу, звёздочка внутри них считается обычным символом, и запрос ничего не находит.
Не учитывают тип поля. На text звёздочка работает по отдельным словам, на keyword по всему значению и с учётом регистра, отсюда «вроде правильный запрос, а пусто».
Ставят звёздочку в начало шаблона на больших индексах. Такой запрос медленный и грузит кластер, лучше искать по точному полю или по слову.