Passer au contenu

Utiliser n’importe quel plugiciel Nagios, ou écrire votre propre vérification

La vérification par script de Gryphon lit les codes de sortie comme Nagios, alors les milliers de plugiciels existants fonctionnent avec une enveloppe de deux lignes.

Vérifications que vous ajouterez
Script (agent)
L’agent
Requiert l’agent
Écrit pour
Linux, Windows, macOS

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 sortieDans Gryphon
0En bon état
1Avertissement
2Problème
3Inconnu : 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 :

Dans un terminal
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

Debian et Ubuntu
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 :

/etc/gryphon/scripts/check-nginx
#!/bin/sh
exec /usr/lib/nagios/plugins/check_procs -c 1: -C nginx
Ensuite
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 :

Dans un terminal
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).

Ajouter : Script (agent) Services → Ajouter le service
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 apprendScript 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 :

/etc/gryphon/scripts/raid
#!/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 PATH de 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.

/usr/local/sbin/smart-to-gryphon
#!/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"
sudo crontab -e
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 :

/etc/gryphon/scripts/smart-status
#!/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

  1. Exécutez le script à la main, puis echo $?. La ligne affichée et le code sont ce que Gryphon montrera.
  2. Exécutez-le sous systemd-run comme à l’étape 3. Un plugiciel qui fonctionne pour vous, mais pas là, a besoin d’une permission que l’agent n’a pas.
  3. 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) ou did 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.

C:\ProgramData\Gryphon\scripts\pending-reboot.ps1
# 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.

Ce n’est pas ce que vous exploitez ? Parcourez tous les guides, ou dites-nous ce que vous devez surveiller et nous rédigerons le guide.

Quatorze jours gratuits. Puis à partir de $4.99 par mois.

L’agent, le tableau de bord, les applications et toutes les vérifications sauf les cinq pour Kubernetes font partie de chaque forfait. Les forfaits diffèrent par la quantité que vous surveillez, la fréquence, la provenance des vérifications, et le nombre de personnes et de pages d’état qu’ils comprennent. Comparer les forfaits. Annulez quand vous voulez.