Як використовувати Elasticsearch, Logstash та Kibana для візуалізації журналів у Python у режимі реального часу

Що таке журналювання?

Скажімо, ви розробляєте програмний продукт. Він працює віддалено, взаємодіє з різними пристроями, збирає дані з датчиків та надає послугу користувачеві. Одного разу щось піде не так, і система працює не так, як очікувалося. Можливо, це не ідентифікація пристроїв, не отримання даних від датчиків, або, можливо, просто помилка виконання під час роботи через помилку в коді. Як ти можеш точно знати?

А тепер уявіть, чи є в системному коді контрольно-пропускні пункти, де, якщо система повертає несподіваний результат, вона просто позначає це і повідомляє розробника. Це концепція лісозаготівлі.

Протоколювання дозволяє розробникам зрозуміти, що насправді робить код і як відбувається робочий процес. Значна частина життя розробників програмного забезпечення - це моніторинг, усунення несправностей та налагодження. Протоколювання робить це набагато простішим та плавнішим процесом.

Візуалізація журналів

Тепер, якщо ви фаховий розробник, який розробляє та створює програмне забезпечення протягом тривалого часу, то ви могли б подумати, що ведення журналу - це не велика справа, і більшість нашого коду додається до Debug.Log('____')заяви. Ну, це чудово, але ми можемо використати деякі інші аспекти ведення журналу.

Візуалізація конкретних записаних даних має наступні переваги:

  • Відстежуйте роботу системи віддалено.
  • Повідомляйте інформацію чітко та ефективно за допомогою статистичних графіків, графіків та інформаційних графік.
  • Витяг знань з даних, що візуалізуються у вигляді різних графіків.
  • Вжити необхідних заходів для вдосконалення системи.

Існує ряд способів, як ми можемо візуалізувати необроблені дані. Існує ряд бібліотек на мовах програмування Python та R, які можуть допомогти у побудові графіків. Ви можете дізнатись більше про це тут . Але в цій публікації я не збираюся обговорювати вищезазначені методи. Ви коли-небудь чули про стек ELK ?

Стек ELK

E - Elasticsearch , L - Logstash , K - Kibana

Дозвольте мені коротко ввести його. Стек ELK - це сукупність трьох програмних засобів з відкритим кодом, які допомагають отримати реальну інформацію про дані, які можуть бути як структурованими, так і неструктурованими. За допомогою його інструментів можна надзвичайно легко та ефективно шукати та аналізувати дані.

Elasticsearch - це розподілений механізм пошуку та аналітики RESTful, здатний вирішити все більшу кількість випадків використання. Як серце Elastic Stack, воно централізовано зберігає ваші дані, щоб ви могли виявити очікуване та розкрити несподіване. Elasticsearch дозволяє виконувати та комбінувати багато типів пошуку - структуровані, неструктуровані, географічні, метричні тощо. Він побудований на мові програмування Java, що дозволяє Elasticsearch працювати на різних платформах. Це дозволяє користувачам досліджувати дуже великий обсяг даних на дуже високій швидкості.

Logstash - це конвеєр для обробки даних із відкритим кодом, який одночасно передає дані з безлічі джерел, перетворює їх, а потім відправляє до вашого улюбленого сховища (наприклад, Elasticsearch). Дані часто розподіляються або замикаються між багатьма системами у багатьох форматах. Logstash підтримує різноманітні вхідні дані, які залучають події з безлічі загальних джерел, і все це одночасно. Легко переглядайте свої журнали, метрики, веб-програми, сховища даних та різні служби AWS - все в безперервному потоковому режимі. Logstash має підключається фреймворк, що містить понад 200 плагінів. Змішуйте, поєднуйте та організовуйте різні входи, фільтри та виходи, щоб працювати в гармонійній конвеєрі.

Kibana - це платформа для аналітики та візуалізації з відкритим кодом, призначена для роботи з Elasticsearch. Ви використовуєте Kibana для пошуку, перегляду та взаємодії з даними, що зберігаються в індексах Elasticsearch. Ви можете легко виконати розширений аналіз даних і візуалізувати свої дані на різноманітних діаграмах, таблицях і картах. Kibana дозволяє легко зрозуміти великі обсяги даних. Його простий інтерфейс на основі браузера дозволяє швидко створювати та ділитися динамічними інформаційними панелями, які відображають зміни запитів Elasticsearch у реальному часі.

Щоб отримати краще уявлення про робочий процес взаємодії трьох програмних засобів, зверніться до наступної схеми:

Впровадження

Вхід в Python

Тут я вирішив пояснити реалізацію реєстрації в Python, оскільки це найбільш вживана мова для проектів, що передбачають спілкування між різними машинами та Інтернетом речей. Це допоможе скласти загальне уявлення про те, як це працює.

Python пропонує систему ведення журналу як частину своєї стандартної бібліотеки, тому ви можете швидко додати реєстрацію до своєї програми.

import logging

У Python ведення журналу може здійснюватися на 5 різних рівнях, кожен з яких відповідно вказує тип події. Існує наступне:

  • Інформація - Позначає інформаційні повідомлення, які висвітлюють хід програми на грубому рівні.
  • Налагодження - Позначає детальні інформаційні події, які є найбільш корисними для налагодження програми.
  • Попередження - Позначає потенційно шкідливі ситуації.
  • Помилка - Позначає події помилок, які можуть продовжувати працювати додатку.
  • Критичний - Позначає дуже серйозні події помилок, які, імовірно, призведуть до того, що програма припинить роботу.

