Az Elasticsearch, a Logstash és a Kibana használata a naplók valós időben történő megjelenítéséhez a Pythonban

Mi a naplózás?

Tegyük fel, hogy egy szoftver terméket fejleszt. Távolról működik, kölcsönhatásba lép különböző eszközökkel, adatokat gyűjt az érzékelőkből és szolgáltatást nyújt a felhasználónak. Egy napon valami elromlik, és a rendszer nem a várt módon működik. Lehet, hogy nem azonosítja az eszközöket, vagy nem kap adatokat az érzékelőktől, vagy éppen futási hibát kapott a kód hibája miatt. Honnan tudhatod biztosan?

Most képzelje el, hogy vannak-e ellenőrző pontok a rendszer kódjában, ahol ha a rendszer váratlan eredményt ad, akkor egyszerűen megjelöli azt és értesíti a fejlesztőt. Ez a fakitermelés fogalma.

A naplózás lehetővé teszi a fejlesztők számára, hogy megértsék, mit is csinál a kód valójában, és hogyan zajlik a munkafolyamat. A szoftverfejlesztők életének nagy része megfigyelés, hibaelhárítás és hibakeresés. A naplózás segítségével ez sokkal könnyebb és simább folyamat.

A naplók megjelenítése

Most, ha szakértő fejlesztő vagy, aki már jó ideje fejleszt és fejleszt szoftvereket, akkor azt gondolnád, hogy a naplózás nem nagy ügy, és a kódunk nagy részét egy Debug.Log('____')nyilatkozat tartalmazza. Nos, ez nagyszerű, de a fakitermelésnek vannak más szempontjai is, amelyeket felhasználhatunk.

A konkrét naplózott adatok megjelenítésének a következő előnyei vannak:

  • Távolról figyelheti a rendszer működését.
  • Az információkat egyértelműen és hatékonyan közölje statisztikai grafikonok, ábrák és információs grafikák segítségével.
  • Bontsa ki az ismereteket a különböző grafikonok formájában megjelenített adatokból.
  • Tegye meg a szükséges intézkedéseket a rendszer javítása érdekében.

A nyers adatokat számos módon vizualizálhatjuk. A Python és R programozási nyelveken számos olyan könyvtár található, amely segíthet a grafikonok ábrázolásában. Akkor többet róla itt . De ebben a bejegyzésben nem a fent említett módszerekről fogok tárgyalni. Hallottál már az ELK veremről ?

ELK verem

E - Elasticsearch , L - Logstash , K - Kibana

Hadd adjak egy rövid bevezetést. Az ELK verem három nyílt forráskódú szoftver gyűjteménye, amely valós idejű betekintést nyújt strukturált vagy strukturálatlan adatokról. Az eszközök segítségével rendkívül könnyedén és hatékonyan lehet keresni és elemezni az adatokat.

Az Elasticsearch egy elosztott, RESTful kereső és elemző motor, amely egyre több felhasználási eset megoldására képes. Az Elastic Stack szíveként központilag tárolja az adatait, így felfedezheti a vártakat és feltárhatja a váratlanokat. Az Elasticsearch segítségével sokféle keresést hajthat végre és kombinálhat - strukturált, strukturálatlan, földrajzi, metrikus stb. A Java programozási nyelvre épül, amely lehetővé teszi az Elasticsearch különböző platformokon történő futtatását. Lehetővé teszi a felhasználók számára, hogy nagyon nagy mennyiségű adatot fedezzenek fel nagy sebességgel.

A Logstash egy nyílt forráskódú, kiszolgálóoldali adatfeldolgozó folyamat, amely egyszerre sok forrásból gyűjti az adatokat, átalakítja azokat, majd elküldi a kedvenc "tárhelyedbe" (például az Elasticsearch). Az adatokat gyakran szétszórják vagy elnémítják sok rendszerben, sokféle formátumban. A Logstash különféle bemeneteket támogat, amelyek az eseményeket számos közös forrásból, egyidejűleg vonják be. Könnyen felveheti naplóiból, mutatóiból, webalkalmazásaiból, adattárolóiból és különböző AWS-szolgáltatásaiból, mindezt folyamatos, streaming formában. A Logstash plug-inelhető keretrendszerrel rendelkezik, amely több mint 200 beépülő modult tartalmaz. Keverje össze, illessze össze és hangszerelje össze a különböző bemeneteket, szűrőket és kimeneteket, hogy párhuzamosan működjenek.

