Grosse Umgebungen sind haeufige Einsatzgebiete von check_multi, um die
Auf der anderen Seite hat auch check_multi Nachteile (Es kann nur einen geben), wenn
Dies war der Startpunkt und die Motivation, fuer eine verbesserte Implementierung mit
Das ist schon alles.
Es gibt ein Problem, wenn auf der Remote-Seite Checks ausgefuehrt und deren Ergebnisse in die passive Eingangsqueue von Nagios transferiert werden sollen: den Transport.
Die Loesung ist: check_multi wird zweimal aufgerufen in einer Kommando-Kette:
Das erste check_multi gibt seine Daten per XML an das zweite check_multi auf dem Nagios-Server zurueck.
Anmerkung: die gesamte Kette wird auf dem Nagios-Server gestartet. Fuer DMZ-Host-Monitoring werden daher keine Inbound Connections verwendet.
check_by_ssh -H <hostname> -c '/path/to/check_multi -f multi.cmd -r 256' | check_multi -f - -r 8192
check_nrpe -H <hostname> -c check_multi -a '-f multi.cmd -r 256' | check_multi -f - -r 8192
check_nrpe -H <hostname> -c check_multi -a '-f multi.cmd -r 4096'
Diese Methode benoetigt einen laufenden nsca-Daemon auf dem Nagios-Server. Da die Verbindung auf dem Remote-Server gestartet wird, ist diese Methode nicht fuer DMZ-Setups geeignet.
check_multi laesst sich einfach in Sven Nierleins mod_gearman integrieren.
mod_gearman ist ein Nagios NEB module, das in einem gearman scheduling framework laeuft und die Check-Resultate in Nagios zurueckgibt. Mit dieser Technik koennen viele tausend Checks sehr effizient und flexibel in einer einzelnen Nagios-Instanz ausgefuehrt werden.
Ein spezieller Client 'send_multi' ist Teil des mod_gearman-Pakets und kann dazu verwendet werden, die einzelnen Child-Check-Resultate in die gearman-Queues einzuspeisen.
Dieser Client ist ein kleines C-Binary und bei weitem ressourcensparender, als wenn man check_multi selber dazu verwenden wuerde, die Checks an Nagios zurueckzumelden.
Aufrufbeispiel:
$ check_multi -f multi.cmd -r 256 | \ send_multi --server=<job server> --encryption=no --host="<hostname>" --service="<service>"
Anmerkungen:
broker_module=/usr/local/share/nagios/mod_gearman.o \ server=localhost \ encryption=no \ eventhandler=no \ hosts=no \ services=no \ hostgroups=does_not_exist
Diese Beispiel-Installation ist Teil des sample-config-Verzeichnisses im check_multi-Paket.
Achtung: das Setup laeuft nur auf einer Maschine, es ist kein Remote-Zugang eingeschlossen. Fuer das grundsaetzliche Verstaendnis des Prinzips spielt das aber keine Rolle
Kochrezept:
./configure; make all
cd sample-config/feed_passive
make install-config
, dies wird ein Verzeichnis /path/to/nagios/etc/check_multi/feed_passive erzeugen und fuellen.
cfg_dir=/usr/local/nagios/etc/check_multi/feed_passive
<nagiosdir>/etc/check_multi/feed_passive und fuehren perl gencfg nhosts
aus, danach wieder einen Nagios-Reload.
| Einstellung | Kommentar |
|---|---|
| child_processes_fork_twice=0 | Ein Fork reicht aus. |
| free_child_process_memory=0 | Linux kann Speicher viel schneller freigeben als Nagios |
| log_initial_states=0 | Andernfalls wird pro Service jeden Tag ein unnoetiger Eintrag im Log gemacht. |
| log_passive_checks=0 | Spart viel Platz in der nagios.log. |
| use_large_installation_tweaks=1 | Noch ein echter Performance-Vorteil (z.B. keine Statistik-Makros) |
Keines dieser Attribute ist zwingend erforderlich, aber die Performance in grossen Setups wird erheblich verbessert.
Nur als Beispiel ;)
#--- multi.cmd command [ system_disk ] = check_disk -w 5% -c 2% -p / command [ system_load ] = check_load -w 10,8,6 -c 20,18,16 command [ system_swap ] = check_swap -w 90 -c 80 command [ system_users ] = check_users -w 5 -c 10 command [ procs_num ] = check_procs command [ procs_cpu ] = check_procs -w 10 -c 20 --metric=CPU -v command [ procs_mem ] = check_procs -w 100000 -c 2000000 --metric=RSS -v command [ procs_zombie ] = check_procs -w 1 -c 2 -s Z command [ proc_cron ] = check_procs -c 1: -C cron command [ proc_syslogd ] = check_procs -c 1: -C syslogd #--- avoid redundant states state [ WARNING ] = IGNORE state [ CRITICAL ] = IGNORE state [ UNKNOWN ] = IGNORE
Dieser Service laeuft auf dem Remote-Host und sammelt Daten:
-r 256+4+1:-r 256 as XML output option-r 4 for ERROR output -r 1 for detailed results in the status linedefine service {
service_description multi_feed
host_name host1
check_command check_multi!-f multi_small.cmd -r 256+4+1 -v
event_handler multi_feed_passive
check_interval 5
use local-service
}
passive_checks_enabled 1active_checks_enabled 0define service {
service_description $THIS_NAME$
host_name $HOSTNAME$
passive_checks_enabled 1
active_checks_enabled 0
check_command check_dummy!0 "passive check"
use local-service
}
Mit dem Report-Mode 2048 koennen Sie sich diese Service-Definitionen einfach erzeugen:
check_multi -f multi.cmd -r 2048 -s service_definition_template=/path/to/service_definition.tpl > services_passive.cfg
Hinweis: schreiben Sie sich einen Einzeiler, der ueber die Nagios-Hosts laeuft und den Stapel der Service-Check-Definitionen erzeugt. Wann immer ein Host hinzugefuegt oder entfernt wird, lassen Sie diesen Einzeiler laufen und reloaden danach Nagios.
Passive check result was received for service '%s' on host '%s', but the service could not be found! bedeutet, dass fuer einen check_multi-Childcheck keine entsprechende passive Service-Definition gefunden wurde. Kontrollieren Sie bitte die passiven Service-Definitionen.cat test.xml | check_multi -f - -r 8192
.
check_multi … | check_multi -f - -f xyz.cmd. Hardware
Nagios configuration
# sar -u 06:00:00 PM CPU %user %nice %system %iowait %idle 06:00:01 PM all 32.28 0.00 28.37 0.71 38.63 06:10:01 PM all 31.66 0.00 27.86 1.05 39.43 06:20:31 PM all 31.60 0.00 28.06 1.25 39.09 06:30:01 PM all 31.61 0.00 28.40 1.19 38.79 06:40:01 PM all 31.55 0.00 28.39 1.16 38.90 06:50:01 PM all 33.68 0.00 28.54 0.92 36.86
# sar -q 06:00:00 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 06:00:01 PM 3 166 1.99 2.52 3.75 06:10:01 PM 3 158 1.91 2.19 2.95 06:20:31 PM 2 155 1.53 1.93 2.44 06:30:01 PM 2 159 2.22 2.11 2.28 06:40:01 PM 2 155 1.76 1.96 2.10 06:50:01 PM 2 165 1.90 2.14 2.14
Nagios Stats 3.1.2 Copyright (c) 2003-2008 Ethan Galstad (www.nagios.org) Last Modified: 06-23-2009 License: GPL CURRENT STATUS DATA ------------------------------------------------------ Status File: /usr/local/nagios/var/status.dat Status File Age: 0d 0h 0m 5s Status File Version: 3.1.2 Program Running Time: 0d 1h 40m 5s Nagios PID: 4112 Used/High/Total Command Buffers: 0 / 0 / 4096 Total Services: 26001 Services Checked: 26001 Services Scheduled: 1001 Services Actively Checked: 1001 Services Passively Checked: 25000 Total Service State Change: 0.000 / 7.760 / 0.327 % Active Service Latency: 0.000 / 1.054 / 0.160 sec Active Service Execution Time: 0.300 / 3.266 / 0.917 sec Active Service State Change: 3.750 / 7.760 / 4.246 % Active Services Last 1/5/15/60 min: 187 / 988 / 1001 / 1001 Passive Service Latency: 0.000 / 0.000 / 0.000 sec Passive Service State Change: 0.000 / 7.760 / 0.170 % Passive Services Last 1/5/15/60 min: 4694 / 24676 / 25000 / 25000 Services Ok/Warn/Unk/Crit: 26001 / 0 / 0 / 0 Services Flapping: 186 Services In Downtime: 0 Total Hosts: 1002 Hosts Checked: 1002 Hosts Scheduled: 1002 Hosts Actively Checked: 1002 Host Passively Checked: 0 Total Host State Change: 0.000 / 0.000 / 0.000 % Active Host Latency: 0.971 / 2.042 / 1.366 sec Active Host Execution Time: 0.024 / 1.150 / 0.065 sec Active Host State Change: 0.000 / 0.000 / 0.000 % Active Hosts Last 1/5/15/60 min: 185 / 935 / 1002 / 1002 Passive Host Latency: 0.000 / 0.000 / 0.000 sec Passive Host State Change: 0.000 / 0.000 / 0.000 % Passive Hosts Last 1/5/15/60 min: 0 / 0 / 0 / 0 Hosts Up/Down/Unreach: 1002 / 0 / 0 Hosts Flapping: 0 Hosts In Downtime: 0 Active Host Checks Last 1/5/15 min: 220 / 968 / 2906 Scheduled: 220 / 968 / 2906 On-demand: 0 / 0 / 0 Parallel: 220 / 968 / 2906 Serial: 0 / 0 / 0 Cached: 0 / 0 / 0 Passive Host Checks Last 1/5/15 min: 0 / 0 / 0 Active Service Checks Last 1/5/15 min: 200 / 1001 / 3003 Scheduled: 200 / 1001 / 3003 On-demand: 0 / 0 / 0 Cached: 0 / 0 / 0 Passive Service Checks Last 1/5/15 min: 4975 / 25000 / 75000 External Commands Last 1/5/15 min: 0 / 0 / 0