Nagios Konfigurieren
Nach der Grundinstallation von Nagios müssen die einzelnen Config Files angepasst werden, damit die einzelnen Hosts & Services überwacht werden können.
Diese Config Files befinden sich in diesem Verzeichnis:
/usr/local/etc/nagios
/usr/local/etc/nagios/localhost.cfg
In diesem File werden die Zeitperioden, Kontakte, Gruppen, Hosts und Services verwaltet.
timeperiod
Hier werden die Zeiten verwaltet. Ich benötige für meine Config speziell noch die nonworkhours Periode – da mir während diesen Zeiten SMS Notifies zugeschickt werden sollen – da ich dann ja hoffentlich keine Mails checke 😉
In diesem Abschnitt definiert man also, welche Uhrzeiten und Wochentage zu der entsprechenden Zeitperiode gehören. Das sieht dann zum Beispiel so aus:
# 'nonworkhours' timeperiod definition define timeperiod{ timeperiod_name nonworkhours alias Non-Work Hours sunday 00:00-24:00 monday 00:00-24:00 tuesday 00:00-11:00,17:00-24:00 wednesday 00:00-11:00,17:00-24:00 thursday 00:00-11:00,17:00-24:00 friday 00:00-11:00,17:00-24:00 saturday 00:00-24:00 }
contact
Hier sind die diversen Kontakte zu den entsprechenden Workinghours definiert. In meinem Fall ist es jetzt so, dass per Email während 24/7 Notifies rausgeschickt werden. An die sms Email Adresse nur zu den non-workinghours.
define contact{
contact_name nagios-admin
alias Nagios Admin
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,r
service_notification_commands notify-by-email
host_notification_commands host-notify-by-email
email nagios-admin@localhost
}
define contact{
contact_name sms-notify
alias SMS Notify
service_notification_period nonworkhours
host_notification_period nonworkhours
service_notification_options w,u,c,r
host_notification_options d,r
service_notification_commands notify-by-email
host_notification_commands host-notify-by-email
email user@smsgateway.??
}
contactgroup
In der Contactgroup sollten alle Kontakte eingetragen werden. Nachher werden dann nur noch die „admins“ oder die „supporter“ oder wer auch immer kontaktiert. Ich habe nur eine contactgroup.
define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members nagios-admin,sms-notify
}
host
Hier werden nun alle zu überwachenden Hosts eingetragen. Das default freebsd-server Template nehme ich als Vorlage.
define host{
use freebsd-server ; Name of host template to use
; This host definition will inherit all variables that are defined
; in (or inherited by) the freebsd-server host template definition.
host_name localhost
alias corky Server (localhost)
address 127.0.0.1
}
define host{
use freebsd-server ; Name of host template to use
; This host definition will inherit all variables that are defined
; in (or inherited by) the freebsd-server host template definition.
host_name violet
alias violet Server
address 10.0.0.2
}
define host{
use freebsd-server ; Name of host template to use
; This host definition will inherit all variables that are defined
; in (or inherited by) the freebsd-server host template definition.
host_name patsy
alias patsy Server
address 10.0.0.4
}
define host{
use freebsd-server ; Name of host template to use
; This host definition will inherit all variables that are defined
; in (or inherited by) the freebsd-server host template definition.
host_name tesla
alias tesla Server
address 10.0.0.3
}
hostgroup
Hier werden dann die Server Gruppen Verwaltet. Zum Beispiel Kunden- und eigene Server etc. Ich hab im Moment nur eigene Server in der Liste also nur eine hostgroup.
define hostgroup{
hostgroup_name SHOE
alias SHOE Servers
members localhost, violet, patsy, tesla
}
service
Nun die Services, die auf den einzelnen Hosts überwacht werden müssen.
# Define a service to "ping" the local machine
define service{
use local-service ; Name of service template to use
host_name localhost
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
# Define a service to check the disk space of the root partition
# on the local machine. Warning if < 20% free, critical if
# < 10% free space on partition.
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Root Partition
check_command check_local_disk!20%!10%!/
}
# Define a service to check the number of currently logged in
# users on the local machine. Warning if > 10 users, critical
# if > 20 users.
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Current Users
check_command check_local_users!10!20
}
# Define a service to check the number of currently running procs
# on the local machine. Warning if > 250 processes, critical if
# > 400 users.
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Total Processes
event_handler server-abbild ; Bei Problem, Server Abbild machen in Logfiles
check_command check_local_procs!250!400!RSZDT
}
# Define a service to check the load on the local machine.
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Current Load
event_handler server-abbild ; Bei Problem, Server Abbild machen in Logfiles
check_command check_local_load!6.0,5.0,4.0!10.0,6.0,4.0
}
## eigene Scripts
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Mail - DKIM
max_check_attempts 3
event_handler restart-dkim ; Bei Problem, RESTART
check_command check_local_is_running!dkim-filter!1:1 ; muss 1 prozess vorhanden sein
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description IPMI
check_command check_local_ipmi
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description HTTP
max_check_attempts 3
event_handler restart-httpd ; Bei Problem, RESTART
check_command check_http
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description SMTP
event_handler restart-sendmail ; Bei Problem, RESTART
check_command check_smtp
}
[...etc...]
/usr/local/etc/nagios/commands.cfg
Hier werden alle Befehle verwaltet. Die Binaries (für manuelle Checks etc.) befinden sich hier:
/usr/local/libexec/nagios/
Verfügbare Variabeln (Makros)
- $USER1$ -> /usr/local/libexec/nagios/ -> definiert im /usr/local/etc/nagios/resource.cfg
Die weiteren Makros wie
- $ARG1$
- $ARG2$
- $ARG3$
- $HOSTADDRESS$
- $NOTIFICATIONTYPE$
- $HOSTNAME$
- $HOSTSTATE$
- $HOSTOUTPUT$
- $CONTACTEMAIL$
etc. sind in diesem Wiki erklärt. Eine Liste aller Makros gibts hier.
Hier werden also alle Befehle verwaltet. Wird also z.B. im localhost.cfg dieser Befehl aufgeführt:
check_command check_local_procs!250!400!RSZDT
wird dieser hier übergeben:
define command{
command_name check_local_procs
command_line $USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
}
Das wiederum führt dann den Befehl so aus:
/usr/local/libexec/nagios/check_procs -w 250 -c 400 -s RSZDT
Und gibt dann diesen Output an Nagios zurück:
PROCS OK: 17 processes with STATE = RSZDT
Services per NRPE checken
Hierzu verwendet man einfach das nrpe Plugin von Nagios. Wenn NRPE auf dem Client installiert ist, kann man auf dem Hauptserver die Befehle remote ausführen. Wenn wir nochmals das Beispiel von vorher mit den check_procs nehmen, würde das so aussehen:
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe2 -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$
}
In den Services dann so:
define service{
...
check_command check_nrpe!check_procs!250 400 RSZDT
}
Auf dem Client wiederum muss im File
/usr/local/etc/nrpe.cfg
Der Befehl check_procs aktiviert sein:
command[check_procs]=/usr/local/libexec/nagios/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
Führen wir das jetzt aus, sieht das so aus:
/usr/local/libexec/nagios/check_nrpe2 -H violet -c check_procs -a 250 400 RSZDT
PROCS OK: 23 processes with STATE = RSZDT
Probleme & Lösungen
check_mysql Plugin fehlt
Wurden die Plugins direkt über das vorkompilierte Package installiert (pkg install nagios-plugins), kommen sie per default ohne Mysql Support
# pkg rquery '%Ok %Ov %Od %OD' nagios-plugins
DBI off off (null)
DNS_BASE on on (null)
DNS_BIND910 off off (null)
DNS_BIND911 off off (null)
DNS_BIND99 off off (null)
DNS_BINDTOOLS off off (null)
EXTRAOPTS on on (null)
FPING off off (null)
IPV6 on on (null)
LDAP off off (null)
MYSQL off off (null)
NETSNMP off off (null)
NLS on on (null)
PGSQL off off (null)
QSTAT off off (null)
RADIUS off off (null)
SSH_PORTABLE off off (null)
Also muss man die Nagios Plugins selber kompilieren damit MySQL dabei ist.
hierzu ist wichtig, dass im /etc/make.conf mysql aktiviert ist :
OPTIONS_SET=MYSQL
# pkg delete nagios-plugins
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 3 packages (of 0 packages in the universe):
Installed packages to be REMOVED:
nagios-plugins-2.2.0_2,1
nrpe-2.15_6
nagios-3.5.1_10
Number of packages to be removed: 3
The operation will free 7 MiB.
Proceed with deinstalling packages? [y/N]: y
cd /usr/ports/net-mgmt/nagios-plugins
make install clean
und jetzt noch
pkg lock nagios-plugins
damit das plugin beim nächsten pkg upgrade nicht wieder ohne mysql installiert wird.
und nagios und nrpe wieder reinstallieallieren
pkg install nagiospkg install nrpe
.