====== Installer script srvstatus ====== * **Notes** : * le script [[https://github.com/ratibor78/srvstatus|ratibor78/srvstatus]] nous permet de surveiller le status de services //Systemd// via //Grafana//. * le plugin ''inputs.systemd_status'' ne fonctionne pas dans un container Docker. Voir : https://github.com/influxdata/telegraf/issues/7689 * TODO : * tester l'utilisation de la commande suivante pour générer un fichier json de status à la place du script srvstatus: systemctl list-units --type service --full --all --plain --no-legend --no-pager | sed 's/ \{1,\}/,/g' | jq --raw-input --slurp 'split("\n") | map(split(",")) | .[0:-1] | map( { "unit": .[0], "load": .[1], "active": .[2], "sub": .[3], "description": .[4] } ) * Sur Bullseye la commande suivante fonctionne : systemctl list-units -t service --full --all --output=json --no-pager * **Problème** la commande n'affiche pas le temps de fonctionnement alors que le script //srvstatus// le fait... ===== Installer le script ===== * Se placer dans /opt : ''cd /opt'' * Cloner le dépôt : '' git clone https://github.com/ratibor78/srvstatus.git '' * Se placer dans le dossier du script : ''cd /opt/srvstatus'' * Installer le paquet : ''apt install python3-venv'' * Créer un //venv// avec //Python 3// : ''python3 -m 'venv' ./venv'' * Activer le //venv// : ''source venv/bin/activate'' * Installer les paquets requis : ''pip install -r requirements.txt'' * Rendre exécutable le script : ''chmod +x ./service.py'' ==== Mettre à jour le script ==== * Se placer dans le dossier du script : ''cd /opt/srvstatus'' * Mettre à jour le dépôt : ''git pull'' * Activer le //venv// : ''source venv/bin/activate'' * Installer les paquets requis : ''pip install -r requirements.txt'' * Désactiver le //venv// : ''deactivate'' * Vérifier le bon fonctionnement : ''vi status.json'' ===== Configurer le script ===== * Copier le fichier //setting.ini// depuis le dépôt Github //sinp--srv// : '' wget https://raw.githubusercontent.com/cbn-alpin/sinp--srv/main/-srv/opt/srvstatus/settings.ini '' * Suivant le SINP et le serveur, remplacer '''' (par ''paca'' ou ''aura'') et ''instance'' (par ''web'' ou ''db'') * Si le fichier n'est pas dispo dans le dépôt, vous pouvez créer le fichier de config puis le stocker dans le dépôt Git //sinp--srv// : ''cp settings.ini.back settings.ini'' * Vérifier ou définir les noms des services //Systemd// à surveiller dans le fichier //setting.ini// : '' vi settings.ini '' ===== Préparer le Cron du script ===== * Copier le fichier //srvstatus.cron// depuis le dépôt Github //sinp--srv// : '' wget https://raw.githubusercontent.com/cbn-alpin/sinp--srv/main/-srv/opt/srvstatus/srvstatus.cron '' * Suivant le SINP et le serveur, remplacer '''' (par ''paca'' ou ''aura'') et ''instance'' (par ''web'' ou ''db'') * Si le fichier n'est pas disponible dans le dépôt, vous pouvez créer le fichier puis le stocker dans le dépôt Git //sinp--srv// : '' vi srvstatus.cron '' * Y placer le contenu suivant : # /etc/cron.d/srvstatus: crontab entries for the srvstatus script # Copy this file into /etc/cron.d/ without .cron extension : cp srvstatus.cron /etc/cron.d/srvstatus SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin * * * * * root (sleep 10 ; /opt/srvstatus/venv/bin/python /opt/srvstatus/service.py > /opt/srvstatus/status.json) * * * * * root (sleep 20 ; /opt/srvstatus/venv/bin/python /opt/srvstatus/service.py > /opt/srvstatus/status.json) * * * * * root (sleep 30 ; /opt/srvstatus/venv/bin/python /opt/srvstatus/service.py > /opt/srvstatus/status.json) * * * * * root (sleep 40 ; /opt/srvstatus/venv/bin/python /opt/srvstatus/service.py > /opt/srvstatus/status.json) * * * * * root (sleep 50 ; /opt/srvstatus/venv/bin/python /opt/srvstatus/service.py > /opt/srvstatus/status.json) * * * * * root (sleep 60 ; /opt/srvstatus/venv/bin/python /opt/srvstatus/service.py > /opt/srvstatus/status.json) * Copier le fichier de //Cron// pour l'activer : ''cp srvstatus.cron /etc/cron.d/srvstatus'' ===== Configurer Telegraf ===== * Avant lancer //Telegraf//, assurez vous d'avoir lancer manuellement une première fois le script //srvstatus// en //root// afin de créer le fichier //status.json// afin qu'il soit correctement pris en compte par le volume de Docker (voir ci-dessous) : ''/opt/srvstatus/venv/bin/python /opt/srvstatus/service.py > /opt/srvstatus/status.json'' * Penser à ajouter le volume correspondant au fichier //status.json// dans le //docker-compose.yml// afin que //Telegraf// y est accès : services: telegraf: volumes: - /opt/srvstatus/status.json:/opt/srvstatus/status.json * Ajouter dans le fichier //telegraf.conf// utiliser par le container //Docker// la configuration suivante : [[inputs.exec]] commands = ["cat /opt/srvstatus/status.json"] timeout = "5s" name_override = "services_stats" data_format = "json" tag_keys = ["service"] ===== Stocker les logs du Cron dans leur propre fichier ===== * **Objectif** : séparer les logs des Cron dans un fichier de log à part afin qu'ils ne surchargent pas le fichier syslog. Le script ''srvstatus'' écrit plusieurs lignes de log toutes les minutes. * Éditer le fichier de config de Rsyslog : vi /etc/rsyslog.conf * Remplacer la ligne : *.*;auth,authpriv.none -/var/log/syslog par *.*;cron,auth,authpriv.none -/var/log/syslog * Dé-commenter la ligne : # cron.* /var/log/cron.log * Redémarrer le service Rsyslog avec : systemctl restart rsyslog.service * Redémarrer le service Cron avec : systemctl restart cron.service * Vérifier : * la présence du fichier ''cron.log'' et l'ajout de nouveaux logs avec : vi /var/log/cron.log * l'absence de log du Cron dans le fichier ''syslog'' avec : vi /var/log/syslog