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.
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.
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
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
Ņ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.
Izmantojot šo atklājumu, es sāku izveidot savu veidni Grok atkļūdotājs, izmantojot Elastic Github lapā atrodamo sintaksi.
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.
Grok atkļūdotāja saite
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ā!
Izmantojot Grok, jūsu žurnāla dati ir strukturēti!
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
PS
Telegram kanāls
Avots: www.habr.com