Padomi un triki nestrukturētu datu konvertēšanai no žurnāliem uz ELK Stack, izmantojot GROK programmā Logstash

Nestrukturētu datu strukturēšana ar GROK

Ja izmantojat elastīgo (ELK) steku un vēlaties kartēt pielāgotus Logstash žurnālus ar Elasticsearch, tad šī ziņa ir paredzēta jums.

Padomi un triki nestrukturētu datu konvertēšanai no žurnāliem uz ELK Stack, izmantojot GROK programmā Logstash

ELK kaudze ir akronīms trim atvērtā pirmkoda projektiem: Elasticsearch, Logstash un Kibana. Kopā tie veido žurnālu pārvaldības platformu.

  • Elastikas meklēšana ir meklēšanas un analīzes sistēma.
  • Logstash ir servera puses datu apstrādes konveijers, kas vienlaikus uzņem datus no vairākiem avotiem, pārveido tos un pēc tam nosūta uz “atlicinātāju”, piemēram, Elasticsearch.
  • Kibana ļauj lietotājiem vizualizēt datus, izmantojot Elasticsearch diagrammas un grafikus.

Beats nāca vēlāk un ir viegls datu nosūtītājs. Beats ieviešana pārveidoja Elk Stack par Elastic Stack, taču tas nav galvenais.

Šis raksts ir par Groku, kas ir Logstash līdzeklis, kas var pārveidot jūsu žurnālus, pirms tie tiek nosūtīti uz atlicinātāju. Mūsu vajadzībām es runāšu tikai par datu apstrādi no Logstash uz Elasticsearch.

Padomi un triki nestrukturētu datu konvertēšanai no žurnāliem uz ELK Stack, izmantojot GROK programmā Logstash

Grok ir Logstash filtrs, ko izmanto, lai parsētu nestrukturētus datus par kaut ko strukturētu un vaicājamu. Tas atrodas virs regulārās izteiksmes (regex) un izmanto teksta modeļus, lai saskaņotu virknes žurnālfailos.

Kā mēs redzēsim nākamajās sadaļās, Grok izmantošana ievērojami uzlabo efektīvu žurnālu pārvaldību.

Bez Grok jūsu žurnāla dati nav strukturēti

Padomi un triki nestrukturētu datu konvertēšanai no žurnāliem uz ELK Stack, izmantojot GROK programmā Logstash

Bez Grok, kad žurnāli tiek sūtīti no Logstash uz Elasticsearch un tiek renderēti programmā Kibana, tie tiek rādīti tikai ziņojuma vērtībā.

Nozīmīgas informācijas vaicāšana šajā situācijā ir sarežģīta, jo visi žurnāla dati tiek glabāti vienā atslēgā. Būtu labāk, ja žurnāla ziņojumi būtu labāk sakārtoti.

Nestrukturēti dati no žurnāliem

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

Ja uzmanīgi aplūkosiet neapstrādātos datus, redzēsiet, ka tie faktiski sastāv no dažādām daļām, no kurām katra ir atdalīta ar atstarpi.

Pieredzējuši izstrādātāji droši vien var uzminēt, ko nozīmē katra daļa un kāds ir šis žurnāla ziņojums no API izsaukuma. Katra vienuma prezentācija ir izklāstīta zemāk.

Mūsu datu strukturēts skats

  • localhost == vide
  • GET == metode
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == atbildes_statuss
  • 46 ms == atbildes_laiks
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Kā redzam strukturētajos datos, pastāv pasūtījums nestrukturētiem žurnāliem. Nākamais solis ir neapstrādātu datu programmatūras apstrāde. Šeit spīd Groks.

Groka veidnes

Iebūvētās Grok veidnes

Logstash ir aprīkots ar vairāk nekā 100 iebūvētām veidnēm nestrukturētu datu strukturēšanai. Jums noteikti vajadzētu to izmantot, kad vien iespējams, vispārīgiem sistēmas žurnāliem, piemēram, apache, linux, haproxy, aws un tā tālāk.

Tomēr, kas notiek, ja jums ir pielāgoti žurnāli, piemēram, iepriekš minētajā piemērā? Jums ir jāizveido sava Grok veidne.

Pielāgotas Grok veidnes

Jums ir jāmēģina izveidot savu Grok veidni. ES izmantoju Groks atkļūdotājs и Groka raksti.

Ņemiet vērā, ka Grok veidnes sintakse ir šāda: %{SYNTAX:SEMANTIC}

Pirmā lieta, ko mēģināju darīt, bija doties uz cilni Ieskaties Grok atkļūdotājs. Man likās, ka būtu lieliski, ja šis rīks varētu automātiski ģenerēt Groka modeli, taču tas nebija pārāk noderīgs, jo atrada tikai divas atbilstības.

Padomi un triki nestrukturētu datu konvertēšanai no žurnāliem uz ELK Stack, izmantojot GROK programmā Logstash

Izmantojot šo atklājumu, es sāku izveidot savu veidni Grok atkļūdotājs, izmantojot Elastic Github lapā atrodamo sintaksi.

Padomi un triki nestrukturētu datu konvertēšanai no žurnāliem uz ELK Stack, izmantojot GROK programmā Logstash

Pēc spēlēšanās ar dažādām sintaksēm es beidzot varēju strukturēt žurnāla datus tā, kā vēlējos.

Padomi un triki nestrukturētu datu konvertēšanai no žurnāliem uz ELK Stack, izmantojot GROK programmā Logstash

Grok atkļūdotāja saite https://grokdebug.herokuapp.com/

Oriģinālais teksts:

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

Modelis:

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

Kas notika beigās

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

Izmantojot Grok veidni un kartētos datus, pēdējais solis ir pievienot to Logstash.

Logstash.conf konfigurācijas faila atjaunināšana

Serverī, kurā instalējāt ELK steku, dodieties uz Logstash konfigurāciju:

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

Ielīmējiet izmaiņas.

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

Pēc izmaiņu saglabāšanas restartējiet Logstash un pārbaudiet tā statusu, lai pārliecinātos, ka tas joprojām darbojas.

sudo service logstash restart
sudo service logstash status

Visbeidzot, lai pārliecinātos, ka izmaiņas ir stājušās spēkā, Noteikti atjauniniet savu Elasticsearch indeksu Logstash Kibanā!

Padomi un triki nestrukturētu datu konvertēšanai no žurnāliem uz ELK Stack, izmantojot GROK programmā Logstash

Izmantojot Grok, jūsu žurnāla dati ir strukturēti!

Padomi un triki nestrukturētu datu konvertēšanai no žurnāliem uz ELK Stack, izmantojot GROK programmā Logstash

Kā redzams attēlā iepriekš, Grok spēj automātiski saskaņot žurnāla datus ar Elasticsearch. Tādējādi ir vieglāk pārvaldīt žurnālus un ātri meklēt informāciju. Tā vietā, lai meklētu žurnālfailus, lai veiktu atkļūdošanu, varat vienkārši filtrēt pēc tā, ko meklējat, piemēram, pēc vides vai URL.

Izmēģiniet Groka izteicienus! Ja jums ir kāds cits veids, kā to izdarīt, vai rodas problēmas ar iepriekš minētajiem piemēriem, vienkārši ierakstiet tālāk komentāru, lai man par to paziņotu.

Paldies, ka lasījāt, un, lūdzu, sekojiet man šeit vietnē Medium, lai iegūtu interesantākus programmatūras inženierijas rakstus!

Resursi

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 Avota saite

Telegram kanāls Elastikas meklēšana

Avots: www.habr.com

Pievieno komentāru