On souhaite superviser les logs systèmes et applicatifs d'un serveur LAMP à l'aide de la stack ELK [Elasticsearch-Logstash-Kibana].
Pour ce faire on va mettre en place 2 VMs :
- Une VM LAMP hébergeant un site web avec un collecteur Logstash :
- hostname : lamp-srv
- domain : domain.local
- IP : 192.168.0.252
- Une VM ELK avec Elasticsearch :
- hostname : elk-srv
- domain : domain.local
- IP : 192.168.0.120
Les deux machines auront les FQDN suivantes et pourront communiquer entre elles :
- lamp-srv.domain.local
- elk-srv.domain.local
Pour ce faire on va renseigner les noms d'hôte de nos VMs :
Sur lamp-srv :
nano /etc/hosts 127.0.0.1 lamp-srv lamp-srv.domain.local 192.168.0.120 elk-srv.domain.local nano /etc/hostname lamp-srv
Sur elk-srv :
nano /etc/hosts 127.0.0.1 elk-srv elk-srv.domain.local 192.168.0.252 lamp-srv.domain.local nano /etc/hostname elk-srv
1 - Installation du serveur ELK + Redis
Le serveur ELK + Redis va jouer les rôles suivants :
On va partir de la stack suivante :
1.1 - Installation de Redis
sudo apt-get install gcc make wget http://download.redis.io/releases/redis-2.6.16.tar.gz tar xzf redis-2.6.16.tar.gz cd redis-2.6.16 make MALLOC=libc cp src/redis-server /usr/local/bin/ cp src/redis-cli /usr/local/bin/
Configuration sysctl.conf :
sudo nano /etc/sysctl.conf
Ajouter la ligne suivante :
vm.overcommit_memory = 1
Configuration de la sauvegarde de la bdd sur disque :
cd ~/redis-2.6.16 sudo mkdir db redis-cli CONFIG SET dir /home/gerard/redis-2.6.16/db CONFIG SET dbfilename temp.rdb
Lancer Redis
redis-server
Tester que Redis est en service :
redis-cli ping
On doit recevoir PONG en retour.
1.2 - Installation d'Elasticsearch
Installation de Java 8 :
sudo echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | sudo tee /etc/apt/sources.list.d/webupd8team-java.list sudo echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | sudo tee -a /etc/apt/sources.list.d/webupd8team-java.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886 sudo apt-get update sudo apt-get install oracle-java8-installer
Installation d'elasticsearch :
cd /opt sudo wget http://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.4.tar.gz sudo tar xvf elasticsearch-1.4.4.tar.gz
Paramétrage d'Elasticsearch :
cd /opt/elasticsearch-1.4.4 sudo nano config/elasticsearch.yml
Activer et modifier le paramètre network.host :
network.host: 192.168.0.120
Démarrer Elasticsearch :
cd /opt/elasticsearch-1.4.2 bin/elasticsearch -d
On vérifie que le service est bien lancé en allant dans le navigateur à l'adresse : http://192.168.0.120:9200
On doit obtenir une réponse json de ce type :
{ "status" : 200, "name" : "Stinger", "cluster_name" : "elasticsearch", "version" : { "number" : "1.4.4", "build_hash" : "c88f77ffc81301dfa9dfd81ca2232f09588bd512", "build_timestamp" : "2015-02-19T13:05:36Z", "build_snapshot" : false, "lucene_version" : "4.10.3" }, "tagline" : "You Know, for Search" }
1.3 - Installation de Logstash
On va créer les dossiers suivants pour l'installation :
mkdir /etc/logstash /opt/logstash
Téléchargement et installation de Logstash :
cd /opt/logstash wget http://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz tar xvf logstash-1.4.2.tar.gz
Paramétrage de Logstash pour la collecte des logs de la machine locale:
nano /etc/logstash/logstash-broker.conf
input { file { type => "syslog" path => [ "/var/log/*.log", "/var/log/messages", "/var/log/syslog" ] } redis { host => "192.168.0.120" data_type => "list" key => "logstash" codec => json } } output { elasticsearch { bind_host => "192.168.0.120" } }
Démarrage de Logstash :
cd /opt/logstash/logstash-1.4.2 bin/logstash agent -f /etc/logstash/logstash-broker.conf
1.4 - Installation de Kibana
Téléchargement et installation :
wget http://download.elastic.co/kibana/kibana/kibana-4.1.1-linux-x64.tar.gz tar zxvf kibana-4.1.1-linux-x64.tar.gz
Création d'un utilisateur pour l'utilisation de Kibana :
sudo useradd kibana sudo chown -R kibana:kibana /opt/kibana-4.1.1-linux-x64
Création d'un service pour system.d :
sudo mkdir /usr/lib/systemd/system sudo nano /usr/lib/systemd/system/kibana.service
[Unit] Description=kibana Documentation=http://www.elastic.co Wants=network-online.target After=network-online.target [Service] User=kibana Group=kibana ExecStart=/opt/kibana-4.1.1-linux-x64/bin/kibana Restart=always StandardOutput=null # Connects standard error to journal StandardError=journal [Install] WantedBy=multi-user.target
Configuration de Kibana :
Éditer le fichier de configuration et indiquer l'adresse d'elasticsearch.
nano /opt/kibana-4.1.1-linux-x64/config/kibana.yml
Paramétrer comme suit :
# Kibana is served by a back end server. This controls which port to use. port: 5601 # The host to bind the server to. host: "127.0.0.1" # The Elasticsearch instance to use for all your queries. elasticsearch_url: "http://127.0.0.1:9200"
Redémarrage de system.d et activation du service :
sudo systemctl daemon-reload sudo systemctl enable kibana.service
Démarrage de Kibana :
sudo systemctl start kibana.service
Lors du premier lancement, on configure le pattern d'indexation :
Puis cliquer sur "create".
2 - Installation de Logstash sur le serveur LAMP
On va créer les dossiers suivants pour l'installation :
mkdir /etc/logstash /opt/logstash
Installation de Java :
sudo echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | sudo tee /etc/apt/sources.list.d/webupd8team-java.list sudo echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | sudo tee -a /etc/apt/sources.list.d/webupd8team-java.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886 sudo apt-get update sudo apt-get install oracle-java8-installer
Téléchargement et installation de Logstash :
wget http://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz tar xvf logstash-1.4.2.tar.gz
Paramétrage de Logstash pour la collecte des logs :
nano /etc/logstash/logstash-poller.conf
input { file { path => "/var/log/apache2/*.log" type => "apache" } file { type => "syslog" path => [ "/var/log/*.log", "/var/log/messages", "/var/log/syslog" ] } } filter { if [type] == "apache" { grok { pattern => "%{COMBINEDAPACHELOG}" } } } output { redis { host => "192.168.0.120" data_type => "list" key => "logstash" } }
Démarrage de Logstash :
cd /opt/logstash/logstash-1.4.2 bin/logstash agent -f /etc/logstash/logstash-poller.conf
3 - Création d'un dashboard personnalisé avec camembert affichant les requêtes Apache par hôte
Nous souhaitons maintenant mettre en place un tableau de bord disposant d'un camembert, affichant la répartition des requêtes Apache par hôte.
Dans Kibana, on va cliquer sur le menu "Visualize" dans la barre de navigation principale.
On choisi le type de graphique désiré, ici on cliquera sur "Pie chart". Une fois la fenêtre de l'édition du graphique chargée, on procède comme suit :
On pourra appuyer sur l'icône "play" à tous moments lors du paramétrage, afin d'afficher les modifications effectuées.
Le paramétrage du graphique est terminé, on va le sauvegarder et l'ajouter à notre tableau de bord.
En dessous de la barre de navigation principale, sur la gauche, on aperçoit une série d'icônes, dont la seconde permet la sauvegarde du graphique créé. On indique un nom et on valide.
On clique ensuite sur "Dashboard" de la barre de navigation principale. Ensuite on clique sur "+" pour ajouter un nouveau dashboard.
On choisit en suite le graphique que l'on vient de créer précédemment et on valide.
Ensuite, de la même façon que pour le graphique, on enregistre le tableau de bord.
Sources :
https://www.ddreier.com/setting-up-elasticsearch-kibana-and-logstash/
http://christophe.vandeplas.com/2014/06/setting-up-single-node-elk-in-20-minutes.html
http://antisp.in/2014/03/getting-started-with-logstash/
http://www.monitoring-fr.org/2014/05/elk-trio-de-charme-elasticsearch-logstash-kibana/
https://wooster.checkmy.ws/2014/04/elk-elasticsearch-logstash-kibana/
https://www.atlantic.net/community/howto/install-elk-stack-on-debian-8/
-
- - Collecter les logs (Logstash)
- - Centraliser les messages logstash (Redis)
- - Stocker et indexer les logs (Elasticsearch)
- - Visualisation des logs (Kibana)
- - Linux Debian 8.6
- - Redis 2.6.16
- - Elasticsearch 1.4.4
- - Logstash 1.4.2
- - Kibana 4.4.1
- Cocher "Index contains time-based events
- Index name or pattern : logstash-*
- Time-field name : @timestamp
- - Dans le volet de gauche, on clique sur l'onglet "Data", puis dans "metrics".
- - Ensuite on déplie le menu en cliquant sur "Slice size", puis dans le menu select "Aggregation", on choisit "Count".
- - En dessous, dans "buckets", on déplie le menu en cliquant sur "Split slices" et on indique le nombre limite d'hôtes qu'on souhaite voir apparaitre dans le graphique.
-