
Здравейте, аз съм Евгений, ръководител на 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 https://github.com/et-soft/habr-elk
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 http://0:5601"}
На адреса localhost:5061 трябва да се отвори Kibana.


Единственото, което трябва да настроим, е да създадем Index Pattern за Kibana с информация за това какви данни да се показват. За целта изпълняваме curl заявка или извършваме серия от действия в графичния интерфейс.
$ curl -XPOST -D- 'http://localhost:5601/api/saved_objects/index-pattern'
-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 и ще попаднете на съответната страница.

Кликнете върху „Create new dashboard“ и ще отидете на страницата за добавяне на обекти в Dashboard.

Кликнете върху бутона „Create new“, и системата ще предложи да изберете вид на визуализацията на данните. В Kibana има много от тях, но ще разгледаме създаването на графично представяне „Vertical Bar“ и таблично „Data Table“. Останалите видове представяне се настройват по подобен начин.

Някои достъпни обекти имат етикети B и E — това означава, че форматът е експериментален или в бета-тест. С времето форматът може да се промени или напълно да изчезне от Kibana.
Вертикална колона
За примера „Vertical Bar“ ще създадем хистограма на съотношението на успешните и неуспешните статуси на отговори на нашия сервис. След настройките ще получим следния график:

К успешните ще считаме всички заявки със статус на отговор < 400, а проблемните — >= 400.
За да създадем график „Vertical Bar“, трябва да изберем източник на данни. Избираме Index Pattern, който създадохме по-рано.

По подразбиране, след избора на източник на данни, ще се появи един плътен график. Нека го настроим.

В блока „Buckets“ натиснете бутона „Add“, изберете „X-axis“ и настройте оста X. Ще откроим времевите отметки на постъпване на записите в лог. В полето „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“. Ще създадем таблица със списък на всички URL адреси, към които е имало заявки, и броя на тези заявки. Както в примера с Vertical Bar, първо избираме източник на данни.

След това на екрана ще се покаже таблица с една колона, която показва общия брой заявки за избрания времеви интервал.

Ще променим само блока „Buckets“. Натискаме бутона „Add“ и избираме „Split rows“.

В полето „Aggregation“ избираме „Terms“. А в появилото се поле „Field“ избираме „url.keyword“.

След като зададем стойност „Url“ в полето „Custom label“ и натиснем „Update“, ще получим желаната таблица с броя заявки за всеки URL адрес за избрания период.

Отново в горната част на екрана натискаме бутона „Save“ и указваме името на таблицата, например Urls. Връщаме се обратно на Dashboard и виждаме и двете създадени визуализации.

Работа с Dashboard
Когато създавахме Dashboard, в настройките на обектите за визуализация настроихме само основните параметри на вида. Няма смисъл да задаваме данни за филтрите в обектите, например „диапазон на датите“, „филтриране по useragent“, „филтриране по страна на заявка“ и т.н. Много е удобно да зададете желаното времево поле или да зададете необходимото филтриране в панела на заявките, който се намира над обектите.
![]()
Добавените на този панел филтри ще се приложат към целия Dashboard и всички обекти за визуализация ще бъдат пренастроени в съответствие с актуализираните филтрирани данни.
Заключение
Kibana е мощен инструмент, който позволява визуализиране на всякакви данни по удобен начин. Опитах се да покажа настройката на две основни вида визуализация. Но и другите видове се настройват по подобен начин. А множеството настройки, които оставих „поза кадър“, ще ви позволят да настроите графиките много гъвкаво според нуждите си.
Източник: habr.com
