Zabbix – Monitoring auch im kleinen Umfeld leicht aufgesetzt

Ich bin schon seit langem auf der Suche nach einem für meinen „Hausgebrauch“ geegneten Monitoring-Tool. Nagios war mit immer zu aufwändig einzurichten und zu pflegen. Nun habe ich Zabbix ausprobiert. Ich habe noch keine abschließende Meinung, ob ich es „behalte“ – einzurichten ist es jedenfalls relativ einfach.

Grundprinzip

Grundprinzip ist, dass auf den Server ein zabbix-agent läuft, der die lokalen Messdaten sammelt und an den zabbix-server schickt. Hierzu ist im Normalfall eine TCP-Connection vom Agent zum Server nötig. Daher hat es sich als praktisch erwiesen, den zabbix-server im internen Netz einzurichten. Zumindest für meine Zwecke.

Zabbix-Architektur

Den zabbix-proxy habe ich so noch nicht eingerichtet – so habe ich es jedenfalls verstanden, dass es laufen muss, um externe Rechner zu überwachen.

Was mir gefällt:

  • Server können sich selber in Zabbix registrieren – man muss das nicht x Mal per Hand machen.
  • Zusammen mit Ansible könnte ich also alle meine Server mit einem Mal einrichten.
  • Es gibt verschiedene fertige „Templates“ für die Hosts, die die wesentlichen Dinge für einen Server schon fertig beinhalten – inkl. einige Trigger, die z.B. Alarm schlagen, wenn eine Platte voll läuft.
  • Zabbix kann VMware hosts automatisch „durchforsten“ und erkennen. (Dazu schreibe ich evtl. noch separat.)

Was mir nicht so gefällt:

  • Die Erst-Einrichtung geht zwar relativ einfach – danach ist aber alles recht viel Klickerei.
  • Bedienung nur wenig intuitiv und selbst-erklärend.
  • Wenig „Querverbindungen“ zwischen den verschiedenen Ansichten. Wenn ich z.B. einen Graph vor mir habe, dann würde ich gerne dort gleich klicken können und ihn zu einem „Screen“ hinzufügen. Geht aber nicht – stattdessen muss ich mir merken was das für ein Graph war, in die „Screens“ gehen, dort den Graph wieder suchen und hinzufügen.
  • Kein „Drilldown“: Z.B. würde ich gerne auf einen Graph aus einem Screen klicken, um zu dessen „ausführlicher“ Variante zu kommen, um mehr Infos zu bekommen. Geht leider nicht.
  • Insgesamt wirken Optik und Bedienkonzept wie aus dem letzten Jahrhundert.

Hier ein Beispiel für einen Zabbix-„Screen“, wie ich ihn mir eingerichtet habe:

Zabbix-Screen mit mehreren Graphen

Und nun, wie ich das alles eingerichtet habe:

Zabbix-Server mit docker einrichten

Auf dem Docker-Hub unter Zabbix habe ich mir die wesentlichen Docker-Images gesucht:

  • zabbix-server-mysql und
  • zabbix-web-apache-mysql

Ich verwende die mysql-Varianten, weil ich mysql „gut kann“ – inkl. Backup. Leider musste ich mir erst noch einen Docker-Host im internen Netz einrichten – dank Kickstart und Ansible ging das aber recht schnell.

Unten habe ich auch mein docker-compose.yml eingefügt.

Danach kann man sich mit dem Benutzer Admin (ja, großes A…) – Passwort zabbix erstmalig anmelden.

Zabbix-Agents unter Linux mit Ansible einrichten

Den ersten Testlauf auf einem Server habe ich natürlich mit apt-get install zabbix-agent begonnen. Richtig „Lustig“ wurde es dann aber, als ich meine Ansible-„Suite“ um den Zabbix-Agent erweitert habe und sich dann alle Server direkt beim Zabbix-Server registriert haben.

Ich verwende dazu die Ansible Role dj-wasabi.zabbix-agent. Untern findet sich mein Role-File.

Zabbix-Agent unter Windows einrichten

Unter Windows hab ich den Zabixx-Agent per Hand eingerichtet, weil ich auch nur einen Windows-Server habe. Erst herunterladen und dann nach dieser Anleitung eingerichtet:

Agent im OS als Service (Dienst) bekannt machen:

c:\zabbix_agents_3.2.0.win\bin\win64\zabbix_agentd.exe --config c:\zabbix_agents_3.2.0.win\conf\zabbix_agentd.win.conf --install

Config-File anpassen:

