====== Installation Nagios 2.04b auf Suse 9.3 ====== Hier das Howto über die Installation eines Nagios-Server auf Suse 9.3Pro. :!: Fragen, Anmerkungen sowie Verbesserungen sind ausdrücklich erwünscht :!: --- //13.09.2005 10:02// ====== Allgemeines ====== ===== Was ist Nagios ===== Nagios ist ein Network Monitoring Programm für die Überwachung von Hosts, Services und Netzwerken. Dieses Netz- und Systemüberwachungswerkzeug ist im Gegensatz zu den kostspieligen kommerziellen Lösungen, wie z.B. Tivoli von IBM oder OpenView von HP, völlig quelloffen (OpenSource) und steht unter GPL-Lizenz. Es ist kostenlos und kann sehr individuell auf die jeweiligen Anforderungen „maßgeschneidert“ werden. Außerdem besteht inzwischen eine stetig wachsende Gemeinde von Nagios-usern weltweit. Viele große Firmen sind inzwischen auf dieses System gewechselt, siehe http://www.nagios.org/userprofiles/quickstats.php. Sollte man auf programmspezifische Probleme stoßen, so wird einem in Foren und Mailing-Listen im Internet sehr schnell weiter geholfen. Das Programm selbst besteht aus einem in C geschriebenen Daemon, der über eine Reihe von Konfigurationsdateien gesteuert wird, sowie einigen weiteren Komponenten. Statusinformationen gibt Nagios über ein Logfile, vor allem aber über ein übersichtliches Web-Frontend aus. Die beschriebene Installation ist nicht allgemein gültig. Je nach verwendeten Distributionen und Programmversionen kann die Einrichtung eines solchen Nagios-Servers von dieser Anleitung abweichen. Deshalb bitte immer die den verschiedenen Paketen beigelegten Dokumente lesen und gegebenenfalls berücksichtigen. ===== Verwendete Hardware ===== * HP ProLiant DL360 G3 * Intel Xeon Prozessor 2,8GHz * 1024MB Arbeitsspeicher * 2x36,4GB SCSI-Festplatten Raid1 * Ethernet-Karte 10/100/1000 Mbit ===== Verwendete Software ===== * SuSE Linux 9.3 Professional mit kernel 2.6.11.4 (http://www.suse.de) * Apache2 2.0.53 (http://www.apache.de) * tcpdump 3.8.3 (http://www.tcpdump.org) * emacs 21.3 (http://www.gnu.org/software/emacs) * nmap 3.81 (http://www.insecure.org) * gcc 3.3.5 (http://gcc.gnu.org) * net-snmp 5.2.1 (http://net-snmp.sourceforge.net/) * nagios 2.0b4 (http://www.nagios.org) * nagios plugins 1.4.1 (http://www.nagios.org) => Die verwendete Software ist Bestandteil der vorliegenden Suse Linux Distribution. Wer auf Aktualität besteht, kann sich die Sourcen selbstverständlich auch auf den oben angegebenen Seiten im Internet herunterladen und „per Hand“ Konfigurieren-Kompilieren-Installieren. => Die beiden Pakete nagios 2.0b4 und nagios plugins 1.4.1 wurden nachträglich installiert. => Um nrpe nutzen zu können, werden außerdem die Pakete nrpe-2.0 und nrpe_nt.0.8 benötigt (s.u.). ====== Installation ====== ===== Betriebssystem installieren ===== * Standard-Installation mit Yast2 * 2 Partitionen erstellt, / und swap * Minimale Software-Installation ausgewählt, weitere Applikationen wie oben beschrieben hinzugefügt. * Rechnername: * IP-Adresse: * Subnet-Mask: * Domain: * Nameserver1: * Nameserver2: * Default Gateway: * Integrierte SuSE Firewall deaktiviert, um Komplikationen zu vermeiden. Der Server steht im Intranet, das bereits durch eine Firewall-Lösung geschützt ist. * root Passwort festgelegt. * Benutzer angelegt: nagios * Die Pakete nagios 2.0b4 und nagios plugins 1.4.1 herunterladen und in einem separaten download-Verzeichnis abgelegt (/usr/local/src/). ===== Nagios installieren ===== * Nagios benötigt einige zusätzliche Pakete. * gd * gd-devel -> [[#trends.cgi, histogram.cgi und statusmap.cgi|nicht da?]] * zlib * libjpeg * jpeg * libpng-devel * libjpeg-devel * Entpacken des Nagios-Pakets mit tar xzf nagios-2.0b4.tar.gz * Neue Gruppe „nagios“ anlegen in YAST und den bereits bei der Installation des Betriebssystems angelegten User „nagios“ eintragen. * Neue Gruppe „nagcmd“ anlegen in YAST und User „nagios“ und „wwwrun“ eintragen. * Nagios-Verzeichnis anlegen: mkdir /usr/local/nagios * User und Gruppe „nagios“ als Besitzer des Verzeichnisses eintragen: chown nagios.nagios /usr/local/nagios * Konfigurations-Script ausführen mit ./configure --with-command-group=nagcmd * Kompilieren von Nagios und den CGIs: make all * Binaries und html files Installieren: make install * Erstellen des Runlevel Scripts "nagios" für den Systemstart in /etc/init.d: make install-init * make install-commandmode * Beispieldateien installieren: make install-config * Das Programm gibt nach jedem Installationsschritt an, wie weiter zu verfahren ist. Diese Ausgaben unbedingt beachten! * Für nähere Informationen zur Installation, die Datei /usr/local/src/nagios-2.0b4/INSTALLING sowie [[nagios>installing]] beachten. * Im Verzeichnis /usr/local/nagios sind 5 Unterverzeichnisse: * bin/ --> Das Programm * etc/ --> Konfigurationsdateien * sbin/ --> CGIs * share/ --> HTML files * var/ --> Log files, Status files * Im Runlevel-Editor von YAST „nagios“ für Runlevel 2, 3 und 5 eintragen. * Eine Beispielkonfiguration ist eingerichtet. Jedoch ist Nagios damit noch nicht startbereit. ===== Plugins installieren ===== => Plugins sind Scripte oder ausführbare Dateien, die die Dienste- und HostsÜberprüfung durchführen. * Entpacken der Plugins mit tar xzf nagios-plugins-1.4.1.tar.gz * Konfigurations-Script ausführen mit ./configure * Kompilieren mit make * Installieren mit make install * Plugins befinden sich im neuen Verzeichnis /usr/local/nagios/libexec/ ===== Web-Interface aufsetzen ===== * Folgende zwei Einträge in der Datei /etc/apache2/httpd.conf hinzufügen: ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin" Options ExecCGI AllowOverride AuthConfig Order allow,deny Allow from all Alias /nagios "/usr/local/nagios/share" Options None AllowOverride AuthConfig Order allow,deny Allow from all Nach einem Neustart des Webservers mit /etc/init.d/apache2 restart ist die Nagios Weboberfläche unter der Adresse http:///nagios zu erreichen. ==== URL anpassen ==== * Hier zwei Möglichkeiten die Adresse der Weboberfläche ein bisschen benutzerfreundlicher zu gestalten. * In den Document root des Apache2 (/srv/www/htdocs/) eine Datei index.html anlegen mit folgendem Inhalt: * Damit reicht es in den Browser lediglich die IP-Adresse des Nagios-Servers einzugeben, man wird automatisch weiter geleitet. * die elegantere Lösung wäre es einen VirtualHost anzulegen, der auf Nagios zeigt (http://virtualhost) * siehe http://httpd.apache.org/docs/2.0/de/mod/core.html.de#virtualhost ===== Authentifizierung einrichten ===== * Erstellen einer Datei .htaccess im Verzeichnis /usr/local/nagios/sbin sowie in /usr/local/nagios/share mit folgendem Inhalt: AuthName "Nagios Access" AuthType Basic AuthUserFile /usr/local/nagios/etc/htpasswd.users require valid-user * Damit ist die Authentifizierung auf dem Webserver aktiviert und es müssen Benutzer angelegt werden, die auf Nagios zugreifen dürfen. * Mit folgendem Befehl wird eine neue Datei htpasswd.users mit den berechtigten Nutzern und deren Passwörtern im Verzeichnis /usr/local/nagios/etc/ angelegt. htpasswd2 -c /usr/local/nagios/etc/htpasswd.users nagiosadmin * Bei erneutem Aufruf (Hinzufügen weiterer User) wird Option „-c“ nicht mehr benötigt, damit wurde Datei angelegt. * Wichtig: Überprüfen, ob use_authentication=1 in Datei cgi.cfg gesetzt. * Ab sofort können nur noch so angelegte Benutzer auf die Nagios Weboberfläche zugreifen (Benutzername und Passwort werden abgefragt). ==== Login ohne Passwort ==== * Um einer ausgewählten Gruppe von Rechnern Zugriff zu gewähren, ohne jedes Mal nach einem Passwort gefragt zu werden, müssen die Einträge in httpd.conf und .htaccess angepasst werden. * Steht eine IP-Adresse wie unten beschrieben in der .htaccess, hat dieser Rechner Zugriff auf die Nagios-Oberfläche ohne Passwort-Abfrage. Versucht ein User/Rechner mit einer nicht eingetragenen IP-Adresse die Web-Oberfläche aufzurufen, wird nach user/password Kombination gefragt. So konfiguriert eignet sich die Oberfläche sehr gut um diese z.B. automatisch bei Start eines Monitoring-Rechners auf einem großen Flachbildschirm anzuzeigen. === .htaccess === * Die angepasste Datei sollte folgendermaßen aussehen und in beiden Verzeichnissen(/usr/local/nagios/sbin/, /usr/local/nagios/share/) identisch sein: AuthName "Nagios Access" AuthType Basic AuthUserFile /usr/local/nagios/etc/htpasswd.users require valid-user Order deny,allow Deny from all Allow from 172.18.5.200 Allow from 172.18.5.137 satisfy any * Diese beiden IP-Adressen dürfen ohne Passwort-Abfrage auf Nagios zugreifen. * Tipp: Auch IP-Ranges werden unterstützt. * siehe http://de.selfhtml.org/servercgi/server/htaccess.htm === httpd.conf === * So sollte die Apache2-Konfigurationsdatei angepasst werden: ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin" Options ExecCGI AllowOverride AuthConfig limit Order allow,deny Allow from all Alias /nagios "/usr/local/nagios/share" Options None AllowOverride AuthConfig limit Order allow,deny Allow from all Übernahme der Konfiguration mit /etc/init.d/apache2 restart nicht vergessen! ====== Konfiguration ====== Über die verschiedenen Konfigurationsdateien bindet man die von Nagios zu verwaltenden Objekte wie Hosts, Dienste und Kontaktpersonen ein. Nagios kennt dabei für jeden Dienst einen host, der diesen Dienst anbietet. Mehrere solcher Hosts lassen sich zu einer hostgroup zusammenfassen. Über eine servicegroup kann man dagegen die einzelnen Dienste mehrerer Hosts zusammenfassen. Wird eine Benachrichtigung (notification) ausgelöst, geht diese entweder an einen einzelnen contact, oder die Mitglieder einer contactgroup. Nagios enthält bereits einige Vorschläge für solche Kontaktgruppen, beiuspielsweise Linux- oder Windows-Administratoren. Über das Modul NRPE (Nagios Remote Plugin Executor) kann Nagios Plugins direkt auf einem externen Host starten Alternativ kann ein NSCA (Nagios Service Check Acceptor) als Agent auch Ereignisse von selbst an den Nagios-Daemon melden. Über all diese Mechanismen lassen sich beispielsweise ausgefeilte Eskalationsstrategien nachbilden, die so manches kommerzielle Netzwerkmanagement-System (NMS) ziemlich blaß aussehen lassen. ===== Die Konfigurationsdateien ===== ==== nagios.cfg ==== * die Hauptkonfigurationsdatei * siehe [[nagios>configmain]] ==== resource.cfg ==== * Definitionen der Makros * siehe [[nagios>macros]] ==== cgi.cfg ==== * CGI Konfiguration * siehe [[nagios>configcgi]] ==== contacts.cfg ==== * Definitionen der verfügbaren Kontakte in Nagios * siehe [[nagios>xodtemplate]] define contact { contact_name nagiosadmin alias nagiosadmin host_notification_period 24x7 host_notification_options d,u,r host_notification_commands notify-by-email service_notification_period 24x7 service_notification_options w,u,c,r service_notification_commands notify-by-email email nagios@localhost } ==== contactgroups.cfg ==== * Gruppieren der angelegten Kontakte * siehe http://nagios.sourceforge.net/docs/2_0/xodtemplate.html#contactgroup define contactgroup { contactgroup_name Nagios_Admin alias Nagios_Admin members nagiosadmin } ==== hosts.cfg ==== * Definitionen der vorhandenen Hosts * siehe http://nagios.sourceforge.net/docs/2_0/xodtemplate.html#host define host{ host_name Switch01 alias Switch cisco address 192.16.4.50 check_command check-host-alive max_check_attempts 5 process_perf_data 0 retain_nonstatus_information 0 notification_interval 30 notification_period 24x7 notification_options d,u,r contact_groups Nagios_Admin } ==== hostgroups.cfg ==== * Gruppieren der angelegten Hosts * siehe http://nagios.sourceforge.net/docs/2_0/xodtemplate.html#hostgroup define hostgroup{ hostgroup_name Switch alias Switch members Switch01, Switch02, Switch03 } ==== services.cfg ==== * Definitionen der gewünschten Service Checks * siehe http://nagios.sourceforge.net/docs/2_0/xodtemplate.html#service define service{ host_name Switch01, Switch03 service_description Cisco Port 49 - GigabitEthernet0/1 check_command check_cisco!public!49 max_check_attempts 3 normal_check_interval 1 retry_check_interval 1 check_period 24x7 notification_interval 20 notification_period 24x7 notification_options w,c,u,r contact_groups Nagios_Admin } ==== checkcommands.cfg ==== * Definitionen der Check Kommandos * siehe http://nagios.sourceforge.net/docs/2_0/xodtemplate.html#command # 'check_cisco' command definition define command{ command_name check_cisco command_line $USER1$/check_cisco -H $HOSTADDRESS$ -C $ARG1$ -P $ARG2$ } ==== misccommands.cfg ==== * Definitionen für andere Kommandos * siehe http://nagios.sourceforge.net/docs/2_0/xodtemplate.html#command # 'notify-by-email' command definition define command{ command_name notify-by-email command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$ } ==== timeperiods.cfg ==== * Definition des Zeitraumes wann Nagios z.B. notifications verschickt * siehe http://nagios.sourceforge.net/docs/2_0/xodtemplate.html#timeperiod 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 } ==== hostextinfo.cfg ==== * optionale Informationen für Status-Anzeige * siehe http://nagios.sourceforge.net/docs/2_0/xodtemplate.html#hostextinfo define hostextinfo{ host_name Switchrouter icon_image network.gif vrml_image network.gif statusmap_image network.gif 2d_coords 20,20 3d_coords 100.0,50.0,75.0 action_url telnet://$HOSTADDRESS$ } * weitere Beispiele für action_url: * action_url http://$HOSTADDRESS$ * action_url file://fileserver/J/rdpfiles/$HOSTADDRESS$.RDP * Die Bilder/icons sollten sich im Verzeichnis /usr/local/nagios/share/images/logos/ befinden. ===== Anmerkungen ===== ==== check_cisco Plugin ==== * für korrekte Funktionsweise das das Paket net-snmp (hier: Version 5.2.1) nachinstallieren. ==== check_compaq_insight.pl Plugin ==== * für korrekte Funktionsweise das Paket perl-Net-SNMP (hier: Version 5.0.1) nachinstallieren. ==== check_ping Plugin ==== * wegen etlichen Problemen mit dem Plugin „check_ping“ wird dieses ersetzt durch check_icmp. * Dazu Einträge in checkcommands.cfg ändern: # 'check-host-alive' command definition define command{ command_name check-host-alive command_line $USER1$/check_icmp -H $HOSTADDRESS$ } und # 'check_ping' command definition define command{ command_name check_ping command_line $USER1$/check_icmp -H $HOSTADDRESS$ } * Rechte richtig setzen nicht vergessen: chown nagios.nagios check_icmp chmod 000 check_icmp chown root check_icmp chmod 4711 check_icmp * Wichtig: chmod +x sollte überall gesetzt sein, sonst keine Ausführung möglich! ==== trends.cgi, histogram.cgi und statusmap.cgi ==== * für die korrekte Anzeige von trends, histogramm und statusmap auf der Web-Oberfläche müssen libraries und devel-Pakete von gd, png, zlib und jpeg nachinstalliert werden. * Bei der hier verwendeten CD-Version von Suse sind keine Devel-Pakete von gd beigelegt, also herunterladen von http://www.boutell.com/gd/ (hier: Version 2.0.33) * Auf der DVD-Version verfügbar! * Entpacken und Konfigurieren mit ./configure –prefix=/usr * Kompilieren mit make all und installieren mit make install * Dann im Nagios-download-Verzeichnis ein make clean und erneutes Konfigurieren mit ./configure --with-gd-lib=/usr/lib --with-gd-inc=/usr/include * Anschliessend mit make all neu Kompilieren und die jetzt verfügbaren cgi´s ins Nagios-Verzeichnis kopieren (/usr/local/nagios/sbin/). * Damit sollten jetzt alle Funktionen der Nagios-Weboberfläche aktiv sein. ====== Nützliche Kommandos ====== ===== Apache2 ===== Usage: /etc/init.d/apache2 start - start httpd stop - stop httpd (sendign SIGTERM to parent) status - check whether httpd is running restart - stop httpd if running; start httpd configtest - do a configuration syntax test server-status - dump a short status screen help - this screen ===== Nagios ===== * Konfigurationsdateien auf Richtigkeit überprüfen: /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg * Nagios starten: Usage: nagios {start|stop|restart|reload|force-reload|status} => Für Neustart am besten: /etc/init.d/nagios reload ===== Web-Oberfläche ===== * Anmelden mit verschiedenen Usern: http://@/nagios/