Tips en trucs voor het converteren van ongestructureerde gegevens van logs naar ELK Stack met behulp van GROK in LogStash

Structureren van ongestructureerde data met GROK

Als je de Elastic (ELK)-stack gebruikt en geïnteresseerd bent in het toewijzen van aangepaste Logstash-logboeken aan Elasticsearch, dan is dit bericht iets voor jou.

Tips en trucs voor het converteren van ongestructureerde gegevens van logs naar ELK Stack met behulp van GROK in LogStash

De ELK-stack is een acroniem voor drie open source-projecten: Elasticsearch, Logstash en Kibana. Samen vormen ze een logbeheerplatform.

  • Elasticsearch is een zoek- en analysesysteem.
  • Logstash is een gegevensverwerkingspijplijn aan de serverzijde die tegelijkertijd gegevens uit meerdere bronnen opneemt, transformeert en vervolgens naar een “stash” zoals Elasticsearch stuurt.
  • Kibana stelt gebruikers in staat gegevens te visualiseren met behulp van grafieken en grafieken in Elasticsearch.

Beats kwam later en is een lichtgewicht gegevensverzender. De introductie van Beats transformeerde de Elk Stack in de Elastic Stack, maar daar gaat het niet om.

Dit artikel gaat over Grok, een functie in Logstash die je logs kan transformeren voordat ze naar de stash worden gestuurd. Voor onze doeleinden zal ik het alleen hebben over het verwerken van gegevens van Logstash in Elasticsearch.

Tips en trucs voor het converteren van ongestructureerde gegevens van logs naar ELK Stack met behulp van GROK in LogStash

Grok is een filter binnen Logstash dat wordt gebruikt om ongestructureerde gegevens te parseren in iets gestructureerds en bevraagbaar. Het bevindt zich bovenop een reguliere expressie (regex) en gebruikt tekstpatronen om tekenreeksen in logbestanden met elkaar te matchen.

Zoals we in de volgende paragrafen zullen zien, maakt het gebruik van Grok een groot verschil als het gaat om efficiënt logbeheer.

Zonder Grok zijn uw loggegevens ongestructureerd

Tips en trucs voor het converteren van ongestructureerde gegevens van logs naar ELK Stack met behulp van GROK in LogStash

Wanneer logboeken zonder Grok van Logstash naar Elasticsearch worden verzonden en in Kibana worden weergegeven, verschijnen ze alleen in de berichtwaarde.

Het opvragen van betekenisvolle informatie is in deze situatie moeilijk omdat alle loggegevens in één sleutel zijn opgeslagen. Het zou beter zijn als de logberichten beter georganiseerd waren.

Ongestructureerde gegevens uit logboeken

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

Als je goed naar de ruwe data kijkt, zie je dat deze feitelijk uit verschillende delen bestaat, elk gescheiden door een spatie.

Voor meer ervaren ontwikkelaars kun je waarschijnlijk raden wat elk van de onderdelen betekent en wat het logbericht is van de API-aanroep. Hieronder wordt de presentatie van elk item beschreven.

Gestructureerde weergave van onze gegevens

  • ​ localhost == omgeving
  • ​ GET == methode
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == antwoord_status
  • ​ 46ms == responstijd
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Zoals we zien bij gestructureerde gegevens, is er een volgorde voor ongestructureerde logboeken. De volgende stap is de softwarematige verwerking van ruwe data. Dit is waar Grok schittert.

Grok-sjablonen

Ingebouwde Grok-sjablonen

Logstash wordt geleverd met meer dan 100 ingebouwde sjablonen voor het structureren van ongestructureerde gegevens. Je moet hier waar mogelijk zeker van profiteren voor algemene syslogs zoals apache, linux, haproxy, aws enzovoort.

Wat gebeurt er echter als u aangepaste logboeken heeft, zoals in het bovenstaande voorbeeld? U moet uw eigen Grok-sjabloon bouwen.

Aangepaste Grok-sjablonen

Je moet proberen je eigen Grok-sjabloon te bouwen. ik gebruikte Grok-debugger и Grok-patronen.

Merk op dat de syntaxis van de Grok-sjabloon als volgt is: %{SYNTAX:SEMANTIC}

Het eerste wat ik probeerde te doen was naar het tabblad gaan Discover in de Grok-foutopsporing. Ik dacht dat het cool zou zijn als deze tool automatisch een Grok-patroon zou kunnen genereren, maar het was niet zo handig omdat het maar twee overeenkomsten vond.

Tips en trucs voor het converteren van ongestructureerde gegevens van logs naar ELK Stack met behulp van GROK in LogStash

Met behulp van deze ontdekking begon ik mijn eigen sjabloon te maken in de Grok-foutopsporing met behulp van de syntaxis die te vinden is op de Elastic Github-pagina.

Tips en trucs voor het converteren van ongestructureerde gegevens van logs naar ELK Stack met behulp van GROK in LogStash

Nadat ik met verschillende syntaxis had gespeeld, kon ik eindelijk de loggegevens structureren zoals ik dat wilde.

Tips en trucs voor het converteren van ongestructureerde gegevens van logs naar ELK Stack met behulp van GROK in LogStash

Grok-foutopsporingslink https://grokdebug.herokuapp.com/

Originele tekst:

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

Patroon:

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

Wat gebeurde er op het einde

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

Met de Grok-sjabloon en de toegewezen gegevens in de hand, is de laatste stap het toevoegen aan Logstash.

Het configuratiebestand Logstash.conf bijwerken

Ga op de server waarop u de ELK-stack hebt geïnstalleerd naar de Logstash-configuratie:

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

Plak de wijzigingen.

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

Nadat u uw wijzigingen heeft opgeslagen, start u Logstash opnieuw op en controleert u de status om er zeker van te zijn dat deze nog steeds werkt.

sudo service logstash restart
sudo service logstash status

Om er ten slotte zeker van te zijn dat de wijzigingen van kracht zijn geworden, Zorg ervoor dat u uw Elasticsearch-index voor Logstash in Kibana bijwerkt!

Tips en trucs voor het converteren van ongestructureerde gegevens van logs naar ELK Stack met behulp van GROK in LogStash

Met Grok zijn uw loggegevens gestructureerd!

Tips en trucs voor het converteren van ongestructureerde gegevens van logs naar ELK Stack met behulp van GROK in LogStash

Zoals we in de bovenstaande afbeelding kunnen zien, is Grok in staat om automatisch loggegevens te matchen met Elasticsearch. Dit maakt het eenvoudiger om logboeken te beheren en snel informatie op te vragen. In plaats van door de logbestanden te bladeren om fouten op te sporen, kunt u eenvoudigweg filteren op wat u zoekt, zoals een omgeving of een URL.

Probeer Grok-uitdrukkingen eens! Als je een andere manier hebt om dit te doen of problemen hebt met de bovenstaande voorbeelden, schrijf dan hieronder een reactie om me dit te laten weten.

Bedankt voor het lezen - en volg mij hier op Medium voor meer interessante artikelen over software-engineering!

Ресурсы

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 naar bron

Telegramkanaal door Elasticsearch

Bron: www.habr.com

Voeg een reactie