Тому залежно від проблеми, яку потрібно зареєструвати, ми відповідно використовуємо визначений рівень.

Примітка : Інформація та налагодження не реєструються за замовчуванням, оскільки реєструються журнали лише попередження рівня та вище.

Тепер, щоб навести приклад і створити набір операторів журналу для візуалізації, я створив сценарій Python, який реєструє оператори певного формату та повідомлення.

import logging import random logging.basicConfig(filename="logFile.txt", filemode="a", format="%(asctime)s %(levelname)s-%(message)s", datefmt="%Y-%m-%d %H:%M:%S") for i in xrange(0,15): x=random.randint(0,2) if(x==0): logging.warning('Log Message') elif(x==1): logging.critical('Log Message') else: logging.error('Log Message')

Тут оператори журналу додаватимуться до файлу з ім'ям logFile.txt у зазначеному форматі. Я запускав сценарій протягом трьох днів з різними інтервалами часу, створюючи файл, що містить випадкові журнали, як показано нижче:

2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message 2019-01-09 11:07:05,333 WARNING-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message 2019-01-09 11:07:05,333 WARNING-Log Message 2019-01-09 11:07:05,333 CRITICAL-Log Message 2019-01-09 11:07:05,333 WARNING-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message

Setting up Elasticsearch, Logstash and Kibana

At first let’s download the three open source softwares from their respective links [elasticsearch],[logstash]and[kibana]. Unzip the files and put all three in the project folder.

Let’s get started.

Step 1 — Set up Kibana and Elasticsearch on the local system. We run Kibana by the following command in the bin folder of Kibana.

bin\kibana

Similarly, Elasticsearch is setup like this:

bin\elasticsearch

Now, in the two separate terminals we can see both of the modules running. In order to check that the services are running open localhost:5621 and localhost:9600.

After both the services are successfully running we use Logstash and Python programs to parse the raw log data and pipeline it to Elasticsearch from which Kibana queries data.

Step 2— Now let’s get on with Logstash. Before starting Logstash, a Logstash configuration file is created in which the details of input file, output location, and filter methods are specified.

input{ file{ path => "full/path/to/log_file/location/logFile.txt" start_position => "beginning" } } filter { grok{ match => {"message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:log-level}-%{GREEDYDATA:message}"} } date { match => ["timestamp", "ISO8601"] } } output{ elasticsearch{ hosts => ["localhost:9200"] index => "index_name"} stdout{codec => rubydebug} }

This configuration file plays a major role in the ELK stack. Take a look at filter{grok{…}} line. This is a Grok filter plugin. Grok is a great way to parse unstructured log data into something structured and queryable. This tool is perfect for syslog logs, apache and other webserver logs, mysql logs, and in general, any log format that is generally written for humans and not computer consumption. This grok pattern mentioned in the code tells Logstash how to parse each line entry in our log file.

Now save the file in Logstash folder and start the Logstash service.

bin\logstash –f logstash-simple.conf
Для того, щоб дізнатись більше про налаштування logstash, натисніть [ тут ].

Крок 3 - Після цього проаналізовані дані з файлів журналів будуть доступні в управлінні Kibana на localhost: 5621 для створення різних візуальних елементів та інформаційних панелей. Щоб перевірити, чи отримує Kibana які-небудь дані, на вкладці управління Kibana виконайте таку команду:

localhost:9200/_cat/indices?v

Тут відобразяться всі індекси. Для кожної візуалізації з інструментів розробника потрібно вибрати новий шаблон Індексу, після чого для створення інформаційної панелі використовуються різні методи візуалізації.

Інформаційна панель за допомогою Kibana

Налаштувавши все, настав час створити графіки для візуалізації даних журналу.

After opening the Kibana management homepage, we will be asked to create a new index pattern. Enter index_name* in the Index pattern field and select @timestamp in the Time Filter field name dropdown menu.

Now to create graphs, we go to the Visualize tab.

Select a new visualisation, choose a type of graph and index name, and depending on your axis requirements, create a graph. We can create a histogram with y-axis as the count and x-axis with the log-level keyword or the timestamp.

After creating a few graphs, we can add all the required visualisations and create a Dashboard, like below:

Примітка. Кожного разу, коли журнали у файлі журналу оновлюються або додаються до попередніх журналів, доки три служби запускають дані в еластичному пошуку, а графіки в kibana автоматично оновлюються відповідно до нових даних.

Підведенню

Запис журналу може допомогти в боротьбі з помилками та програмами налагодження замість використання оператора друку. Модуль реєстрації поділяє повідомлення відповідно до різних рівнів. Це призводить до кращого розуміння коду та того, як відбувається виклик, не перериваючи програму.

Візуалізація даних є необхідним кроком у ситуаціях, коли величезна кількість даних генерується щомиті. Інструменти та методи візуалізації даних пропонують керівникам та іншим працівникам знань нові підходи до значного поліпшення їх здатності сприймати інформацію, що приховується в їх даних. Швидка ідентифікація журналів помилок, легке розуміння даних та високо настроювані візуальні дані - деякі з переваг. Це один з найбільш конструктивних способів організації необроблених даних.

Для подальшого посилання ви можете звернутися до офіційної документації ELK тут - //www.elastic.co/learn та щодо входу в python - //docs.python.org/2/library/logging.html