Kibana. Использование языка запросов KQL при поиске логов |
23.10.2023 00:00 |
Автор: Надежда Дудник (главный инженер по тестированию в Сбере, ментор по тестированию), https://t.me/protestinginfo Для начинающих специалистов по тестированиюВведениеKibana (wiki) используется для мониторинга и анализа ИТ-инфраструктуры в составе Elastic Stack, в который помимо нее входят Elasticsearch и Logstash. Logstash отвечает за логирование и поставляет входящий поток данных в Elasticsearch для хранения, классификации и поиска. Kibana, в свою очередь, получает доступ к данным Elasticsearch для их визуализации в различных визуальных форматах. У Kibana имеется свой язык запросов KQL (Kibana Query Language) - официальный источник. С помощью этого языка можно составлять запросы, которые помогают отфильтровывать и найти необходимую информацию. Содержание
Подключение к Kibana для просмотра логовПерейти по URL Kibana - http://37.46.129.245:5601/app/home#/ (данной информацией поделился Евгений Сычёв - PM и QA Lead финтех проектов, для практики поиска логов) . Ввести данные для авторизации:
Выбрать Kibana → Discover: Режим для KQL включен по умолчанию. Выбрать значение в Change index pattern, где необходимо проверить логи. Сперва для разбора я выберу 'logstash', а затем для разбора рассмотрим 'forum', так как логи идут от форума клана по игре Властелин колец онлайн - http://forum.free-peoples.ru/, за который отвечает также Евгений Сычёв (предупреждение: требование наличия сертификата -> довериться). Основные блоки для работы с логами
Использование KQL Указать курсор в строку для составления KQL запросов. Отображаются возможные ключевые атрибуты для поиска логов. Указать, например, атрибут "message" (Filter results that contain message). Скриншоты из документации про описание основных параметров. Разберем примеры, поле "host" имеет тип данных "string", при которых отображаются следующие параметры Поле "geoip.ip" имеет тип данных "number", в котором отображаются следующие параметры Составление простого KQL-запроса
( : ) - оператор, который отвечает за поиск совпадений. Результаты совпадений:
Двойные кавычки в KQL-запросе Чтобы задать предложение в KQL-запросе, необходимо использовать оператор - двойные кавычки " ". Например, при указании следующего KQL-запроса:
будет ошибка:
А при указании KQL-запроса с кавычками:
будет следующий результат совпадений: Хочу отметить, что двойные кавычки очень нужны при поиске логов. KQL c фильтром "Filter by type"Добавить поле "_type" в фильтр через "Filter by type": Результаты совпадений отображаются в виде Table или JSON:
Результаты поиска: Результаты поиска по фильтру selected fields, выбрав "_type" и "path": KQL c фильтром "Filter for value" Дополнительно, поле "host" можно добавить в "Filter for value": Благодарю @Kinskiза полезный комментарий. Обратите внимание на скриншоте примера 3 имеется ссылка "Edit as Query DSL" (где DSL - Domain Specific Language), при нажатии на нее открывется окно ввода, которое позволяет вставить JSON запрос в формате Elastic и даёт возможность, например, осуществлять фильтрацию по regexp. Например, согласно документации Дать название фильтру как "Severity" и нажать на кнопку "Save". Результат совпадений будет следующим: Значение "WARN" подсвечивается желтым цветом, так как указано в фильтре по значениям в правом верхнем углу. Поиск логов без использования KQL
Результаты поиска совпадений: Практика
Дополнительная информация Просмотр лога в формате JSON. < View single document - просмотр детального лога. Также имеются:
Из документации: "Можно объединять разные части запросов по ключевым словам с помощью открывающей скобки " ( " и закрывающей скобки " ) ". Каждой открывающей скобке " ( " должна соответствовать закрывающая скобка " ) ". Пробел до или после скобки не влияет на запрос." Также можно добавить фильтры из блока со всеми фильтрами в область с используемыми (выбранными) фильтрами. Имеется краткий справочник по KQL. ЗаключениеОбычно я ищу логи в Kibana по уровню логирования ERROR, а также указывая необходимые данные по системе. Дополнительно можно искать логи по sessionId, Id, UUID, сообщениям от ответа сервера, данным запроса. Данной инструкцией, опираясь на полезные источники, хотела донести знакомство как составлять KQL-запросы, научить читать логи и применить эти знания в своей работе. |