Привіт, мене звуть Євген, я тимлід B2B-напрямку в Сітімобіл. Однією із завдань нашої команди є підтримка інтеграцій на замовлення таксі від партнерів, і для забезпечення стабільного сервісу ми завжди повинні розуміти, що відбувається в наших мікросервісах. І для цього слід постійно стежити за логами.
У Сітімобілі для роботи з логами ми використовуємо 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