Tutorial und Projekt: Raspberry Pi mit Nagios zur Netzwerk- und DS-Überwachung

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

Polarlys

Benutzer
Registriert
28. Nov. 2014
Beiträge
161
Reaktionspunkte
0
Punkte
16
Da viele hier im Forum zumindest eine, aber auch gern mehrere Diskstations im Netzwerk betreiben und es durchaus einige Bastler mit RasPis hier zu geben scheint, möchte ich an dieser Stelle ein kleines Bastelprojekt ins Leben rufen:

Die Überwachung des eigenen Netzwerks (und der Diskstations) mithilfe eines Raspberry Pi, auf dem Nagios aufgesetzt wurde

Ich habe es bei mir seit einigen Wochen am Laufen, es funktioniert in der Basisversion prima, der Pi ist kaum beschäftigt (ich benutze hierzu einen alten Raspberry Pi B+).
Da mir an einigen Stellen noch die Übung/Erfahrung fehlt (z.B. Einbau eines Mailservers, um vom RasPi Warnmails geschickt zu bekommen, wenn mal was im Netzwerk nicht passt) möchte ich hier mal den aktuellen Stand des Projekts posten, in der Hoffnung, das andere Leser des Forums hier mit weiteren Abfragen/Plugins/Scripten weiterhelfen können.

Und nun gehts los:

Zunächst einen RasPi mit aktuellem Raspian-Image aufsetzen (setze ich als bekannt voraus)

Rich (BBCode):
sudo raspi-config

  • Expand Filesystem
  • Ländereinstellungen anpassen
  • Über "Erweitert->Hostnamen ändern" dem RasPi einen eindeutigen Namen zuordnen (z.B. NagiosPi)


Betriebssystem auf den aktuellen Stand bringen:
Rich (BBCode):
sudo apt-get update && sudo apt-get upgrade -y
sudo rpi-update

Avahi-Daemon:
Um dem RasPi im Netz über seinen Hostnamen erreichen zu können, zunächst den Avahi-Daemon installieren und beim booten automatisch starten lassen:
Rich (BBCode):
sudo apt-get install avahi-daemon
sudo update-rc.d avahi-daemon defaults
Ab sofort ist der RasPi auch unter nagiospi.local (falls Ihr den gleichen Hostnamen wie o.a. verwendet habt) zu erreichen.

RPi-Monitor installieren:
Um ein paar Infos über den RasPi zu erhalten, habe ich den RPi-Monitor mit folgenden Befehlen installiert:
Rich (BBCode):
sudo apt-get install apt-transport-https ca-certificates
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 2C0D3C0F
sudo wget http://goo.gl/rsel0F -O /etc/apt/sources.list.d/rpimonitor.list
sudo apt-get update
sudo apt-get install rpimonitor
Künftig könnt Ihr über http://nagiospi.local:8888 Infos über den Zustand Eures NagiosPi erhalten

Die Website des RPi-Monitors ist hier: https://github.com/XavierBerger/RPi-Monitor-deb/tree/master/packages

Anpassung der Netzwerkkonfiguration:
Zunächst dem NagiosPi eine feste IP zuordnen:

Rich (BBCode):
sudo nano /etc/network/interfaces

Die Datei sollte folgenden Inhalt haben (die IP an Eure Gegebenheiten anpassen):

Rich (BBCode):
auto lo
iface lo net loopback
face eth0 inet static
address 192.168.178.70   #statische IP des RasPi
netmask 255.255.255.0
gateway 192.168.178.1
iface default init dhcp

Nun wird Nagios installiert:
Rich (BBCode):
sudo apt-get install nagios3

Während der Installation vergebt Ihr ein Passwort für den Nagios-Admin

Ab sofort ist das Webinterface von Nagios über http://[IP des PI]/nagios3 zu erreichen.
Benutzername: nagiosadmin
Passwort: habt Ihr oben vergeben

Die weitere Konfiguration von Nagios verläuft über Konfigurationsdateien auf der Konsole.
Wichtige Ordner für die Konfig-Dateien sind folgende:
/etc/nagios3
/etc/nagios3/conf.d

Anpassung der Konfigurationsdateien:

Nutzer anlegen
Rich (BBCode):
sudo nano /etc/nagios3/contacts_nagios2.cfg

