Logstash est une application open source de gestion des fichiers journaux centraux.
Vous pouvez collecter les journaux de plusieurs serveurs, de plusieurs applications, analyser ces journaux et les stocker dans un emplacement central. Une fois qu'il est stocké, vous pouvez utiliser une interface graphique Web pour rechercher des journaux, explorer les journaux et générer divers rapports.
Ce didacticiel explique les principes de base de logstash et tout ce que vous devez savoir sur l'installation et la configuration de logstash sur votre système.
1. Télécharger le binaire Logstatsh
Logstash fait partie de la famille elasticsearch. Téléchargez-le sur le site Web de logstash ici. Veuillez noter que Java doit être installé sur votre machine pour que cela fonctionne.
ou, utilisez curl pour le télécharger directement depuis le site Web.
wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz tar zxvf logstash-1.4.2.tar.gz cd logstash-1.4.2
Remarque :Nous installerons logstash en utilisant yum plus tard. Pour l'instant, nous allons d'abord télécharger manuellement le binaire pour vérifier son fonctionnement à partir de la ligne de commande.
2. Logstash Spécifiez les options dans la ligne de commande
Pour comprendre les bases de logstash, à des fins de test, vérifions rapidement quelques éléments à partir de la ligne de commande.
Exécutez le logstash à partir de la ligne de commande comme indiqué ci-dessous. Lorsqu'il vous y invite, tapez simplement "hello world" comme entrée.
# bin/logstash -e 'input { stdin { } } output { stdout {} }' hello world 2014-07-06T17:27:25.955+0000 base hello world
Dans la sortie ci-dessus, la 1ère ligne est le "hello world" que nous avons entré en utilisant stdin.
La 2ème ligne est la sortie affichée par logstash à l'aide de stdout. Fondamentalement, il recrache tout ce que nous avons entré dans le stdin.
Veuillez noter que la spécification de l'indicateur de ligne de commande -e permet à Logstash d'accepter une configuration directement à partir de la ligne de commande. Ceci est très utile pour tester rapidement des configurations sans avoir à modifier un fichier entre les itérations.
3. Modifier le format de sortie à l'aide du codec
Le codec rubydebug affichera vos données d'événement Logstash à l'aide de la bibliothèque ruby-awesome-print.
Ainsi, en reconfigurant la sortie "stdout" (ajout d'un "codec"), nous pouvons modifier la sortie de Logstash. En ajoutant des entrées, des sorties et des filtres à votre configuration, il est possible de masser les données du journal de plusieurs façons, afin de maximiser la flexibilité des données stockées lorsque vous les interrogez.
# bin/logstash -e 'input { stdin { } } output { stdout { codec => rubydebug } }' hello world { "message" => "", "@version" => "1", "@timestamp" => "2014-07-06T17:40:48.775Z", "host" => "base" } { "message" => "hello world", "@version" => "1", "@timestamp" => "2014-07-06T17:40:48.776Z", "host" => "base" }
4. Télécharger ElasticSearch
Maintenant que nous avons vu comment fonctionne le Logstash, allons de l'avant. Il est évident que nous ne pouvons pas transmettre manuellement l'entrée et la sortie de chaque journal. Donc, pour surmonter ce problème, nous devrons installer un logiciel appelé Elasticsearch .
Téléchargez l'elasticsearch à partir d'ici.
Ou, utilisez wget comme indiqué ci-dessous.
curl -O https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.0.tar.gz tar zxvf elasticsearch-1.4.0.tar.gz
Démarrez le service elasticsearch comme indiqué ci-dessous :
cd elasticsearch-1.4.0/ ./bin/elasticsearch
Remarque :ce didacticiel spécifie l'exécution de Logstash 1.4.2 avec Elasticsearch 1.4.0. Chaque version de Logstash a une version recommandée d'Elasticsearch avec laquelle s'associer. Assurez-vous que les versions correspondent en fonction de la version de Logstash que vous exécutez.
5. Vérifier ElasticSearch
Par défaut, elasticsearch s'exécute sur le port 9200.
À des fins de test, nous prendrons toujours l'entrée du stdin (similaire à notre exemple précédent), mais la sortie ne sera pas affichée sur le stdout. Au lieu de cela, il ira à elasticsearch.
Pour vérifier elasticsearch, exécutons ce qui suit. Lorsqu'il demande l'entrée, tapez simplement "les trucs de geek" comme indiqué ci-dessous.
# bin/logstash -e 'input { stdin { } } output { elasticsearch { host => localhost } }' the geek stuff
Puisque nous ne verrons pas la sortie dans le stdout, nous devrions regarder l'elasticsearch.
Accédez à l'URL suivante :
http://localhost:9200/_search?pretty
Ce qui précède affichera tous les messages disponibles dans elasticsearch. Vous devriez voir le message que nous avons entré dans la commande logstash ci-dessus ici dans la sortie.
{ "took" : 4, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 9, "max_score" : 1.0, "hits" : [ { "_index" : "logstash-2014.07.06", "_type" : "logs", "_id" : "G3uZPQCMQ6ed4joNCuseew", "_score" : 1.0, "_source" : {"message":"the geek stuff","@version":"1","@timestamp":"2014-07-06T18:09:46.612Z","host":"base"} } ] }
6. Entrées, sorties et codecs Logstash
Les entrées, les sorties, les codecs et les filtres sont au cœur de la configuration de Logstash. En créant un pipeline de traitement des événements, Logstash est capable d'extraire les données pertinentes de vos logs et de les mettre à disposition d'elasticsearch, afin d'interroger efficacement vos données.
Voici quelques-unes des entrées disponibles. Les entrées sont le mécanisme de transmission des données de journal à Logstash
- fichier :lit à partir d'un fichier sur le système de fichiers, un peu comme la commande UNIX "tail -0a"
- syslog :écoute sur le port 514 bien connu les messages syslog et les analyse selon le format RFC3164
- redis :lit à partir d'un serveur redis, en utilisant à la fois les canaux redis et les listes redis. Redis est souvent utilisé comme "courtier" dans une installation Logstash centralisée, qui met en file d'attente les événements Logstash des "expéditeurs" Logstash distants
- lumberjack :traite les événements envoyés dans le protocole bûcheron. Maintenant appelé logstash-forwarder.
Voici quelques-uns des filtres. Les filtres sont utilisés comme dispositifs de traitement intermédiaires dans la chaîne Logstash. Ils sont souvent combinés avec des conditionnels afin d'effectuer une certaine action sur un événement, s'il correspond à des critères particuliers.
- grok :analyse un texte arbitraire et le structure. Grok est actuellement le meilleur moyen dans Logstash d'analyser les données de journal non structurées en quelque chose de structuré et interrogeable. Avec 120 modèles intégrés à Logstash, il est plus que probable que vous en trouviez un qui réponde à vos besoins !
- mutation :le filtre de mutation vous permet d'effectuer des mutations générales sur les champs. Vous pouvez renommer, supprimer, remplacer et modifier les champs de vos événements.
- drop :supprimer complètement un événement, par exemple, les événements de débogage.
- cloner :faire une copie d'un événement, éventuellement en ajoutant ou en supprimant des champs.
- geoip :ajoute des informations sur l'emplacement géographique des adresses IP (et affiche des graphiques étonnants dans kibana)
Voici quelques-uns des codecs. Les sorties sont la phase finale du pipeline Logstash. Un événement peut passer par plusieurs sorties pendant le traitement, mais une fois que toutes les sorties sont terminées, l'événement a terminé son exécution.
- elasticsearch :si vous prévoyez d'enregistrer vos données dans un format efficace, pratique et facilement interrogeable
- fichier :écrit les données d'événement dans un fichier sur le disque.
- graphite :envoie des données d'événement à graphite, un outil open source populaire pour le stockage et la représentation graphique des métriques
- statsd :un service qui "écoute les statistiques, telles que les compteurs et les minuteurs, envoyées via UDP et envoie des agrégats à un ou plusieurs services backend enfichables".
7. Utiliser le fichier de configuration Logstash
Il est maintenant temps de passer des options de ligne de commande au fichier de configuration. Au lieu de spécifier les options dans la ligne de commande, vous pouvez les spécifier dans un fichier .conf comme indiqué ci-dessous :
# vi logstash-simple.conf input { stdin { } } output { elasticsearch { host => localhost } stdout { codec => rubydebug } }
Maintenant, demandons au logstast de lire le fichier de configuration que nous venons de créer en utilisant l'option -f comme indiqué ci-dessous. À des fins de test, cela utilise toujours stdin et stdout. Alors, tapez un message après avoir entré cette commande.
# bin/logstash -f logstash-simple.conf This is Vadiraj { "message" => "This is Vadiraj", "@version" => "1", "@timestamp" => "2014-11-07T04:59:20.959Z", "host" => "base.thegeekstuff.com" }
8. Analyser le message de journal Apache d'entrée
Maintenant, faisons des configurations un peu plus avancées. Supprimez toutes les entrées du fichier logstash-simple.conf et ajoutez les lignes suivantes :
# vi logstash-simple.conf input { stdin { } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } } output { elasticsearch { host => localhost } stdout { codec => rubydebug } }
Maintenant, exécutez la commande logstash comme indiqué ci-dessous :
# bin/logstash -f logstash-filter.conf
Mais, cette fois, collez l'exemple d'entrée de fichier journal apache suivant comme entrée.
# bin/logstash -f logstash-filter.conf "127.0.0.1 - - [11/Dec/2013:00:01:45 -0800] "GET /xampp/status.php HTTP/1.1" 200 3891 "http://cadenza/xampp/navi.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0""
La sortie de logstatsh ressemblera à ce qui suit :
{ "message" => "127.0.0.1 - - [11/Dec/2013:00:01:45 -0800] \"GET /xampp/status.php HTTP/1.1\" 200 3891 \"http://cadenza/xampp/navi.php\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0\"", "@version" => "1", "@timestamp" => "2013-12-11T08:01:45.000Z", "host" => "base.tgs.com", "clientip" => "127.0.0.1", "ident" => "-", "auth" => "-", "timestamp" => "11/Dec/2013:00:01:45 -0800", "verb" => "GET", "request" => "/xampp/status.php", "httpversion" => "1.1", "response" => "200", "bytes" => "3891", "referrer" => "\"http://cadenza/xampp/navi.php\"", "agent" => "\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0\"" }
Comme vous le voyez dans la sortie ci-dessus, notre entrée est analysée en conséquence et toutes les valeurs sont divisées et stockées dans les champs correspondants.
Le filtre grok a extrait le journal apache et l'a divisé en morceaux utiles afin que nous puissions interroger plus tard.
9. Fichier de configuration Logstash pour le journal des erreurs Apache
Créez le fichier de configuration logstash suivant pour le fichier apache error_log.
# vi logstash-apache.conf input { file { path => "/var/log/httpd/error_log" start_position => beginning } } filter { if [path] =~ "error" { mutate { replace => { "type" => "apache_error" } } grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } } output { elasticsearch { host => localhost } stdout { codec => rubydebug } }
Dans le fichier de configuration ci-dessus :
- Le fichier d'entrée est /var/log/httpd/error_log et la position de départ sera le début du fichier.
- Filtrez le fichier d'entrée et renommez (mutez) tout ce qui contient une erreur en apache_error. grok créera un apachelog combiné dans la colonne de message et les données afficheront l'horodatage au format donné.
- La sortie sera stockée dans elasticsearch dans localhost et renvoyée via stdout au format d'impression ruby avec le codec => rubydebug
10. Fichier de configuration Logstash pour le journal des erreurs Apache et le journal des accès
Nous pouvons spécifier une charte générique pour lire tous les fichiers journaux avec *_log comme indiqué ci-dessous.
Mais, nous devons également modifier les conditions en conséquence pour analyser à la fois le journal des accès et celui des erreurs, comme indiqué ci-dessous.
# vi logstash-apache.conf input { file { path => "/var/log/httpd/*_log" } } filter { if [path] =~ "access" { mutate { replace => { type => "apache_access" } } grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } } else if [path] =~ "error" { mutate { replace => { type => "apache_error" } } } else { mutate { replace => { type => "random_logs" } } } } output { elasticsearch { host => localhost } stdout { codec => rubydebug } }
11. Configurer des référentiels Yum supplémentaires
Les tests sont terminés. Nous savons maintenant comment Logstash fonctionne avec elasticseach.
Nous allons installer les éléments suivants :
- logstash – Notre serveur de journalisation central
- Elasticsearch – Pour stocker les journaux
- Redis – Pour le filtre
- Nginx – Pour exécuter Kibana
- Kibana – Est un magnifique tableau de bord graphique et rassemble tout
Avant l'installation, configurez les dépôts suivants :
# cd /etc/yum.repos.d/ # vi /etc/yum.repos.d/logstash.repo [logstash] name=Logstash baseurl=http://packages.elasticsearch.org/logstash/1.4/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1 # vi /etc/yum.repos.d/elasticsearch.repo [elasticsearch] name=Elasticsearch baseurl=http://packages.elasticsearch.org/elasticsearch/1.4/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1
Configurez également le référentiel EPEL comme nous l'avons vu précédemment.
12. Installez Elasticsearch, Nginx et Redis et Logstash
Mettez d'abord le système à jour, puis installez logstash avec elasticsearch, redis et nginx comme indiqué ci-dessous :
yum clean all yum update -y yum install -y install elasticsearch redis nginx logstash
13. Installer Kibana
Installez Kibana pour le tableau de bord comme indiqué ci-dessous :
cd /opt/ wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.2.tar.gz tar -xvzf kibana-3.1.2.tar.gz mv kibana-3.1.2 /usr/share/kibana3
14. Configurer Kibana
Nous devons parler à kibana d'elasticsearch. Pour cela, modifiez le config.js suivant.
# vi /usr/share/kibana3/config.js elasticsearch: "http://log.thegeekstuff.com:9200"
Dans le fichier ci-dessus, recherchez elasticsearch et remplacez "dev.kanbier.lan" dans cette ligne par votre domaine (par exemple :log.thegeekstuff.com)
15. Configurer Kibana pour qu'il s'exécute à partir de Nginx
Nous devons également faire en sorte que kibana s'exécute à partir du serveur Web nginx.
Ajoutez ce qui suit à nginx.conf
server { listen *:80 ; server_name log.thegeekstuff.com; access_log /var/log/nginx/kibana.myhost.org.access.log; location / { root /usr/share/kibana3; index index.html index.htm; }
N'oubliez pas non plus de définir l'adresse IP appropriée de votre serveur dans le fichier redis.conf.
16. Configurer le fichier de configuration Logstash
Nous devons maintenant créer un fichier de configuration logstash similaire à l'exemple de fichier de configuration que nous avons utilisé précédemment.
Nous allons définir le chemin des fichiers journaux, le port sur lequel recevoir les journaux distants et informer logstash de l'outil elasticsearch.
# vi /etc/logstash/conf.d/logstash.conf input { file { type => "syslogpath => [ "/var/log/*.log", "/var/log/messages", "/var/log/syslog" ] sincedb_path => "/opt/logstash/sincedb-access" } redis { host => "10.37.129.8" type => "redis-input" data_type => "list" key => "logstash" } syslog { type => "syslog" port => "5544" } } filter { grok { type => "syslog" match => [ "message", "%{SYSLOGBASE2}" ] add_tag => [ "syslog", "grokked" ] } } output { elasticsearch { host => "log.thegeekstuff.com" } }"
17. Vérifier et démarrer Logstash, Elasticsearch, Redis et Nginx
Démarrez tous ces services comme indiqué ci-dessous :
service elasticsearch start service logstash start service nginx start service redis start
18. Vérifier l'interface graphique Web de Logstash
Ouvrez un navigateur et accédez au nom du serveur (hôte) utilisé dans le fichier de configuration ci-dessus. Par exemple :log.thegeekstuff.com
Vous verrez un graphique similaire à ce qui suit, à partir duquel vous pouvez manipuler, parcourir, explorer tous les fichiers journaux collectés par le logstash.
Maintenant que le serveur de logs est prêt, il ne vous reste plus qu'à rediriger les fichiers de logs des serveurs distants gérés par rsyslog vers ce serveur central en modifiant le fichier rsyslog.conf.