Nagios Basiskonfiguration

Nachdem Nagios installiert ist, kann mit der Konfiguration der Hosts und Services begonnen werden.

Für dieses Beispiel haben wir folgende Anforderungen:

  • SMS – und E-Mail Alarmierung
  • Unterschiedliche Support-Teams pro Host
  • Möglichst wenig Aufwand


SMS-Gateway
Der SMS-Versand soll in unserem Fall über den E-Mail2SMS Gateway von eCall (Schweiz) erfolgen. Dazu benötigen wir dort natürlich einen Account und ein Guthaben. Zudem muss dort der „Zugang via E-Mail“ freigeschaltet sein und unsere Nagios E-Mailadresse als gültiger Absender eingetragen sein. In diesem Beispiel wollen wir den Empfänger im An-Feld der E-Mail zuweisen (also z.B. +41791234567@sms.ecall.ch).

Konfiguration
Die Nagios-Konfigurationsfiles liegen in unserem Setup unter /etc/nagios3/conf.d. Die bestehenden Files dort löschen wir vorerst. (Natürlich könnten die vorhanden Files auch übernommen und angepasst werden).

cd /etc/nagios3/conf.d/
rm *.cfg

Perioden
Nagios erlaubt es, verschiedene Zeitpläne zu verwalten, damit die Alarmierung z.B. nur während Bürozeiten erfolgt. In unserem Setup benutzen wir diese Möglichkeit allerdings nicht und alarmieren somit 24×7.

/etc/nagios3/conf.d/periods.cfg

###############################################################################
# periods.cfg
###############################################################################
 
# Unfriendly period
define timeperiod{
        timeperiod_name 24x7
        alias           24 Hours A Day, 7 Days A Week
        sunday          00:00-24:00
        monday          00:00-24:00
        tuesday         00:00-24:00
        wednesday       00:00-24:00
        thursday        00:00-24:00
        friday          00:00-24:00
        saturday        00:00-24:00
        }

Kontakte und Kontaktgruppen
Dies sind die Alarmempfänger. Damit unser Setup flexibel und einfach bleibt, arbeiten wir ausschliesslich über Kontaktgruppen. So können später die Alarmempfänger ganz einfach hier in Gruppen ein/ausgetragen werden.

/etc/nagios3/conf.d/contacts.cfg

###############################################################################
# contacts.cfg
###############################################################################
 
# Persons
define contact{
        contact_name                    admin1
        alias                           Your friendly Hostadmin 1
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r
        host_notification_options       d,r
        service_notification_commands   notify-service-by-email, notify-service-by-sms
        host_notification_commands      notify-host-by-email, notify-host-by-sms
        email                           admin1@mail.tld
        pager                           004179*******@msg.ecall.ch
}
 
 
define contact{
        contact_name                    admin2
        alias                           Your unfriendly Hostadmin 2
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r
        host_notification_options       d,r
        service_notification_commands   notify-service-by-email, notify-service-by-sms
        host_notification_commands      notify-host-by-email, notify-host-by-sms
        email                           admin2@mail.tld
        pager                           004179*******@msg.ecall.ch
}
 
# Contactgroups
define contactgroup{
        contactgroup_name       staff
        alias                  All SysAdmins
        members                 admin1, admin2
}
 
define contactgroup{
        contactgroup_name       company1
        alias                   Company 1
        members                 admin1
}
 
define contactgroup{
        contactgroup_name       company2
        alias                  Company 2
        members                 admin2
}

Das „Pager“ Attribut wird in unserem Fall verwendet, um den SMS-Empfänger einzutragen. In den Kontaktgruppen werden nun jeweils unsere Members eingetragen. Diese werden im entsprechenden Fall ALLE informiert.

Host-Template
Es können verschiedene Host-Templates erfasst werden. Wir verwenden vorerst das Defaultemplate von Nagios weiter

/etc/nagios3/conf.d/template-host.cfg

##############################################################################
# template-host.cfg
##############################################################################
 
define host{
        name                            generic-host
        notifications_enabled           1       ; Host notifications
        event_handler_enabled           1       ; Host event handler
        flap_detection_enabled          1       ; Flap detection
        failure_prediction_enabled      1       ; Failure prediction
        process_perf_data               1       ; Process performance data
        retain_status_information       1       ; Retain status information across program restarts
        retain_nonstatus_information    1       ; Retain non-status information across program restarts
                check_command                   check-host-alive
                max_check_attempts              10
                notification_interval           0
                notification_period             24x7
                notification_options            d,u,r
                contact_groups                  admins
        register                        0
        }

