Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
serveurs:installation:script-srvstatus [2021/03/23 16:44] – [Configurer le script] 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 : |
| * 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] } ) |
| </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 alors que le script //srvstatus// le fait... |
| |
===== Installer le script ===== | ===== Installer le script ===== |
* Cloner le dépôt : ''<nowiki> git clone https://github.com/ratibor78/srvstatus.git </nowiki>'' | * Cloner le dépôt : ''<nowiki> git clone https://github.com/ratibor78/srvstatus.git </nowiki>'' |
* Se placer dans le dossier du script : ''cd /opt/srvstatus'' | * Se placer dans le dossier du script : ''cd /opt/srvstatus'' |
* Installer le paquet : ''aptitude install python3-venv'' | * Installer le paquet : ''apt install python3-venv'' |
* Créer un //venv// avec //Python 3// : ''python3 -m 'venv' ./venv'' | * Créer un //venv// avec //Python 3// : ''python3 -m 'venv' ./venv'' |
* Activer le //venv// : ''source venv/bin/activate'' | * Activer le //venv// : ''source venv/bin/activate'' |
* 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 ===== |
* Copier le fichier //setting.ini// depuis le dépôt Github //sinp-<region>-srv// : ''<nowiki> wget https://raw.githubusercontent.com/cbn-alpin/sinp-<region>-srv/main/<instance>-srv/opt/srvstatus/settings.ini <//nowiki>'' | * Copier le fichier //setting.ini// depuis le dépôt Github //sinp-<region>-srv// : ''<nowiki> wget https://raw.githubusercontent.com/cbn-alpin/sinp-<region>-srv/main/<instance>-srv/opt/srvstatus/settings.ini </nowiki>'' |
* Suivant le SINP et le serveur, remplacer ''<region>'' (par ''paca'' ou ''aura'') et ''instance'' (par ''web'' ou ''db'') | * Suivant le SINP et le serveur, remplacer ''<region>'' (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-<region>-srv// : ''cp settings.ini.back settings.ini'' | * 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-<region>-srv// : ''cp settings.ini.back settings.ini'' |
* Définir les noms des services //Systemd// à surveiller dans le fichier //setting.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 ===== | ===== Préparer le Cron du script ===== |
* Créer un fichier //srvstatus.cron// : ''vi srvstatus.cron'' | * Copier le fichier //srvstatus.cron// depuis le dépôt Github //sinp-<region>-srv// : ''<nowiki> wget https://raw.githubusercontent.com/cbn-alpin/sinp-<region>-srv/main/<instance>-srv/opt/srvstatus/srvstatus.cron </nowiki>'' |
| * Suivant le SINP et le serveur, remplacer ''<region>'' (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-<region>-srv// : '' vi srvstatus.cron '' |
* Y placer le contenu suivant :<code bash> | * Y placer le contenu suivant :<code bash> |
# /etc/cron.d/srvstatus: crontab entries for the srvstatus script | # /etc/cron.d/srvstatus: crontab entries for the srvstatus script |
| |
===== Configurer Telegraf ===== | ===== 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 : <code yaml> | * Penser à ajouter le volume correspondant au fichier //status.json// dans le //docker-compose.yml// afin que //Telegraf// y est accès : <code yaml> |
services: | services: |
* 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> |