Konsiloj kaj lertaĵoj por konverti nestrukturitajn datumojn de protokoloj al ELK Stack uzante GROK en LogStash

Strukturi nestrukturitajn datenojn kun GROK

Se vi uzas la stakon Elastic (ELK) kaj interesiĝas pri mapado de kutimaj Logstash protokoloj al Elasticsearch, tiam ĉi tiu afiŝo estas por vi.

Konsiloj kaj lertaĵoj por konverti nestrukturitajn datumojn de protokoloj al ELK Stack uzante GROK en LogStash

La ELK-stako estas akronimo por tri malfermfontaj projektoj: Elasticsearch, Logstash kaj Kibana. Kune ili formas log-administran platformon.

  • Elasta esploro estas serĉa kaj analiza sistemo.
  • Logstash estas servilflanka datumtraktaddukto, kiu ingestas datumojn de pluraj fontoj samtempe, transformas ĝin, kaj poste sendas ĝin al "stash" kiel ekzemple Elasticsearch.
  • Kibana permesas al uzantoj bildigi datumojn per diagramoj kaj grafikaĵoj en Elasticsearch.

Batiloj venis poste kaj estas malpeza datuma ekspedisto. La enkonduko de Beats transformis la Elk-Stakon en la Elastan Stakon, sed tio ne estas la punkto.

Ĉi tiu artikolo temas pri Grok, kiu estas trajto en Logstash, kiu povas transformi viajn protokolojn antaŭ ol ili estas senditaj al la kaŝejo. Por niaj celoj, mi nur parolos pri prilaborado de datumoj de Logstash en Elasticsearch.

Konsiloj kaj lertaĵoj por konverti nestrukturitajn datumojn de protokoloj al ELK Stack uzante GROK en LogStash

Grok estas filtrilo ene de Logstash, kiu estas uzata por analizi nestrukturitajn datumojn en ion strukturitan kaj demandeblan. Ĝi sidas super regula esprimo (regex) kaj uzas tekstajn ŝablonojn por kongrui ĉenojn en protokolaj dosieroj.

Kiel ni vidos en la sekvaj sekcioj, uzi Grok faras grandan diferencon kiam temas pri efika administrado de protokoloj.

Sen Grok viaj protokolaj datumoj estas nestrukturitaj

Konsiloj kaj lertaĵoj por konverti nestrukturitajn datumojn de protokoloj al ELK Stack uzante GROK en LogStash

Sen Grok, kiam protokoloj estas senditaj de Logstash al Elasticsearch kaj prezentitaj en Kibana, ili nur aperas en la mesaĝvaloro.

Demandi signifajn informojn en ĉi tiu situacio estas malfacila ĉar ĉiuj protokolaj datumoj estas konservitaj en ununura ŝlosilo. Pli bone estus, se la protokolaj mesaĝoj estus pli bone organizitaj.

Nestrukturitaj datumoj de protokoloj

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Se vi rigardas atente la krudajn datumojn, vi vidos, ke ĝi fakte konsistas el malsamaj partoj, ĉiu apartigita per spaco.

Por pli spertaj programistoj, vi verŝajne povas diveni, kion signifas ĉiu el la partoj kaj kio estas tiu protokolo-mesaĝo de la API-voko. La prezento de ĉiu objekto estas skizita malsupre.

Strukturita vido de niaj datumoj

  • localhost == medio
  • GET == metodo
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • 400 == respondo_stato
  • 46ms == tempo_responda
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Kiel ni vidas en strukturitaj datumoj, ekzistas ordo por nestrukturitaj protokoloj. La sekva paŝo estas programara prilaborado de krudaj datumoj. Jen kie Grok brilas.

Grok Ŝablonoj

Enkonstruitaj Grok-ŝablonoj

Logstash venas kun pli ol 100 enkonstruitaj ŝablonoj por strukturi nestrukturitajn datumojn. Vi nepre devus utiligi ĉi tion kiam ajn eblas por ĝeneralaj sislogs kiel apache, linukso, haproxy, aws ktp.

