Configuring Nagios with m4
When using m4 to configure Nagios, great advantages can be realized. One of the easiest places to gain an advantage by using m4 is when defining a new host.
Typically, a new host not only has a host definition but a number of fairly standardized services – such as ping, FTP, telnet, SSH, and so forth. Thus, when defining a new host configuration, you not only have to add a new host, but all of the relevant services as well – and may also include host extra info and service extra info also.
#----------------------------------------
# HOST: marco
#----------------------------------------
define host{
use hpux-host ; Name of host template
host_name marco
address 192.168.4.1
}
define hostextinfo{
host_name marco
action_url http://marco-mp/
}
define service{
use passive-service ; Name of servi
host_name marco
service_description System Load
servicegroups Load
}
define service{
use hpux-service ; Name of service
host_name marco
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define service{
use hpux-service ; Name of service
host_name marco
service_description TELNET
servicegroups TELNET
check_command check_telnet
}
define serviceextinfo{
host_name marco
service_description TELNET
action_url telnet://marco
}
define service{
use hpux-service ; Name of service
host_name marco
service_description FTP
servicegroups FTP
check_command check_ftp
}
define service{
use hpux-service ; Name of service
host_name marco
service_description NTP
servicegroups NTP
check_command check_ntp
}
define service{
use hpux-service ; Name of service
host_name marco
service_description SSH
servicegroups SSH
check_command check_ssh
}
Compare that output from the m4 code that generated it:
DEFHPUX(`marco',`192.168.4.1')
Another benefit is that if DEFHPUX is coded correctly (with each service independent – such as an m4 macro DOSSH for SSH) – then a single change to the m4 file, propogated to the Nagios config file, can alter a service for every HP-UX host (in this example).
Here is a possible definition of DEFHPUX:
define(`DEFHPUX',`
#----------------------------------------
# HOST: $1
#----------------------------------------
define host{
use hpux-host ; Name of host template
host_name $1
address $2
}
define hostextinfo{
host_name $1
action_url http://$1-mp/
}'
DOLOAD(`$1')
DOPING(`$1')
DOTELNET(`$1')
DOFTP(`$1')
DONTP(`$1')
DOSSH(`$1')
There is a lot more that m4 can do; this is just the tip of the iceberg.
Powered by ScribeFire.



Sweet! Never really looked at m4, very old-school Unix. Thanks for posting this tip.