A Kibana egy nyílt forráskódú elemzési és vizualizációs platform, amelyet az Elasticsearch programmal való együttműködésre terveztek. A Kibana segítségével kereshet, megtekinthet és interakcióba léphet az Elasticsearch indexekben tárolt adatokkal. Könnyedén elvégezheti a fejlett adatelemzést, és különféle diagramokban, táblázatokban és térképekben jelenítheti meg adatait. A Kibana megkönnyíti a nagy mennyiségű adat megértését. Egyszerű, böngészőalapú kezelőfelülete lehetővé teszi dinamikus irányítópultok gyors létrehozását és megosztását, amelyek valós időben jelenítik meg az Elasticsearch lekérdezések változását.

Ha jobb képet szeretne kapni arról a munkafolyamatról, hogy a három szoftver hogyan hat egymással, olvassa el az alábbi ábrát:

Végrehajtás

Bejelentkezés a Pythonba

Itt döntöttem a naplózás Python-ban való megvalósításának elmagyarázásáról, mert ez a leggyakrabban használt nyelv a több gép és a tárgyak internete közötti kommunikációt magában foglaló projektekhez. Segít átfogó képet adni a működéséről.

A Python a naplózási rendszert a szokásos könyvtár részeként biztosítja, így gyorsan hozzáadhatja a naplózást az alkalmazásához.

import logging

A Pythonban a naplózás 5 különböző szinten történhet, amelyek mindegyike jelzi az esemény típusát. Ezek a következők:

  • Info - Olyan információs üzeneteket jelöl meg, amelyek durva részletességgel kiemelik az alkalmazás előrehaladását.
  • Hibakeresés - Finom részletességű információs eseményeket jelöl ki, amelyek a leghasznosabbak egy alkalmazás hibakereséséhez.
  • Figyelem - potenciálisan káros helyzeteket jelöl.
  • Hiba - Olyan hibaeseményeket jelöl, amelyek továbbra is lehetővé teszik az alkalmazás futtatását.
  • Kritikus - Olyan nagyon súlyos hibaeseményeket jelöl, amelyek feltehetően az alkalmazás megszakadásához vezetnek.

Ezért a naplózandó problémától függően a meghatározott szintet ennek megfelelően használjuk.

Megjegyzés : Az Info és a Debug alapértelmezés szerint nem kerül naplózásra, mivel csak a Warning és magasabb szintű naplók kerülnek naplózásra.

Most, hogy példát adjak, és létrehozzak egy napló utasításokat a megjelenítéshez, létrehoztam egy Python szkriptet, amely naplózza a meghatározott formátumú utasításokat és egy üzenetet.

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

Itt a napló utasítások a megadott formátumú logFile.txt nevű fájlhoz csatolódnak . Három napig futtattam a szkriptet, különböző időintervallumokban, létrehozva egy fájlt, amely véletlenszerűen tartalmaz naplókat, az alábbiak szerint:

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

Az Elasticsearch, a Logstash és a Kibana beállítása

Eleinte töltsük le a három nyílt forráskódú szoftvert a megfelelő linkjeikről [elasticsearch], [logstash] és [kibana]. Csomagolja ki a fájlokat, és helyezze mindhármat a projekt mappába.

Kezdjük el.

1. lépés - A Kibana és az Elasticsearch beállítása a helyi rendszeren. A Kibana-t a következő paranccsal futtatjuk a Kibana bin mappájában.

bin\kibana

Ehhez hasonlóan az Elasticsearch is így van beállítva:

bin\elasticsearch

Most a két külön terminálban láthatjuk, hogy mindkét modul fut. Annak ellenőrzése érdekében, hogy a szolgáltatások futnak-e nyitott localhost: 5621 és localhost: 9600 .

Miután mindkét szolgáltatás sikeresen fut, a Logstash és a Python programokat használjuk a nyers naplóadatok elemzéséhez és továbbításához az Elasticsearchhez, ahonnan a Kibana adatokat kérdez le.

