Installation Nagios
Das Server Monitoring System Nagios gehört meiner Meinung nach zur Grundausstattung jedes Servers. Damit alle Serverdaten von einem zentralen Host aus verwaltet werden können (gemeinsames GUI), mache ich ein Distributed Monitoring Setup. Da gibt es diverse Möglichkeiten mittels NSCA, NRPE sowie check_by_ssh. NSCA ist für passive Checks, NRPE und check_by_ssh für aktive. Was für Dich das richtige ist, musst Du natürlich für Dich selber entscheiden. Ich habe mich für NRPE entschieden. Auf meinem Basis (Template) Server installiere ich jeweils nur den NRPE Client und nicht Nagios selber. Die Hinweise dazu sind in grün hervorgehoben. Die Nagios check_* Binaries installiere ich jeweils auch nicht auf jedem einzelnen Server sondern die kommen auf eine gesharte / gemeinsame HDD: /global/monitoring/nagios/libexec
NRPE (Nagios Remote Plugin Executor) Server & Client
- Setup auf Client (zu überwachendem Server)
- Setup auf Hauptserver mit Nagios GUI
Meine Ausführungen zu diesem Kapitel basieren auf folgendem Artikel: http://www.nagios-wiki.de/nagios/howtos/nrpe
Ich installiere es mit SSL & ARGS Support! So hab ich von einem zentralen Server aus die volle Kontrolle. Hier auf jedenfall die Security Risks beachten!
Das pkg nrpe kommt ohne SSL support, daher daher builden wir manuell über die Ports (an den anschliessenden LOCK denken!)
$ pkg rquery '%Ok %Ov %Od %OD' nrpe
ARGS on on (null)
MONPLUGINS off off (null)
NAGPLUGINS on on (null)
SSL off off (null)
Manuelle Installation:
Port: nrpe-2.12_3
Path: /usr/ports/net-mgmt/nrpe2
Info: Nagios Remote Plugin Executor
Maint: jarrod@downtools.com.au
B-deps: perl-5.12.4_3
R-deps: gettext-0.18.1.1 libiconv-1.13.1_1 nagios-plugins-1.4.15_1,1 perl-5.12.4_3
WWW: http://www.nagios.org/
cd /usr/ports/net-mgmt/nrpe2 make install clean
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x Options for nrpe 2.12_3 x x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x x x [X] SSL Enable SSL support (disables plain-text server) x x x x [X] ARGS Enable command argument processing **Security Risk** x x tqmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjqu x [ OK ] Cancel x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
Und jetzt Port noch locken:
pkg lock nrpe
Daemon
- Setup auf Client (zu überwachendem Server)
NRPE wird auf dem Client Server über xinetd gestartet. Auf dem Hauptserver wird der NRPE Daemon überhaupt nicht gestartet. Somit muss auf beiden Servern das /etc/rc.conf NICHT angepasst werden. Auf dem Client Server muss nun NRPE noch konfiguriert werden:
cp /usr/local/etc/nrpe.cfg-sample /usr/local/etc/nrpe.cfg vi /usr/local/etc/nrpe.cfg
Das ConfigFile:
log_facility=daemon
pid_file=/var/spool/nagios/nrpe2.pid
#server_port=5667
#server_address=192.168.1.1
nrpe_user=nagios
nrpe_group=nagios
#allowed_hosts=127.0.0.1
dont_blame_nrpe=1 # aktivieren, damit mir ARGS übergeben können
debug=0
command_timeout=60
connection_timeout=300
Die Parameter allowed_hosts, server_port
und server_address
werden ignoriert, wenn NSCA über den xinetd gestartet wird. Daher kommentiere ich diese Zeilen auch gleich aus. Am Ende des Files befinden sich nun die Commands, welche von check_nrpe2 ausgeführt werden. Da ich ARGS werden vom Nagios Server übergeben, daher hat hier jeder Befehl nur $ARG1$:
Lokale default Scripts (Scriptpath entsprechend dem Server anpassen)
command[check_disk]=/usr/local/libexec/nagios/check_disk $ARG1$ command[check_users]=/usr/local/libexec/nagios/check_users $ARG1$ command[check_procs]=/usr/local/libexec/nagios/check_procs $ARG1$ command[check_load]=/usr/local/libexec/nagios/check_load $ARG1$
Und dann kommen noch meine globalen die Eventhandlers dazu:
command[server_abbild]=/global/monitoring/nagios/libexec/eventhandlers/server-abbild command[restart_sendmail]=/global/monitoring/nagios/libexec/eventhandlers/restart-sendmail command[restart_httpd]=/global/monitoring/nagios/libexec/eventhandlers/restart-httpd command[restart_dkim]=/global/monitoring/nagios/libexec/eventhandlers/restart-dkim
Nun kann man mit check_nrpe vom Nagios Server aus auf die oben definierten Commands zugreifen. Das sieht z.B. so aus:
/usr/local/libexec/nagios/check_nrpe2 -H patsy -c check_disk -a '-w 30% -c 10% '
im commands.cfg würde dieser Befehl dann so aussehen:
define command{
command_name check_disk
command_line $USER1$/check_nrpe2 -H $HOSTNAME$ -c check_disk -a '-w $ARG1$ -c $ARG2$ -p $ARG3$'
}
http://blog.gnucom.cc/2009/event-handlers-in-nagios-using-nrpe/
Wie man nun die Befehle remote ausführen kann, beschreibe ich in diesem Artikel.
Client
- Betrifft Nagios Hauptserver
Vom monitoring Server aus können nun Befehle an den Daemon geschickt werden. Der Client wurde hier installiert:
/usr/local/libexec/nagios/check_nrpe2
Testen kann man die Connection nachdem man xinetd installiert hat (siehe unten) so:
/usr/local/libexec/nagios/check_nrpe2 -H client.host.address.com NRPE v2.12
Wenn alles läuft, wird die Versionsnummer von NRPE zurückgegeben.
xinetd
- Setup auf Client (zu überwachendem Server)
cd /usr/ports/security/xinetd make install cleanUnd das Config File erstellen (Sample Config): Falls Du bisher inetd verwendet hast, könntest Du mit xconv dein altes inetd.confins xinetd Format konvertieren.
vi /usr/local/etc/xinetd.confPaste:
defaults { instances = 25 log_type = SYSLOG daemon log_on_success = HOST PID log_on_failure = HOST }
service nrpe
{
flags = REUSE
socket_type = stream
port = 5666
wait = no
user = nagios
group = nagios
server = /usr/local/sbin/nrpe2
server_args = -c /usr/local/etc/nrpe.cfg --inetd
log_on_failure += USERID
disable = no
only_from = IP_OF_YOUR_MONITORING_HOST
# no_access =
}
Wenn die Parameter only_from
und no_access
deaktiviert sind, werden von jedem Rechner NRPE-Connections akzeptiert. Daher ist es wichtig, dass man bei only_from die IP Adresse vom Haupt-Nagios server einträgt. Erklärung zu den Defaults: (xinetd.conf man page)- instances: Gibt an, wieviele gleichzeitige Verbindungen pro Service erlaubt sind.
- log_type: Wie geloggt werden soll.
- log_on_success = HOST PID: xinetd soll eine erfolgreiche Verbindung loggen. Geloggt wird der HOST Name und die Prozess ID.
- log_on_failure = HOST: xinetd soll loggen, wenn eine nicht erlaubte Verbindung versucht wurde.
nrpe 5666/tcp # NRPENun noch unseren Nagios Server im hosts.allow eintragen:
vi /etc/hosts.allowHinzufügen:
nrpe2 : ??.??.???.? : allow
Startup Script aktivieren:vi /etc/rc.confAdd:
#-----------------------------------------------# # xinetd # #-----------------------------------------------# xinetd_enable="YES"So, nun xinetd starten:
# /usr/local/etc/rc.d/xinetd start Starting xinetd.
Nun Logfile checken. Wenn alles glatt ging, sollte es nun etwa so aussehen:
# tail -f /var/log/messages Feb 1 17:52:52 corky xinetd[87273]: xinetd Version 2.3.14 started with libwrap loadavg options compiled in. Feb 1 17:52:52 corky xinetd[87273]: Started working: 1 available service
Ansonsten Fehler suchen und beheben 😉
Fehlermeldungen
CHECK_NRPE: Error – Could not complete SSL handshake.
Wenn man von Hauptserver aus
/usr/local/libexec/nagios/check_nrpe2 -H client.host.address.com
eingibt und dieser Fehler zurück kommt, kann dies diverse Ursachen haben. Als erstes mal schauen, ob nrpe unter xinetd auch läuft:
# netstat -at | grep -v grep | grep nrpe tcp4 0 0 *.nrpe *.* LISTEN
Das sieht also schonmal gut aus. Nun also mal die Logfiles auf dem Ziel Server checken.
tail -f /var/log/auth.log
Feb 2 15:13:07 patsy xinetd[4370]: twist server.host.address.com to /bin/echo "You are not welcome to use nrpe2 from server.host.address.com ."
Irgendwas verweigert also den Zugriff. Da wir NRPE über xinetd laufen lassen, haben die Zugriffs-Settings im /usr/local/etc/nrpe.cfg keine Verwendung. Dort in den allowed_hosts rumzustochern bringt also gar nichts 😉 Ganz wichtig ist, dass im /usr/local/etc/xinetd.conf im only_from die IP vom Nagios Server drin steht (mehrere IPs werden einfach mit einen Leerschlag getrennt):
service nrpe
{
[...]
only_from = ??.??.???.? 127.0.0.1
}
Da ich DenyHosts einsetze, ist es ebenfalls noch wichtig, dass man im vi /etc/hosts.allow Die Nagios Server IP für NRPE einträgt: nrpe2 : ??.??.???.?: allow Und siehe da, hosts.allow war das Problem. Nun klappt alles!
/usr/local/libexec/nagios/check_nrpe2 -H client.host.address.com NRPE v2.12
Funktioniert es noch immer nicht, ev. noch die Firewall Rules checken!
Nagios
- Betrifft Nagios Hauptserver
Installation
Auf dem Monitoring Server installieren wir nun Nagios:
cd /usr/ports/net-mgmt/nagios
make install clean
Optionen:
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x Options for nagios 3.3.1 x
x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
x x[*] EMBEDDED_PERL Enable embedded Perl [requires Perl 5.8.0+] x x
x x[ ] NANOSLEEP Use nanosleep in event timing x x
x x[ ] EVENT_BROKER Enable event broker functionality x x
x x[ ] UNHANDLED_HACK Display passive checks in unhandled queries x x
x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x
tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
x < OK > <Cancel> x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
Konfiguration
Startup Script
vi /etc/rc.conf
#-----------------------------------------------#
# MRTG & Nagios Server Monitor #
#-----------------------------------------------#
mrtg_daemon_enable="YES"
nagios_enable="YES"
Logfiles
mkdir /var/log/nagios
mkdir /var/log/nagios/archives
mkdir /var/log/nagios/server-data
chown -R nagios:nagios /var/log/nagios
touch /var/log/nagios/nagios.log
Configfiles
cd /usr/local/etc/nagios
Bestehende Config Files hier hin kopieren, oder Sample Files anpassen. Über diese Config Files werden alle Hosts & Befehle verwaltet. Genaueres dazu behandle ich einem separaten Artikel.
cp cgi.cfg-sample cgi.cfg cp commands.cfg-sample commands.cfg cp localhost.cfg-sample localhost.cfg cp nagios.cfg-sample nagios.cfg cp resource.cfg-sample resource.cfg
/usr/local/etc/nagios/nagios.cfg
log_file=/var/log/nagios/nagios.log log_rotation_method=w log_archive_path=/var/log/nagios/archives
cgi.cfg
use_authentication=1
authorized_for_system_information=<myusername>
authorized_for_configuration_information=<myusername>
authorized_for_system_commands=<myusername>
authorized_for_all_services=<myusername>
authorized_for_all_hosts=<myusername>
authorized_for_all_service_commands=<myusername>
authorized_for_all_host_commands=<myusername>
.
Nagios Nginx Konfiguration
Damit die CGI Scripts laufen benötigen wir die Packages fcgiwrap sowie spawn-fcgi. Falls diese also noch nicht installiert sind, gleich als erstes machen:
CGI Wrapper installieren
cd /usr/ports/www/fcgiwrap
make install clean
cd /usr/ports/www/spawn-fcgi
make install clean
Startupscript im rc.conf anpassen:
vi /etc/rc.conf
#-----------------------------------------------#
# Web Server #
#-----------------------------------------------#
nginx_enable="YES"
# CGI stuff
spawn_fcgi_enable="YES"
fcgiwrap_enable="YES"
fcgiwrap_user="www"
Services starten:
/usr/local/etc/rc.d/fcgiwrap start
/usr/local/etc/rc.d/spawn-fcgi start
Nun die CGI Configfiles anpassen / bzw. aktivieren. Falls bereits bestehend, alle Configfiles von einem anderen Server auf die neue Location kopieren:
scp user@oldserver:/usr/local/etc/nagios/*.cfg .
cd objects/
scp user@oldserver:/usr/local/etc/nagios/objects/*.cfg
oder eben kopieren und bearbeiten:
cd /usr/local/etc/nagios/
cp cgi.cfg-sample cgi.cfg
cp nagios.cfg-sample nagios.cfg
cp resource.cfg-sample resource.cfg
Nginx Server Konfiguration
Dazu hab ich folgende Zeilen in meinem
/global/nginx_global_config/globals.server
eingetragen. (Dieses File include ich bei jedem Virtualhost – somit ist nagios über jeden Virtualhost abrufbar)
location ^~ /nagios {
root /usr/local/www;
auth_basic Nagios;
auth_basic_user_file /www/shoe.org/etc/admin.pwd;
# handle /nagios/*.php requests in here so they're protected by auth_basic
location ~ .(php|php3) {
include global/fastcgi.conf;
}
location ~ .cgi$ {
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param AUTH_USER $remote_user;
fastcgi_param REMOTE_USER $remote_user;
fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Nun Nagios starten / oder restarten – Das Web GUI sollte nun vollumfänglich funktionieren. 🙂