Supervision des logs de serveurs LAMP Debian avec Elasticsearch, Logstash, Kibana et Redis [ELK]

Ce tutoriel vise à mettre en place une supervision des logs systèmes et applicatifs d'un serveur LAMP à l'aide de la stack ELK [Elasticsearch-Logstash-Kibana].

Publié le 14/02/2017

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 :

    http://michael.bouvy.net/blog/en/2013/11/19/collect-visualize-your-logs-logstash-elasticsearch-redis-kibana/

    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

    https://www.digitalocean.com/community/tutorials/how-to-use-logstash-and-kibana-to-centralize-and-visualize-logs-on-ubuntu-14-04

    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.