Strukturálatlan adatok strukturálása GROK-kal
Ha az Elastic (ELK) stacket használja, és szeretné az egyéni Logstash-naplókat hozzárendelni az Elasticsearch-hez, akkor ez a bejegyzés az Ön számára készült.
Az ELK verem három nyílt forráskódú projekt rövidítése: Elasticsearch, Logstash és Kibana. Együtt naplókezelési platformot alkotnak.
- Elasticsearch egy kereső és elemző rendszer.
- Logstash egy szerveroldali adatfeldolgozási folyamat, amely egyszerre több forrásból is feldolgozza az adatokat, átalakítja azokat, majd elküldi egy „rejtőhelyre”, például az Elasticsearch-ba.
- kibana lehetővé teszi a felhasználók számára az adatok megjelenítését diagramok és grafikonok segítségével az Elasticsearch alkalmazásban.
Beats később jött, és egy könnyű adatszállító. A Beats bevezetése az Elk Stack-et Elastic Stackvé változtatta, de nem ez a lényeg.
Ez a cikk a Grokról szól, amely a Logstash egy olyan funkciója, amely képes átalakítani a naplókat, mielőtt azok a rejtettbe kerülnének. Céljaink szempontjából csak a Logstash-ból az Elasticsearch-be történő adatfeldolgozásról beszélek.
A Grok egy Logstash-en belüli szűrő, amely a strukturálatlan adatok strukturált és lekérdezhető elemévé történő elemzésére szolgál. Egy reguláris kifejezés (regex) tetején helyezkedik el, és szövegmintákat használ a naplófájlokban található karakterláncok egyeztetésére.
Amint azt a következő szakaszokban látni fogjuk, a Grok használata nagy különbséget jelent a hatékony naplókezelés terén.
A Grok nélkül a naplóadatok strukturálatlanok
Grok nélkül, amikor a naplókat elküldik a Logstash-ból az Elasticsearch-be, és a Kibanában jelennek meg, csak az üzenet értékében jelennek meg.
Ebben a helyzetben az értelmes információk lekérdezése nehéz, mivel az összes naplóadat egyetlen kulcsban van tárolva. Jobb lenne, ha a naplóüzenetek jobban rendszerezve lennének.
Strukturálatlan adatok naplókból
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Ha alaposan megnézi a nyers adatokat, látni fogja, hogy valójában különböző részekből áll, amelyeket szóközzel választ el.
A tapasztaltabb fejlesztők valószínűleg kitalálhatják, mit jelentenek az egyes részek, és mi ez a naplóüzenet az API-hívásból. Az egyes tételek bemutatását az alábbiakban vázoljuk.
Adataink strukturált nézete
- localhost == környezet
- GET == módszer
- /v2/applink/5c2f4bb3e9fda1234edc64d == url
- 400 == válasz_állapota
- 46 ms == válaszidő
- 5bc6e716b5d6cb35fc9687c0 == user_id
Amint azt a strukturált adatoknál látjuk, a strukturálatlan naplók sorrendje van. A következő lépés a nyers adatok szoftveres feldolgozása. Itt ragyog Grok.
Grok sablonok
Beépített Grok sablonok
A Logstash több mint 100 beépített sablonnal rendelkezik a strukturálatlan adatok strukturálásához. Mindenképpen ki kell használnia ezt az általános rendszernaplókhoz, mint például az apache, linux, haproxy, aws és így tovább, amikor csak lehetséges.
Mi történik azonban, ha a fenti példához hasonló egyéni naplók vannak? Saját Grok-sablont kell készítenie.
Egyedi Grok sablonok
Meg kell próbálnia megépíteni a saját Grok sablonját. használtam
Vegye figyelembe, hogy a Grok sablon szintaxisa a következő: %{SYNTAX:SEMANTIC}
Az első dolgom, hogy a lapra léptem Ismerj meg minket a Grok hibakeresőben. Úgy gondoltam, jó lenne, ha ez az eszköz automatikusan generálna egy Grok-mintát, de nem volt túl hasznos, mivel csak két egyezést talált.
Ezt a felfedezést felhasználva elkezdtem létrehozni saját sablonomat a Grok hibakeresőben az Elastic Github oldalon található szintaxis használatával.
Miután végigjátszottam a különböző szintaxisokkal, végre sikerült úgy strukturálnom a naplóadatokat, ahogyan szerettem volna.
Grok hibakereső hivatkozás
Eredeti szöveg:
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Minta:
%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}
Mi történt a végén
{
"environment": [
[
"localhost"
]
],
"method": [
[
"GET"
]
],
"url": [
[
"/v2/applink/5c2f4bb3e9fda1234edc64d"
]
],
"response_status": [
[
"400"
]
],
"BASE10NUM": [
[
"400"
]
],
"response_time": [
[
"46ms"
]
],
"user_id": [
[
"5bc6e716b5d6cb35fc9687c0"
]
]
}
A Grok-sablonnal és a leképezett adatokkal az utolsó lépés az, hogy hozzáadjuk a Logstashhoz.
A Logstash.conf konfigurációs fájl frissítése
Nyissa meg a Logstash konfigurációját azon a kiszolgálón, amelyre az ELK veremet telepítette:
sudo vi /etc/logstash/conf.d/logstash.conf
Illessze be a módosításokat.
input {
file {
path => "/your_logs/*.log"
}
}
filter{
grok {
match => { "message" => "%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}"}
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
}
}
A módosítások mentése után indítsa újra a Logstash-t, és ellenőrizze az állapotát, hogy megbizonyosodjon arról, hogy továbbra is működik.
sudo service logstash restart
sudo service logstash status
Végül, hogy megbizonyosodjon arról, hogy a változtatások életbe léptek, Feltétlenül frissítse az Elasticsearch indexet a Logstash in Kibanában!
A Grokkal a naplóadatok strukturáltak!
Amint a fenti képen láthatjuk, a Grok képes automatikusan egyeztetni a naplóadatokat az Elasticsearch-el. Ez megkönnyíti a naplók kezelését és az információk gyors lekérdezését. Ahelyett, hogy a naplófájlok között keresgélne a hibakereséshez, egyszerűen szűrhet a keresett dolgok, például egy környezet vagy egy URL alapján.
Próbáld ki a Grok kifejezéseket! Ha van más módja ennek, vagy bármilyen problémája van a fenti példákkal, csak írjon megjegyzést alább, hogy tudassa velem.
Köszönjük, hogy elolvasta – és kérem, kövessen engem itt a Mediumon további érdekes szoftvermérnöki cikkekért!
Ресурсы
Telegram csatorna által
Forrás: will.com