| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
| serveurs:installation:script-srvstatus [2023/06/05 07:39] – [Installer script srvstatus] jpmilcent | serveurs:installation:script-srvstatus [2023/06/08 08:14] (Version actuelle) – [Stocker les logs du Cron dans leur propre fichier] jpmilcent |
|---|
| ====== Installer script srvstatus ====== | ====== Installer script srvstatus ====== |
| * **Notes** : le script [[https://github.com/ratibor78/srvstatus|ratibor78/srvstatus]] nous permet de surveiller le status de services //Systemd// via //Grafana//. | * **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 : | * TODO : |
| * tester l'utilisation de la commande suivante pour générer un fichier json de status à la place du script srvstatus: <code bash> | * tester l'utilisation de la commande suivante pour générer un fichier json de status à la place du script srvstatus: <code bash> |
| 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] } ) | 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] } ) |
| </code> | </code> |
| * Sur Bullseye la commande suivante fonctionne :<code bash> systemctl list-units -t service --full --all --output=json --no-pager </code> | * Sur Bullseye la commande suivante fonctionne :<code bash> systemctl list-units -t service --full --all --output=json --no-pager </code> |
| * **Problème** la commande n'affiche pas le temps de fonctionnement... | * **Problème** la commande n'affiche pas le temps de fonctionnement alors que le script //srvstatus// le fait... |
| |
| ===== Installer le script ===== | ===== Installer le script ===== |
| * Installer les paquets requis : ''pip install -r requirements.txt'' | * Installer les paquets requis : ''pip install -r requirements.txt'' |
| * Rendre exécutable le script : ''chmod +x ./service.py'' | * 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 ===== | ===== Configurer le script ===== |
| * Ajouter dans le fichier //telegraf.conf// utiliser par le container //Docker// la configuration suivante : <code toml> | * Ajouter dans le fichier //telegraf.conf// utiliser par le container //Docker// la configuration suivante : <code toml> |
| [[inputs.exec]] | [[inputs.exec]] |
| commands = [ | commands = ["cat /opt/srvstatus/status.json"] |
| "cat /opt/srvstatus/status.json" | |
| ] | |
| timeout = "5s" | timeout = "5s" |
| name_override = "services_stats" | name_override = "services_stats" |
| data_format = "json" | data_format = "json" |
| tag_keys = [ | tag_keys = ["service"] |
| "service" | |
| ] | |
| </code> | </code> |
| | |
| | ===== 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 : <code bash>vi /etc/rsyslog.conf</code> |
| | * Remplacer la ligne : <code>*.*;auth,authpriv.none -/var/log/syslog</code> par <code>*.*;cron,auth,authpriv.none -/var/log/syslog</code> |
| | * Dé-commenter la ligne : <code># cron.* /var/log/cron.log</code> |
| | * Redémarrer le service Rsyslog avec : <code bash>systemctl restart rsyslog.service</code> |
| | * Redémarrer le service Cron avec : <code bash>systemctl restart cron.service</code> |
| | * Vérifier : |
| | * la présence du fichier ''cron.log'' et l'ajout de nouveaux logs avec : <code bash>vi /var/log/cron.log</code> |
| | * l'absence de log du Cron dans le fichier ''syslog'' avec : <code bash>vi /var/log/syslog</code> |