Hosts
Langsam wirds spannend – Wir erfassen unsere Hosts. Die können etntweder mit ihrem Hostnamen oder ihrer IP „adressiert“ werden. Über das „use“ Attribut wird das Template bestimmt, welches wir verwenden wollen. Wenn erwünscht können für einzelne Hosts auch die Parameter des Templates übersteuert werden.

/etc/nagios3/conf.d/hosts.cfg

##############################################################################
# hosts.cfg
##############################################################################
define host {
        host_name       nagioshost
        alias           mynagios.something.tld
        address         localhost
        use             generic-host
        contact_groups  staff
        }
 
define host {
        host_name       server1
        alias           server1.something.com
        address         xxx.xxx.xxx.xxx
        use             generic-host
        contact_groups  company1
        }
 
define host {
        host_name       server2
        alias           server2.something.com
        address         xxx.xxx.xxx.xxx
        use             generic-host
        contact_groups  company2
        }

Über die contact_groups weisen wir nun die zuständigen Teams direkt dem Host zu. Damit werden danach alle Alarme für den Host und seine Services entsprechend zugestellt.

Hostgruppen
Über die Hostgruppen können Hosts logisch gruppiert werden (Dienst, Funktion..). Natürlich kann ein Host auch in mehreren Gruppen zugeteilt werden.

/etc/nagios3/conf.d/hostgroups.cfg

##############################################################################
# hostgroups.cfg
##############################################################################
define hostgroup {
        hostgroup_name  all
                alias           All Servers
                members         *
        }
 
# Web servers
define hostgroup {
        hostgroup_name  http-servers
                alias           HTTP servers
                members         nagioshost, server1
        }
 
define hostgroup {
        hostgroup_name          https-servers
                alias           HTTPS servers
                members         nagioshost, server2
        }
 
 
# SSh Servers
define hostgroup {
        hostgroup_name  ssh-servers
                alias           SSH servers
                members         server1, server2
        }

Es lohnt sich hier, die Gruppen klever zu bestimmen und einzuteilen.

Dienst-Template
Es können verschiedene Dienst-Templates erfasst werden. Wir verwenden hier bis auf einige Details das Defaultemplate von Nagios weiter

/etc/nagios3/conf.d/template-service.cfg

##############################################################################
# template-service.cfg
##############################################################################
 
define service{
        name                            generic-service
        active_checks_enabled           1       ; Active service checks
        passive_checks_enabled          1       ; Passive service checks
        parallelize_check               1       ; Active service checks should be parallelized (disabling this can lead to major performance problems)
        obsess_over_service             1       ; We should obsess over this service (if necessary)
        check_freshness                 0       ; Default is to NOT check service 'freshness'
        notifications_enabled           1       ; Service notifications 
        event_handler_enabled           1       ; Service event handler 
        flap_detection_enabled          1       ; Flap detection 
        failure_prediction_enabled      1       ; Failure prediction 
        process_perf_data               1       ; Process performance data
        retain_status_information       1       ; Retain status information across program restarts
        retain_nonstatus_information    1       ; Retain non-status information across program restarts
                notification_interval           0               ; Only send notifications on status change by default.
                is_volatile                     0
                check_period                    24x7
                normal_check_interval           5
                retry_check_interval            1
                max_check_attempts              4
                notification_period             24x7
                notification_options            w,u,c,r
        register                        0
        }

Wichtig ist hier, dass KEIN contact/contact_group zugewiesen wird. Dadurch werden diese Informationen vererbt (in unserem Fall vom Host).

Dienste
Als letztes können wir nun noch die zu überwachenden Dienste definieren.

/etc/nagios3/conf.d/services.cfg

###############################################################################
# services.cfg
###############################################################################
define service {
        hostgroup_name                  http-servers
        service_description             HTTP
        check_command                   check_http
        use                             generic-service
        notification_interval           0 ; set > 0 if you want to be renotified
}
 
 
define service {
        hostgroup_name                  https-servers
        service_description             HTTPS
        check_command                   check_https
        use                             generic-service
        notification_interval           0 ; set > 0 if you want to be renotified
}
 
define service {
        hostgroup_name                  ssh-servers
        service_description             SSH
        check_command                   check_ssh
        use                             generic-service
        notification_interval           0 ; set > 0 if you want to be renotified
}

Die Dienste werden idealerweise an Hostgruppen zugewiesen, da dies die Administration erleichtert. So können z.B. für Hostgruppen gleich mehrere Dienste überwacht werden.

