Elasticsearch : une base de données pour stocker des grandes quantités de documents texte et chercher dedans.
Logstash : Un collecteur de logs et autre données pour remplir Elasticsearch.
Kibana : Une interface web pratique pour chercher et analyser les données stockées.
La suite Elastic, historiquement appelée “ELK”, est une combinaison de plusieurs produits de la société Elastic, qui développe des logiciels :
APM est le petit dernier d’Elastic, axé sur le monitoring et le traçage des performances des applications.
La société Elastic évolue assez vite et change souvent ses produits. Elle a un business model open core : les fonctionnalités de base sont gratuites et open source, certaines ont une licence gratuites et source ouverte un peu spéciale et sont regroupées dans le “X-Pack” (les fonctionnalités Basic). D’autres fonctionnalités “X-Pack” enfin nécessitent un abonnement “Gold” ou plus.
Le cœur des produits Elastic est composé de Elasticsearch, Kibana (les dashboards et le mode Discover), de Logstash et de Filebeat.
Des bagarres de licence ont conduit d’autres personnes à proposer un fork d’Elasticsearch : OpenSearch (anciennement OpenDistro for Elasticsearch) qui est un fork de la suite Elastic, sponsorisé par Amazon et AWS.
Détails : https://www.elastic.co/fr/subscriptions
Archiver pour analyser sur la longue durée (6 mois à 1 an ?) avec des graphiques.
Exemples : ces derniers mois est-ce que l’application a correctement répondu aux requêtes de mes utilisateurs ?
/var/log
Vous en connaissez ?
Exemples de fichiers de logs :
auth.log
: connexion des utilisateurs au systèmehttpd.log
: connexion au serveur web apachemail.log
: aussi bien envoi que réception de mailsnginx/access.log
: connexion au serveur web nginxnginx/error.log
: erreurs de connexion au serveur web nginxObjectif:
Sur le serveur exemple.net, une page web a été supprimée. On veut savoir qui des trois administrateurs Alice, Bob ou Jack a fait cette modification.
cat
et grep
par exemple :/var/log/nginx/access.log
| grep 403
et | grep 200
pour savoir quand la page a disparu (en cherchant les codes d’erreur HTTP)/var/log/auth.log
| grep
et l’heure pour savoir qui s’est connecté à cette heure ciroot@exemple:/home/alice# cat /var/log/nginx/access.log
127.0.0.1 - - [19/Aug/2021:21:53:28 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.58.0"
127.0.0.1 - - [19/Aug/2021:21:53:40 +0000] "GET / HTTP/1.1" 200 616 "-" "curl/7.58.0"
127.0.0.1 - - [19/Aug/2021:22:09:16 +0000] "GET / HTTP/1.1" 403 178 "-" "curl/7.58.0"
127.0.0.1 - - [19/Aug/2021:22:09:20 +0000] "GET / HTTP/1.1" 403 178 "-" "curl/7.58.0"
127.0.0.1 - - [19/Aug/2021:22:09:21 +0000] "GET / HTTP/1.1" 403 178 "-" "curl/7.58.0"
root@exemple:/home/alice# cat /var/log/auth.log
Aug 19 21:31:13 ubuntu-bionic sudo: jack : TTY=pts/0 ; PWD=/home/jack ; USER=root ; COMMAND=/bin/sh -c echo BECOME-SUCCESS-qzjtxhuddaxgkqyivvmjsgpcijwmywth ; /usr/bin/python3 /home/jack/.ansible/tmp/ansible-tmp-1629408672.571441-2529-99170342043575/AnsiballZ_systemd.py
Aug 19 21:31:13 ubuntu-bionic sudo: pam_unix(sudo:session): session opened for user root by jack(uid=0)
Aug 19 21:31:15 ubuntu-bionic sudo: pam_unix(sudo:session): session closed for user root
Aug 19 21:32:15 ubuntu-bionic sshd[2176]: Received disconnect from 192.168.2.1 port 49608:11: disconnected by user
Aug 19 21:32:15 ubuntu-bionic sshd[2176]: Disconnected from user jack 192.168.2.1 port 49608
Aug 19 21:32:15 ubuntu-bionic sshd[2099]: pam_unix(sshd:session): session closed for user jack
Aug 19 21:32:15 ubuntu-bionic systemd-logind[847]: Removed session 5.
Aug 19 21:52:19 ubuntu-bionic sshd[5610]: Accepted publickey for bob from 10.0.2.2 port 49854 ssh2: RSA SHA256:1M4RzhMyWuFS/86uPY/ce2prh/dVTHW7iD2RhpquOZA
Aug 19 21:52:19 ubuntu-bionic sshd[5610]: pam_unix(sshd:session): session opened for user bob by (uid=0)
Aug 19 21:52:19 ubuntu-bionic systemd: pam_unix(systemd-user:session): session opened for user bob by (uid=0)
Aug 19 21:52:19 ubuntu-bionic systemd-logind[847]: New session 7 of user bob.
Aug 19 21:52:25 ubuntu-bionic sudo: bob : TTY=pts/0 ; PWD=/home/bob ; USER=root ; COMMAND=/bin/su
Aug 19 21:52:25 ubuntu-bionic sudo: pam_unix(sudo:session): session opened for user root by bob(uid=0)
Aug 19 21:52:25 ubuntu-bionic su[5708]: Successful su for root by root
Aug 19 21:52:25 ubuntu-bionic su[5708]: + /dev/pts/0 root:root
Aug 19 21:52:25 ubuntu-bionic su[5708]: pam_unix(su:session): session opened for user root by bob(uid=0)
Aug 19 21:52:25 ubuntu-bionic su[5708]: pam_systemd(su:session): Cannot create session: Already running in a session
Aug 19 22:12:45 ubuntu-bionic su[5708]: pam_unix(su:session): session closed for user root
Aug 19 22:12:45 ubuntu-bionic sudo: pam_unix(sudo:session): session closed for user root
Aug 19 22:12:48 ubuntu-bionic sshd[5691]: Received disconnect from 10.0.2.2 port 49854:11: disconnected by user
Aug 19 22:12:48 ubuntu-bionic sshd[5691]: Disconnected from user bob 10.0.2.2 port 49854
Aug 19 22:12:48 ubuntu-bionic sshd[5610]: pam_unix(sshd:session): session closed for user bob
Aug 19 22:12:48 ubuntu-bionic systemd-logind[847]: Removed session 7.
Une infrastructure c’est beaucoup de machines: les logs sont décentralisés à plein d’endroits.
On veut un endroit centralisé pour tout ranger.
Les Beats pour lire les données depuis plusieurs machines. Les principales sont :
Logstash : récupère les logs pour les traiter avant de les envoyer dans Elasticsearch
Elastic APM
Calculons la quantité de log que produisent 12 instances d’une application pendant un mois Chaque instance = Un serveur web, une application python + une base de données pour toutes les instances