Для начинающих специалистов по тестированию

Автор: Надежда Дудник

Содержание

Введение

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 финтех проектов, для практики поиска логов) .

Ввести данные для авторизации:

  • Логин: practice_user

  • ‌Пароль: promirit

Welcome home
Welcome home

Выбрать Kibana → Discover:

Kibana → Discover
Kibana → Discover

Режим для KQL включен по умолчанию.

Выбрать значение в Change index pattern, где необходимо проверить логи. Сперва для разбора я выберу 'logstash', а затем для разбора рассмотрим 'forum', так как логи идут от форума клана по игре Властелин колец онлайн - http://forum.free-peoples.ru/, за который отвечает также Евгений Сычёв (предупреждение: требование наличия сертификата -> довериться).

например, logstash*
например, logstash*

Основные блоки для работы с логами

  1. Блок для ввода поиска логов с использованием KQL-запроса и без;

  2. Блок с выбором временного промежутка (Today, This week, Last 15 minutes (по умолчанию), Last 30 minutes, Last 1 hour, Last 24 hours, Last 7 days, Last 30 days, Last 90 days, Last 1 year);

  3. Блок с выбранными фильтрами для вывода логов ("Selected fields");

  4. Блок с доступными фильтрами ("Available fields");

  5. Блок результатов поиска логов под выбранные фильтры или без них;

  6. Блок фильтров по типу данных "Filter by type";

  7. Кнопки "Refresh / Update".

Информация про основные блоки
Информация про основные блоки

Использование KQL

Указать курсор в строку для составления KQL запросов.

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

Search
Search

Указать, например, атрибут "message" (Filter results that contain message).

Отображение ключевых атрибутов
Отображение ключевых атрибутов

Скриншоты из документации про описание основных параметров.

Допустимые операторы свойств для ограничений свойств
Допустимые операторы свойств для ограничений свойств
Логические операторы, поддерживаемые в KQL
Логические операторы, поддерживаемые в KQL

Разберем примеры, поле "host" имеет тип данных "string", при которых отображаются следующие параметрыдля поля строки:

Параметры для поля строки
Параметры для поля строки

Поле "geoip.ip" имеет тип данных "number", в котором отображаются следующие параметры для числового поля:

Параметры для числового поля
Параметры для числового поля

Составление простого KQL-запроса

host: jekil1.fvds.ru and severity : WARN

( : ) - оператор, который отвечает за поиск совпадений.

Результаты совпадений:

Желтым цветом выделены указанные значения для поиска
Желтым цветом выделены указанные значения для поиска
Следующий запрос: host: jekil1.fvds.ru and severity : WARN and message: *auth.log*

*auth.log*, где (*) обозначает подстановочный знак.

*auth.log* - находит любые значения, которые имеют "oauth.log" в любой позиции

Отображается "oauth.log" в любой позиции
Отображается "oauth.log" в любой позиции

exc* - находит любые значения, которые начинаются с "exc".

Можно использовать оператор подстановочного знака после фразы.

значения, которые начинаются с "exc" -> есть результат
значения, которые начинаются с "exc" -> есть результат

*exc - находит любые значения, которые заканчиваются на "exc".

KQL-запросы не поддерживают сопоставление суффиксов, поэтому в запросах с произвольным текстом нельзя использовать оператор подстановочного знака перед фразой.

значения, которые заканчиваются на "exc" -> нет таких значений
значения, которые заканчиваются на "exc" -> нет таких значений

Двойные кавычки в KQL-запросе

Чтобы задать предложение в KQL-запросе, необходимо использовать оператор - двойные кавычки " ".

Например, при указании следующего KQL-запроса:

message: exception=>Errno::EACCES

будет ошибка:

Search Error
Expected AND, OR, end of input, whitespace but ">" found. message: exception=>Errno::EACCES -------------------^
предложение без кавычек
предложение без кавычек

А при указании KQL-запроса с кавычками:

message: "exception=>Errno::EACCES"

будет следующий результат совпадений:

предложение с кавычками
предложение с кавычками

Хочу отметить, что двойные кавычки очень нужны при поиске логов.

KQL c фильтром "Filter by type"

Filter by type
Filter by type

Добавить поле "_type" в фильтр через "Filter by type":

Нажать "+"
Нажать "+"

Результаты совпадений отображаются в виде Table или JSON:

Добавление фильтра по полю _type
Добавление фильтра по полю _type
1. Ввести "host: jekil1.fvds.ru and severity : WARN and message: exc*" в блоке для запросов;
2. Выбрать "Today" в блоке временного интервала; 
3. Выбрать только "_type" в блоке используемых фильтров;
4. Нажать на кнопку "Refresh/Update"

Результаты поиска:

Добавление фильтра по полю _type
Добавление фильтра по полю _type

Результаты поиска по фильтру selected fields, выбрав "_type" и "path":

Добавление фильтра по полям _type и path
Добавление фильтра по полям _type и path

KQL c фильтром "Filter for value"

Дополнительно, поле "host" можно добавить в "Filter for value":

Отображается значение выбранного поля в фильтре в левом верхнем углу
Отображается значение выбранного поля в фильтре в левом верхнем углу
пример 1 -> Отображение значений для оператора поля "_id"
пример 1 -> Отображение значений для оператора поля "_id"
пример 2 -> Отображение значений для оператора поля "geoip.ip"
пример 2 -> Отображение значений для оператора поля "geoip.ip"
пример 3 -> severity is WARN
пример 3 -> severity is WARN

Благодарю @Kinskiза полезный комментарий.

Обратите внимание на скриншоте примера 3 имеется ссылка "Edit as Query DSL" (где DSL - Domain Specific Language), при нажатии на нее открывется окно ввода, которое позволяет вставить JSON запрос в формате Elastic и даёт возможность, например, осуществлять фильтрацию по regexp.

