Tuesday, May 21st 2013, 12:48pm UTC+2

You are not logged in.

  • Login
  • Register

thd

Intermediate

Posts: 309

Birthday: Oct 11th

Gender: male

Location: Ludwigshafen

Occupation: Netzwerkadministrator

Number of monitoring servers: 3

Nagios Version: 3.2.2

Icinga Version: 1.8.2

Distributed monitoring: Ja

Redundant monitoring: Nein

Number of hosts: >1100

Number of services: >8000

OS: Ubuntu 12.04, CentOS 6

Plugin Version: 1.4.13

NagVis Version: 1.6.13

Other Addons: PNP (0.6.14) , nagvis, check_multi, BPV, mk-livestatus, mod_gearman, thruk

1

Monday, March 16th 2009, 1:45pm

[solved] Perl Frage (@argv)

Hi,

ich schreibe gerade ein Plugin, welches als
notify command eingesetzt werden soll.
Das plugin wird folgerndermaßen aufgerufen:

Source code

1
../libexec/testplugin.pl param1 param2 paramx

Auf Grund von param1 entscheidet das Plugin ob es param2-x ausführt.
Nun wollte ich einfach das plugin vor die normalen "notify-service-by-email"
setzen.
alt:

Source code

1
2
3
4
define command{
        command_name    notify-service-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTNAME$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTNAME$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
        }


neu:

Source code

1
2
3
4
define command{
        command_name    notify-service-by-email
        command_line    $USER1$/testplugin.pl abcdef  /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTNAME$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" \| /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTNAME$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
        }


Nun möchte ich das Kommando danach "/usr/bin/printf ... \| /usr/bin/mail ..." ausführen lassen. Momentan mache ich das ganz einfach so:

Source code

1
`@ARGV`

Soweit funktioniert das ganze auch. Nur leider werden die Sonderzeichen "\n" nicht in Zeilenumbrüche umgewandelt.
Das die Pipe "|" durch "\|" ersetzt werden muss, habe ich schon gemerkt, nur finde ich keine Möglichkeit, wie
man mit Zeilenumbrüchen umgehen kann.

Generell, wenn man @ARGV einen String "test\ntest" mit gibt, kann ich daraus keinen Zeilenumbruch mehr bekommen?!
Wieso, oder was mache ich falsch?

Hat jemand eine Idee?

Vielen Dank.
Gruß
Thomas

This post has been edited 1 times, last edit by "thd" (Mar 19th 2009, 8:40am)


mess

Master

Posts: 2,164

Location: Esslingen

Number of monitoring servers:

Nagios Version:

Distributed monitoring: Nein

Redundant monitoring: Nein

Number of hosts:

Number of services:

OS:

Plugin Version:

NagVis Version:

NDO Version:

Perfparse Version:

Other Addons:

2

Monday, March 16th 2009, 2:23pm

Das ist ja mal ne Puppe in der Puppe ;)

Aber im Ernst: die Newlines musst du wie das Pipe-Zeichen '|' auch escapen.

Also insgesamt zwei '\' davorsetzen, damit die im Perl noch heil ankommen: '\\n' wird im Perl dann zu '\n' und erzeugt das gewuenschte Newline.

Gruss - Matthias
-> check_multi und check_generic
Problem solved? Dann einfach mal flattrn, das hilft dem Forum!

thd

Intermediate

Posts: 309

Birthday: Oct 11th

Gender: male

Location: Ludwigshafen

Occupation: Netzwerkadministrator

Number of monitoring servers: 3

Nagios Version: 3.2.2

Icinga Version: 1.8.2

Distributed monitoring: Ja

Redundant monitoring: Nein

Number of hosts: >1100

Number of services: >8000

OS: Ubuntu 12.04, CentOS 6

Plugin Version: 1.4.13

NagVis Version: 1.6.13

Other Addons: PNP (0.6.14) , nagvis, check_multi, BPV, mk-livestatus, mod_gearman, thruk

3

Monday, March 16th 2009, 3:26pm

Hi Matthias,

danke für deine Antwort,
Irgendwie will das nicht, nehmen wir mal dieses Testprogramm.

Source code

1
2
3
4
5
#!/usr/bin/perl
use strict;
use warnings;
print "@ARGV\n";
exit 0;

nun rufe ich das folgendermaßen auf:

Source code

1
 ./argv.pl "test01 \ntest02"

oder

Source code

1
 ./argv.pl "test01 \\ntest02"

beidemale bekomme ich als Ergebnis:

Source code

1
test01 \ntest02

Mein Ziel ist:

Source code

1
2
test01
test02


Gruß
Thomas

Posts: 7,238

Gender: male

Number of monitoring servers: 2

Nagios Version: 3.2.1

Icinga Version: Icinga 1.7.x

Distributed monitoring: Nein

Redundant monitoring: Nein

Number of hosts: >70

Number of services: >200

OS: SLES11

Plugin Version: 1.4.15

Other Addons: NRPE 2.6, NSCA 2.7, PNP 0.4.14 / 0.6.18

4

Monday, March 16th 2009, 8:34pm

Source code

1
2
3
4
5
6
#!/usr/bin/perl
use strict;
use warnings;
for (0..$#ARGV) { $ARGV[$_] =~ s#\\n#\n#g; }
print "@ARGV\n";
exit 0;


Source code

1
./argv.pl "test01 \ntest02"
ist im übrigen nur ein einziger Parameter

Andurin

Unregistered

5

Monday, March 16th 2009, 8:50pm

Hallo thd,

auch wenn man mir nun Eigenwerbung nachsagen kann, warum möchtest du mit den 'schmutzigen' @argv direkt arbeiten und nicht mit getopt, also --something?

Das was da im Perl Plugin Template verbrochen wurde lässt sich auch überall anders einsetzen.
http://www.nagios-wiki.de/nagios/plugins…plugin_template

Striktes arbeiten mit @argv wird vllt. irgendwann unübersichtlich wenn die Parameter einer Reihenfolge unterliegen müssen.
Just my 2 Cents.

Ansonsten hat Wolfgang recht: "some thing" ist ein argument "some" "thing" wären zwei.

Gruß
Hendrik

thd

Intermediate

Posts: 309

Birthday: Oct 11th

Gender: male

Location: Ludwigshafen

Occupation: Netzwerkadministrator

Number of monitoring servers: 3

Nagios Version: 3.2.2

Icinga Version: 1.8.2

Distributed monitoring: Ja

Redundant monitoring: Nein

Number of hosts: >1100

Number of services: >8000

OS: Ubuntu 12.04, CentOS 6

Plugin Version: 1.4.13

NagVis Version: 1.6.13

Other Addons: PNP (0.6.14) , nagvis, check_multi, BPV, mk-livestatus, mod_gearman, thruk

6

Tuesday, March 17th 2009, 9:07am

Hallo,

na dann hole ich mal etwas weiter aus.
Meine Idee war ein Script zu schreiben, mit welchem ich einfach und schnell
Bereitschaften setzen kann.
Bevor nun eine Bereitschafts-Nachricht raus geht, soll nun das Script
prüfen, ob der "contact_name" überhaupt Bereitschaft hat,
wenn ja soll es einfach das notification_commands ausführen.
Dieses command wollte ich einfach hinten dran hängen, um
die Nagiosconfig einfach zu halten. Dabei trat aber das
"Sonderzeichenproblem" auf (\n oder \t ...).

@Hendrik
bei der Benutzung von getopt müsste ich für jedes notify_command
ein eigenes "zwischenscript" schreiben. Ich wollte einfach
check_bereitschaft.pl "dazwischenhängen".


Heute früh ist es mir jedoch wie Schuppen von den Augen gefallen.
Es geht ja noch viel einfacher:

Source code

1
2
3
4
define command{
        command_name    notify-service-bereitschaft
        command_line    $USER1$/check_bereitschaft.pl $CONTACTNAME$ && /usr/bin/printf "%b" "Type: $NOTIFICATIONTYPE... |  /usr/bin/mail $CONTACTEMAIL$
        }

Das scheint problemlos zu funtionieren. :)

@Wolfgang
Danke. :) So gehts. Wieder was gelernt.


Danke
Gruß
Thomas

vicodas

Intermediate

Posts: 480

Birthday: Aug 16th 1965 (47)

Gender: male

Location: Deutschland

Occupation: Systemadmin Linux, DMZ

Number of monitoring servers: 5

Hobbies: Laufen, Angeln, Computa

Nagios Version: OMD mk Subskription

Distributed monitoring: Ja

Redundant monitoring: Nein

Number of hosts: ~ 800

Number of services: sehr viele

OS: Nagios auf Debian, überwacht einiges ;-)

Plugin Version: OMD mk Subskription

NagVis Version: OMD mk Subskription

Other Addons: check_mk, SNMPTT, eigene,

7

Tuesday, March 17th 2009, 10:49am

könntest Du das fertige Script hier veröffentlichen?
Stehe auch bald vor solch einem Problem... ;)

thx vicodas
+++ Github

pitchfork

Administrator

Posts: 18,436

Location: Kassel

Occupation: Sysadmin SAP / Linux / AIX

Number of monitoring servers: 2

Hobbies: Motorrad fahren, wenns die Zeit erlaubt :-)

Nagios Version: 3.2.3 ( OMD )

Distributed monitoring: Nein

Redundant monitoring: Nein

Number of hosts: 360

Number of services: 6700

OS: Debian 6.0

Plugin Version: 1.4.x

Other Addons: SNMPTT, NagTrap, check_mk, PNP-0.6.x. Thruk

8

Tuesday, March 17th 2009, 10:55am

Mal ein vielleicht ganz doofer Ansatz die Aufgabe anzugehen.

Ich würde einfach die Mail an einen lokalen User auf den nagios Server senden und die Weiterleitung über dessen ~/.forward regeln.

