====== Les LOG ======
===== Lire les log =====
Un outils dispo dans les paquets -> https://goaccess.io/
apt install goaccess
Pour lire ses log en couleurs d'une façon simple, rapide et efficace, j'ai développé un petit script sympathique.
Pour cela installez les paquets **less** et **ccze**
aptitude install less ccze
Créez le fichier suivant en le plaçant dans **/usr/bin/** et en le rendant exécutable.
chmod +x logview
#!/bin/bash
case "$1" in
"" | "-h" | "--help")
echo "Usage : logview "
echo "-h, --help : this help"
echo "Accept gzip file"
;;
*)
if [[ -f $1 ]]
then
if [[ `/usr/bin/file -b --mime-type $1` == "application/x-gzip" ]]
then
/bin/zcat $1 | /usr/bin/ccze -A | /usr/bin/less -R
else
/bin/cat $1 | /usr/bin/ccze -A | /usr/bin/less -R
fi
else
echo "$1 n'est pas un fichier valide"
fi
;;
esac
Ce script lit aussi bien les log en texte brut que les logs gzippés.
logview /var/log/syslog
logview /var/log/syslog.2.gz
La navigation et recherche se fait comme sous **vim**
Tapez **/** pour lancer une recherche puis **Entrée**\\
**n** pour passer à l’occurrence suivante.\\
**q** pour quitter.
===== Avec vim =====
Il est possible de voir les logs avec une colorisation syntaxique directement et automatiquement dans **vim** (j'ai enfin trouvé..)
[[linux:vim#coloriser_les_fichiers_de_log|Consulter notre dossier sur ce sujet]]
===== Traitement des log =====
==== Sortir le nombre de fois qu'une url a été atteinte dans un log apache ====
Savoir combien de fois apparait une adresse ip dans un fichier de log
grep -c '10.10.10.10' access.log
Compter le nombre de fois qu'une url de type /news/12345 a été atteinte
egrep -c '^10.10.10.10.*/news/[0-9]+' access.log
Ressortir que les numéros id news qu iont été lu
sed -r '/^10\.10\.10\.10.*\/news\/[0-9]+/!d;s/.*\/news\/([0-9]+).*/\1/' access.log
Pour ces ids, sortir le nombre de fois qu'ils ont été lu pour chacun
sed -r '/^10\.10\.10\.10.*\/news\/[0-9]+/!d;s/.*\/news\/([0-9]+).*/\1/' access.log | sort | uniq -c | less
==== Quel ip ressort le plus ====
sed -r 's/^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) .*/ip: \1/' access.log | sort | uniq -c | sort -rh | less
cat access.* | awk '{ print $1 }' | sort | uniq -c | sort -n
==== tail ====
Y mettre un peu de couleur
rouge
tail -f myfile.log | perl -pe 's/.*SEVERE.*/\e[1;31m$&\e[0m/g'
orange
tail -f myfile.log | perl -pe 's/.*SEVERE.*/\e[1;33m$&\e[0m/g'
vert
tail -f myfile.log | perl -pe 's/.*SEVERE.*/\e[1;32m$&\e[0m/g'
===== journalctl =====
Config, important pour garder un historique après un reboot
Editez **/etc/systemd/journald.conf**
[Journal]
Storage=persistent
puis
systemctl restart systemd-journald
La commande de base, le ''-e'' envoie direct à la fin du journal, le ''-x'' ajouter des messages d'explications
journalctl -xe
journalctl -n
journalctl -f
Journaux du boot
# le dernier boot
journalctl -b
# l'avant dernier boot
journalctl -b -1
Journaux du kernel
journalctl -k
Par unité
journalctl -u nginx.service
Par date depuis le...
journalctl --since today
Par date jusqu'au ...
journalctl --until today
Extraire une information pour l'utiliser par exemple dans un script, ici un exemple pour voir si un process python a été killé par OOM killer aujourd'hui
journalctl --no-pager -k --since today --grep="killed process(.*)python" --output=cat