Tips en trúkjes foar it konvertearjen fan ûnstrukturearre gegevens fan logs nei ELK Stack mei GROK yn LogStash

Unstrukturearre gegevens strukturearje mei GROK

As jo ​​​​de Elastic (ELK)-stapel brûke en ynteressearre binne yn it yn kaart bringen fan oanpaste Logstash-logs nei Elasticsearch, dan is dizze post foar jo.

Tips en trúkjes foar it konvertearjen fan ûnstrukturearre gegevens fan logs nei ELK Stack mei GROK yn LogStash

De ELK-stapel is in akronym foar trije iepen boarne-projekten: Elasticsearch, Logstash en Kibana. Tegearre foarmje se in logbehearplatfoarm.

  • Elastyskesearch is in syk- en analytysk systeem.
  • logstash is in tsjinner-side gegevensferwurkingspipeline dy't gegevens fan meardere boarnen tagelyk opnimt, it transformearret en dan stjoert nei in "stash" lykas Elasticsearch.
  • kibana lit brûkers gegevens visualisearje mei diagrammen en grafiken yn Elasticsearch.

Beats kaam letter en is in lichtgewicht gegevens shipper. De ynfiering fan Beats feroare de Elk Stack yn 'e Elastic Stack, mar dat is net it punt.

Dit artikel giet oer Grok, dat is in funksje yn Logstash dy't jo logs kin transformearje foardat se nei de stash wurde stjoerd. Foar ús doelen sil ik allinich prate oer it ferwurkjen fan gegevens fan Logstash yn Elasticsearch.

Tips en trúkjes foar it konvertearjen fan ûnstrukturearre gegevens fan logs nei ELK Stack mei GROK yn LogStash

Grok is in filter yn Logstash dat wurdt brûkt om ûnstrukturearre gegevens te parsearjen yn wat strukturearre en queryable. It sit boppe op in reguliere ekspresje (regex) en brûkt tekstpatroanen om stringen te passen yn logbestannen.

As wy sille sjen yn 'e folgjende seksjes, it brûken fan Grok makket in grut ferskil as it giet om effisjint logbehear.

Sûnder Grok binne jo loggegevens net struktureare

Tips en trúkjes foar it konvertearjen fan ûnstrukturearre gegevens fan logs nei ELK Stack mei GROK yn LogStash

Sûnder Grok, as logs wurde ferstjoerd fan Logstash nei Elasticsearch en rendered yn Kibana, se ferskine allinnich yn de berjocht wearde.

It opfreegjen fan betsjuttingsfolle ynformaasje yn dizze situaasje is lestich, om't alle loggegevens yn ien kaai opslein wurde. It soe better wêze as de logberjochten better organisearre wiene.

Unstrukturearre gegevens út logs

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

As jo ​​de rauwe gegevens goed besjen, sille jo sjen dat it eins bestiet út ferskate dielen, elk skieden troch in spaasje.

Foar mear erfarne ûntwikkelders kinne jo wierskynlik riede wat elk fan 'e dielen betsjut en wat dat logberjocht is fan' e API-oprop. De presintaasje fan elk item wurdt hjirûnder beskreaun.

Strukturearre werjefte fan ús gegevens

  • localhost == omjouwing
  • GET == metoade
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • 400 == antwurdstatus
  • 46ms == reaksjetiid
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

As wy sjogge yn strukturearre gegevens, is d'r in oarder foar unstrukturearre logs. De folgjende stap is softwareferwurking fan rauwe gegevens. Dit is wêr't Grok skynt.

Grok Templates

Ynboude Grok-sjabloanen

Logstash komt mei mear as 100 ynboude sjabloanen foar it strukturearjen fan net-strukturearre gegevens. Jo moatte perfoarst profitearje fan dit wannear mooglik foar algemiene syslogs lykas apache, linux, haproxy, aws ensafuorthinne.

Wat bart der lykwols as jo oanpaste logs hawwe lykas yn it foarbyld hjirboppe? Jo moatte jo eigen Grok-sjabloan bouwe.

Oanpaste Grok-sjabloanen

Jo moatte besykje jo eigen Grok-sjabloan te bouwen. ik brûkte Grok Debugger и Grok Patterns.

Tink derom dat de Grok-sjabloansyntaksis as folget is: %{SYNTAX:SEMANTIC}

It earste wat ik besocht te dwaan wie nei it ljepblêd gean Ûntdekke yn de Grok debugger. Ik tocht dat it soe wêze opnij cool as dit ark koe automatysk generearje in Grok patroan, mar it wie net te brûkber sûnt it fûn mar twa wedstriden.

Tips en trúkjes foar it konvertearjen fan ûnstrukturearre gegevens fan logs nei ELK Stack mei GROK yn LogStash

Mei dizze ûntdekking begon ik myn eigen sjabloan te meitsjen yn 'e Grok-debugger mei de syntaksis fûn op' e Elastic Github-side.

Tips en trúkjes foar it konvertearjen fan ûnstrukturearre gegevens fan logs nei ELK Stack mei GROK yn LogStash

Nei it boartsjen mei ferskate syntaksis, koe ik einlings de loggegevens strukturearje lykas ik woe.

Tips en trúkjes foar it konvertearjen fan ûnstrukturearre gegevens fan logs nei ELK Stack mei GROK yn LogStash

Grok Debugger Link https://grokdebug.herokuapp.com/

Orizjinele tekst:

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

Patroan:

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

Wat barde der op it lêst

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

Mei de Grok-sjabloan en mappen gegevens yn 'e hân, is de lêste stap om it ta te foegjen oan Logstash.

It bywurkjen fan it konfiguraasjetriem Logstash.conf

Op de tsjinner wêr't jo de ELK-stapel ynstalleare, gean nei de Logstash-konfiguraasje:

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

Plak de wizigingen.

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

Nei it bewarjen fan jo wizigingen, starte Logstash opnij en kontrolearje de status om te soargjen dat it noch wurket.

sudo service logstash restart
sudo service logstash status

As lêste, om te soargjen dat de wizigingen effekt binne, Wês wis dat jo jo Elasticsearch-yndeks bywurkje foar Logstash yn Kibana!

Tips en trúkjes foar it konvertearjen fan ûnstrukturearre gegevens fan logs nei ELK Stack mei GROK yn LogStash

Mei Grok binne jo loggegevens strukturearre!

Tips en trúkjes foar it konvertearjen fan ûnstrukturearre gegevens fan logs nei ELK Stack mei GROK yn LogStash

Lykas wy kinne sjen yn 'e ôfbylding hjirboppe, is Grok yn steat om loggegevens automatysk te passen mei Elasticsearch. Dit makket it makliker om logs te behearjen en ynformaasje fluch te freegjen. Ynstee fan lochbestannen te graven om te debuggen, kinne jo gewoan filterje op wat jo sykje, lykas in omjouwing of in url.

Jou Grok útdrukkingen in poging! As jo ​​​​in oare manier hawwe om dit te dwaan of problemen hawwe mei de boppesteande foarbylden, skriuw dan gewoan in reaksje hjirûnder om my te litten witte.

Betanke foar it lêzen - en folgje my asjebleaft hjir op Medium foar mear ynteressante artikels oer software-engineering!

Resources

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 nei boarne

Telegram kanaal troch Elastyskesearch

Boarne: www.habr.com

Add a comment