Die Bereitschafft muss nur dafür sorgen das zum richtigen Zeitpunkt die richtige Adresse im File steht.
+++ PNP Developer +++ PNP 0.6.21 ist online ! +++
Hilfreiche Infos gefunden? Dann schnell ein paar Cent flattrn
OMD - Open Monitoring Distribution

thd

Intermediate

Posts: 309

Birthday: Oct 11th

Gender: male

Location: Ludwigshafen

Occupation: Netzwerkadministrator

Number of monitoring servers: 3

Nagios Version: 3.2.2

Icinga Version: 1.8.2

Distributed monitoring: Ja

Redundant monitoring: Nein

Number of hosts: >1100

Number of services: >8000

OS: Ubuntu 12.04, CentOS 6

Plugin Version: 1.4.13

NagVis Version: 1.6.13

Other Addons: PNP (0.6.14) , nagvis, check_multi, BPV, mk-livestatus, mod_gearman, thruk

9

Tuesday, March 17th 2009, 11:14am

Hi,

@pitchfork
Nuja, mein Ansatz ist ein anderer.
Es geht ja nicht nur um email versenden. Mein Script
soll einfach eine "Ebene" dazwischen sein, die entscheidet,
ob das nächste Kommando ausgeführt werden soll oder nicht.
Außerdem möchte ich nicht an mehreren Stellen
etwas ändern müssen, sondern zentral. Das geschieht
über eine kleine Webseite.

@vicodas
So ganz reif für die Öffentlichkeit ist das noch nicht.
Weiß auch nicht, wie allgemeinheitstauglich das ganze ist. :)
Aber wenn Interesse besteht, würde ich das auch gern
veröffentlichen.


Gruß
Thomas

vicodas

Intermediate

Posts: 480

Birthday: Aug 16th 1965 (47)

Gender: male

Location: Deutschland

Occupation: Systemadmin Linux, DMZ

Number of monitoring servers: 5

Hobbies: Laufen, Angeln, Computa

Nagios Version: OMD mk Subskription

Distributed monitoring: Ja

Redundant monitoring: Nein

Number of hosts: ~ 800

Number of services: sehr viele

OS: Nagios auf Debian, überwacht einiges ;-)

Plugin Version: OMD mk Subskription

NagVis Version: OMD mk Subskription

Other Addons: check_mk, SNMPTT, eigene,

10

Wednesday, March 18th 2009, 6:23am

eine PM würde schon reichen :D
+++ Github

thd

Intermediate

Posts: 309

Birthday: Oct 11th

Gender: male

Location: Ludwigshafen

Occupation: Netzwerkadministrator

Number of monitoring servers: 3

Nagios Version: 3.2.2

Icinga Version: 1.8.2

Distributed monitoring: Ja

Redundant monitoring: Nein

Number of hosts: >1100

Number of services: >8000

OS: Ubuntu 12.04, CentOS 6

Plugin Version: 1.4.13

NagVis Version: 1.6.13

Other Addons: PNP (0.6.14) , nagvis, check_multi, BPV, mk-livestatus, mod_gearman, thruk

11

Wednesday, March 18th 2009, 12:12pm

Hi

eine PM würde schon reichen :D


Jo, ist raus. :)

qeqar

Master

Posts: 1,906

Birthday: Jul 27th 1978 (34)

Gender: male

Location: Köln

Occupation: Admin

Number of monitoring servers: 5

Hobbies: MMA/Motorrad

Nagios Version: 3.0

Distributed monitoring: Ja

Redundant monitoring: Ja

Number of hosts: 200

Number of services: 4000

OS: Debian

Plugin Version: 1.4.x

Other Addons: NC_Net,PNP,NDO2FS,Bp

12

Wednesday, March 18th 2009, 3:44pm

Hi,

wenn du schon eine Perlplugin baust warum nciht dann gleich nagios::plugin? Das ist sogar schon bei den Offiziellen Plugins dabei.

Mark
Bekennendes Mitglied der NC_Net Minderheiten-Fraktion (NNMF) :D

thd

Intermediate

Posts: 309

Birthday: Oct 11th

Gender: male

Location: Ludwigshafen

Occupation: Netzwerkadministrator

Number of monitoring servers: 3

Nagios Version: 3.2.2

Icinga Version: 1.8.2

Distributed monitoring: Ja

Redundant monitoring: Nein

Number of hosts: >1100

Number of services: >8000

OS: Ubuntu 12.04, CentOS 6

Plugin Version: 1.4.13

NagVis Version: 1.6.13

Other Addons: PNP (0.6.14) , nagvis, check_multi, BPV, mk-livestatus, mod_gearman, thruk

13

Wednesday, March 18th 2009, 3:50pm

Hi Marc,

weil ich kein standard Check-Plugin baue, sondern ein Script,
welches mir die Problematik ständig wechselnde Bereitschaft erleichtern soll.

Gruß
Thomas

Similar threads