ubuntuusers.de

nagios variable auslesen

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

helldunkel

Avatar von helldunkel

Anmeldungsdatum:
11. Mai 2016

Beiträge: 99

Wohnort: Engen

Hi,

wie kann ich meinem fertigen nagios bash Script Variablen übergeben bzw. wie sieht der Script Befehl aus?

in der nagios cfg file heisst es ja

1
$USER1$/check_name -d $ARG1$

Wie übergebe ich nun das $ARG1$ meinem Script

LG

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

Den Parameter kannst du in der Service-Konfiguration übergeben:

define service {
        use                     generic-service
        host_name               <hostname>
        service_description     <beschreibung>
        check_command           check_name!Argument1!Argument2!Argument3...
}

helldunkel

(Themenstarter)
Avatar von helldunkel

Anmeldungsdatum:
11. Mai 2016

Beiträge: 99

Wohnort: Engen

Da steht es so auch drin ☺

Was muss in meinem Script stehen damit es das Argument bekommt.

1
CHECK=`hdparm -C $1 | grep -o "active/idle\|standby"`

Was muss ich tun damit $1 = Argument ist?

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

Achso. Du willst also Optionen im Bash-Skript auswerten. Stichwort für dich wäre getopts. Dazu gibt es diesen Abschnitt im Wiki bzw. auch haufenweise Tutorials bei Google.

helldunkel

(Themenstarter)
Avatar von helldunkel

Anmeldungsdatum:
11. Mai 2016

Beiträge: 99

Wohnort: Engen

misterunknown schrieb:

Achso. Du willst also Optionen im Bash-Skript auswerten. Stichwort für dich wäre getopts. Dazu gibt es diesen Abschnitt im Wiki bzw. auch haufenweise Tutorials bei Google.

Wenn das bedeutet das ich so eine Variable von der nagios config in mein Script bekomme? Ich möchte keine Auswahl oder sonstiges.

1
Check_command    check_name!/dev/sda

nur das $1=/dev/sda ist

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

helldunkel schrieb:

Wenn das bedeutet das ich so eine Variable von der nagios config in mein Script bekomme?

Ja.

Ich möchte keine Auswahl oder sonstiges.

Dann machs nicht. So würde es aussehen, wenn du keine Optionen nutzt, sondern einfach nur ein Argument übergibst:

define command {
  command_name  check_name
  command_line  /pfad/zum/skript/skriptname.sh '$ARG1$'
}

define service {
        use                     generic-service
        host_name               <hostname>
        service_description     <beschreibung>
        check_command           check_name!/dev/sda
}

Anschließend kannst du im Skript mit $1 auf das Argument zugreifen. Innerhalb des Skripts solltest du aber prüfen, ob der übergebene Wert auch plausibel ist:

1
2
3
4
if [ -b "$1" ]; then
  echo "Kein Blockdevice angegeben"
  exit 1
fi

helldunkel

(Themenstarter)
Avatar von helldunkel

Anmeldungsdatum:
11. Mai 2016

Beiträge: 99

Wohnort: Engen

Ich stell mal mein Script und die Config hierein. Vielleicht könntest du mir sagen wo genau der Fehler in meinem Ansatz liegt. Ich will deine Nerven nicht noch länger strapazieren ☺

Ein Buch zum shell programmieren ist schon aufm iPad 😬

Skirpt

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!bin/bash

CHECK=`hdparm -C $1 | grep -o "active/idle\|standby"`

if [ $CHECK == "active/idle" ]; then
        STATUS="disk spinning"
        EXIT=1

elif [ $CHECK == "standby" ]; then
        STATUS="standby"
        EXIT=0

else
        STATUS="Check failed"
        EXIT=3

fi

echo $STATUS
exit $EXIT

Config

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
define command{
        command_name    check_hdparm
        command_line    $USER1$/check_hdparm $ARG1$
        }

define service{
        use                             local-service
        host_name                       server
        service_description             hdparm sdc
        check_command                   check_hdparm!/dev/sdc
        }

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

helldunkel schrieb:

Ich stell mal mein Script und die Config hierein. Vielleicht könntest du mir sagen wo genau der Fehler in meinem Ansatz liegt. Ich will deine Nerven nicht noch länger strapazieren ☺