2. lépés - Most folytassuk a Logstash-szal. A Logstash elindítása előtt létrejön egy Logstash konfigurációs fájl, amelyben megadják a bemeneti fájl részleteit, a kimenet helyét és a szűrési módszereket.

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} }

Ez a konfigurációs fájl fontos szerepet játszik az ELK veremben. Vessen egy pillantást a {grok {…}} szűrősorra . Ez egy Grok szűrő beépülő modul. A Grok remek módszer a strukturálatlan naplóadatok strukturált és lekérdezhetővé elemzésére. Ez az eszköz tökéletes a syslog naplókhoz, az apache és más webszerverek naplóihoz, a mysql naplókhoz, és általában minden olyan naplóformátumhoz, amelyet általában emberek számára írnak, és nem számítógépes fogyasztásra. Ez a kódban említett grokminta megmondja a Logstash-nak, hogyan kell elemezni a naplófájlunk minden egyes sort.

Most mentse a fájlt a Logstash mappába, és indítsa el a Logstash szolgáltatást.

bin\logstash –f logstash-simple.conf
Ha többet szeretne megtudni a logstash konfigurálásáról, kattintson [ ide ].

3. lépés - Ezt követően a naplófájlok elemzett adatai elérhetők lesznek a Kibana menedzsmentnél a localhost: 5621 oldalon különböző látványtervek és irányítópultok létrehozásához. Annak ellenőrzéséhez, hogy a Kibana kap-e adatokat, futtassa a következő parancsot a Kibana kezelő lapján:

localhost:9200/_cat/indices?v

Ez megjeleníti az összes indexet. Minden megjelenítéshez ki kell választani egy új Index mintát a dev eszközök közül, amelyek után különféle megjelenítési technikákat alkalmaznak az irányítópult létrehozására.

Irányítópult a Kibana használatával

Miután mindent beállított, itt az ideje grafikonokat készíteni a naplóadatok vizualizálása érdekében.

A Kibana menedzsment honlapjának megnyitása után felkérést kapunk egy új indexminta létrehozására. Írja index_name*be az Index minta mezőbe, és az Időszűrő mező neve legördülő menüből válassza a @timestamp lehetőséget .

Most grafikonok létrehozásához megyünk a Megjelenítés fülre.

Válasszon új megjelenítést, válasszon egy gráfot és indexnevet, majd a tengelyigényétől függően hozzon létre egy grafikont. Hozhatunk létre hisztogramot az y tengellyel, mint gróf és x tengellyel a log szintű kulcsszóval vagy az időbélyegzővel.

Néhány grafikon létrehozása után hozzáadhatjuk az összes szükséges megjelenítést és létrehozhatunk egy Irányítópultot , az alábbiak szerint:

Megjegyzés - Amikor a naplófájlban található naplók frissülnek vagy az előző naplókhoz csatolódnak, mindaddig, amíg a három szolgáltatás az elasticsearch adatait futtatja, és a kibanában lévő grafikonok automatikusan frissülnek az új adatoknak megfelelően.

Csomagolás

A naplózás segítséget nyújthat a hibák leküzdésében és a programok hibakeresésében a nyomtatott utasítás használata helyett. A naplózási modul az üzeneteket különböző szintek szerint osztja fel. Ennek eredményeként jobban megértjük a kódot és azt, hogy hogyan halad a hívásfolyam a program megszakítása nélkül.

Az adatok megjelenítése szükséges lépés azokban a helyzetekben, amikor minden pillanatban hatalmas mennyiségű adat keletkezik. Az adat-vizualizációs eszközök és technikák új megközelítéseket kínálnak a vezetőknek és más tudásmunkásoknak, hogy drámai módon javítsák képességüket az adatokban elrejtett információk megragadásában. A hibanaplók gyors azonosítása, az adatok egyszerű megértése és a nagymértékben testreszabható adat-látvány az előnyök egy része. Ez a nyers adatok szervezésének egyik legkonstruktívabb módja.

További tájékoztatásért olvassa el az ELK hivatalos dokumentációját - //www.elastic.co/learn és a bejelentkezésről a pythonban - //docs.python.org/2/library/logging.html