LogFile=C:\zabbix_agents_3.2.0.win\log\zabbix_agentd.log
LogFileSize=100
Server=docker-int1.steinkopf.net
ServerActive=docker-int1.steinkopf.net

Windows-Server im Zabbix manuell anlegen.

Agent starten:

c:\zabbix_agents_3.2.0.win\bin\win64\zabbix_agentd.exe --start

Später:

c:\zabbix_agents_3.2.0.win\bin\win64\zabbix_agentd.exe --stop
c:\zabbix_agents_3.2.0.win\bin\win64\zabbix_agentd.exe --uninstall

Damit der Server den Agent erreichen kann, musste noch die Windows-Firewall angepasst werden:

zabbix windows firewall

E-Mail-Notifications einrichten

Damit bei den automatisch „entstandenen“ Alarmen („Trigger“) mir auch eine Mail geschickt wird muss folgendes korrekt eingerichtet werden:

  • Unter „Administration“ -> „Media types“ muss bei „Email“ ein E-Mail-Server eingetragen sein.
  • Der User, der der Mail bekommen soll (im einfachsten Fall, wie bei mir, also der „Admin“) muss unter „Administration“ -> „Users“ -> „Media“ eingestellt bekommen, dass er rund um die Uhr für alles benachrichtigt werden soll. (Natürlich geht das aus deutlich ausgefeilter…)
  • Unter „Configuration“ -> „Actions“ muss – Achtung: „Event source: Triggers“ muss ausgewählt sein – eine Action „Report problems to Zabbix administrators“ konfiguriert werden. Inklusive „Condition“, bei welchen Triggern die Action ausgeführt werden soll. Ich habe dort „Trigger severity <> Not classified“ eingetragen.

Leider habe ich es nicht geschafft, E-Mail mit Authentifizierung einzurichten.

Anhang: docker-compose.yml

mysql:
  image: mysql:5.7
  mem_limit: 300m
  environment:
    - MYSQL_ROOT_PASSWORD=xxx
  restart: always
  volumes:
    - /opt/dockervolumes/zabbix-int/var_lib_mysql:/var/lib/mysql
    - /etc/localtime:/etc/localtime
    - /etc/timezone:/etc/timezone

mysql-backup:
  image: 'dsteinkopf/backup-all-mysql:latest'
  environment:
    - BACKUP_INTERVAL=20000
    - BACKUP_FIRSTDELAY=3600
  links:
    - mysql
  restart: always
  volumes:
    - /opt/dockervolumes/zabbix-int/mysql-backup:/var/dbdumps
    - /etc/localtime:/etc/localtime
    - /etc/timezone:/etc/timezone

zabbix-server:
  image: zabbix/zabbix-server-mysql:ubuntu-latest
  environment:
    - DB_SERVER_HOST=mysql
    - MYSQL_USER=root
    - MYSQL_PASSWORD=xxx
  links:
    - mysql
  ports:
    - 10051:10051
  restart: always
  volumes:
    - /opt/dockervolumes/zabbix-int/usr_lib_zabbix_alertscripts:/usr/lib/zabbix/alertscripts
    - /etc/localtime:/etc/localtime
    - /etc/timezone:/etc/timezone

zabbix-web:
  image: zabbix/zabbix-web-apache-mysql:ubuntu-latest
  environment:
    - DB_SERVER_HOST=mysql
    - MYSQL_USER=root
    - MYSQL_PASSWORD=xxx
    - TZ=Europe/Berlin
  links:
    - mysql
    - zabbix-server
  ports:
    - 8083:80
  restart: always
  volumes:
    - /etc/localtime:/etc/localtime
    - /etc/timezone:/etc/timezone

Anhang: Ansible-Konfiguration

- name: install zabbix agent
  hosts: all

  become: true
  become_user: root

  # see https://github.com/dj-wasabi/ansible-zabbix-agent

  roles:
    - role: dj-wasabi.zabbix-agent
      agent_server: docker-int1.steinkopf.net,172.17.0.4 # 172.17.0.4 = local docker ip
      agent_serveractive: docker-int1.steinkopf.net
      zabbix_url: http://docker-int1.steinkopf.net:8083/
      zabbix_api_user: Admin
      zabbix_api_pass: xxx
      zabbix_api_create_hosts: True
      zabbix_create_host: present
      zabbix_host_groups:
        - Linux servers
      zabbix_link_templates:
        - Template OS Linux
      #zabbix_macros:
      #  - macro_key: apache_type
      #    macro_value: reverse_proxy

2 thoughts on “Zabbix – Monitoring auch im kleinen Umfeld leicht aufgesetzt

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert