Strutture di dati non strutturati cù GROK
Sè vo aduprate a pila Elastic (ELK) è site interessatu à mapping logs Logstash persunalizati à Elasticsearch, allora questu post hè per voi.
A pila ELK hè un acronimu per trè prughjetti open source: Elasticsearch, Logstash è Kibana. Inseme formanu una piattaforma di gestione di log.
- Elasticsearch hè un sistema di ricerca è analitica.
- Logstash hè un pipeline di trasfurmazioni di dati da u servitore chì ingest data da parechje fonti simultaneamente, trasfurmà, è poi l'invia à un "stash" cum'è Elasticsearch.
- Kibana permette à l'utilizatori di visualizà e dati utilizendu charts è grafici in Elasticsearch.
Beats hè vinutu dopu è hè un speditore di dati ligeru. L'intruduzioni di Beats hà trasfurmatu l'Elk Stack in l'Elastic Stack, ma questu ùn hè micca u puntu.
Questu articulu hè di Grok, chì hè una funzione in Logstash chì pò trasfurmà i vostri logs prima di esse mandati à u stash. Per i nostri scopi, parleraghju solu di trasfurmà e dati da Logstash in Elasticsearch.
Grok hè un filtru in Logstash chì hè utilizatu per analizà e dati non strutturati in qualcosa strutturatu è interrogabile. Si trova nantu à una espressione regulare (regex) è usa mudelli di testu per currisponde à e stringhe in i schedarii di log.
Cumu vedemu in e sezzioni seguenti, l'usu di Grok face una grande diferenza quandu si tratta di una gestione efficiente di log.
Senza Grok i vostri dati di logu ùn sò micca strutturati
Senza Grok, quandu i logs sò mandati da Logstash à Elasticsearch è resi in Kibana, appariscenu solu in u valore di u messagiu.
A dumanda di infurmazione significativa in questa situazione hè difficiule perchè tutti i dati di logu sò guardati in una sola chjave. Saria megliu s'ellu i missaghji di log eranu megliu urganizata.
Dati micca strutturati da logs
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Se guardate attentamente i dati crudi, vi vede chì in realtà hè custituitu da diverse parti, ognuna siparata da un spaziu.
Per i sviluppatori più sperimentati, pudete probabilmente indovinà ciò chì ognuna di e parte significa è ciò chì u messagiu di log hè da a chjama API. A presentazione di ogni articulu hè delineata quì sottu.
Vista strutturata di i nostri dati
- localhost == ambiente
- GET == metudu
- /v2/applink/5c2f4bb3e9fda1234edc64d == url
- 400 == risposta_status
- 46 ms == tempu di risposta
- 5bc6e716b5d6cb35fc9687c0 == user_id
Comu avemu vistu in dati strutturati, ci hè un ordine per logs unstructured. U prossimu passu hè u prucessu di software di dati crudi. Questu hè induve Grok brilla.
Modelli di Grok
Modelli Grok integrati
Logstash vene cun più di 100 mudelli integrati per a strutturazione di dati non strutturati. Duvete definitivamente prufittà di questu sempre chì hè pussibule per i syslogs generale cum'è apache, linux, haproxy, aws è cusì.
Tuttavia, chì succede quandu avete logs persunalizati cum'è in l'esempiu sopra? Duvete custruisce u vostru propiu mudellu Grok.
Modelli Grok persunalizati
Avete da pruvà à custruisce u vostru propiu mudellu Grok. Aghju utilizatu
Nota chì a sintassi di u mudellu Grok hè a siguenti: %{SYNTAX:SEMANTIC}
A prima cosa ch'e aghju pruvatu à fà era andà à a tabulazione Discover in u debugger Grok. Pensu chì saria bellu se sta strumentu puderia generà automaticamente un mudellu Grok, ma ùn era micca troppu utile postu chì hà truvatu solu duie partite.
Utilizendu sta scuperta, aghju cuminciatu à creà u mo propiu mudellu in u Grok debugger utilizendu a sintassi truvata in a pagina Elastic Github.
Dopu avè ghjucatu cù diverse sintassi, aghju statu infine capace di strutturà i dati di u logu cumu vulia.
Grok Debugger Link
Testu originale:
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Pattern:
%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}
Ciò chì hè accadutu à a fine
{
"environment": [
[
"localhost"
]
],
"method": [
[
"GET"
]
],
"url": [
[
"/v2/applink/5c2f4bb3e9fda1234edc64d"
]
],
"response_status": [
[
"400"
]
],
"BASE10NUM": [
[
"400"
]
],
"response_time": [
[
"46ms"
]
],
"user_id": [
[
"5bc6e716b5d6cb35fc9687c0"
]
]
}
Cù u mudellu di Grok è i dati mappati in manu, l'ultimu passu hè di aghjunghje à Logstash.
Aghjurnà u schedariu di cunfigurazione Logstash.conf
In u servitore induve installate a pila ELK, andate à a cunfigurazione Logstash:
sudo vi /etc/logstash/conf.d/logstash.conf
Incolla i cambiamenti.
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" ]
}
}
Dopu avè salvatu i vostri cambiamenti, riavvia Logstash è verificate u so statutu per verificà chì hè sempre travagliatu.
sudo service logstash restart
sudo service logstash status
Infine, per assicurà chì i cambiamenti anu fattu effettu, Assicuratevi di aghjurnà u vostru indice Elasticsearch per Logstash in Kibana!
Cù Grok, i vostri dati di log sò strutturati!
Comu pudemu vede in l'imaghjini di sopra, Grok hè capaci di cunfurmà automaticamente i dati di log cù Elasticsearch. Questu facilita a gestione di i logs è l'infurmazioni rapidamente interrugati. Invece di scavà i schedarii di log per debug, pudete solu filtrà per ciò chì cercate, cum'è un ambiente o un url.
Pruvate l'espressioni Grok! Sì avete un altru modu per fà questu o avete qualchì prublema cù l'esempii sopra, basta à scrive un cumentu sottu per fà sapè.
Grazie per leghje, è per piacè seguitemi quì nantu à Medium per articuli più interessanti di ingegneria di software!
Risorse
PS
Canale Telegram da
Source: www.habr.com