Ce que vous saurez
Tout ce que vérifie le plugiciel, ou votre propre script. La vérification Script (agent) exécute un programme sur la machine surveillée et en lit le résultat comme le fait Nagios :
| Code de sortie | Dans Gryphon |
|---|---|
0 | En bon état |
1 | Avertissement |
2 | Problème |
3 | Inconnu : le script n’a pas pu le déterminer |
La première ligne qu’affiche le script devient le message de la vérification, coupée au | pour en écarter les données de performance de Nagios. Tout autre code de sortie, ou un script encore en cours après 10 secondes, donne un état inconnu.
Ce que cela ne peut pas faire : exécuter quoi que ce soit avec les pouvoirs de root. Sous Linux, l’agent s’exécute sous son propre utilisateur non privilégié, sans capacités, sans accès aux périphériques et sans aucun moyen d’utiliser sudo. Les plugiciels qui ont besoin de sockets bruts, comme check_icmp et check_fping, échouent, tout comme ce qui lit les disques directement. Une marche à suivre pour ces cas est décrite sous Vérifications qui exigent root.
Avant de commencer
- L’agent Gryphon sur la machine, connecté à son hôte dans Gryphon.
- Un shell d’administrateur sur cette machine. Gryphon ne peut exécuter, par son nom, que ce qui se trouve déjà dans un dossier que vous choisissez. Rien de ce qui est tapé dans Gryphon n’est jamais exécuté.
Les étapes sont écrites pour Linux. Windows et macOS suivent le même principe ; voyez Variantes.
Étapes
1Activer les vérifications par script
Les vérifications par script sont désactivées tant que l’agent n’a pas de dossier de scripts. Créez-en un que seul root peut modifier, indiquez-le dans les réglages de l’agent, puis redémarrez celui-ci :
sudo install -d -o root -g root -m 0755 /etc/gryphon/scripts
echo 'GWC_SCRIPTS_DIR=/etc/gryphon/scripts' | sudo tee -a /etc/gryphon/agent.env
sudo systemctl restart gryphon-agent
2Installer les plugiciels
sudo apt install monitoring-plugins-basic
Ils s’installent dans /usr/lib/nagios/plugins. Sur Fedora, RHEL et leurs dérivés, les paquets nagios-plugins-* d’EPEL les installent dans /usr/lib64/nagios/plugins. Lancez-en un à la main pour le voir fonctionner : /usr/lib/nagios/plugins/check_procs -c 1: -C nginx.
3Envelopper le plugiciel
Gryphon exécute un script par son nom, sans arguments : chaque plugiciel et ses arguments vont donc dans un script enveloppe de deux lignes. Celui-ci signale un problème quand aucun processus nginx ne tourne :
#!/bin/sh
exec /usr/lib/nagios/plugins/check_procs -c 1: -C nginx
sudo chmod 755 /etc/gryphon/scripts/check-nginx
L’agent refuse un script que quelqu’un d’autre que root, ou que l’utilisateur de l’agent lui-même, pourrait modifier : le fichier et le dossier doivent donc appartenir à root et n’être modifiables par personne d’autre. Les noms peuvent contenir des lettres, des chiffres, des points, des tirets et des traits de soulignement, jusqu’à 64 caractères.
Exécutez-le comme le fera l’agent, sous un utilisateur jetable non privilégié soumis aux mêmes restrictions :
sudo systemd-run --pipe --wait --quiet -p DynamicUser=yes -p NoNewPrivileges=yes \
-p CapabilityBoundingSet= -p PrivateDevices=yes -p ProtectSystem=strict \
/etc/gryphon/scripts/check-nginx; echo "exit $?"
S’il fonctionne là, il fonctionnera sous l’agent.
4Ajouter la vérification
Ouvrez l’hôte, allez dans Services, choisissez Ajouter le service, puis Script (agent).
- Nom
- nginx en marche
- Script
- check-nginx
- Intervalle de vérification
- Fréquence 3 Minutes
Plugiciels qui fonctionnent bien sous l’agent
Chaque ligne va après exec, dans son propre script enveloppe, comme à l’étape 3.
| Ce qu’il vous apprend | Script enveloppe |
|---|---|
| Un processus tourne | /usr/lib/nagios/plugins/check_procs -c 1: -C nginx |
| L’horloge a dérivé : un avertissement à une demi-seconde, un problème à une seconde | /usr/lib/nagios/plugins/check_ntp_time -H pool.ntp.org -w 0.5 -c 1 |
| Des mises à jour attendent : un avertissement s’il y en a, un problème si certaines sont des mises à jour de sécurité (Debian et Ubuntu) | /usr/lib/nagios/plugins/check_apt |
| L’espace d’échange s’épuise : un avertissement sous 20 % d’espace libre, un problème sous 10 % | /usr/lib/nagios/plugins/check_swap -w 20% -c 10% |
Pour le ping, HTTP, les ports TCP, le disque, la mémoire, le processeur et la charge, utilisez plutôt les vérifications propres à Gryphon. Elles n’exigent aucun plugiciel, et le ping de l’agent se rabat sur une sonde TCP là où il ne peut pas envoyer d’ICMP.
Écrire le vôtre
N’importe quel exécutable convient : shell, Python, programme compilé. Affichez une ligne qui dit ce que vous avez trouvé, et quittez avec le code qui correspond à ce que cela signifie. Celui-ci surveille le RAID logiciel de Linux :
#!/bin/sh
# Linux software RAID. A healthy mirror shows [UU] in /proc/mdstat,
# a degraded one [U_].
if ! grep -q "^md" /proc/mdstat 2>/dev/null; then
echo "UNKNOWN - no software RAID arrays in /proc/mdstat"
exit 3
fi
if grep -q "\[U*_[U_]*\]" /proc/mdstat; then
echo "CRITICAL - a RAID array is degraded"
exit 2
fi
if grep -q -E "resync|recovery|reshape" /proc/mdstat; then
echo "WARNING - a RAID array is rebuilding"
exit 1
fi
echo "OK - every RAID array is healthy"
- Restez sous les 10 secondes. Jusqu’à quatre scripts s’exécutent à la fois, chacun dans le dossier des scripts, sous l’utilisateur de l’agent, avec l’environnement de l’agent moins ses propres réglages
GWC_. - Utilisez des chemins complets pour les programmes qu’il appelle. Le
PATHde l’agent n’est pas celui de votre shell. - Ne quittez avec 3 que si le script n’a pas pu regarder. Gryphon n’alerte jamais pour un état inconnu, parce qu’il signifie « pas de réponse », et non « quelque chose ne va pas ». Tout ce qui demande l’intervention d’une personne doit donner 1 ou 2.
Vérifications qui exigent root
L’état SMART des disques, les pools ZFS et les outils de RAID matériel exigent root, ce que l’agent n’a pas. Partagez le travail : une tâche cron de root exécute l’outil et écrit son verdict dans un fichier, et le script de l’agent lit ce fichier. Ce script d’écriture vérifie l’état SMART de chaque disque une fois par heure. Il exige smartmontools.
#!/bin/sh
# Run hourly by root: smartctl needs root, and the agent does not have it.
# Writes a message and an exit code for the agent's smart-status script.
OUT=/var/lib/gryphon-status/smart
mkdir -p /var/lib/gryphon-status
failing=""
for disk in $(smartctl --scan | cut -d " " -f 1); do
smartctl -H "$disk" > /dev/null 2>&1
# Bit 3 of smartctl's exit status: the drive says it is failing.
if [ $(( $? & 8 )) -ne 0 ]; then
failing="$failing $disk"
fi
done
if [ -n "$failing" ]; then
printf "CRITICAL - SMART says failing:%s\n2\n" "$failing" > "$OUT.tmp"
else
printf "OK - every disk passes its SMART health check\n0\n" > "$OUT.tmp"
fi
chmod 644 "$OUT.tmp"
mv "$OUT.tmp" "$OUT"
17 * * * * /usr/local/sbin/smart-to-gryphon
Le script de l’agent transmet le verdict, et fait d’un fichier manquant ou périmé un avertissement :
#!/bin/sh
# Reads what the root job wrote: a message, then an exit code.
F=/var/lib/gryphon-status/smart
if [ ! -r "$F" ]; then
echo "WARNING - $F is missing: is the root job running?"
exit 1
fi
if [ -n "$(find "$F" -mmin +90)" ]; then
echo "WARNING - $F is more than 90 minutes old: is the root job running?"
exit 1
fi
code=$(sed -n 2p "$F")
sed -n 1p "$F"
exit "${code:-3}"
Pour ZFS, le test du script d’écriture devient zpool status -x, qui affiche all pools are healthy quand c’est le cas. Le script de lecture reste le même.
Faire un essai
- Exécutez le script à la main, puis
echo $?. La ligne affichée et le code sont ce que Gryphon montrera. - Exécutez-le sous
systemd-runcomme à l’étape 3. Un plugiciel qui fonctionne pour vous, mais pas là, a besoin d’une permission que l’agent n’a pas. - Utilisez Vérifier maintenant dans Gryphon. Quand l’agent refuse d’exécuter un script, la vérification est à l’état inconnu et le message dit pourquoi, par exemple
is owned by uid 1000, not root or the agent's user,is writable by every user on this machine,is not executable (chmod +x it)oudid not finish within 10s and was stopped.
Variantes
Sous Windows
Ajoutez GWC_SCRIPTS_DIR=C:\ProgramData\Gryphon\scripts à C:\ProgramData\Gryphon\agent.env, puis exécutez Restart-Service GryphonAgent. L’agent exécute les fichiers .ps1, .bat, .cmd et .exe de ce dossier. Dans Gryphon, donnez le nom avec son extension, par exemple pending-reboot.ps1. Créez les scripts dans ce dossier plutôt que de les y déplacer, pour qu’ils en prennent les permissions. Un fichier déplacé garde les siennes, et l’agent le refuse.
# A warning while Windows Update is waiting for a restart.
$key = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired'
if (Test-Path $key) {
Write-Output 'WARNING - a restart is needed to finish installing updates'
exit 1
}
Write-Output 'OK - no restart pending'
exit 0
Les scripts s’exécutent dans Windows PowerShell sous le compte de service de l’agent, NT SERVICE\GryphonAgent, la stratégie d’exécution étant contournée pour ce seul fichier. Pour les services, voyez Vérifier qu’un service Windows est en cours d’exécution.
Sur un Mac
Dans le menu Gryphon Agent, choisissez Edit Settings… et réglez scripts_dir sur un dossier à vous, par exemple ~/Library/Application Support/Gryphon Agent/scripts, écrit au long. Arrêtez ensuite l’agent, puis remettez-le en marche. Les scripts s’exécutent sous votre utilisateur : ils doivent donc vous appartenir, ou appartenir à root, et personne d’autre ne doit pouvoir les modifier. Le paquet Homebrew monitoring-plugins installe les plugiciels dans /opt/homebrew/sbin.
Un plugiciel, plusieurs cibles
Créez un script enveloppe par cible, par exemple check-procs-nginx et check-procs-postgres, et ajoutez une vérification pour chacun. Chaque vérification a son propre historique et sa propre alerte.