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 NSCANRPE  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

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

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!

       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

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_addresswerden 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. Da ich ARGS aktiviert habe, deaktiviere ich alle hardcoded Commands und enable die ARG Commands:

command[check_disk]=/global/monitoring/nagios/libexec/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
command[check_users]=/global/monitoring/nagios/libexec/check_users -w $ARG1$ -c $ARG2$
command[check_procs]=/global/monitoring/nagios/libexec/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
command[check_load]=/global/monitoring/nagios/libexec/check_load -w $ARG1$ -c $ARG2$

Und dann kommen noch 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
 

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)
Nun müssen wir xinetdinstallieren.
cd /usr/ports/security/xinetd
make install clean
Und 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.conf
Paste:
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.
Nun das File /etc/services mit dieser Zeile ergänzen:
nrpe            5666/tcp                        # NRPE
Nun noch unseren Nagios Server im hosts.allow eintragen:
vi /etc/hosts.allow
Hinzufügen:
nrpe2 : ??.??.???.? : allow
Startup Script aktivieren:
vi /etc/rc.conf
Add:
#-----------------------------------------------#
#       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. 🙂

 

  • *

    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