Abgesehen davon, dass das Shell-Skript ziemlich schlampig geschrieben ist (falscher Operator für String-Vergleiche, keine Backticks verwenden, ...), gibt es keinen Fehler im Ansatz. Wo liegt denn dein Problem?

Les dir mal den Bash-Skripting-Guide für Anfänger durch 😉

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13216

misterunknown schrieb:

Abgesehen davon, dass das Shell-Skript ziemlich schlampig geschrieben ist (falscher Operator für String-Vergleiche, keine Backticks verwenden, ...),

Die Shebang-Zeile ist auch falsch.

gibt es keinen Fehler im Ansatz. Wo liegt denn dein Problem?

Ich würde den Vergleich ja mit case machen.

Les dir mal den Bash-Skripting-Guide für Anfänger durch 😉

👍

helldunkel

(Themenstarter)
Avatar von helldunkel

Anmeldungsdatum:
11. Mai 2016

Beiträge: 99

Wohnort: Engen

Abgesehen davon, dass das Shell-Skript ziemlich schlampig geschrieben ist (falscher Operator für String-Vergleiche, keine Backticks verwenden, ...), gibt es keinen Fehler im Ansatz.

Das "Lob" geht dann wohl an einen Anderen 😛 . Ich hab das Script von einem anderen Programmierer zu 98% übernommen, da es mein aller aller Versuch war.

Wo liegt denn dein Problem?

Ich bekomme immer "check failed" in Nagios. Das hatte ich nur bekommen wenn ich dem Script keine Variable mitgegeben hatte.

Die Shebang-Zeile ist auch falsch.

Hab nach dem absenden des Posts auch gemerkt ☺

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

helldunkel schrieb:

Das "Lob" geht dann wohl an einen Anderen 😛 . Ich hab das Script von einem anderen Programmierer zu 98% übernommen, da es mein aller aller Versuch war.

Das ist keine Ausrede 😛 Das Skript hat ne Hand voll Zeilen, von daher lässt sich das einfach fixen.

Ich bekomme immer "check failed" in Nagios. Das hatte ich nur bekommen wenn ich dem Script keine Variable mitgegeben hatte.

Dann musst du debuggen. Als erstes könntest du mitloggen wie das Skript aufgerufen wird:

echo "$0" >> /tmp/check_hdparm_log

helldunkel

(Themenstarter)
Avatar von helldunkel

Anmeldungsdatum:
11. Mai 2016

Beiträge: 99

Wohnort: Engen

Dann musst du debuggen. Als erstes könntest du mitloggen wie das Skript aufgerufen wird:

-bash

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

misterunknown schrieb:

Dann musst du debuggen. Als erstes könntest du mitloggen wie das Skript aufgerufen wird:

echo "$0" >> /tmp/check_hdparm_log

Da hab ich mich vertan. Es müsste

echo "$@" >> /tmp/check_hdparm_log

heißen. $0 beinhaltet nur den Name der Shell bzw. des Shell-Skripts. $@ enthält alle Argumente.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13216

Ich baue ja auch immer gerne so etwas am Anfang eines Skriptes ein:

1
2
3
4
5
#!/bin/sh

test -n "$DEBUG" && set -x

# Hauptteil

Dann kann man Debugging einfach beim Aufruf einschalten, z.B. so:

1
$ DEBUG=y foo.sh

Man sieht dann die ausgeführten Befehle und die übergebenen Parameter. Und das schöne ist, das wirkt dann auch auf andere Skripte, die entsprechend vorbereitet sind und von dem ersten Skript aufgerufen werden.

helldunkel

(Themenstarter)
Avatar von helldunkel

Anmeldungsdatum:
11. Mai 2016

Beiträge: 99

Wohnort: Engen

misterunknown schrieb:

misterunknown schrieb:

Dann musst du debuggen. Als erstes könntest du mitloggen wie das Skript aufgerufen wird:

echo "$0" >> /tmp/check_hdparm_log

Da hab ich mich vertan. Es müsste

echo "$@" >> /tmp/check_hdparm_log

heißen. $0 beinhaltet nur den Name der Shell bzw. des Shell-Skripts. $@ enthält alle Argumente.

Log file ist leer wenn nagios das Script startet.

Starte ich das Script per Hand, steht die vorher von mir angegebene Variable drin.

Antworten |