Monitoring in heterogenen Netzen

Software fürs Monitoring gibt es zuhauf, wir wollen hier aber nur die Lösungen betrachten, die auch für Windows-Systeme geeignet sind und dafür zumindestens passende Clientunterstützung mitbringen.

Collectd

Collectd ist eine einfache, zentrale Monitoringlösung, die keine separate Datenbank wie MySQL oder InfluxDB benötigt. Es kommt das einfachere Rundlauf-Verfahren im Zusammenhang mit einer Round-Robin-Database zum Einsatz, womit ein effektives Speichern von Zeitwerten möglich wird.

Installation

Wir verfahren am besten nach dem Tutorial von https://www.thomas-krenn.com/de/wiki/Linux_Performance_Auswertung_mit_collectd

Die Paketliste muss für Debian 10 allerdings etwas ergänzt werden (z.B. fehlt neuerdings ‚cgi.pm‘), insgesamt sieht die Zeile so aus:

root@deb10:~# apt-get install --no-install-recommends collectd apache2 librrds-perl libconfig-general-perl \
  libhtml-parser-perl libregexp-common-perl libjson-perl libcgi-pm-perl git

Konfiguration

Wir bearbeiten nun die Datei /etc/collectd/collectd.conf, es ist lediglich die Pluginkonfiguration für „disk“ auf diese Werte zu setzen:

<Plugin disk>
    Disk "sda"
    IgnoreSelected false
</Plugin>

Zur Kontrolle lassen wir uns nur die aktiven Zeilen ausgeben:

root@deb10:~# grep -v '^\s*#\|^$' /etc/collectd/collectd.conf
FQDNLookup true
LoadPlugin syslog
<Plugin syslog>
    LogLevel info
</Plugin>
LoadPlugin battery
LoadPlugin cpu
LoadPlugin df
LoadPlugin disk
LoadPlugin entropy
LoadPlugin interface
LoadPlugin irq
LoadPlugin load
LoadPlugin memory
LoadPlugin processes
LoadPlugin rrdtool
LoadPlugin swap
LoadPlugin users
<Plugin df>
    FSType rootfs
    FSType sysfs
    FSType proc
    FSType devtmpfs
    FSType devpts
    FSType tmpfs
    FSType fusectl
    FSType cgroup
    IgnoreSelected true
</Plugin>
<Plugin disk>
    Disk "sda"
    IgnoreSelected false
</Plugin>
<Plugin rrdtool>
    DataDir "/var/lib/collectd/rrd"
</Plugin>
<Include "/etc/collectd/collectd.conf.d">
    Filter "*.conf"
</Include>
root@deb10:~#

Nach einem systemctl restart collectd können wir den Dateityp für eine unserer neuen Datenbankdateien überprüfen:

root@deb10:~# file /var/lib/collectd/rrd/deb10.dom1.test/disk-sda/disk_io_time.rrd
/var/lib/collectd/rrd/deb10.dom1.test/disk-sda/disk_io_time.rrd:       RRDTool DB version 0003 64bit aligned little-endian 64bit long (alpha/amd64/ia64)
root@deb10:~#

Web-UI aufsetzen

Zuerst laden wir die Software herunter und kopieren sie an Ort und Stelle:

root@deb10:~# git clone git://github.com/httpdss/collectd-web.git
Klone nach 'collectd-web' ...
remote: Enumerating objects: 1430, done.
remote: Total 1430 (delta 0), reused 0 (delta 0), pack-reused 1430
Empfange Objekte: 100% (1430/1430), 1.19 MiB | 988.00 KiB/s, Fertig.
Löse Unterschiede auf: 100% (664/664), Fertig.
root@deb10:~#
root@deb10:~# cp -a collectd-web/ /var/www/html/

Nun ist eine spezielle Konfiguration für das Webverzeichnis collectd-web/ zu erstellen, d.h. wir legen eine neue Datei an und befüllen sie wie angegeben:

root@deb10:~# vi /etc/apache2/sites-available/collectd-web.conf
root@deb10:~#
root@deb10:~# cat /etc/apache2/sites-available/collectd-web.conf
<Directory /var/www/html/collectd-web>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
        Order allow,deny
        allow from all
</Directory>

Nun aktivieren wir die Konfiguration sowie das CGI-Modul:

root@deb10:~# a2ensite collectd-web
Enabling site collectd-web.
To activate the new configuration, you need to run:
systemctl reload apache2
root@deb10:~#
root@deb10:~# ls -ltrc /etc/apache2/sites-enabled/
insgesamt 0
lrwxrwxrwx 1 root root 35 Apr  8 09:22 000-default.conf -> ../sites-available/000-default.conf
lrwxrwxrwx 1 root root 36 Apr  8 09:31 collectd-web.conf -> ../sites-available/collectd-web.conf
root@deb10:~#
root@deb10:~# a2enmod cgi
Your MPM seems to be threaded. Selecting cgid instead of cgi.
Enabling module cgid.
To activate the new configuration, you need to run:
systemctl restart apache2
root@deb10:~#
root@deb10:~# systemctl restart apache2
root@deb10:~#

Jetzt taucht im Webbrowser unter http://localhost/collectd-web/ ein Link namens „deb10.dom1.test“ auf, der angeklickt werden kann, worauf dann die Grafiken betrachtet werden können.

Debian 9 als Client

Wir verfahren hierbei nach dem Tutorial von https://www.tecmint.com/configure-collectd-as-central-monitoring-server-for-clients/.

Unser 2. Host soll als Netzwerkclient auftreten und von unserem soeben eingerichteten Server mit überwacht werden. Er habe die IP-Adresse 192.168.2.234.

Installation auf Client

Hierfür brauchen wir nicht so viele Softwarepakete:

root@deb9srv:~# apt-get install --no-install-recommends collectd

Konfiguration des Clients)

Wir bearbeiten auf dem Client die Datei /etc/collectd/collectd.conf wie hier dargestellt ist:

# ...
# Aktivieren dieser Zeile:
LoadPlugin network
#
#
# Außerdem muss dieses Plugin folgendermaßen konfiguriert werden:
<Plugin network>
     <Server "192.168.2.234" "25826">
     </Server>
</Plugin>
# ...

Mit systemctl restart collectd starten wir nun den Daemon neu. Damit sind die Arbeiten auf dem Client bereits abgeschlossen.

Konfiguration des Servers

Auf den Server zurückgekehrt, bearbeiten wir wieder die Datei /etc/collectd/collectd.conf und setzten die im Folgenden angegebenen Werte:

# ...
# Aktivieren dieser beiden Zeilen (Das dritte erforderliche Plugin 'syslog' ist schon aktiv):
LoadPlugin logfile
LoadPlugin network
#
#
# Außerdem müssen diese Plugins folgendermaßen konfiguriert werden:
<Plugin logfile>
      LogLevel "info"
      File STDOUT
      Timestamp true
      PrintSeverity false
</Plugin>
# ...
<Plugin network>
   <Listen "0.0.0.0" "25826">
   </Listen>
</Plugin>
# ...

Mit systemctl restart collectd starten wir nun den Daemon neu und sehen nach, ob der UDP-Port 25826 geöffnet ist:

root@deb10:~# lsof -i:25826 -Pn
COMMAND    PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
collectd  7801     root    3u  IPv4  73345      0t0  UDP *:25826
root@deb10:~#

Nach dem Aktualisieren der Seite http://localhost/collectd-web/ taucht auch schon unser neuer Client „deb9srv.dom1.test“ auf und kann mit überwacht werden.

Siehe auch:

Nagios/Icinga

Installation

Unter Debian 10 ist die Installation mittels apt-get install nagios4 schnell erledigt, wir belassen es während der Samba-Konfigurationsabfrage bei „Nein“. Der Debian Installer bringt u.a. den Webserver Apache mit, dank dem via http://localhost/nagios4/ erreichbaren Web-UI lassen sich dann viele Detailinformationen abfragen.

Es müssen allerdings noch zwei Apache-Module eingebunden werden, damit Apache mit Nagios zusammenarbeitet. Die geschieht ganz einfach mittels der beiden Kommandozeilen a2enmod auth_digest und a2enmod authz_groupfile.

Die eigene Maschine ist dabei als ebenfalls zu überwachender Host konfiguriert worden, was mit Hilfe des Kommandos nagios4stats | grep Total gut kontrolliert werden kann.

Per Default bringt Nagios eine Menge Plugins mit, deren Konfiguration hier zu finden ist:

root@deb10:~# ls -F /etc/nagios-plugins/config/
apt.cfg     disk-smb.cfg  fping.cfg  http.cfg      mail.cfg   netware.cfg  pgsql.cfg   real.cfg     tcp_udp.cfg
breeze.cfg  dns.cfg       ftp.cfg    ifstatus.cfg  mailq.cfg  news.cfg     ping.cfg    rpc-nfs.cfg  telnet.cfg
dhcp.cfg    dummy.cfg     games.cfg  ldap.cfg      mrtg.cfg   nt.cfg       procs.cfg   snmp.cfg     users.cfg
disk.cfg    flexlm.cfg    hppjd.cfg  load.cfg      mysql.cfg  ntp.cfg      radius.cfg  ssh.cfg
root@deb10:~#

Ein wichtiges Plugin ist z.B. check_ssh, das als typisches Linux-Binary auch direkt aufgerufen werden kann. Hier sehen wir, wie ein entfernter Host erfolgreich getestet wird:

root@deb10:~# /usr/lib/nagios/plugins/check_ssh 192.168.2.234
SSH OK - OpenSSH_8.2p1 Ubuntu-4ubuntu0.1 (protocol 2.0) | time=0,016857s;;;0,000000;10,000000
root@deb10:~#

Konfiguration eines Linux-Clients

Es soll nun eine andere VM als zu überwachender Host hingefügt werden, wobei dieser Nagios-Server alle Fäden in der Hand behält und den Clientrechner in Intervallen abfragt (= „active checks“).

Am besten gehen wir von der Datei localhost.cfg aus (in der /etc/nagios4/objects/templates.cfg sind leider keine anwendbaren Werte für check_command zu finden, außerdem ist sie für unseren Zweck viel zu umfangreich):

root@deb10:~# cp /etc/nagios4/objects/localhost.cfg /etc/nagios4/conf.d/mylinux-wks.cfg
root@deb10:~# vi /etc/nagios4/conf.d/mylinux-wks.cfg
...

In dieser Editorsitzung ist folgendes durchzuführen, der zu überwachende Client wird hierbei mit „client-01“ spezifiziert:

  1. IP-Adresse des Client-Rechners unter „HOST DEFINITION“ eintragen (z.B. ‚address 192.168.2.234‘).

  2. Die gesamten Zeilen des Abschnitts „HOST GROUP DEFINITION“ auskommentieren.

  3. Deaktivieren oder Löschen aller Abschnitte, in denen bei ‚check_command‘ das Muster ‚check_local‘ vorkommt.

  4. Ersetzen von ‚localhost‘ durch ‚client-01‘ bezüglich ‚host_name‘ in den drei verbliebenen, aktiven Abschnitten.

  5. Ersetzen von ‚local-service‘ durch ‚generic-service‘ in den drei verbliebenen, aktiven Abschnitten.

Mittels grep -Ev '^\s*#|^\s*;|^\s*$' /etc/nagios4/conf.d/mylinux-wks.cfg bekommen wir schließlich nur die aktiven Inhalte der Datei zu sehen:

define host{
        use                     linux-server            ; Name of host template to use
        host_name               client-01
        alias                   client-01
        address                 192.168.2.234
        }
define service{
        use                             generic-service         ; Name of service template to use
        host_name                       client-01
        service_description             PING
        check_command                   check_ping!100.0,20%!500.0,60%
        }
define service{
        use                             generic-service         ; Name of service template to use
        host_name                       client-01
        service_description             SSH
        check_command                   check_ssh
        notifications_enabled           0
        }
define service{
        use                             generic-service         ; Name of service template to use
        host_name                       client-01
        service_description             HTTP
        check_command                   check_http
        notifications_enabled           0
        }

Inbetriebnahme, Tests

Nach dem Neustarten mittels systemctl restart nagios4 kann zuerst einmal wieder nagios4stats | grep Total ausgeführt werden: jetzt müssten hier 2 Hosts auftauchen. Und dann natürlich im Webbrowser das Web-UI aufrufen, z.B. über localhost oder der realen IP-Adresse http://localhost/nagios4/