Как да използваме 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 различни нива, всяко от които съответно посочва вида на събитието. Има следното:

  • Информация - Обозначава информационни съобщения, които подчертават напредъка на приложението на грубо зърно ниво.
  • Отстраняване на грешки - Определя финозърнести информационни събития, които са най-полезни за отстраняване на грешки в приложение.
  • Предупреждение - Означава потенциално вредни ситуации.
  • Грешка - Означава събития за грешки, които все още могат да позволят на приложението да продължи да работи.
  • Критично - Определя много тежки грешки, които вероятно ще доведат до прекъсване на приложението.

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

Забележка : Информацията и отстраняването на грешки не се регистрират по подразбиране, тъй като се регистрират регистрационни файлове само от ниво Warning и по-горе.

Сега, за да дам пример и да създам набор от операторски записи, които да визуализирам, създадох скрипт на 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:

Забележка - Винаги, когато дневниците в регистрационния файл се актуализират или добавят към предишните регистрационни файлове, стига трите услуги да изпълняват данните в elasticsearch и графиките в kibana ще се актуализират автоматично според новите данни.

Обобщавайки

Дневникът може да бъде помощник в борбата с грешки и програми за отстраняване на грешки, вместо да се използва отпечатване. Модулът за регистриране разделя съобщенията според различните нива. Това води до по-добро разбиране на кода и как протича потока на обажданията, без да се прекъсва програмата.

Визуализацията на данните е необходима стъпка в ситуации, когато всеки момент се генерира огромно количество данни. Инструментите и техниките за визуализация на данни предлагат на ръководителите и другите работещи в областта на знанията нови подходи за драстично подобряване на способността им да схващат информация, скрита в техните данни. Бързото идентифициране на регистрационните файлове за грешки, лесното разбиране на данните и силно приспособимите визуални изображения са някои от предимствата. Това е един от най-конструктивните начини за организиране на сурови данни.

За допълнителна справка можете да се обърнете към официалната документация на ELK от тук - //www.elastic.co/learn и при влизане в python - //docs.python.org/2/library/logging.html