Ajout de filtres Logstash pour améliorer la journalisation centralisée

introduction

Logstash est un outil puissant pour la centralisation et l’analyse des journaux, qui peut vous aider à fournir une vue d’ensemble de votre environnement et à identifier les problèmes avec vos serveurs. Un moyen d’accroître l’efficacité de votre configuration ELK Stack (Elasticsearch, Logstash et Kibana) consiste à collecter des journaux d’application importants et à les structurer en utilisant des filtres, de manière à ce que les données puissent être facilement analysées et interrogées. Nous construirons nos filtres autour de modèles «grok», qui analyseront les données des journaux en informations utiles.

Ce guide est une suite de la page https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-on-ubuntu-14-04 (Comment installer Elasticsearch, Logstash et Kibana 4 sur Ubuntu 14.04], et se concentre principalement sur l’ajout de filtres Logstash pour divers journaux d’application courants.

Conditions préalables

Pour suivre ce didacticiel, vous devez disposer d’un serveur Logstash en état de fonctionnement qui reçoit les journaux d’un expéditeur tel que Filebeat. Si vous n’avez pas configuré Logstash pour recevoir les journaux, voici le didacticiel qui vous aidera à démarrer: https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana- 4-on-ubuntu-14-04 [Comment installer Elasticsearch, Logstash et Kibana 4 sur Ubuntu 14.04].

Hypothèses sur le serveur ELK

  • Logstash est installé dans + / opt / logstash +

  • Vos fichiers de configuration Logstash se trouvent dans + / etc / logstash / conf.d +

  • Vous avez un fichier d’entrée nommé + 02-beats-input.conf +

  • Vous avez un fichier de sortie nommé + 30-elasticsearch-output.conf +

Vous devrez peut-être créer le répertoire + patterns + en exécutant cette commande sur votre serveur Logstash:

sudo mkdir -p /opt/logstash/patterns
sudo chown logstash: /opt/logstash/patterns

Hypothèses serveur client

Si votre configuration diffère, ajustez simplement ce guide en fonction de votre environnement.

À propos de Grok

Grok fonctionne en analysant les modèles de texte, en utilisant des expressions régulières et en les affectant à un identifiant.

La syntaxe pour un motif grok est +% {:} +. Un filtre Logstash comprend une séquence de modèles Grok qui correspond et attribue divers éléments d’un message de journal à différents identificateurs, ce qui correspond à la structure des journaux.

Pour en savoir plus sur grok, visitez la page Logstash grok et la page https://github.com/logstash. -plugins / logstash-patterns-core / blob / master / patterns / grok-patterns [Liste des patterns par défaut de Logstash].

Comment utiliser ce guide

Chaque section principale qui suit comprendra les détails de configuration supplémentaires nécessaires à la collecte et au filtrage des journaux pour une application donnée. Pour chaque application que vous souhaitez journaliser et filtrer, vous devrez apporter des modifications de configuration à la fois sur le serveur client (Filebeat) et sur le serveur Logstash.

Sous-section des modèles de logstash

S’il existe une sous-section Logstash Patterns, elle contiendra des modèles Grok pouvant être ajoutés à un nouveau fichier dans + / opt / logstash / patterns + sur le serveur Logstash. Cela vous permettra d’utiliser les nouveaux modèles dans les filtres Logstash.

Sous-section de filtre de logstash

Les sous-sections Filtre Logstash incluront un filtre pouvant être ajouté à un nouveau fichier, entre les fichiers de configuration d’entrée et de sortie, dans + / etc / logstash / conf.d + sur le serveur Logstash. Le filtre détermine la façon dont le serveur Logstash analyse les fichiers journaux pertinents. N’oubliez pas de redémarrer le service Logstash après l’ajout d’un nouveau filtre pour charger vos modifications.

Filebeat Prospector Subsection

Les prospecteurs Filebeat sont utilisés pour spécifier les journaux à envoyer à Logstash. Des configurations de prospecteurs supplémentaires doivent être ajoutées au fichier + / etc / filebeat / filebeat.yml + directement après les prospecteurs existants dans la section + prospecteurs +:

Exemples de prospecteur

filebeat:
 # List of prospectors to fetch data.
 prospectors:
   -
     - /var/log/secure
     - /var/log/messages
     document_type: syslog




...

