Tippek és trükkök a strukturálatlan adatok naplókból ELK Stackbe konvertálásához a GROK használatával a LogStashban

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.

Tippek és trükkök a strukturálatlan adatok naplókból ELK Stackbe konvertálásához a GROK használatával a LogStashban

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.

Tippek és trükkök a strukturálatlan adatok naplókból ELK Stackbe konvertálásához a GROK használatával a LogStashban

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

Tippek és trükkök a strukturálatlan adatok naplókból ELK Stackbe konvertálásához a GROK használatával a LogStashban

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 Grok hibakereső и Grok minták.

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.

Tippek és trükkök a strukturálatlan adatok naplókból ELK Stackbe konvertálásához a GROK használatával a LogStashban

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.

Tippek és trükkök a strukturálatlan adatok naplókból ELK Stackbe konvertálásához a GROK használatával a LogStashban

Miután végigjátszottam a különböző szintaxisokkal, végre sikerült úgy strukturálnom a naplóadatokat, ahogyan szerettem volna.

Tippek és trükkök a strukturálatlan adatok naplókból ELK Stackbe konvertálásához a GROK használatával a LogStashban

Grok hibakereső hivatkozás https://grokdebug.herokuapp.com/

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!

Tippek és trükkök a strukturálatlan adatok naplókból ELK Stackbe konvertálásához a GROK használatával a LogStashban

A Grokkal a naplóadatok strukturáltak!

Tippek és trükkök a strukturálatlan adatok naplókból ELK Stackbe konvertálásához a GROK használatával a LogStashban

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!

Ресурсы

https://www.elastic.co/blog/do-you-grok-grok
https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
https://grokdebug.herokuapp.com/

PS Link a forráshoz

Telegram csatorna által Elasticsearch

Forrás: will.com

Hozzászólás