Sådan bruges Elasticsearch, Logstash og Kibana til at visualisere logfiler i Python i realtid

Hvad er logning?

Lad os sige, at du udvikler et softwareprodukt. Det fungerer eksternt, interagerer med forskellige enheder, indsamler data fra sensorer og leverer en service til brugeren. En dag går der noget galt, og systemet fungerer ikke som forventet. Det identificerer muligvis ikke enhederne eller modtager ingen data fra sensorerne eller har måske lige fået en runtime-fejl på grund af en fejl i koden. Hvordan kan du vide det helt sikkert?

Forestil dig nu, hvis der er kontrolpunkter i systemkoden, hvor det, hvis systemet returnerer et uventet resultat, blot markerer det og underretter udvikleren. Dette er begrebet logning.

Logning giver udviklerne mulighed for at forstå, hvad koden faktisk laver, og hvordan arbejdsprocessen er. En stor del af softwareudvikleres liv er overvågning, fejlfinding og fejlretning. Logning gør dette til en meget lettere og jævnere proces.

Visualisering af logfiler

Nu, hvis du er en ekspertudvikler, der har udviklet og oprettet software i et stykke tid, ville du tro, at logning ikke er en big deal, og det meste af vores kode er inkluderet i en Debug.Log('____')erklæring. Det er godt, men der er nogle andre aspekter af logning, vi kan bruge.

Visualisering af specifikke loggede data har følgende fordele:

  • Overvåg systemets funktioner eksternt.
  • Kommuniker information tydeligt og effektivt via statistisk grafik, plot og informationsgrafik.
  • Uddrag viden fra de data, der visualiseres i form af forskellige grafer.
  • Foretag de nødvendige handlinger for at forbedre systemet.

Der er en række måder, vi kan visualisere rådata på. Der er et antal biblioteker i Python og R programmeringssprog, der kan hjælpe med at plotte grafer. Du kan lære mere om det her . Men i dette indlæg vil jeg ikke diskutere ovennævnte metoder. Har du nogensinde hørt om ELK-stakken ?

ELK stak

E - Elasticsearch , L - Logstash , K - Kibana

Lad mig give en kort introduktion til det. ELK-stakken er en samling af tre open source-software, der hjælper med at give realtidsindsigt om data, der enten kan være strukturerede eller ustrukturerede. Man kan søge og analysere data ved hjælp af dets værktøjer med ekstrem lethed og effektivt.

Elasticsearch er en distribueret, RESTful søgemaskine og analysemaskine, der kan løse et stigende antal brugssager. Som hjertet i Elastic Stack gemmer den dine data centralt, så du kan opdage det forventede og afdække det uventede. Elasticsearch giver dig mulighed for at udføre og kombinere mange typer søgninger - struktureret, ustruktureret, geo, metrisk osv. Det er bygget på Java-programmeringssprog, som gør det muligt for Elasticsearch at køre på forskellige platforme. Det giver brugerne mulighed for at udforske meget store mængder data i meget høj hastighed.

Logstash er en open source-serverbehandlingspipeline, der indtager data fra en lang række kilder samtidigt, omdanner dem og derefter sender dem til dit foretrukne "stash" (som Elasticsearch). Data spredes ofte eller slettes på tværs af mange systemer i mange formater. Logstash understøtter en række input, der trækker begivenheder fra en række fælles kilder, alt sammen på samme tid. Indtag let fra dine logfiler, metrics, webapplikationer, datalagre og forskellige AWS-tjenester, alt sammen kontinuerligt og streaming. Logstash har en tilslutbar ramme med over 200 plugins. Bland, match og orkestrer forskellige input, filtre og output for at arbejde i pipeline-harmoni.

Kibana er en open source analyse- og visualiseringsplatform designet til at arbejde med Elasticsearch. Du bruger Kibana til at søge, se og interagere med data gemt i Elasticsearch-indekser. Du kan nemt udføre avanceret dataanalyse og visualisere dine data i en række diagrammer, tabeller og kort. Kibana gør det let at forstå store datamængder. Den enkle, browserbaserede grænseflade giver dig mulighed for hurtigt at oprette og dele dynamiske dashboards, der viser ændringer i Elasticsearch-forespørgsler i realtid.

For at få et bedre billede af arbejdsgangen af, hvordan de tre software interagerer med hinanden, henvises til følgende diagram:

Implementering

Log på Python