Rich (BBCode):
###############################################################################
# contacts.cfg
###############################################################################

###############################################################################
###############################################################################
#
# CONTACTS
#
###############################################################################
###############################################################################

# In this simple config file, a single contact will receive all alerts.

# 1. Kontaktperson

define contact{
        contact_name [Dein Vorname]
        alias [Dein vollständiger Name]
        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
        host_notification_commands notify-host-by-email
        email [Deine email-Adresse]
        }

# 2. Kontaktperson

define contact{
        contact_name root
        alias Root
        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
        host_notification_commands notify-host-by-email
        email xyz@t-online.de
        }

###############################################################################
###############################################################################
#
# CONTACT GROUPS
#
###############################################################################
###############################################################################

# We only have one contact in this simple configuration file, so there is
# no need to create more than one contact group.

define contact group
        contactgroup_name admins
        alias Nagios Administrators
        members root, [Dein Vorname]
        }

Timeperiods anpassen (einige Abfragen wie die Abfrage nach dem Diskspace soll nur einmal/Tag erfolgen, da sonst die Festplatte nicht in Standby gehen kann)
Rich (BBCode):
sudo nano /etc/nagios3/timeperiods_nagios2.cfg

Rich (BBCode):
###############################################################################
# timeperiods.cfg
###############################################################################

# This defines a timeperiod where all times are valid for checks,
# notifications, etc. The classic "24x7" support nightmare. :-)

define time period
        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
        }

# Here is a slightly friendlier period during work hours
define time period
        timeperiod_name workhorse
        alias Standard Work Hours
        monday 09:00-17:00
        tuesday 09:00-17:00
        wednesday 09:00-17:00
        thursday 09:00-17:00
        friday 09:00-17:00
        }

# The complement of workhorse
define time period
        timeperiod_name nonworkhours
        alias Non-Work Hours
        sunday 00:00-24:00
        monday 00:00-09:00,17:00-24:00
        tuesday 00:00-09:00,17:00-24:00
        wednesday 00:00-09:00,17:00-24:00
        thursday 00:00-09:00,17:00-24:00
        friday 00:00-09:00,17:00-24:00
        saturday 00:00-24:00
        }

# Timeperiode für einen Check, der nur einmal täglich ausgeführt werden soll:
        saturday 00:00-24:00
        }

# Timeperiode für einen Check, der nur einmal täglich ausgeführt werden soll:
define time period
        timeperiod_name daily
        alias Einmal am Tag
        sunday 17:00-17:05
        monday 17:00-17:05
        tuesday 17:00-17:05
        wednesday 17:00-17:05
        thursday 17:00-17:05
        friday 17:00-17:05
        saturday 17:00-17:05
        }

# This one is a favorite: never :)
define time period
        timeperiod_name never
        alias Never
        }

# end of file

Jetzt legen wir uns ein Template für unsere Diskstations an:
Rich (BBCode):
sudo nano /etc/nagios3/synology.cfg

Rich (BBCode):
# Generic host definition template - This is NOT a real host, just a template!

define host{
        name synology-server ; The name of this host template
        notifications_enabled 1 ; Host notifications are enabled
        event_handler_enabled 1 ; Host event handler is enabled
        flap_detection_enabled 1 ; Flap detection is enabled
        failure_prediction_enabled 1 ; Failure prediction is enabled
        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 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUS$
        }
 
Und nun wird unsere DS in Nagios eingebunden, indem wir eine entsprechende cf-Datei anlegen:

Rich (BBCode):
sudo nano /etc/nagios3/ds214play.cfg

Rich (BBCode):
# A simple configuration file for monitoring the local host
# This can serve as an example for configuring other servers;
# Custom services specific to this host are added here, but services
# defined in nagios2-common_services.cfg may also apply.
#
############################################################
# Konfigurations-Datei für Synology DS214play
############################################################


define host{
        use synology-server ; Name of host template to use
        host_name [Hostname Eurer DS]
        alias Synology DS214play
        address [IP-Adresse Eurer DS]
        }

# Define a service to check the disk space of the root partition
# on the local machine. Warning if < 20% free, critical if
# < 10% free space on partition.