Например, согласно документации

MUST-> MATCH-> The severity field contains the WARN search
MUST-> MATCH-> The severity field contains the WARN search

Дать название фильтру как "Severity" и нажать на кнопку "Save". Результат совпадений будет следующим:

пример 4 -> поиск по фильтру по значениям: "Edit as Query DSL"
пример 4 -> поиск по фильтру по значениям: "Edit as Query DSL"
пример 5 -> severity is WARN и выбранные фильтры "severity", "_id", "path"
пример 5 -> severity is WARN и выбранные фильтры "severity", "_id", "path"

Значение "WARN" подсвечивается желтым цветом, так как указано в фильтре по значениям в правом верхнем углу.

Поиск логов без использования KQL

1. Ввести, например, значение поля "source" = "filewatch.tailmode.handlers.create" в блок для запросов;
2. Выбрать "Today" в блоке с временным интервалом ;
3. Нажать на кнопку "Refresh";
4. Удалить выбранные фильтры из "Filter for value" и "Filter by type".

Результаты поиска совпадений:

Поиск логов без использования KQL
Поиск логов без использования KQL

Практика

  1. Перейти по ссылке форума клана по игре Властелин колец онлайн - https://forum.free-peoples.ru/. (зайти на свой страх и риск -> 'Advanced');

  2. Ввести невалидные "Имя пользователя:" = "test" и "Пароль:" = "test" на странице форума;

  3. Нажать на кнопку "Вход";

  4. Зафиксировать время;

  5. Перейти по ссылке http://37.46.129.245:5601/app/home#/ -> пройти авторизацию -> выбрать "Discover" -> выбрать "forum" в Change index pattern;

  6. Ввести значение "login" в строке запроса;

  7. Нажать на "Refresh";

  8. Убедиться, что найдены результаты и просмотреть поле "message";

    Поиск логов на авторизацию в форум на сайте
    Поиск логов на авторизацию в форум на сайте
  9. Нажать на ссылку "Регистрация" на сайте https://forum.free-peoples.ru/ucp.php?mode=register . Отображается ошибка на новой странице;

  10. Зафиксировать время;

  11. Найти лог с текстом "mode=register" в Kibana;

  12. Выбрать показ лога в формате JSON;

  13. Убедиться, что найдены логи с ошибкой.

Убедиться, что найдены логи с ошибкой
Убедиться, что найдены логи с ошибкой

Дополнительная информация

Просмотр лога в формате JSON.

Просмотр лога в формате JSON
Просмотр лога в формате JSON

View single document - просмотр детального лога.

Просмотр детального лога
Просмотр детального лога

Также имеются:

Из документации: "Можно объединять разные части запросов по ключевым словам с помощью открывающей скобки " ( " и закрывающей скобки " ) ". Каждой открывающей скобке " ( " должна соответствовать закрывающая скобка " ) ". Пробел до или после скобки не влияет на запрос."

Также можно добавить фильтры из блока со всеми фильтрами в область с используемыми (выбранными) фильтрами.

Имеется краткий справочник по KQL.

Заключение

Обычно я ищу логи в Kibana по уровню логирования ERROR, а также указывая необходимые данные по системе. Дополнительно можно искать логи по sessionId, Id, UUID, сообщениям от ответа сервера, данным запроса.

Данной инструкцией, опираясь на полезные источники, хотела донести знакомство как составлять KQL-запросы, научить читать логи и применить эти знания в своей работе.

Благодарю за прочтение.

С уважением, Надежда Дудник (protestinginfo), главный инженер по тестированию в финтехе и ментор по тестированию ПО.

И желаю достичь своей цели!

Комментарии (12)


  1. artsiom-rusau
    03.09.2023 21:42
    +1

    Спасибо за полезную статью!


    1. ProTestingInfo_QA Автор
      03.09.2023 21:42
      +1

      Артём, спасибо !


    1. tagetdmb
      03.09.2023 21:42
      +1

      Присеодиняюсь к благодарностям)


  1. Kinski
    03.09.2023 21:42
    +1

    Фильтры по значению также содержат кнопку "Edit as query DSL". Позволяет вставить Json запрос в формате эластика, и даёт возможность, например, осуществлять фильтрацию по regexp.


    1. ProTestingInfo_QA Автор
      03.09.2023 21:42

      Благодарю за дополнение , + 1 в карму, если вы не против, я добавлю в статью?

      Если честно, я не пользовалась данной функцией.


      1. Kinski
        03.09.2023 21:42

        Конечно, добавляйте. Вот Тут в документации подробнее описано


  1. Andrey-40
    03.09.2023 21:42
    +1

    Спасибо за материал)


    1. ProTestingInfo_QA Автор
      03.09.2023 21:42

      Пожалуйста, благодарю и вас за прочтение.


  1. mikegordan
    03.09.2023 21:42
    +1

    Интересное название KQL  , т.к. у 3го уровня абстракции кафки - есть KSQL , не запутайтесь )


    1. ProTestingInfo_QA Автор
      03.09.2023 21:42

      спасибо!


  1. Naaris
    03.09.2023 21:42
    +1

    Здравствуйте.
    Подскажите пожалуйста, в Кибане на проекте не посвечиваются результаты желтым цветом.
    Это нужно в настройках что-то поправить?


    1. ProTestingInfo_QA Автор
      03.09.2023 21:42

      Да, желтым цветом порой не подсвечиваются результаты, если текст находится внутри сообщения запроса, нужно сам запрос раскрыть в Table, в JSON желтый цвет не указывается.

      Смотря какой запрос отправляете, нужно смотреть.