Dans l’exemple ci-dessus, les lignes surlignées en rouge représentent un prospecteur qui envoie tous les fichiers + .log + dans + / var / log / app / + à Logstash avec le type + app-access +. Une fois les modifications apportées, Filebeat doit être rechargé pour que les modifications prennent effet.

Maintenant que vous savez utiliser ce guide, le reste de ce guide vous montrera comment collecter et filtrer les journaux des applications!

Application: Nginx

Modèles de logstash: Nginx

Les modèles de journal Nginx ne sont pas inclus dans les modèles par défaut de Logstash, nous allons donc ajouter les modèles Nginx manuellement.

Sur votre * serveur ELK *, créez un nouveau fichier de motif appelé + nginx +:

sudo vi /opt/logstash/patterns/nginx

Puis insérez les lignes suivantes:

Nginx Grok Pattern

NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{IPORHOST:clientip} %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent}

Sauvegarder et quitter. Le modèle + NGINXACCESS + analyse et attribue les données à différents identificateurs (par exemple, + clientip +, + ident +, + auth +, etc.).

Ensuite, changez la propriété du fichier de signatures en + logstash +:

sudo chown logstash: /opt/logstash/patterns/nginx

Filtre de journal: Nginx

Sur votre * serveur ELK *, créez un nouveau fichier de configuration de filtre appelé + 11-nginx-filter.conf +:

sudo vi /etc/logstash/conf.d/11-nginx-filter.conf

Ajoutez ensuite le filtre suivant:

Filtre Nginx

filter {
 if [type] == "nginx-access" {
   grok {
     match => { "message" => "%{NGINXACCESS}" }
   }
 }
}

Sauvegarder et quitter. Notez que ce filtre tentera de faire correspondre les messages de type + nginx-access avec le modèle` + NGINX ACCESS`, défini ci-dessus.

Maintenant, redémarrez Logstash pour recharger la configuration:

sudo service logstash restart

Filebeat Prospector: Nginx

Sur vos * serveurs Nginx *, ouvrez le fichier de configuration + filebeat.yml + pour le modifier:

sudo vi /etc/filebeat/filebeat.yml

Ajoutez le prospecteur suivant dans la section + filebeat + pour envoyer les journaux d’accès Nginx sous le type + nginx-access + à votre serveur Logstash:

Nginx Prospector

   -
     paths:
       - /var/log/nginx/access.log
     document_type: nginx-access

Sauvegarder et quitter. Rechargez Filebeat pour appliquer les modifications:

sudo service filebeat restart

Maintenant, vos journaux Nginx seront rassemblés et filtrés!

Application: Serveur Web HTTP Apache

Les modèles de journal Apache sont inclus dans les modèles par défaut de Logstash, il est donc assez facile de configurer un filtre pour ce dernier.

Filtre Logstash: Apache

Sur votre * serveur ELK *, créez un nouveau fichier de configuration de filtre appelé + 12-apache.conf +:

sudo vi /etc/logstash/conf.d/12-apache.conf

Ajoutez ensuite le filtre suivant:

Filtre Apache

filter {
 if [type] == "apache-access" {
   grok {
     match => { "message" => "%{COMBINEDAPACHELOG}" }
   }
 }
}

Sauvegarder et quitter. Notez que ce filtre tentera de faire correspondre les messages de type + apache-access avec le modèle` + COMBINEDAPACHELOG`, l’un des modèles par défaut de Logstash.

Maintenant, redémarrez Logstash pour recharger la configuration:

sudo service logstash restart

Filebeat Prospector: Apache

Sur vos * serveurs Apache *, ouvrez le fichier de configuration + filebeat.yml + pour le modifier:

sudo vi /etc/filebeat/filebeat.yml

Ajoutez le prospecteur suivant dans la section + filebeat + pour envoyer les journaux Apache sous le type + apache-access + à votre serveur Logstash:

Apache Prospector

   -
     paths:
       - /var/log/apache2/access.log
     document_type: apache-access

Sauvegarder et quitter. Rechargez Filebeat pour appliquer les modifications:

sudo service filebeat restart

Maintenant, vos journaux Apache seront rassemblés et filtrés!

Conclusion

Il est possible de collecter et d’analyser des journaux de tous types. Essayez d’écrire vos propres filtres et modèles pour d’autres fichiers journaux.

N’hésitez pas à commenter avec les filtres que vous aimeriez voir ou avec vos propres motifs!

Si vous ne connaissez pas bien Kibana, consultez ce didacticiel: Comment utiliser les visualisations et les tableaux de bord Kibana .