define service{
        use generic-service ; Name of service template to use
        host_name [Hostname Eurer DS]
        service_description Disk Space
        check_period daily
        check_command check_all_disks!20%!10%
        }

# Define a service to check the number of currently logged in
# users on the local machine. Warning if > 10 users, critical
# if > 20 users.

define service{
        use generic-service ; Name of service template to use
        host_name [Hostname Eurer DS]
        service_description Current Users
        check_command check_users!10!20
        }

# Define a service to check the number of currently running process
# on the local machine. Warning if > 250 processes, critical if
# > 400 processes.

define service{
        use generic-service ; Name of service template to use
        host_name [Hostname Eurer DS]
        service_description Total Processes
                check_command check_procs!250!400
        }

# Define a service to check the load on the local machine.

define service{
        use generic-service ; Name of service template to use
        host_name [Hostname Eurer DS]
        service_description Current Load
                check_command check_load!5.0!4.0!3.0!10.0!6.0!4.0
        }

# HTTP-Check

define service {
        host_name [Hostname Eurer DS]
        service_description HTTP
        check_command check_http
        use generic-service
        notification_interval 0
}

So, nun noch Nagios neu starten (was Ihr übrigens nach jeder Änderung der Konfiguration tun solltet, um zu prüfen, ob es eine Fehlermeldung gibt oder nicht...):

Rich (BBCode):
sudo /etc/init.d/nagios3 reload

Firewall der DS anpassen:
Um einen Ping an Eure DS zu ermöglichen, muss noch eine Ausnahmeregel in der Firewall der DS ergänzt werden:
Firewall -> neue Regel -> Ports: Benutzerdefiniert -> Protokoll: ICMP -> Quell-IP: spezifische IP -> IP-Bereich Eures Netzwerkes eingeben (nur die spezifische IP des RasPi hat bei mir nicht funktioniert) -> Aktion: zulassen.

Abfrage des RasPi auf dem Nagios selbst läuft (ich habe bei mir den SSH-Port des Pi von 22 auf 10115 verlegt, daher ist auch eine Anpassung dieser Konfigs nötig):

Rich (BBCode):
sudo nano /etc/nagios3/raspberry.cfg

Rich (BBCode):
# Generic host definition template - This is NOT a real host, just a template!

define host{
        name raspberry ; The name of this host template
        _sshport 22 ; Standardwert für SSH-Port
        notifications_enabled 1 ; Host notifications are enabled
        event_handler_enabled 1 ; Host event handler is enabled
        flap_detection_enabled 1 ; Flap detection is enabled
        failure_prediction_enabled 1 ; Failure prediction is enabled
        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 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUS$
        }

Rich (BBCode):
sudo nano /etc/nagios3/localhost_nagios2.cfg

Rich (BBCode):
# A simple configuration file for monitoring the local host
# This can serve as an example for configuring other servers;
# Custom services specific to this host are added here, but services
# defined in nagios2-common_services.cfg may also apply.
#

define host{
        use generic-host ; Name of host template to use
        host_name localhost
        alias localhost
        address 127.0.0.1
        _sshport 10115
        }

# Define a service to check the disk space of the root partition
# on the local machine. Warning if < 20% free, critical if
# < 10% free space on partition.

define service{
        use generic-service ; Name of service template to use
        host_name localhost
        service_description Disk Space
        check_period daily
        check_command check_all_disks!20%!10%
        }

# Define a service to check the number of currently logged in
# users on the local machine. Warning if > 10 users, critical
# if < 20 users.

define service{
        use generic-service ; Name of service template to use
        host_name localhost
        service_description Current Users
        check_command check_users!10!20
        }

define service{
        use generic-service ; Name of service template to use
        host_name localhost
        service_description Current Users
        check_command check_users!10!20
        }

# Define a service to check the number of currently running process
# on the local machine. Warning if > 250 processes, critical if
# >400 processes.

define service{
        use generic-service ; Name of service template to use
        host_name localhost
        service_description Total Processes
                check_command check_procs!250!400
        }

# Define a service to check the load on the local machine.

define service{
        use generic-service ; Name of service template to use
        host_name localhost
        service_description Current Load
                check_command check_load!5.0!4.0!3.0!10.0!6.0!4.0
        }


