- Регистрация
- 21.07.20
- Сообщения
- 40.408
- Реакции
- 1
- Репутация
- 0
Привет, меня зовут Евгений, я тимлид B2B-направления в Ситимобил. Одной из задач нашей команды является поддержка интеграций по заказу такси от партнеров, и для обеспечения стабильного сервиса мы всегда должны понимать, что происходит в наших микросервисах. И для этого надо постоянно следить за логами.
В Ситимобил для работы с логами мы используем ELK-стек (ElasticSearch, Logstash, Kibana), и объём приходящих туда данных огромен. Найти в этой массе запросов проблемы, которые могут появиться после деплоя нового кода, довольно сложно. И для их наглядного выявления в Kibana есть раздел Dashboard.
На Хабре есть довольно много статей с примерами, как настроить ELK-стек для получения и хранения данных, но о создании Dashboard актуальных материалов нет. Поэтому я хочу показать, как в Kibana создавать визуальное представление данных на основе приходящих логов.
Настройка
Чтобы было нагляднее, я создал Docker-образ с ELK и Filebeat. И поместил в контейнер небольшую
You must be registered for see links
на Go, которая для нашего примера будет генерировать тестовые логи. Детально описывать конфигурирование ELK не буду, на Хабре достаточно написано об этом.Клонируем репозиторий с конфигурацией docker-compose и настройками ELK, и запускаем его командой docker-compose up. Намеренно не добавляю ключ -d, чтобы видеть процесс работы ELK-стека.
git clone
You must be registered for see links
cd habr-elk
docker-compose up
Если всё настроено правильно, то в логах мы увидим запись (возможно, не сразу, процесс запуска контейнера со всем стеком может занимать несколько минут):
{"type":"log","@timestamp":"2020-09-20T05:55:14Z","tags":["info","http","server","Kibana"],"pid":6,"message":"http server running at
You must be registered for see links
"}По адресу localhost:5061 должна открыться Kibana.
Единственное, что нам нужно настроить, это создать Index Pattern для Kibana с информацией о том, какие данные надо отображать. Для этого выполним curl-запрос или сделаем ряд действий в графическом интерфейсе.
$ curl -XPOST -D- '
You must be registered for see links
' \-H 'Content-Type: application/json' \
-H 'kbn-xsrf: true' \
-d '{"attributes":{"title":"logstash-*","timeFieldName":"@timestamp"}}'
Создание Index Pattern через графический интерфейс
Для настройки выбираем в левом меню раздел Discover, и попадаем на страницу создания Index pattern.
Нажав на кнопку «Create index pattern», попадаем на страницу создания индекса. В поле «Index pattern name» вводим «logstash-*». Если всё настроено правильно, ниже Kibana покажет попавшие под правило индексы.
На следующей странице выбираем ключевое поле с временной отметкой, в нашем случае это @timestamp.
В результате появится страница настроек индекса, но сейчас дополнительных действий от нас не требуется.
Теперь мы можем снова перейти в раздел Discover, где увидим записи логов.
Dashboard
В левом меню нажимаем на раздел создания Dashboard и попадаем на соответствующую страницу.
Нажимаем на «Create new dashboard» и попадаем на страницу добавления объектов в Dashboard.
Нажимаем на кнопку «Create new», и система предложит выбрать вид отображения данных. В Kibana их большое количество, но мы рассмотрим создание графического представления «Vertical Bar» и табличного «Data Table». Остальные виды представления настраиваются похожим образом.
Некоторые доступные объекты имеют метки B и E — это означает, что формат экспериментальный или в стадии бета-тестирования. Со временем формат может поменяться или совсем исчезнуть из Kibana.
Vertical Bar
Для примера «Vertical Bar» создадим гистограмму соотношения успешных и неуспешных статусов ответа нашего сервиса. По окончании настроек получим следующий график:
К успешным мы будем относить все запросы со статусом ответа < 400, а к проблемным — >= 400.
Для создания графика «Vertical Bar» нам необходимо выбрать источник данных. Выбираем Index Pattern, который создали ранее.
По умолчанию, после выбора источника данных появится один сплошной график. Настроим его.
В блоке «Buckets» нажмем кнопку «Add», выберем «X-asis» и настроим ось Х. Отложим по ней временные отметки поступления записей в лог. В поле «Aggregation» выбираем «Date Histogram», а в «Field» выбираем «@timestamp», указывающий на временное поле. «Minimum interval» оставим в состоянии «Auto», и он будет автоматически подстраиваться под наше отображение.
Нажав на кнопку «Update», мы увидим график с количеством запросов каждые 30 секунд.
Теперь настроим столбцы по оси Y. Сейчас у нас отображается общее число запросов в выбранный интервал времени.
Изменим значение «Aggregation» на «Sum Bucket», который позволит нам совместить данные по успешным и неуспешным запросам. В блоке Bucket -> Aggregation выбираем агрегацию по «Filters» и задаём фильтрацию по «statusCode >= 400». А в поле «Custom label» указываем наше название показателя для более понятного отображения в легенде на графике и в общем списке.
Нажав кнопку «Update» под блоком настроек, получим график с проблемными запросами.
Если нажать на круг около легенды, то появится окно, в котором можно поменять цвет столбцов.
Теперь добавим на график данные об успешных запросах. В разделе «Metrics» нажимаем кнопку «Add» и выбираем «Y-axis».
В созданной метрике делаем такие же настройки, как и для ошибочных запросов. Только в фильтре указываем «statusCode < 400».
Изменив цвет нового столбца, получим отображение соотношения проблемных и успешных запросов.
Нажав в верхней части экрана кнопку «Save» и указав название, мы увидим на Dashboard первый график.
Data Table
Теперь рассмотрим табличное представление «Data Table». Создадим таблицу со списком всех URL, к которым были запросы, и число этих запросов. Как и в примере с Vertical Bar, сначала выбираем источник данных.
После этого на экране отобразится таблица с одной колонкой, которая показывает общее число запросов за выбранный интервал времени.
Мы будем изменять только блок «Buckets». Нажимаем кнопку «Add» и выбираем «Split rows».
В поле «Aggregation» выбираем «Terms». А в появившемся поле «Field» выбираем «url.keyword».
Указав в поле «Custom label» значение «Url» и нажав «Update», мы получим желаемую таблицу с числом запросов по каждому из URL за выбранный промежуток времени.
В верхней части экрана снова нажмём кнопку «Save» и укажем название таблицы, например Urls. Вернемся назад на Dashboard и увидим оба созданных отображения.
Работа с Dashboard
Создавая Dashboard, в настройках объектов отображения мы устанавливали только основные параметры вида. Нет смысла указывать в объектах данные для фильтров, например, «диапазон дат», «фильтрацию по useragent», «фильтрацию по стране запроса» и т.д. Гораздо удобнее указывать желаемый временной промежуток или задавать необходимую фильтрацию в панели запросов, которая находится над объектами.
Добавленные на этой панели фильтры применятся ко всему Dashboard, и все объекты отображения перестроятся в соответствии с актуальными отфильтрованными данными.
Заключение
Kibana — мощный инструмент, позволяющий визуализировать любые данные в удобном виде. Я постарался показать настройку двух основных видов отображения. Но и другие виды настраиваются похожим образом. А обилие настроек, которые я оставил «за кадром», позволят вам очень гибко настраивать графики под свои потребности.