Natürlich können auch unzählige weitere Dienste überwachen oder gar eigene Plugins schreiben. Die Nagios Dokumentation hilft weiter 😉

Eigene Befehle (commands)
Als letztes müssen wir noch die beiden neuen Commands (notify-host-by-sms, notify-service-by-sms) eintragen. Die bestehenden commands dürfen/müssen natürlich weiter existieren.

/etc/nagios3/commands.cfg

...
# host 'notify-host-by-sms' command definition
define command{
        command_name    notify-host-by-sms
        command_line    /usr/bin/printf "%b" "\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** NAGIOS **" $CONTACTPAGER$
        }
 
# 'notify-service-by-sms' command definition
define command{
        command_name    notify-service-by-sms
        command_line    /usr/bin/printf "%b" "\nHost: $HOSTALIAS$\nService: $SERVICEDESC$\nState: $SERVICESTATE$\nDate/Time: $LONGDATETIME$" | /usr/bin/mail -s "** NAGIOS **" $CONTACTPAGER$
        }
..

Dies ist gleichzeitig das Nachrichtentemplate, welches natürlich beliebig ergänzt werden kann. Mein Beispiel ist so definiert dass die 160 Zeichen möglichst nicht überschritten werden.

Nagios neu starten
Damit unsere Konfiguration übernommen wird, muss Nagios neu gestartet werden

/etc/init.d/nagios3 restart

(Allfällige Fehler in der Konfiguration werden direkt beim Start von Nagios auf die Shell zurückgemeldet)

Schlagworte: , , ,

4 Kommentare zu „Nagios Basiskonfiguration“

  1. SunDancer sagt:

    Hallo,erstmal danke für das knackige tutorial.

    Ich hab alles genau so gemacht, wie in dem Beispiel. (Mit den Anpassungen der cfg für meine Server natürlich)

    Nur leider sagt mir nagios jetzt „kein passender prozess gefunden“ und nichts scheint zu laufen

    checking /usr/sbin/nagios3…/etc/init.d/nagios3: line 64: kill: (2751) – Kein passender Prozess gefunden
    failed (/usr/sbin/nagios3 failed).

    any ideas?

  2. Alonso sagt:

    Kannst du mal testen ob deine Konfig korrekt ist?

    nagios3 -v /etc/nagios3/nagios.cfg

    Wenn du hier keine Errors hast, scheint irgendwo ein Berechtigungsproblem auf den Prozess vorhanden zu sein. Soweit ich mich erinnere hatte im Nagiosforum jemand genau dieses Problem auch – und eben so gelöst. Bedeutet; Die /var/run/nagios3/nagios3.pid sollte bei einem normalen Setup dem Nagios-User/Gruppe gehören.

    MfG

  3. Mike sagt:

    Hey.

    Danke für das Tutorial. Hat mir ganz schön weitergeholfen.

    Allerdings bin ich bei einem Porblem angekommen und versuche schon seit einer ewigkeit dieses zu lösen (bin Neuling).

    Sobald ich den restart Befehl eingebe checkt Nagios die commands, die host groups usw. Allerdings bekommen ich bei den contacts folgende Fehlermeldungen:

    Error: Service notification command ’notify-service-by-email‘ specified for contact ‚admin1′ is not defined anywhere!
    Error: Host notification command ’notify-host-by-email‘ specified for contact ‚admin1′ is not defined anywhere!
    Error: Service notification command ’notify-service-by-email‘ specified for contact ‚admin2′ is not defined anywhere!
    Error: Host notification command ’notify-host-by-email‘ specified for contact ‚admin2‘ is not defined anywhere!

    Ich habe deine Konfig 1 zu 1 überommen. Dann habe ich die Konfig auf mich gemünzt und und und. Der Fehler erscheint aber immer wieder.

    Hoffe Sie können mir helfen.

    Lg

  4. Lukas sagt:

    Hi @Mike,

    wenn ich deine Fehlerbeschreibung lese, würde ich als erstes mutmaßen, du hast den folgenden Absatz überlesen:
    „Als letztes müssen wir noch die beiden neuen Commands (notify-host-by-sms, notify-service-by-sms) eintragen. Die bestehenden commands dürfen/müssen natürlich weiter existieren.“

    Bitte prüfe deine commands.cfg, ob die commands „notify-service-by-email“ und „notify-host-by-email“ dort spezifiziert sind – evtl. hast du sie mit den beiden commands, die im Tutorial angegeben sind, überschrieben.

    Beste Grüße
    Lukas

Kommentieren


Social Widgets powered by AB-WebLog.com.