НОВОСТИ Создание Dashboard в Kibana для мониторинга логов

NewsBot
Оффлайн

NewsBot

.
.
Регистрация
21.07.20
Сообщения
40.408
Реакции
1
Репутация
0
j5jwbzdea4r5srbzlea_vi8pbum.png


Привет, меня зовут Евгений, я тимлид B2B-направления в Ситимобил. Одной из задач нашей команды является поддержка интеграций по заказу такси от партнеров, и для обеспечения стабильного сервиса мы всегда должны понимать, что происходит в наших микросервисах. И для этого надо постоянно следить за логами.

В Ситимобил для работы с логами мы используем ELK-стек (ElasticSearch, Logstash, Kibana), и объём приходящих туда данных огромен. Найти в этой массе запросов проблемы, которые могут появиться после деплоя нового кода, довольно сложно. И для их наглядного выявления в Kibana есть раздел Dashboard.

На Хабре есть довольно много статей с примерами, как настроить ELK-стек для получения и хранения данных, но о создании Dashboard актуальных материалов нет. Поэтому я хочу показать, как в Kibana создавать визуальное представление данных на основе приходящих логов.


Настройка


Чтобы было нагляднее, я создал Docker-образ с ELK и Filebeat. И поместил в контейнер небольшую на Go, которая для нашего примера будет генерировать тестовые логи. Детально описывать конфигурирование ELK не буду, на Хабре достаточно написано об этом.

Клонируем репозиторий с конфигурацией docker-compose и настройками ELK, и запускаем его командой docker-compose up. Намеренно не добавляю ключ -d, чтобы видеть процесс работы ELK-стека.


git clone
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 "}


По адресу localhost:5061 должна открыться Kibana.

xntyoarvz6ap_16btxztxx7azuw.png


ff0sb6hcqcl10tpefmx36jsuah8.png


Единственное, что нам нужно настроить, это создать Index Pattern для Kibana с информацией о том, какие данные надо отображать. Для этого выполним curl-запрос или сделаем ряд действий в графическом интерфейсе.

$ curl -XPOST -D- ' ' \
-H 'Content-Type: application/json' \
-H 'kbn-xsrf: true' \
-d '{"attributes":{"title":"logstash-*","timeFieldName":"@timestamp"}}'

Создание Index Pattern через графический интерфейс
Для настройки выбираем в левом меню раздел Discover, и попадаем на страницу создания Index pattern.

adtmz7tn6io8ek70btjkbijji-0.png


Нажав на кнопку «Create index pattern», попадаем на страницу создания индекса. В поле «Index pattern name» вводим «logstash-*». Если всё настроено правильно, ниже Kibana покажет попавшие под правило индексы.

sm8zyjhgquorz2dpx_8ysbn1lh0.png


На следующей странице выбираем ключевое поле с временной отметкой, в нашем случае это @timestamp.

qrxawjgls2xzkb0qs697vfmhmj8.png


В результате появится страница настроек индекса, но сейчас дополнительных действий от нас не требуется.

gxqhygzsbvrvmgd7kqpnm3igqxa.png



Теперь мы можем снова перейти в раздел Discover, где увидим записи логов.

rq_uoeiigrizilbgd2xjjxvqcbg.png


Dashboard


В левом меню нажимаем на раздел создания Dashboard и попадаем на соответствующую страницу.

otp6vox7k2assv_cwasncejgzbe.png


Нажимаем на «Create new dashboard» и попадаем на страницу добавления объектов в Dashboard.

yokdw29tkmkxxvgt7nbczs4q6t4.png


Нажимаем на кнопку «Create new», и система предложит выбрать вид отображения данных. В Kibana их большое количество, но мы рассмотрим создание графического представления «Vertical Bar» и табличного «Data Table». Остальные виды представления настраиваются похожим образом.
fic52ylm_9lq0tc0srwa9jzomj4.png


Некоторые доступные объекты имеют метки B и E — это означает, что формат экспериментальный или в стадии бета-тестирования. Со временем формат может поменяться или совсем исчезнуть из Kibana.

Vertical Bar


Для примера «Vertical Bar» создадим гистограмму соотношения успешных и неуспешных статусов ответа нашего сервиса. По окончании настроек получим следующий график:

alefrzrwrri8h4lqgfrrnumdysa.png


К успешным мы будем относить все запросы со статусом ответа < 400, а к проблемным — >= 400.

Для создания графика «Vertical Bar» нам необходимо выбрать источник данных. Выбираем Index Pattern, который создали ранее.

swlwlshzgrfw8l4e2zfpty7yjxu.png


