Structurer des données non structurées avec GROK
Si vous utilisez la pile Elastic (ELK) et que vous souhaitez mapper des journaux Logstash personnalisés à Elasticsearch, cet article est pour vous.
ELK Stack est l'abréviation de trois projets open source: Elasticsearch, Logstash et Kibana. Ensemble, ils forment une plate-forme de gestion des journaux.
- Elasticsearch est un moteur de recherche et d'analyse.
- Logstash est un pipeline de traitement de données côté serveur qui prend des données de plusieurs sources en même temps, les transforme, puis les envoie vers un cache comme Elasticsearch.
- Kibana permet aux utilisateurs de visualiser les données à l'aide de graphiques et de graphiques dans Elasticsearch.
Beats est arrivé plus tard et est un expéditeur de données léger. L'introduction de Beats a transformé Elk Stack en Elastic Stack, mais ce n'est pas le but.
Cet article se concentre sur Grok, qui est une fonctionnalité de Logstash qui peut transformer vos journaux avant qu'ils ne soient envoyés dans la cachette. Pour nos besoins, je ne parlerai que du traitement des données de Logstash vers Elasticsearch.
Grok- Logstash, - . (regex) .
, Grok , .
Grok
Grok, Logstash Elasticsearch Kibana, .
, . , .
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
, , , .
, , , API. .
- ​ localhost == environment
- ​ GET == method
- ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
- ​ 400 == response_status
- ​ 46ms == response_time
- ​ 5bc6e716b5d6cb35fc9687c0 == user_id
, . – . .
Grok
Grok
Logstash 100 . , , apache, linux, haproxy, aws .
, , ? Grok.
Grok
, Grok. Grok Debugger Grok Patterns.
, Grok : %{SYNTAX:SEMANTIC}
, , Discover Grok. , , Grok, , .
, Grok, , Github Elastic.
, - , .
Grok https://grokdebug.herokuapp.com/
:
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Pattern:
%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}
{
"environment": [
[
"localhost"
]
],
"method": [
[
"GET"
]
],
"url": [
[
"/v2/applink/5c2f4bb3e9fda1234edc64d"
]
],
"response_status": [
[
"400"
]
],
"BASE10NUM": [
[
"400"
]
],
"response_time": [
[
"46ms"
]
],
"user_id": [
[
"5bc6e716b5d6cb35fc9687c0"
]
]
}
Grok , — Logstash.
Logstash.conf
, ELK, Logstash:
sudo vi /etc/logstash/conf.d/logstash.conf
.
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" ]
}
}
Logstash , , .
sudo service logstash restart
sudo service logstash status
, , , Elasticsearch Logstash Kibana!
Grok !
, , Grok Elasticsearch. . , , , url-.
Essayez de donner une chance aux expressions Grok! Si vous avez une autre façon de faire cela, ou avez des problèmes avec les exemples ci-dessus, écrivez simplement un commentaire ci-dessous pour me le faire savoir.
Merci d'avoir lu - et suivez-moi ici sur Medium pour des articles plus intéressants sur le génie logiciel!
Chaîne Telegram Elasticsearch