Weitere Server/Geräte lassen sich durch zusätzliche Konfigurationsdateien einfach hinzufügen, ebenso wie neue Abfragen.
Was ich gerne noch realisieren würde wäre z.B.:
  • ein Mailserver auf dem RasPi, der mir eine Benachrichtigung auch zustellen kann
  • ein Ping an eine Website um die Erreichbarkeit der eigenen (externen) Website zu testen
  • Umbau der Scripte, wenn z.B. ein FTP-/oder WebDAV-Server auf einem anderen Port betrieben wird
  • Eine passende Firewall für den Pi, wenn eine Abfrage vom Internet aus erwünscht ist (würde natürlich auch mit einer VPN-Verbindung auf den Router gehen)
  • und und und...

So, nun noch den SSH-Port des Pi verlegen:
Rich (BBCode):
sudo nano /etc/ssh/sshd_config

Port 22
ersetzen durch
Port 10115

Viel Spaß beim Nachbauen!
Auf weitere Tipps und Fortsetzungen des Tutorials durch Wissende freue ich mich!
 
Zuletzt bearbeitet:
Also erstmal... vielen Dank schonmal für dieses tolle Tutorial.

Ich hatte Nagios auch schon mal auf meiner ToDo-Liste stehen, jedoch immer wieder weit nach hinten geschoben. Ich bin mir auch noch nicht sicher, wann ich dieses Projekt in Angriff nehmen werde, aber ich hab es auf dem Schirm... und bald ist ja auch schon Weihnachten und damit auch wieder Zeit für sowas.

Ich überwache aber meinen Webserver-Pi mit logwatch, welches mir jeden Morgen ein Tagesprotokoll relevanter Aktivitäten zumailt. Das mit dem Mailserver hat mich auch unendlich viel Zeit und damit Nerven gekostet, bis mir dann auffiel, das ich dafür eigentlich eine eigene Domain besitzen müsste, die ich aber nicht (mehr) habe. Ich habe den Mailtransport dann mittels ssmtp umgesetzt, was auch prima funktioniert. Hier mal eine Anleitung, nach der ich u.a. vorgegangen bin.

Eine Firewall für IPv4 und IPv6 habe ich mir auch aus diversen Scripten zusammengebastelt und nach meinen Vorstellungen konfiguriert habe. Ebenso greift fail2ban noch in die Firewallregeln ein.

Ich könnte jetzt noch viel mehr über meine Aktionen aufführen, aber das würde diesen Thread verunstalten. Aber vielleicht kann ich dir ja bald mehr Unterstützung bieten, wenn ich dann selber mit diesem Projekt starte. Wann immer das auch sein wird.

Tommes
 
Heute erweitern wir die Netzwerk-Überwachung mit einem Check für den FTP-Server auf der Synology.
Zunächst wird eine Modifikation des "check_ftp"-Commands in die commands.cfg eingebaut:
Rich (BBCode):
sudo nano /etc/nagios3/commands.cfg
Ans Ende der Datei wird folgender Schnipsel angefügt:
Rich (BBCode):
###############################
# Meine Commands:
###############################

# check_ftp für Synology auf Port 59122:
define command{
    command_name          check_ftp_synology
    command_line          /usr/lib/nagios/plugins/check_ftp -H $HOSTADDRESS$ -p 59122 -w 20 -c 30 -t 35
}

Mein FTP-Server läuft auf Port 59122, daher ist es nötig, das schon vorhandene Command etwas abzuändern. Falls Ihr einen anderen Port verwendet, bitte die Portnummer entsprechend anpassen.

Nun wird in die Konfigurationsdatei Eurer Synology noch der entsprechende Service eingefügt:
Rich (BBCode):
sudo nano /etc/nagios3/conf.d/ds214play.cfg

Ans Ende der Datei diesen Schnipsel einfügen:
Rich (BBCode):
# FTP-Check
define service{
        use                     generic-service
        host_name               [Hostname Eurer DS]
        service_description     FTP-Server
        check_command           check_ftp_synology
        }

Jetzt noch Nagios neu starten und Ihr sollten den Service in der Übersichtsseite sehen können:
Rich (BBCode):
sudo /etc/init.d/nagios3 restart
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat