5 votes

Plugin Nagios pour prendre un instantané des processus lorsque la charge est élevée

Nous avons configuré Nagios con check_load via NRPE pour surveiller la charge du serveur, il signale les cas où la charge est élevée, mais il ne dispose pas de l'option permettant de prendre un instantané des processus supérieurs (comme le fait le plugin top ) à ce moment-là.

Y a-t-il des nagios NRPE des plug-ins pour cela ?

12voto

quanta Points 49664

Vous pouvez le faire avec les gestionnaires d'événements .

Tout d'abord, ajoutez un gestionnaire d'événements pour votre définition de la moyenne de chargement :

define service{
    use                     generic-service
    host_name               xx
    service_description     Load_Average
    check_command           check_nrpe!check_load
    event_handler           processes_snapshot!xx
    contact_groups          admin-sms
}

があります。 processes_snapshot est définie dans commands.cfg :

define command{
    command_name    processes_snapshot
    command_line    $USER1$/eventhandlers/processes_snapshot.sh $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$
}

Et deuxièmement, écrivez un gestionnaire d'événement script ( processes_snapshot.sh ) :

#!/bin/bash

case "$1" in
    OK)
        ;;
    WARNING)
        /usr/local/nagios/libexec/check_nrpe -H $4 -c processes_snapshot
        ;;
    UNKNOWN)
        ;;
    CRITICAL)
        /usr/local/nagios/libexec/check_nrpe -H $4 -c processes_snapshot
        ;;
esac

exit 0

La commande processes_snapshot est défini dans nrpe.cfg sur le xx comme ci-dessous :

command[processes_snapshot]=top -cSbn 1 | tail -n +8 | sort -rn -k11 | head > /tmp/proc_snap.txt

PS : Je n'ai pas testé cette configuration.

2 votes

On dirait que cela place l'instantané dans un fichier dans /tmp. Est-il possible d'obtenir la liste dans l'email de notification que nagios envoie ?

0 votes

Il y a un bug dans la ligne de commande supérieure de nrpe.cfg : -cSb n 1 devrait être -cSbn 1 sinon vous obtenez top: unknown argument 'n' .

0 votes

@MariusGedminas : 1. Comment envoyer un email depuis le Nagios ? Pouvez-vous faire passer le top sortie vers mail -s 'process snapshotting' youremail@domain.com ? 2. Mon top sur les systèmes CentOS, Gentoo et Ubuntu fonctionne bien.

8voto

Jon Winstanley Points 11280

Voici ce que j'ai fait pour obtenir un instantané de la liste des processus directement dans les courriels de notification basé sur l'idée de @quanta. Il peut contenir des chemins spécifiques à la façon dont Nagios est installé sur les machines Debian/Ubuntu :

  1. Création d'un script enveloppant /usr/local/sbin/check_load qui appelle l'original et ajoute l'instantané du processus si le code de sortie est 1 (WARNING) ou 2 (CRITICAL) :

    #!/bin/sh
    /usr/lib/nagios/plugins/check_load "$@" || {
        rc=$?
        echo
        # http://nagios.sourceforge.net/docs/3_0/pluginapi.html
        # | separates long output from perfdata
        COLUMNS=1000 top -cSbn 1|sed -e 's/|/<BAR>/g' -e 's/ \+$//'
        exit $rc
    }

    Ceci définit les COLONNES à un grand nombre afin que les noms de processus/lignes de commande ne soient pas tronqués à 40 caractères, exécutez top en mode batch pour une itération ( -bn 1 ), demande des lignes de commande complètes ( -c ) et les temps cumulés de CPU ( -S ) à montrer, puis s'assure que la sortie de top n'est pas tronquée au premier | en le remplaçant par <BAR> .

    Je trouve que l'ordre de tri par défaut de top est adéquat - essayer de re-trier par temps CPU cumulé comme suggéré dans la réponse de @quanta met les démons système comme init ou crond en haut, ce qui ne m'aide pas à comprendre quel CGI script était responsable du pic CPU. De plus, de cette façon, je garde l'en-tête de top.

    N'oubliez pas de chmod +x /usr/local/sbin/check_load

  2. Editar /etc/nagios-plugins/config/load.cfg et remplacer le check_load entrée

    command_line    /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$'

    をもって

    command_line    /usr/local/sbin/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$'
  3. Editar /etc/nagios3/commands.cfg et mettre à jour le notify-service-by-email afin d'inclure $LONGSERVICEOUTPUT$ dans les courriels générés. C'est trop long pour être collé ici ; en gros, trouvez le fichier Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail et le changer en Info:\n\n$SERVICEOUTPUT$\n$LONGSERVICEOUTPUT$\n" | /usr/bin/mail .

  4. Redémarrer nagios : service nagios3 restart .

Je n'ai pas essayé avec le NRPE.

1 votes

Fonctionne aussi avec nrpe.

1voto

joshua paul Points 123

Je préfère :

command[processes_snapshot]=top -cSbn 1 | head -14 | tail -8

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X