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

.

  • *

    Du kannst diese HTML tags verwenden: <a> <abbr> <acronym> <b> <blockquote> <cite> <code> <del> <em> <i> <q> <s> <strike> <strong>

  • Kommentar-Feed für diesen Beitrag
nach oben