Trucs et astuces pour convertir les données non structurées des journaux vers ELK Stack à l'aide de GROK dans LogStash

Structuration de données non structurées avec GROK

Si vous utilisez la pile Elastic (ELK) et souhaitez mapper des journaux Logstash personnalisés à Elasticsearch, cet article est fait pour vous.

Trucs et astuces pour convertir les données non structurées des journaux vers ELK Stack à l'aide de GROK dans LogStash

La pile ELK est l'acronyme de trois projets open source : Elasticsearch, Logstash et Kibana. Ensemble, ils forment une plateforme de gestion des journaux.

  • ElasticSearch est un système de recherche et d’analyse.
  • Logstash est un pipeline de traitement de données côté serveur qui ingère simultanément des données provenant de plusieurs sources, les transforme, puis les envoie vers une « réserve » telle qu'Elasticsearch.
  • Kibana permet aux utilisateurs de visualiser des données à l'aide de tableaux et de graphiques dans Elasticsearch.

Beats est venu 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 la question.

Cet article concerne Grok, une fonctionnalité de Logstash qui peut transformer vos journaux avant qu'ils ne soient envoyés vers le cache. Pour nos besoins, je ne parlerai que du traitement des données de Logstash vers Elasticsearch.

Trucs et astuces pour convertir les données non structurées des journaux vers ELK Stack à l'aide de GROK dans LogStash

Grok est un filtre dans Logstash qui est utilisé pour analyser des données non structurées en quelque chose de structuré et interrogeable. Il se trouve au-dessus d'une expression régulière (regex) et utilise des modèles de texte pour faire correspondre les chaînes dans les fichiers journaux.

Comme nous le verrons dans les sections suivantes, l'utilisation de Grok fait une grande différence en matière de gestion efficace des journaux.

Sans Grok, vos données de journal ne sont pas structurées

Trucs et astuces pour convertir les données non structurées des journaux vers ELK Stack à l'aide de GROK dans LogStash

Sans Grok, lorsque les journaux sont envoyés de Logstash à Elasticsearch et rendus dans Kibana, ils n'apparaissent que dans la valeur du message.

Il est difficile d'interroger des informations significatives dans cette situation car toutes les données de journal sont stockées dans une seule clé. Ce serait mieux si les messages du journal étaient mieux organisés.

Données non structurées des journaux

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

Si vous regardez attentivement les données brutes, vous verrez qu’elles sont en réalité constituées de différentes parties, chacune séparée par un espace.

Pour les développeurs plus expérimentés, vous pouvez probablement deviner la signification de chacune des parties et ce qu'est ce message de journal issu de l'appel API. La présentation de chaque élément est décrite ci-dessous.

Vue structurée de nos données

  • ​ localhost == environnement
  • ​ GET == méthode
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == état_réponse
  • ​ 46 ms == temps_réponse
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Comme nous le voyons dans les données structurées, il existe un ordre pour les journaux non structurés. La prochaine étape est le traitement logiciel des données brutes. C'est là que Grok brille.

Modèles Grok

Modèles Grok intégrés

Logstash est livré avec plus de 100 modèles intégrés pour structurer les données non structurées. Vous devez absolument en profiter autant que possible pour les syslogs généraux comme Apache, Linux, Haproxy, AWS, etc.

Cependant, que se passe-t-il lorsque vous avez des journaux personnalisés comme dans l’exemple ci-dessus ? Vous devez créer votre propre modèle Grok.

Modèles Grok personnalisés

Vous devez essayer de créer votre propre modèle Grok. j'ai utilisé Débogueur Grok и Modèles Grok.

Notez que la syntaxe du modèle Grok est la suivante : %{SYNTAX:SEMANTIC}

La première chose que j'ai essayé de faire a été d'aller dans l'onglet Découvrez dans le débogueur Grok. Je pensais que ce serait cool si cet outil pouvait générer automatiquement un modèle Grok, mais ce n'était pas très utile puisqu'il ne trouvait que deux correspondances.

Trucs et astuces pour convertir les données non structurées des journaux vers ELK Stack à l'aide de GROK dans LogStash

Grâce à cette découverte, j'ai commencé à créer mon propre modèle dans le débogueur Grok en utilisant la syntaxe trouvée sur la page Elastic Github.

Trucs et astuces pour convertir les données non structurées des journaux vers ELK Stack à l'aide de GROK dans LogStash

Après avoir joué avec différentes syntaxes, j'ai finalement pu structurer les données du journal comme je le souhaitais.

Trucs et astuces pour convertir les données non structurées des journaux vers ELK Stack à l'aide de GROK dans LogStash

Lien du débogueur Grok https://grokdebug.herokuapp.com/

Texte original:

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

Motif:

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

Ce qui est arrivé à la fin

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

Avec le modèle Grok et les données cartographiées en main, la dernière étape consiste à l'ajouter à Logstash.

Mise à jour du fichier de configuration Logstash.conf

Sur le serveur sur lequel vous avez installé la stack ELK, rendez-vous dans la configuration Logstash :

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

Collez les modifications.

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

Après avoir enregistré vos modifications, redémarrez Logstash et vérifiez son état pour vous assurer qu'il fonctionne toujours.

sudo service logstash restart
sudo service logstash status

Enfin, pour vous assurer que les modifications ont pris effet, Assurez-vous de mettre à jour votre index Elasticsearch pour Logstash dans Kibana !

Trucs et astuces pour convertir les données non structurées des journaux vers ELK Stack à l'aide de GROK dans LogStash

Avec Grok, vos données de log sont structurées !

Trucs et astuces pour convertir les données non structurées des journaux vers ELK Stack à l'aide de GROK dans LogStash

Comme nous pouvons le voir dans l'image ci-dessus, Grok est capable de faire correspondre automatiquement les données de journal avec Elasticsearch. Cela facilite la gestion des journaux et interroge rapidement les informations. Au lieu de parcourir les fichiers journaux pour déboguer, vous pouvez simplement filtrer en fonction de ce que vous recherchez, comme un environnement ou une URL.

Essayez les expressions Grok ! Si vous avez une autre façon de procéder ou si vous rencontrez 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 !

Ressources

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 Référence de la source

Chaîne de télégramme par ElasticSearch

Source: habr.com

Ajouter un commentaire