Tamen, kio okazas kiam vi havas kutimajn protokolojn kiel en la supra ekzemplo? Vi devas konstrui vian propran Grok-ŝablonon.

Propraj Grok-ŝablonoj

Vi devas provi konstrui vian propran Grok-ŝablonon. mi uzis Grok Erarserĉilo и Grok Ŝablonoj.

Notu ke la Grok-ŝablona sintakso estas jena: %{SYNTAX:SEMANTIC}

La unua afero, kiun mi provis fari, estis iri al la langeto Discover en la Grok-erarseĉilo. Mi pensis, ke estus bonega se ĉi tiu ilo povus aŭtomate generi Grok-ŝablonon, sed ĝi ne estis tro utila ĉar ĝi nur trovis du kongruojn.

Konsiloj kaj lertaĵoj por konverti nestrukturitajn datumojn de protokoloj al ELK Stack uzante GROK en LogStash

Uzante ĉi tiun malkovron, mi komencis krei mian propran ŝablonon en la Grok-erarseĉilo uzante la sintakson trovitan sur la paĝo Elastic Github.

Konsiloj kaj lertaĵoj por konverti nestrukturitajn datumojn de protokoloj al ELK Stack uzante GROK en LogStash

Post ludado kun malsamaj sintaksoj, mi finfine povis strukturi la protokolojn kiel mi volis.

Konsiloj kaj lertaĵoj por konverti nestrukturitajn datumojn de protokoloj al ELK Stack uzante GROK en LogStash

Ligo de Grok Debugger https://grokdebug.herokuapp.com/

Originala teksto:

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Skemo:

%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}

Kio okazis finfine

{
  "environment": [
    [
      "localhost"
    ]
  ],
  "method": [
    [
      "GET"
    ]
  ],
  "url": [
    [
      "/v2/applink/5c2f4bb3e9fda1234edc64d"
    ]
  ],
  "response_status": [
    [
      "400"
    ]
  ],
  "BASE10NUM": [
    [
      "400"
    ]
  ],
  "response_time": [
    [
      "46ms"
    ]
  ],
  "user_id": [
    [
      "5bc6e716b5d6cb35fc9687c0"
    ]
  ]
}

Kun la ŝablono Grok kaj mapitaj datumoj en la mano, la lasta paŝo estas aldoni ĝin al Logstash.

Ĝisdatigante la agordan dosieron Logstash.conf

Sur la servilo, kie vi instalis la ELK-stakon, iru al la agordo Logstash:

sudo vi /etc/logstash/conf.d/logstash.conf

Algluu la ŝanĝojn.

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

Post konservi viajn ŝanĝojn, rekomencu Logstash kaj kontrolu ĝian staton por certigi, ke ĝi ankoraŭ funkcias.

sudo service logstash restart
sudo service logstash status

Fine, por certigi, ke la ŝanĝoj efektiviĝis, Nepre ĝisdatigu vian Elasticsearch-indekson por Logstash en Kibana!

Konsiloj kaj lertaĵoj por konverti nestrukturitajn datumojn de protokoloj al ELK Stack uzante GROK en LogStash

Kun Grok, viaj protokolaj datumoj estas strukturitaj!

Konsiloj kaj lertaĵoj por konverti nestrukturitajn datumojn de protokoloj al ELK Stack uzante GROK en LogStash

Kiel ni povas vidi en la supra bildo, Grok kapablas aŭtomate kongrui protokolaj datumoj kun Elasticsearch. Ĉi tio faciligas administri protokolojn kaj rapide pridemandi informojn. Anstataŭ fosi tra protokolaj dosieroj por sencimi, vi povas simple filtri laŭ tio, kion vi serĉas, kiel medio aŭ url.

Provu Grok-esprimojn! Se vi havas alian manieron fari tion aŭ havas problemojn kun la supraj ekzemploj, simple skribu komenton sube por sciigi min.

Dankon pro legado—kaj bonvolu sekvi min ĉi tie ĉe Medium por pli interesaj artikoloj pri programaro-inĝenierado!

Rimedoj

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 Fonta ligilo

Telegram-kanalo de Elasta esploro

fonto: www.habr.com

Aldoni komenton