По умолчанию, после выбора источника данных появится один сплошной график. Настроим его.

ihyta7w-r1h5gar2pru7i7l5o2m.png


В блоке «Buckets» нажмем кнопку «Add», выберем «X-asis» и настроим ось Х. Отложим по ней временные отметки поступления записей в лог. В поле «Aggregation» выбираем «Date Histogram», а в «Field» выбираем «@timestamp», указывающий на временное поле. «Minimum interval» оставим в состоянии «Auto», и он будет автоматически подстраиваться под наше отображение.

eh8akiui8ezyd1scp1rawns42ui.png


Нажав на кнопку «Update», мы увидим график с количеством запросов каждые 30 секунд.

dmzwml1sbcthlawshaa0z8hgtzo.png


Теперь настроим столбцы по оси Y. Сейчас у нас отображается общее число запросов в выбранный интервал времени.

6mgoldvwr6wu8gbxhkl6y7sce1c.png


Изменим значение «Aggregation» на «Sum Bucket», который позволит нам совместить данные по успешным и неуспешным запросам. В блоке Bucket -> Aggregation выбираем агрегацию по «Filters» и задаём фильтрацию по «statusCode >= 400». А в поле «Custom label» указываем наше название показателя для более понятного отображения в легенде на графике и в общем списке.

coaoianhtcya9-gxbuffkshrqum.png


Нажав кнопку «Update» под блоком настроек, получим график с проблемными запросами.

e1tonmpqdpbq0luhd8xxeavif4k.png


Если нажать на круг около легенды, то появится окно, в котором можно поменять цвет столбцов.

sjqs5_atuq04kjxuxqr0qrdwu40.png


Теперь добавим на график данные об успешных запросах. В разделе «Metrics» нажимаем кнопку «Add» и выбираем «Y-axis».

7a30jmh5fe_c9z3lamy6y5n3-ea.png


В созданной метрике делаем такие же настройки, как и для ошибочных запросов. Только в фильтре указываем «statusCode < 400».

bdrcsjlidxcjadzwjgab6omtjge.png


Изменив цвет нового столбца, получим отображение соотношения проблемных и успешных запросов.

zylmyrt3m_ymi3uckst_o9desbu.png


Нажав в верхней части экрана кнопку «Save» и указав название, мы увидим на Dashboard первый график.

mj82a6z_w8zok61uyuxrjqa21ys.png


Data Table


Теперь рассмотрим табличное представление «Data Table». Создадим таблицу со списком всех URL, к которым были запросы, и число этих запросов. Как и в примере с Vertical Bar, сначала выбираем источник данных.

swlwlshzgrfw8l4e2zfpty7yjxu.png


После этого на экране отобразится таблица с одной колонкой, которая показывает общее число запросов за выбранный интервал времени.

51216a13c611b17b1679a4c28dcf0c8f.png


Мы будем изменять только блок «Buckets». Нажимаем кнопку «Add» и выбираем «Split rows».

8iqilebeeilqbl9ftqwi8liwm9y.png


В поле «Aggregation» выбираем «Terms». А в появившемся поле «Field» выбираем «url.keyword».

4qe6az_gcsckzqw-i7d-uuglwr4.png


Указав в поле «Custom label» значение «Url» и нажав «Update», мы получим желаемую таблицу с числом запросов по каждому из URL за выбранный промежуток времени.

c8ffe7babc0de8a2205c3cf150f90318.png


В верхней части экрана снова нажмём кнопку «Save» и укажем название таблицы, например Urls. Вернемся назад на Dashboard и увидим оба созданных отображения.

5a8adad02ced8556cdf1d54edccf96ca.png


Работа с Dashboard


Создавая Dashboard, в настройках объектов отображения мы устанавливали только основные параметры вида. Нет смысла указывать в объектах данные для фильтров, например, «диапазон дат», «фильтрацию по useragent», «фильтрацию по стране запроса» и т.д. Гораздо удобнее указывать желаемый временной промежуток или задавать необходимую фильтрацию в панели запросов, которая находится над объектами.

lz5firy087bpc7e2m6dko4yl13e.png


Добавленные на этой панели фильтры применятся ко всему Dashboard, и все объекты отображения перестроятся в соответствии с актуальными отфильтрованными данными.

Заключение


Kibana — мощный инструмент, позволяющий визуализировать любые данные в удобном виде. Я постарался показать настройку двух основных видов отображения. Но и другие виды настраиваются похожим образом. А обилие настроек, которые я оставил «за кадром», позволят вам очень гибко настраивать графики под свои потребности.
 
Сверху Снизу