Прывітанне, мяне клічуць Яўген, я тымлід B2B-кірункі ў Сіцімабіл. Адной з задач нашай каманды з'яўляецца падтрымка інтэграцый на замову таксі ад партнёраў, і для забеспячэння стабільнага сэрвісу мы заўсёды павінны разумець, што адбываецца ў нашых мікрасэрвісах. І для гэтага трэба ўвесь час сачыць за логамі.
У Sitimobil для працы з логамі мы выкарыстоўваем ELK-стэк (ElasticSearch, Logstash, Kibana), і аб'ём прыходных туды дадзеных велізарны. Знайсці ў гэтай масе запытаў праблемы, якія могуць з'явіцца пасля дэплою новага кода, даволі складана. І для іх навочнага выяўлення ў Kibana ёсць частка Dashboard.
На Хабре ёсць даволі шмат артыкулаў з прыкладамі, як наладзіць ELK-стэк для атрымання і захоўванні дадзеных, але аб стварэнні Dashboard актуальных матэрыялаў няма. Таму я хачу паказаць, як у Kibana ствараць візуальнае прадстаўленне дадзеных на аснове прыходзяць логаў.
Настройка
Каб было навочней, я стварыў Docker-выява з ELK і Filebeat. І змясціў у кантэйнер невялікую
Клануем рэпазітар з канфігурацыяй 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-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". Створым табліцу са спісам усіх 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 - магутная прылада, які дазваляе візуалізаваць любыя дадзеныя ў зручным выглядзе. Я пастараўся паказаць настройку двух асноўных відаў адлюстравання. Але і іншыя віды наладжваюцца падобнай выявай. А багацце налад, якія я пакінуў "за кадрам", дазволяць вам вельмі гнутка наладжваць графікі пад свае запатрабаванні.
Крыніца: habr.com