Her valgte jeg at forklare implementeringen af ​​logning i Python, fordi det er det mest anvendte sprog til projekter, der involverer kommunikation mellem flere maskiner og internet af ting. Det hjælper med at give dig en samlet idé om, hvordan det fungerer.

Python leverer et loggesystem som en del af dets standardbibliotek, så du hurtigt kan tilføje logning til din applikation.

import logging

I Python kan logning foretages på 5 forskellige niveauer, der hver angiver hændelsestypen. Der er som følger:

  • Info - Udpeger informationsbeskeder, der fremhæver applikationens forløb på grovkornet niveau.
  • Fejlfinding - Betegner detaljerede informationshændelser, der er mest nyttige til fejlfinding af en applikation.
  • Advarsel - Udpeger potentielt skadelige situationer.
  • Fejl - Angiver fejlhændelser, der stadig muligvis tillader, at applikationen fortsætter med at køre.
  • Kritisk - Udpeger meget alvorlige fejlhændelser, som formodentlig vil medføre, at applikationen afbrydes.

Derfor afhænger vi af det problem, der skal logges, det definerede niveau i overensstemmelse hermed.

Bemærk : Info og fejlretning bliver ikke logget som standard, da logfiler kun på niveau Advarsel og derover er logget.

For at give et eksempel og oprette et sæt logsætninger, der skal visualiseres, har jeg oprettet et Python-script, der logger udsagn af specifikt format og en besked.

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')

Her tilføjes logsætningerne til en fil med navnet logFile.txt i det angivne format. Jeg kørte scriptet i tre dage med forskellige tidsintervaller og oprettede en fil, der indeholder logfiler tilfældigt som nedenfor:

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

Opsætning af Elasticsearch, Logstash og Kibana

Lad os først downloade de tre open source-software fra deres respektive links [elasticsearch], [logstash] og [kibana]. Pakk filerne ud, og læg alle tre i projektmappen.

Lad os komme igang.

Trin 1 - Konfigurer Kibana og Elasticsearch på det lokale system. Vi kører Kibana med følgende kommando i bin-mappen i Kibana.

bin\kibana

Tilsvarende er Elasticsearch opsat således:

bin\elasticsearch

Nu i de to separate terminaler kan vi se begge moduler køre. For at kontrollere, at tjenesterne kører åben localhost: 5621 og localhost: 9600 .

Når begge tjenester har kørt med succes, bruger vi Logstash- og Python-programmer til at analysere de rå logdata og pipeline dem til Elasticsearch, hvorfra Kibana spørger om 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
Klik på [ her ] for at lære mere om konfiguration af logstash .

Trin 3 - Herefter vil de analyserede data fra logfilerne være tilgængelige i Kibana-styring på localhost: 5621 til oprettelse af forskellige visuals og dashboards. For at kontrollere, om Kibana modtager data, skal du køre følgende kommando i styringsfanen i Kibana:

localhost:9200/_cat/indices?v

Dette viser alle indekser. For hver visualisering skal der vælges et nyt indeksmønster fra dev-værktøjer, hvorefter forskellige visualiseringsteknikker bruges til at oprette et dashboard.

Dashboard ved hjælp af Kibana

Efter opsætning af alt er det nu tid til at oprette grafer for at visualisere logdataene.

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:

Bemærk - Når logfilerne i logfilen opdateres eller føjes til de tidligere logfiler, så længe de tre tjenester kører, opdateres dataene i elasticsearch og grafer i kibana automatisk i henhold til de nye data.

Afslutter

Logføring kan være et hjælpemiddel til bekæmpelse af fejl og fejlretningsprogrammer i stedet for at bruge en udskriftserklæring. Loggningsmodulet opdeler meddelelserne efter forskellige niveauer. Dette resulterer i en bedre forståelse af koden, og hvordan opkaldsflowet går uden at afbryde programmet.

Visualisering af data er et nødvendigt skridt i situationer, hvor der genereres en enorm mængde data hvert eneste øjeblik. Datavisualiseringsværktøjer og -teknikker tilbyder ledere og andre videnarbejdere nye tilgange til dramatisk forbedring af deres evne til at forstå information gemt i deres data. Hurtig identifikation af fejllogfiler, let forståelse af data og meget tilpasselige datavisualer er nogle af fordelene. Det er en af ​​de mest konstruktive måder at organisere rådata på.

For yderligere reference kan du henvise til den officielle ELK-dokumentation herfra - //www.elastic.co/learn og om logning på python - //docs.python.org/2/library/logging.html