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: ecall, Konfiguration, Nagios, SMS
25. November 2010 um 14:15 Uhr
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?
25. November 2010 um 17:08 Uhr
Kannst du mal testen ob deine Konfig korrekt ist?
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
7. Oktober 2011 um 15:14 Uhr
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
12. Oktober 2011 um 06:58 Uhr
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