Zabbix Server + Agent unter Ubuntu 20.04 LTS installieren
Aus znilwiki
Changelog:
- 22.05.2020: Erste Version mit Ubuntu 20.04 und Zabbix 5.0.0
- 11.06.2020: Vorrausetzungen auf PHP7.4 angepasst, Zabbix 4.4 ergänzt
- 20.10.2020: Fehler mit fping6 behoben
- 25.11.2020: Baustellen-Status entfernt, scheint alles stabil zu laufen
- 09.01.2021: Zabbix 5.2 hinzugefügt, diverse Schreib- und Satzfehler korrigiert
- 28.01.2021: Achtung Baustelle gesetzt - das mit MySQL und MariaDB muss ich noch mal prüfen. Zabbix hat sonst automatisch MariaDB installiert, durch meine vorgegebenen Pakte wird MySQL verwendet
- 31.01.2021: Baustellen-Status entfernt, Datenbank kraft eigener Willkür auf MariaDB festgelegt, Abschnitt zum nachträglichen Vergrößern der Festplatte hinzugefügt
- 23.09.2021: Version 5.4.0 als Quelle hinzugefügt
- 16.03.2022: Version 6.0.0 hinzugefügt inklusive Reporting-Services (Funktioniert!)
Installation Ubuntu Server 20.04.x LTS (Long Term Support)
Einstellungen für die VM
Falls Ihr den Zabbix Server oder Proxy als virtuelle Maschine (VM) installiert so könnt Ihr Beispielsweise folgenden Einstellungen nehmen:
- Konfiguration: Typisch
- Name und Speicherort: Nach eigener Wahl
- Speicher: Nach eigener Wahl
- Gastbetriebssystem: (*) Linux --> Ubuntu (64-Bit)
- Netzwerk:
- Wie viele Netzwerkkarten möchten Sie anschließen: 1
- Netzwerk: Nach Wahl (VM Network?)
- Adapter: VMXNET 3
- Größer der virtuellen Festplatte:
- Hängt von der Anzahl der überwachten Geräte / Items ab.
- Ich empfehle min 50GB für Server / 16GB für Proxy.
- Kann nachträglich vergrößert werden: Ubuntu Linux - Festplatte mit LVM im laufenden Betrieb ohne Neustart vergrößern
- Thick-Provision Lazy-Zeroed
Danach Einstellungen der VM bearbeiten: Reiter Hardware:
- Arbeitsspeicher:
- Server 2GB oder mehr
- Proxy 1GB oder mehr
- CPUs:
- Anzahl der virtuellen Sockets
- Server: 2 oder mehr
- Proxy: 1
- Anzahl der Cores pro Socket: 1 (Immer Anzahl der Sockets erhöhen)
- Anzahl der virtuellen Sockets
Reiter Optionen
- ...
Grundinstallation
CD einlegen und los,
die Fragen beantwortet Ihr wie folgt (sind ggf. die Überschriften der Dialoge):
- Taste drücken um in den Installationsmodus zu kommen (so könnt Ihr gleich mit deutscher Tastatur starten)
- Deutsch
- Ubuntu Server installieren
- Deutsch
- Aktualisieren auf neuen Installer (ggf. erscheint der Dialog nicht)
- Erledigt
Jetzt könnt Ihr schon die gewünschte feste IP-Adresse einstellen. Wählt dazu mit den Pfeiltasten den ens160
Eintrag aus und drückt Enter:
- ens160 => Bearbeite IPv4
- Manuell
- Bei Subnetz kommt nicht die Subnetzmaske sondern das Netzwerk mit Suffix. Bei einer 24 Maske (= 255.255.255.0) ist das die IP 0 mit Suffix /24
- Erledigt
- Bei Bedarf, sonst leer lassen
- Erledigt (Vorgabe übernehmen)
- Erledigt => Nutzt die ganze Festplatte ohne LVM. Die Festplatte lässt sich später trotzdem leicht vergrößern
- Erledigt
- Fortfahren
- Ich lege hier den Benutzer installadmin an. Wählt euren Benutzer und Passwort nach Wunsch (Aufschreiben!)
- OpenSSH-Server auswählen => Erledigt (für Zugriff z.B. mit Putty)
- Erledigt
Ab jetzt heißt es abwarten. Wenn er kann lädt er gleich ein paar Sicherheitsupdates nach:
- Neustart
- ISO aus der VM entfernen und Enter drücken
- Nach dem Reboot wartet ab bis diverse Meldungen abgelaufen sind
PuTTY
Ab dieser Stelle könnt Ihr PuTTY oder den SSH Client eurer Wahl nutzen - was ich dringend empfehle. Denn dann könnt Ihr hier vorgeschlagenen Befehle einfach per Copy&Paste übernehmen.
Die IP-Adresse habt Ihr zu diesem Zeitpunkt ja bereits festgelegt:
Nach der Anmeldung nutze ich immer gerne ein
sudo -i
Damit wechselt man dauerhaft zum root Benutzer und muss nicht vor jedem Befehl ein sudo
stellen.
root wieder freischalten
- Mit Benutzer installadmin anmelden
sudo -i
- Kennwort des Benutzer installadmin eintippen
passwd root
- neues Kennwort für "root" 2x eintippen
- Lokal Anmelden kann man sich nun mit root - aber eine Anmeldung über SSH funktioniert dann immer noch nicht.
- Damit diese auch funktioniert müsst ihr die
sshd_config
bearbeiten:
nano /etc/ssh/sshd_config
sucht nach der Zeile (STRG + W ist Suchen) nach
#PermitRootLogin without-password
und stellt den Cursor in die Zeile.
Drückt nun einmal F9 und 2x F10 - damit erstellt Ihr eine Kopie der Zeile.
Ändert die Kopie wie folgt ab:
PermitRootLogin yes
Speichert die Datei (STRG + x, dann y und Enter) und startet den ssh Dienst neu:
systemctl restart sshd.service
Ab dann klappt es auch mit dem SSH-Login für den Benutzer root, z.B. über puTTY
Jetzt 2x
exit
eintippen wodurch sich das PuTTY Fenster schließt - der (eingeschränkte) Benutzer installadmin hat sich somit abgemeldet
Ja, ich persönlich arbeite gerne als root und habe diesen für die Anmeldung freigeschaltet. Was ich nicht mache ist das Login per SSH mit Passwort zu erlauben. Ich hinterlege also immer einen SSH-Key für die Anmeldung und nutze diesen statt des Kennwortes. Die Lösung hier ist einfach gehalten, der Profi mögen anpassen wie er es braucht. Ein Anmeldung als eingeschränkter Benutzer geht natürlich auch, das erste was ich dann immer mache ist ein
sudo -i
um dauerhaft zum root zu wechselnAnmelden als root
Startet PuTTY wieder und meldet euch diesmal gleich als Benutzer root an.
nano & Co auf Deutsch
nano war eben z.B. noch auf Englisch, mit
apt install -y language-pack-de
ist es (und vieles andere auf deutsch).
Installadmin löschen
Den installadmin entfernen wir mit
deluser --remove-home installadmin
root farbiger Prompt
Als root anmelden:
nano ~/.bashrc
Zeile 39 (Alt + C aktiviert Zeilennummernanzeige):
#force_color_prompt=yes
ändern zu (# entfernen):
force_color_prompt=yes
nun wieder Abmelden - ab der nächsten Anmeldung ist der neue Prompt aktiv.
Wer den sofort haben will (ohne neu Anmelden):
source ~/.bashrc
Feste IP-Adresse vergeben
Der Server hat dank des neuen Setupdialoges nun bereits eine feste IP-Adresse.
Solltet Ihr an dieser etwas ändern müssen so bearbeitet die Datei
nano /etc/netplan/00-installer-config.yaml
Multipathing deinstallieren
Ab Werk wird nun das
/var/log/syslog
mit Multipath-Meldungen vollgemüllt:
May 21 14:28:19 zabbix multipathd[674]: sda: add missing path May 21 14:28:19 zabbix multipathd[674]: sda: failed to get udev uid: Invalid argument May 21 14:28:19 zabbix multipathd[674]: sda: failed to get sysfs uid: Invalid argument May 21 14:28:19 zabbix multipathd[674]: sda: failed to get sgio uid: No such file or directory
bei mir passiert das im 5 Sekundentakt.
In dieser VM macht Multipath keinen Sinn, also deaktivieren und deinstallieren um das Syslog von den Meldungen befreien:
systemctl stop multipathd.service && systemctl disable multipathd.service apt remove -y multipath-tools && apt purge -y multipath-tools
Cloud-Init deinstallieren
Wenn Ihr die VM reboootet und die Console betrachtet tauchen kurz nach dem Reboot (Fehler-)Meldungen zum Cloud-init auf:
Das Cloud-Init ist - wenn ich mich recht erinnere - dafür da falls eure VM z.B. bei Amazon AWS, Azure oder andere Anbieter läuft um z.B. die Netzwerkinformationen vom Hoster/Provider zu erhalten.
Brauchen wir nicht, also weg damit:
echo 'datasource_list: [ None ]' | tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg apt purge -y cloud-init rm -rf /etc/cloud/ && sudo rm -rf /var/lib/cloud/ apt autoremove -y reboot
Zeitzone setzen
In meiner VM ist die Uhrzeit zu diesem Zeitpunkt falsch (gebt mal probeweise date
ein) - weil der ESXi-Host auf UTC Zeit läuft und die Ubuntu in der VM die richtige Zeitzone nicht eingestellt hat.
Wir korrigieren das mit
timedatectl set-timezone Europe/Berlin
ein
date
sollte dann die richtige Uhrzeit ausspucken.
Updates einspielen
- wieder anmelden als root
- Updates suchen für Betriebssystem: (aktualisiert den Katalog aus den Update-Quellen)
apt update
- Updates einspielen:
apt upgrade -y
- Nach Update überflüssige Pakete entfernen:
apt autoremove -y
Ich mache das normalerweise immer als Einzeiler:
apt update && apt upgrade -y && apt autoremove -y
Automatische Updates deaktivieren
Ich persönlich möchte nicht das der Zabbix-Server automatisch Updates einspielt.
Die automatischen Updates aktualisieren - soweit ich das beobachten konnte - nur den Kernel. Aber auch das möchte ich nicht sondern geplant durchführen.
Die automatischen Updates verhindern wir mit
apt remove -y unattended-upgrades
Benötigte Programme für Zabbix installieren
Die nachfolgende Zeile installiert alles notwendige um alle Features eines Zabbix-Server zu nutzen. Als Datenbank wird MariaDB verwendet.
Wer lieber MySQL verwenden will muss in der Zeile mariadb-server durch mysql-server ersetzen:
apt install dnsutils htop make gcc libc6-dev libmysqlclient-dev libcurl4-openssl-dev libssh2-1-dev libsnmp-dev libiksemel-dev mariadb-server libopenipmi-dev fping php7.4-gd snmp libsnmp-base openjdk-11-jdk unixodbc unixodbc-dev libxml2 libxml2-dev snmp-mibs-downloader snmpd snmptrapd snmptt sblim-wbemcli php7.4-ldap traceroute ipmitool libldap2-dev php7.4-bcmath php7.4-mbstring php7.4-xml ttf-dejavu-core -y
apt
gehen und 3x Klicken. Ggf. mehrmals versuchen - bis die ganze Zeile markiert ist. Diese kann dann so in z.B. PuTTY eingefügt werden
Mit der obigen Zeite werden gewiss einige Pakete zuviel installiert - unter anderem alles was nötig wäre um Zabbix auch direkt aus dem Quellcode zu kompilieren. Aber es sind dann auch definitiv alle notwendigen Voraussetzungen für jegliche Zabbix-Abfrage vorhanden, z.B. für den Empfang von SNMP-Traps - und anderem zum Beispiel die ganzen PHP-Pakete inklusive LDAP.
Zabbix Server installieren
Zabbix Repository hinzufügen
wget https://repo.zabbix.com/zabbix/4.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.0-3+focal_all.deb dpkg -i zabbix-release_4.0-3+focal_all.deb apt update rm zabbix-release_*
wget https://repo.zabbix.com/zabbix/4.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.4-1+focal_all.deb dpkg -i zabbix-release_4.4-1+focal_all.deb apt update rm zabbix-release_*
wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+focal_all.deb dpkg -i zabbix-release_5.0-1+focal_all.deb apt update rm zabbix-release_*
wget https://repo.zabbix.com/zabbix/5.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.2-1+ubuntu20.04_all.deb dpkg -i zabbix-release_5.2-1+ubuntu20.04_all.deb apt update rm zabbix-release_*
wget https://repo.zabbix.com/zabbix/5.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.4-1+ubuntu20.04_all.deb dpkg -i zabbix-release_5.4-1+ubuntu20.04_all.deb apt update rm zabbix-release_*
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-1+ubuntu20.04_all.deb dpkg -i zabbix-release_6.0-1+ubuntu20.04_all.deb apt update rm zabbix-release_*
Zabbix installieren
Die Installation der ausführbaren Dateien erfolgt bei allen Varianten nach /sbin
!
Fehlermeldungen zum Zabbix Java Gateway ignorieren!
Als Server
Bis Version 5.2
apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent zabbix-get zabbix-sender zabbix-java-gateway
Ab Version 5.4 / 6.0
apt install -y zabbix-server-mysql zabbix-sql-scripts zabbix-frontend-php zabbix-apache-conf zabbix-agent zabbix-get zabbix-sender zabbix-java-gateway zabbix-web-service
Als Proxy
Bis Version 5.2
apt install -y zabbix-proxy-mysql zabbix-agent zabbix-get zabbix-sender zabbix-java-gateway
Ab Version 5.4
apt install -y zabbix-proxy-mysql zabbix-sql-scripts zabbix-agent zabbix-get zabbix-sender zabbix-java-gateway
Java Gateway deaktivieren
Die wenigsten werden es nutzen - doch diese Anleitung ist so gemacht das sich danach alle Features von Zabbix nutzen lassen.
Wann braucht Ihr es? Wenn Ihr Java-Applikationen habt die Ihr aus dieser Applikation selbst monitoren wollt. Dazu müssen beim Start der Applikation extra Parameter hierfür übergeben werden (nämlich unter anderen die Daten des Java-Gateways).
Wer es nicht braucht (und gerade nur Bahnhof verstanden hat) deaktiviert es mit
systemctl stop zabbix-java-gateway.service systemctl disable zabbix-java-gateway.service
Bei der Installation gab es ggf. Fehlermeldungen das der Dienst nicht gestartet werden konnte - das würde jetzt aber funktionieren.
Zusätzliche Pakete nachinstallieren
Zabbix denkt an fast alles (Die Abhängigkeiten wurden besser gepflegt), für den Empfang von SNMP-Traps (gemäß dieser Anleitung) und Tests (snmpwalk & Co) benötigen wird jedoch noch weitere Pakete - Falls Ihr nicht die Voraussetzungen installiert habt:
apt install -y dnsutils snmp snmptt traceroute ipmitool snmpd snmp-mibs-downloader snmptrapd
MariaDB (MySQL) Datenbank optimieren
Die Einrichtung wird auch hier beschrieben - allerdings etwas knapp: https://www.zabbix.com/documentation/current/manual/appendix/install/db_scripts
Die Zabbix-Datenbank kann recht groß werden und jeder Zugriff zählt. Ich habe mir deshalb mal aus diversen Quellen im Internet Tipps zusammengesucht um die Performance der Datenbank zu steigern.
MariaDB Einstellungen bearbeiten (wer MySQL einsetzt findet die passende Datei unter nano /etc/mysql/mysql.conf.d/mysqld.cnf):
nano /etc/mysql/mariadb.conf.d/50-server.cnf
und unterhalb von
[mysqld]
Diese Zeilen einfügen:
# Größe der Logdatei statt 10MB innodb_log_file_size = 512M # Transaktionswerte nach Möglichkeit nicht in den Doublewritebuffer schreiben innodb_doublewrite = 0 # Transaktionen schon bestätigen sobald diese im Cache stehen: innodb_flush_log_at_trx_commit = 2 # Wieviel Hauptspeicher soll zum Puffern verwendet werden? Nehmt die Hälfte des vorhandenen Speichers (bei 4GB RAM also 2G, bei 1G also 512M) innodb_buffer_pool_size = 1G
mit STRG + x den nano verlassen und speichern bestätigen j + Enter)
innodb_buffer_pool_size
!!! Dieser Wert darf nicht größer sein als der tatsächlich vorhandene RAM, sonst startet MySQL nicht
Prüft ggf. ob diese Zeilen dann nicht doppelt vorkommen!
Wenn Ihr später immer mehr Poller, Pinger und andere Zabbix-Prozesse startet müsst Ihr auch die Anzahl der möglichen Verbindungen zu MySQL Datenbank erhöhen.
Auch jeder Nutzer der auf dem Webinterface arbeitet verbraucht Verbindungen. Im zabbix_server.log steht dann eine Meldung mit "too many connection".
Sucht die Zeile
#max_connections = 100
und ändert diese auf
max_connections = 300
Nun müssen wir den mysql Server einmal neu starten:
systemctl restart mysql
Ob Ihr alles richtig gemacht habt könnt Ihr im Log kontrollieren:
cat /var/log/mysql/error.log
Die Ausgabe sollte dann etwa so aussehen:
2020-05-21 15:17:02 0 [Note] InnoDB: Using Linux native AIO 2020-05-21 15:17:02 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins 2020-05-21 15:17:02 0 [Note] InnoDB: Uses event mutexes 2020-05-21 15:17:02 0 [Note] InnoDB: Compressed tables use zlib 1.2.11 2020-05-21 15:17:02 0 [Note] InnoDB: Number of pools: 1 2020-05-21 15:17:02 0 [Note] InnoDB: Using SSE2 crc32 instructions 2020-05-21 15:17:02 0 [Note] InnoDB: Initializing buffer pool, total size = 2G, instances = 8, chunk size = 128M 2020-05-21 15:17:02 0 [Note] InnoDB: Completed initialization of buffer pool 2020-05-21 15:17:02 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority(). 2020-05-21 15:17:02 0 [Note] InnoDB: Resizing redo log from 2*50331648 to 2*536870912 bytes; LSN=1625466 2020-05-21 15:17:02 0 [Note] InnoDB: Starting to delete and rewrite log files. 2020-05-21 15:17:02 0 [Note] InnoDB: Setting log file ./ib_logfile101 size to 536870912 bytes 2020-05-21 15:17:02 0 [Note] InnoDB: Setting log file ./ib_logfile1 size to 536870912 bytes 2020-05-21 15:17:02 0 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0 2020-05-21 15:17:02 0 [Note] InnoDB: New log files created, LSN=1625466 2020-05-21 15:17:02 0 [Note] InnoDB: 128 out of 128 rollback segments are active. 2020-05-21 15:17:02 0 [Note] InnoDB: Creating shared tablespace for temporary tables 2020-05-21 15:17:02 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ... 2020-05-21 15:17:02 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB. 2020-05-21 15:17:02 0 [Note] InnoDB: 10.3.22 started; log sequence number 1625466; transaction id 21 2020-05-21 15:17:02 0 [Note] Plugin 'FEEDBACK' is disabled. 2020-05-21 15:17:02 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool 2020-05-21 15:17:02 0 [Note] InnoDB: Buffer pool(s) load completed at 200521 15:17:02 2020-05-21 15:17:02 0 [Note] Server socket created on IP: '0.0.0.0'. 2020-05-21 15:17:02 0 [Note] Reading of all Master_info entries succeeded 2020-05-21 15:17:02 0 [Note] Added new Master_info to hash table 2020-05-21 15:17:02 0 [Note] /usr/sbin/mysqld: ready for connections. Version: '10.3.22-MariaDB-1ubuntu1' socket: '/run/mysqld/mysqld.sock' port: 3306 Ubuntu 20.04
Wichtig ist immer die Zeile mit dem Socket und Port (hier die letzte) - da muss der Port auftauchen auf dem der Server lauscht, in der Regel 3306
MariaDB/MySQL Datenbank erstellen und einrichten
- Zabbix Datenbank anlegen:
mysql -u root -e "create database zabbix character set utf8mb4 collate utf8mb4_bin" mysql -u root -e "create user 'zabbix'@'localhost' identified by 'zabbix'" mysql -u root -e "grant all privileges on zabbix.* to 'zabbix'@'localhost'"
Die Datenbank heißt zabbix, der Datenbankbenutzer "zabbix" mit dem Passwort "zabbix" - wenn er also nach einem Passwort fragt nun dieses eingeben. Falls das jemand für unsicher hält - nun der MySQL Server sollte - wenn man es nicht ändert - eh nur lokale Anfragen erlauben, sprich von extern komme ich gar nicht ran.
Bei einem Server:
Bis Version 5.2
zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix -pzabbix zabbix
Ab Version 5.4
zcat /usr/share/doc/zabbix-sql-scripts/mysql/create.sql.gz | mysql -uzabbix -pzabbix zabbix
Ab Version 6.0
zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -pzabbix zabbix
Bei einem Proxy:
Auf einem Proxy darf nur die schema.sql
importiert werden!!!!
Solltet Ihr aus versehen alle Schema importiert haben so löscht die Datenbank noch einmal und fangt von vorne an! Der Proxy funktioniert nicht wenn er alle Schemas hat!
Bis Version 5.2
zcat /usr/share/doc/zabbix-proxy-mysql/schema.sql.gz | mysql -uzabbix -pzabbix zabbix
Ab Version 5.4
zcat /usr/share/doc/zabbix-proxy-mysql/schema.sql.gz | mysql -uzabbix -pzabbix zabbix
Ab Version 6.0
zcat /usr/share/doc/zabbix-proxy-mysql/schema.sql.gz | mysql -uzabbix -pzabbix zabbix
Genaueres siehe hier
Die nicht empfohlene Lösung ist der MariaDB-Server Konfiguration den Parameter innodb_strict_mode=OFF> zu setzen. Die Empfohlene Lösung ist gleich Zabbix Version 5.0 einzusetzen wo das Problem behoben wurde.
Konfigurationsdateien anpassen
Nun die Konfigurationsdatei bearbeiten:
für einen Server:
nano /etc/zabbix/zabbix_server.conf
- folgende Zeilen finden und auf diese Werte ändern, ggf. den # davor entfernen, STRG + W ist suchen!
DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=zabbix StartIPMIPollers=1 StartPollersUnreachable=5 StartPingers=10 StartVMwareCollectors=5 #Die Cache Werte ggf. dem vorhandenen Arbeitsspeicher anpassen! #Oder nicht ändern - Zabbix warnt euch wenn ein Wert ausgeschöpft ist und vergrößert werden muss - wenn das Template "Zabbix Server" zugeordnet wurde VMwareCacheSize=64M CacheSize=128M HistoryCacheSize=64M HistoryIndexCacheSize=16M TrendCacheSize=64M ValueCacheSize=64M Timeout=30 # Problem mit fping6 beheben (ja, richtig, nichts hinter dem = Zeichen!) Fping6Location=
# This is a configuration file for Zabbix server daemon
# To get more information about Zabbix, visit http://www.zabbix.com
############ GENERAL PARAMETERS #################
### Option: ListenPort
# Listen port for trapper.
#
# Mandatory: no
# Range: 1024-32767
# Default:
# ListenPort=10051
### Option: SourceIP
# Source IP address for outgoing connections.
#
# Mandatory: no
# Default:
# SourceIP=
### Option: LogType
# Specifies where log messages are written to:
# system - syslog
# file - file specified with LogFile parameter
# console - standard output
#
# Mandatory: no
# Default:
# LogType=file
### Option: LogFile
# Log file name for LogType 'file' parameter.
#
# Mandatory: no
# Default:
# LogFile=
LogFile=/var/log/zabbix/zabbix_server.log
### Option: LogFileSize
# Maximum size of log file in MB.
# 0 - disable automatic log rotation.
#
# Mandatory: no
# Range: 0-1024
# Default:
# LogFileSize=1
LogFileSize=0
### Option: DebugLevel
# Specifies debug level:
# 0 - basic information about starting and stopping of Zabbix processes
# 1 - critical information
# 2 - error information
# 3 - warnings
# 4 - for debugging (produces lots of information)
# 5 - extended debugging (produces even more information)
#
# Mandatory: no
# Range: 0-5
# Default:
# DebugLevel=3
### Option: PidFile
# Name of PID file.
#
# Mandatory: no
# Default:
# PidFile=/tmp/zabbix_server.pid
PidFile=/var/run/zabbix/zabbix_server.pid
### Option: DBHost
# Database host name.
# If set to localhost, socket is used for MySQL.
# If set to empty string, socket is used for PostgreSQL.
#
# Mandatory: no
# Default:
# DBHost=localhost
### Option: DBName
# Database name.
# For SQLite3 path to database file must be provided. DBUser and DBPassword are ignored.
#
# Mandatory: yes
# Default:
# DBName=
DBName=zabbix
### Option: DBSchema
# Schema name. Used for IBM DB2 and PostgreSQL.
#
# Mandatory: no
# Default:
# DBSchema=
### Option: DBUser
# Database user. Ignored for SQLite.
#
# Mandatory: no
# Default:
# DBUser=
DBUser=zabbix
### Option: DBPassword
# Database password. Ignored for SQLite.
# Comment this line if no password is used.
#
# Mandatory: no
# Default:
# DBPassword=
DBPassword=zabbix
### Option: DBSocket
# Path to MySQL socket.
#
# Mandatory: no
# Default:
# DBSocket=/tmp/mysql.sock
### Option: DBPort
# Database port when not using local socket. Ignored for SQLite.
#
# Mandatory: no
# Range: 1024-65535
# Default (for MySQL):
# DBPort=3306
############ ADVANCED PARAMETERS ################
### Option: StartPollers
# Number of pre-forked instances of pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartPollers=5
### Option: StartIPMIPollers
# Number of pre-forked instances of IPMI pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartIPMIPollers=0
StartIPMIPollers=5
### Option: StartPollersUnreachable
# Number of pre-forked instances of pollers for unreachable hosts (including IPMI and Java).
# At least one poller for unreachable hosts must be running if regular, IPMI or Java pollers
# are started.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartPollersUnreachable=1
StartPollersUnreachable=5
### Option: StartTrappers
# Number of pre-forked instances of trappers.
# Trappers accept incoming connections from Zabbix sender, active agents and active proxies.
# At least one trapper process must be running to display server availability and view queue
# in the frontend.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartTrappers=5
### Option: StartPingers
# Number of pre-forked instances of ICMP pingers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartPingers=1
StartPingers=10
### Option: StartDiscoverers
# Number of pre-forked instances of discoverers.
#
# Mandatory: no
# Range: 0-250
# Default:
# StartDiscoverers=1
### Option: StartHTTPPollers
# Number of pre-forked instances of HTTP pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartHTTPPollers=1
### Option: StartTimers
# Number of pre-forked instances of timers.
# Timers process time-based trigger functions and maintenance periods.
# Only the first timer process handles the maintenance periods.
#
# Mandatory: no
# Range: 1-1000
# Default:
# StartTimers=1
### Option: StartEscalators
# Number of pre-forked instances of escalators.
#
# Mandatory: no
# Range: 0-100
# Default:
# StartEscalators=1
### Option: JavaGateway
# IP address (or hostname) of Zabbix Java gateway.
# Only required if Java pollers are started.
#
# Mandatory: no
# Default:
# JavaGateway=
### Option: JavaGatewayPort
# Port that Zabbix Java gateway listens on.
#
# Mandatory: no
# Range: 1024-32767
# Default:
# JavaGatewayPort=10052
### Option: StartJavaPollers
# Number of pre-forked instances of Java pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartJavaPollers=0
### Option: StartVMwareCollectors
# Number of pre-forked vmware collector instances.
#
# Mandatory: no
# Range: 0-250
# Default:
# StartVMwareCollectors=0
StartVMwareCollectors=5
### Option: VMwareFrequency
# How often Zabbix will connect to VMware service to obtain a new data.
#
# Mandatory: no
# Range: 10-86400
# Default:
# VMwareFrequency=60
### Option: VMwarePerfFrequency
# How often Zabbix will connect to VMware service to obtain performance data.
#
# Mandatory: no
# Range: 10-86400
# Default:
# VMwarePerfFrequency=60
### Option: VMwareCacheSize
# Size of VMware cache, in bytes.
# Shared memory size for storing VMware data.
# Only used if VMware collectors are started.
#
# Mandatory: no
# Range: 256K-2G
# Default:
# VMwareCacheSize=8M
VMwareCacheSize=64M
### Option: VMwareTimeout
# Specifies how many seconds vmware collector waits for response from VMware service.
#
# Mandatory: no
# Range: 1-300
# Default:
# VMwareTimeout=10
### Option: SNMPTrapperFile
# Temporary file used for passing data from SNMP trap daemon to the server.
# Must be the same as in zabbix_trap_receiver.pl or SNMPTT configuration file.
#
# Mandatory: no
# Default:
# SNMPTrapperFile=/tmp/zabbix_traps.tmp
### Option: StartSNMPTrapper
# If 1, SNMP trapper process is started.
#
# Mandatory: no
# Range: 0-1
# Default:
# StartSNMPTrapper=0
### Option: ListenIP
# List of comma delimited IP addresses that the trapper should listen on.
# Trapper will listen on all network interfaces if this parameter is missing.
#
# Mandatory: no
# Default:
# ListenIP=0.0.0.0
# ListenIP=127.0.0.1
### Option: HousekeepingFrequency
# How often Zabbix will perform housekeeping procedure (in hours).
# Housekeeping is removing outdated information from the database.
# To prevent Housekeeper from being overloaded, no more than 4 times HousekeepingFrequency
# hours of outdated information are deleted in one housekeeping cycle, for each item.
# To lower load on server startup housekeeping is postponed for 30 minutes after server start.
# With HousekeepingFrequency=0 the housekeeper can be only executed using the runtime control option.
# In this case the period of outdated information deleted in one housekeeping cycle is 4 times the
# period since the last housekeeping cycle, but not less than 4 hours and not greater than 4 days.
#
# Mandatory: no
# Range: 0-24
# Default:
# HousekeepingFrequency=1
### Option: MaxHousekeeperDelete
# The table "housekeeper" contains "tasks" for housekeeping procedure in the format:
# [housekeeperid], [tablename], [field], [value].
# No more than 'MaxHousekeeperDelete' rows (corresponding to [tablename], [field], [value])
# will be deleted per one task in one housekeeping cycle.
# SQLite3 does not use this parameter, deletes all corresponding rows without a limit.
# If set to 0 then no limit is used at all. In this case you must know what you are doing!
#
# Mandatory: no
# Range: 0-1000000
# Default:
# MaxHousekeeperDelete=5000
### Option: SenderFrequency
# How often Zabbix will try to send unsent alerts (in seconds).
#
# Mandatory: no
# Range: 5-3600
# Default:
# SenderFrequency=30
### Option: CacheSize
# Size of configuration cache, in bytes.
# Shared memory size for storing host, item and trigger data.
#
# Mandatory: no
# Range: 128K-8G
# Default:
# CacheSize=8M
CacheSize=128M
### Option: CacheUpdateFrequency
# How often Zabbix will perform update of configuration cache, in seconds.
#
# Mandatory: no
# Range: 1-3600
# Default:
# CacheUpdateFrequency=60
### Option: StartDBSyncers
# Number of pre-forked instances of DB Syncers.
#
# Mandatory: no
# Range: 1-100
# Default:
# StartDBSyncers=4
### Option: HistoryCacheSize
# Size of history cache, in bytes.
# Shared memory size for storing history data.
#
# Mandatory: no
# Range: 128K-2G
# Default:
# HistoryCacheSize=16M
HistoryCacheSize=64M
### Option: HistoryIndexCacheSize
# Size of history index cache, in bytes.
# Shared memory size for indexing history cache.
#
# Mandatory: no
# Range: 128K-2G
# Default:
# HistoryIndexCacheSize=4M
HistoryIndexCacheSize=16M
### Option: TrendCacheSize
# Size of trend cache, in bytes.
# Shared memory size for storing trends data.
#
# Mandatory: no
# Range: 128K-2G
# Default:
# TrendCacheSize=4M
TrendCacheSize=64M
### Option: ValueCacheSize
# Size of history value cache, in bytes.
# Shared memory size for caching item history data requests.
# Setting to 0 disables value cache.
#
# Mandatory: no
# Range: 0,128K-64G
# Default:
# ValueCacheSize=8M
ValueCacheSize=64M
### Option: Timeout
# Specifies how long we wait for agent, SNMP device or external check (in seconds).
#
# Mandatory: no
# Range: 1-30
# Default:
# Timeout=3
Timeout=30
### Option: TrapperTimeout
# Specifies how many seconds trapper may spend processing new data.
#
# Mandatory: no
# Range: 1-300
# Default:
# TrapperTimeout=300
### Option: UnreachablePeriod
# After how many seconds of unreachability treat a host as unavailable.
#
# Mandatory: no
# Range: 1-3600
# Default:
# UnreachablePeriod=45
### Option: UnavailableDelay
# How often host is checked for availability during the unavailability period, in seconds.
#
# Mandatory: no
# Range: 1-3600
# Default:
# UnavailableDelay=60
### Option: UnreachableDelay
# How often host is checked for availability during the unreachability period, in seconds.
#
# Mandatory: no
# Range: 1-3600
# Default:
# UnreachableDelay=15
### Option: AlertScriptsPath
# Full path to location of custom alert scripts.
# Default depends on compilation options.
#
# Mandatory: no
# Default:
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts
### Option: ExternalScripts
# Full path to location of external scripts.
# Default depends on compilation options.
#
# Mandatory: no
# Default:
# ExternalScripts=${datadir}/zabbix/externalscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
### Option: FpingLocation
# Location of fping.
# Make sure that fping binary has root ownership and SUID flag set.
#
# Mandatory: no
# Default:
# FpingLocation=/usr/sbin/fping
FpingLocation=/usr/bin/fping
### Option: Fping6Location
# Location of fping6.
# Make sure that fping6 binary has root ownership and SUID flag set.
# Make empty if your fping utility is capable to process IPv6 addresses.
#
# Mandatory: no
# Default:
# Fping6Location=/usr/sbin/fping6
Fping6Location=
### Option: SSHKeyLocation
# Location of public and private keys for SSH checks and actions.
#
# Mandatory: no
# Default:
# SSHKeyLocation=
### Option: LogSlowQueries
# How long a database query may take before being logged (in milliseconds).
# Only works if DebugLevel set to 3, 4 or 5.
# 0 - don't log slow queries.
#
# Mandatory: no
# Range: 1-3600000
# Default:
# LogSlowQueries=0
LogSlowQueries=3000
### Option: TmpDir
# Temporary directory.
#
# Mandatory: no
# Default:
# TmpDir=/tmp
### Option: StartProxyPollers
# Number of pre-forked instances of pollers for passive proxies.
#
# Mandatory: no
# Range: 0-250
# Default:
# StartProxyPollers=1
### Option: ProxyConfigFrequency
# How often Zabbix Server sends configuration data to a Zabbix Proxy in seconds.
# This parameter is used only for proxies in the passive mode.
#
# Mandatory: no
# Range: 1-3600*24*7
# Default:
# ProxyConfigFrequency=3600
### Option: ProxyDataFrequency
# How often Zabbix Server requests history data from a Zabbix Proxy in seconds.
# This parameter is used only for proxies in the passive mode.
#
# Mandatory: no
# Range: 1-3600
# Default:
# ProxyDataFrequency=1
### Option: AllowRoot
# Allow the server to run as 'root'. If disabled and the server is started by 'root', the server
# will try to switch to the user specified by the User configuration option instead.
# Has no effect if started under a regular user.
# 0 - do not allow
# 1 - allow
#
# Mandatory: no
# Default:
# AllowRoot=0
### Option: User
# Drop privileges to a specific, existing user on the system.
# Only has effect if run as 'root' and AllowRoot is disabled.
#
# Mandatory: no
# Default:
# User=zabbix
### Option: Include
# You may include individual files or all files in a directory in the configuration file.
# Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.
#
# Mandatory: no
# Default:
# Include=
# Include=/usr/local/etc/zabbix_server.general.conf
# Include=/usr/local/etc/zabbix_server.conf.d/
# Include=/usr/local/etc/zabbix_server.conf.d/*.conf
### Option: SSLCertLocation
# Location of SSL client certificates.
# This parameter is used only in web monitoring.
#
# Mandatory: no
# Default:
# SSLCertLocation=${datadir}/zabbix/ssl/certs
### Option: SSLKeyLocation
# Location of private keys for SSL client certificates.
# This parameter is used only in web monitoring.
#
# Mandatory: no
# Default:
# SSLKeyLocation=${datadir}/zabbix/ssl/keys
### Option: SSLCALocation
# Override the location of certificate authority (CA) files for SSL server certificate verification.
# If not set, system-wide directory will be used.
# This parameter is used only in web monitoring and SMTP authentication.
#
# Mandatory: no
# Default:
# SSLCALocation=
####### LOADABLE MODULES #######
### Option: LoadModulePath
# Full path to location of server modules.
# Default depends on compilation options.
#
# Mandatory: no
# Default:
# LoadModulePath=${libdir}/modules
### Option: LoadModule
# Module to load at server startup. Modules are used to extend functionality of the server.
# Format: LoadModule=<module.so>
# The modules must be located in directory specified by LoadModulePath.
# It is allowed to include multiple LoadModule parameters.
#
# Mandatory: no
# Default:
# LoadModule=
####### TLS-RELATED PARAMETERS #######
### Option: TLSCAFile
# Full pathname of a file containing the top-level CA(s) certificates for
# peer certificate verification.
#
# Mandatory: no
# Default:
# TLSCAFile=
### Option: TLSCRLFile
# Full pathname of a file containing revoked certificates.
#
# Mandatory: no
# Default:
# TLSCRLFile=
### Option: TLSCertFile
# Full pathname of a file containing the server certificate or certificate chain.
#
# Mandatory: no
# Default:
# TLSCertFile=
### Option: TLSKeyFile
# Full pathname of a file containing the server private key.
#
# Mandatory: no
# Default:
# TLSKeyFile=
- speichern und verlassen
nano /etc/zabbix/zabbix_proxy.conf
- folgende Zeilen finden und auf diese Werte ändern, ggf. den # davor entfernen, STRG + W ist suchen!
ProxyMode=0 Server=IP oder DNS Name des Zabbix-Servers an den gemeldet werden soll ServerPort=10051 # Hostname -> unter diesem Namen müssen wir den Proxy auch auf dem Hauptserver anlegen! Hostname=zabbixproxy DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=zabbix EnableRemoteCommands=1 Timeout=30 StartVMwareCollectors=5 # Nachfolgend: Richtig, nichts darf hinter dem = stehen! Fping6Location=
Hinweis:Unter Ubuntu 20.04 istfping
und fping6
das gleiche Programm. Die 6er Variante ist nur ein symbolischer Link auf die normale Version. Auf meinem Proxy zickte er deswegen rum (der hat eine IPv6 konfiguriert). Wenn den Eintrag wie zuvor beschrieben abändert geht es ohne Probleme.
Die Fehlermeldung die er bringt ist
Cannot detect the minimum interval of /usr/bin/fping6
Upgrade MariaDB auf Version 10.5 für Zabbix 6.0
Der Zabbix Version 6.0 ist die vorhandene MariaDB-Version zu alt, Ubuntu 20.04 bringt Version 10.3 mit, Zabbix braucht aber 10.5.
Also führen wir ein Upgrade durch:
apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc' add-apt-repository 'deb [arch=amd64] http://mariadb.mirror.globo.tech/repo/10.5/ubuntu focal main' apt update && apt upgrade -y apt install mariadb-server mariadb-client systemctl restart mariadb.service
Wenn er fragt ob er die /etc/mysql/mariadb.conf.d/50-server.cnf
überschreiben soll sagt Ihr N
Automatischen Start beim Booten einrichten
Die notwendigen Skripte werden bei der Installation aus den Repository direkt mit installiert, wir müssen diese nur noch aktivieren:
Auf einem Server
systemctl enable zabbix-server.service
systemctl enable zabbix-proxy.service
systemctl enable zabbix-agent.service
Start von Zabbix testen
Nun müsste man den Zabbix Server wie andere Dienste auch über systemctl starten können
systemctl start zabbix-server
Wenn alles in Ordnung ist gibt es keine Rückmeldung durch systemctl, also fragen wir nach dem Status:
systemctl status zabbix-server
Ausgabe:
● zabbix-server.service - Zabbix Server Loaded: loaded (/lib/systemd/system/zabbix-server.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-05-21 17:47:54 CEST; 5s ago Process: 18816 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS) Main PID: 18830 (zabbix_server) Tasks: 62 (limit: 4621) Memory: 139.1M CGroup: /system.slice/zabbix-server.service ├─18830 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf ├─18831 /usr/sbin/zabbix_server: configuration syncer [synced configuration in 0.043149 sec, idle 60 sec] ├─18833 /usr/sbin/zabbix_server: ipmi manager #1 [scheduled 0, polled 0 values, idle 5.016619 sec during 5.016881 sec] ├─18834 /usr/sbin/zabbix_server: housekeeper [startup idle for 30 minutes] ├─18835 /usr/sbin/zabbix_server: timer #1 [updated 0 hosts, suppressed 0 events in 0.001532 sec, idle 5 sec] ├─18836 /usr/sbin/zabbix_server: http poller #1 [got 0 values in 0.000710 sec, idle 5 sec] ├─18837 /usr/sbin/zabbix_server: discoverer #1 [processed 0 rules in 0.000605 sec, idle 60 sec] ├─18838 /usr/sbin/zabbix_server: history syncer #1 [processed 0 values, 0 triggers in 0.000026 sec, idle 1 sec] ├─18839 /usr/sbin/zabbix_server: history syncer #2 [processed 0 values, 0 triggers in 0.000028 sec, idle 1 sec] ├─18840 /usr/sbin/zabbix_server: history syncer #3 [processed 0 values, 0 triggers in 0.000025 sec, idle 1 sec] ├─18841 /usr/sbin/zabbix_server: history syncer #4 [processed 0 values, 0 triggers in 0.000024 sec, idle 1 sec] ├─18842 /usr/sbin/zabbix_server: escalator #1 [processed 0 escalations in 0.001428 sec, idle 3 sec] ├─18843 /usr/sbin/zabbix_server: ipmi poller #1 started ├─18844 /usr/sbin/zabbix_server: ipmi poller #2 started ├─18846 /usr/sbin/zabbix_server: ipmi poller #3 started ├─18847 /usr/sbin/zabbix_server: ipmi poller #4 started ├─18848 /usr/sbin/zabbix_server: ipmi poller #5 started ├─18849 /usr/sbin/zabbix_server: proxy poller #1 [exchanged data with 0 proxies in 0.000024 sec, idle 5 sec] ├─18850 /usr/sbin/zabbix_server: self-monitoring [processed data in 0.000024 sec, idle 1 sec] ├─18851 /usr/sbin/zabbix_server: vmware collector #1 [updated 0, removed 0 VMware services in 0.000019 sec, idle 5 sec] ├─18852 /usr/sbin/zabbix_server: vmware collector #2 [updated 0, removed 0 VMware services in 0.000020 sec, idle 5 sec] ├─18860 /usr/sbin/zabbix_server: vmware collector #3 [updated 0, removed 0 VMware services in 0.000020 sec, idle 5 sec] ├─18861 /usr/sbin/zabbix_server: vmware collector #4 [updated 0, removed 0 VMware services in 0.000019 sec, idle 5 sec] ├─18862 /usr/sbin/zabbix_server: vmware collector #5 [updated 0, removed 0 VMware services in 0.000017 sec, idle 5 sec] ├─18863 /usr/sbin/zabbix_server: task manager [processed 0 task(s) in 0.001796 sec, idle 5 sec] ├─18864 /usr/sbin/zabbix_server: poller #1 [got 1 values in 0.000133 sec, idle 3 sec] ├─18866 /usr/sbin/zabbix_server: poller #2 [got 0 values in 0.000044 sec, idle 3 sec] ├─18867 /usr/sbin/zabbix_server: poller #3 [got 0 values in 0.000047 sec, idle 3 sec] ├─18868 /usr/sbin/zabbix_server: poller #4 [got 0 values in 0.000045 sec, idle 3 sec] ├─18869 /usr/sbin/zabbix_server: poller #5 [got 0 values in 0.000065 sec, idle 3 sec] ├─18870 /usr/sbin/zabbix_server: unreachable poller #1 [got 0 values in 0.000057 sec, idle 5 sec] ├─18872 /usr/sbin/zabbix_server: unreachable poller #2 [got 0 values in 0.000051 sec, idle 5 sec] ├─18876 /usr/sbin/zabbix_server: unreachable poller #3 [got 0 values in 0.000044 sec, idle 5 sec] ├─18877 /usr/sbin/zabbix_server: unreachable poller #4 [got 0 values in 0.000054 sec, idle 5 sec] ├─18878 /usr/sbin/zabbix_server: unreachable poller #5 [got 0 values in 0.000078 sec, idle 5 sec] ├─18879 /usr/sbin/zabbix_server: trapper #1 [processed data in 0.000000 sec, waiting for connection] ├─18880 /usr/sbin/zabbix_server: trapper #2 [processed data in 0.000000 sec, waiting for connection] ├─18881 /usr/sbin/zabbix_server: trapper #3 [processed data in 0.000000 sec, waiting for connection] ├─18882 /usr/sbin/zabbix_server: trapper #4 [processed data in 0.000000 sec, waiting for connection] ├─18883 /usr/sbin/zabbix_server: trapper #5 [processed data in 0.000000 sec, waiting for connection] ├─18884 /usr/sbin/zabbix_server: icmp pinger #1 [got 0 values in 0.000038 sec, idle 5 sec] ├─18885 /usr/sbin/zabbix_server: icmp pinger #2 [got 0 values in 0.000041 sec, idle 5 sec] ├─18886 /usr/sbin/zabbix_server: icmp pinger #3 [got 0 values in 0.000043 sec, idle 5 sec] ├─18887 /usr/sbin/zabbix_server: icmp pinger #4 [got 0 values in 0.000040 sec, idle 5 sec]
Zum Verlassen q drücken.
Genaueres können wir uns auch noch einmal im Log-File ansehen:
tail -fn 1000 /var/log/zabbix/zabbix_server.log
Ausgabe:
19060:20200521:175117.674 Starting Zabbix Server. Zabbix 5.0.0 (revision 9665d62db0). 19060:20200521:175117.674 ****** Enabled features ****** 19060:20200521:175117.674 SNMP monitoring: YES 19060:20200521:175117.674 IPMI monitoring: YES 19060:20200521:175117.674 Web monitoring: YES 19060:20200521:175117.674 VMware monitoring: YES 19060:20200521:175117.674 SMTP authentication: YES 19060:20200521:175117.674 ODBC: YES 19060:20200521:175117.674 SSH support: YES 19060:20200521:175117.674 IPv6 support: YES 19060:20200521:175117.674 TLS support: YES 19060:20200521:175117.674 ****************************** 19060:20200521:175117.674 using configuration file: /etc/zabbix/zabbix_server.conf 19060:20200521:175117.684 current database version (mandatory/optional): 05000000/05000000 19060:20200521:175117.684 required mandatory version: 05000000 19060:20200521:175117.700 server #0 started [main process] 19068:20200521:175117.701 server #1 started [configuration syncer #1] 19069:20200521:175117.802 server #2 started [ipmi manager #1] 19070:20200521:175117.808 server #3 started [housekeeper #1] 19072:20200521:175117.808 server #5 started [http poller #1] 19071:20200521:175117.808 server #4 started [timer #1] 19074:20200521:175117.809 server #7 started [history syncer #1] 19076:20200521:175117.811 server #9 started [history syncer #3] 19079:20200521:175117.812 server #12 started [ipmi poller #1] 19075:20200521:175117.813 server #8 started [history syncer #2] 19073:20200521:175117.813 server #6 started [discoverer #1] 19077:20200521:175117.814 server #10 started [history syncer #4] 19078:20200521:175117.815 server #11 started [escalator #1] 19083:20200521:175117.819 server #16 started [ipmi poller #5] 19080:20200521:175117.819 server #13 started [ipmi poller #2] 19084:20200521:175117.820 server #17 started [proxy poller #1] 19082:20200521:175117.821 server #15 started [ipmi poller #4] 19085:20200521:175117.822 server #18 started [self-monitoring #1] 19086:20200521:175117.823 server #19 started [vmware collector #1] 19088:20200521:175117.823 server #21 started [vmware collector #3] 19081:20200521:175117.823 server #14 started [ipmi poller #3] 19087:20200521:175117.824 server #20 started [vmware collector #2] 19089:20200521:175117.824 server #22 started [vmware collector #4] 19090:20200521:175117.825 server #23 started [vmware collector #5] 19092:20200521:175117.825 server #25 started [poller #1] 19091:20200521:175117.828 server #24 started [task manager #1] 19094:20200521:175117.828 server #27 started [poller #3] 19093:20200521:175117.829 server #26 started [poller #2] 19096:20200521:175117.832 server #29 started [poller #5] 19097:20200521:175117.832 server #30 started [unreachable poller #1] 19100:20200521:175117.834 server #33 started [unreachable poller #4] 19102:20200521:175117.834 server #35 started [trapper #1] 19095:20200521:175117.836 server #28 started [poller #4] 19103:20200521:175117.837 server #36 started [trapper #2] 19099:20200521:175117.837 server #32 started [unreachable poller #3] 19098:20200521:175117.839 server #31 started [unreachable poller #2] 19101:20200521:175117.839 server #34 started [unreachable poller #5] 19105:20200521:175117.857 server #38 started [trapper #4] 19104:20200521:175117.859 server #37 started [trapper #3] 19106:20200521:175117.861 server #39 started [trapper #5] 19107:20200521:175117.865 server #40 started [icmp pinger #1] 19108:20200521:175117.869 server #41 started [icmp pinger #2] 19110:20200521:175117.869 server #43 started [icmp pinger #4] 19109:20200521:175117.873 server #42 started [icmp pinger #3] 19111:20200521:175117.876 server #44 started [icmp pinger #5] 19112:20200521:175117.877 server #45 started [icmp pinger #6] 19117:20200521:175117.879 server #50 started [alert manager #1] 19116:20200521:175117.880 server #49 started [icmp pinger #10] 19115:20200521:175117.884 server #48 started [icmp pinger #9] 19114:20200521:175117.887 server #47 started [icmp pinger #8] 19120:20200521:175117.889 server #53 started [alerter #3] 19118:20200521:175117.889 server #51 started [alerter #1] 19119:20200521:175117.890 server #52 started [alerter #2] 19121:20200521:175117.890 server #54 started [preprocessing manager #1] 19125:20200521:175117.890 server #58 started [lld manager #1] 19126:20200521:175117.891 server #59 started [lld worker #1] 19113:20200521:175117.891 server #46 started [icmp pinger #7] 19127:20200521:175117.892 server #60 started [lld worker #2] 19128:20200521:175117.892 server #61 started [alert syncer #1] 19122:20200521:175117.988 server #55 started [preprocessing worker #1] 19124:20200521:175117.989 server #57 started [preprocessing worker #3] 19123:20200521:175117.990 server #56 started [preprocessing worker #2] 19101:20200521:175122.858 enabling Zabbix agent checks on host "Zabbix server": host became available
Wie Ihr seht ist der erste Host schon im Monitoring - Der Server selbst (der Agent startet automatisch bei der Installation).
Bei einem Proxy kann es noch folgende Fehlermeldung geben:
failed to update local proxy configuration copy: Can't open JSON object or array ""failed"}"
Naja, wir müssen den Proxy auf unserem Zabbix-Server unter
Administration - Proxies
noch anlegen - und zwar bitte genau mit dem gleichen Namen wie in der zabbix_proxy.conf
unter Hostname=
angegeben - dann ist der Fehler weg.
Bei Erfolg sollte das dann so aussehen:
An den Sekunden unter 'Last seen (age)' sehen wir die letzte Kontaktaufnahme.
Wenn da überhaupt etwas steht hatten wir Erfolg!
Sprachdateien für Zabbix 6.0 installieren
Zabbix 6.0 braucht noch ein paar zusätzliche Sprachdateien, die installieren wir sonst ist das Webinterface voll mit Fehlermeldungen:
apt install -y language-pack-en locale-gen en_US.UTF-8 update-locale
Webinterface installieren (nur Server)
- Schon jetzt findet Ihr die Weboberfläche unter http://servername/zabbix (nach einem Neustart, aber mit falscher Zeitzone)
- Wenn es aber ein exklusiver Server für Zabbix ist möchte ich auf die Eingabe von /zabbix verzichten - das wird nachfolgend beschrieben.
- Ich installiere hier also so das man den Server später nur mit http://servername aufrufen kann
Konfigurationsdatei bearbeiten
nano /etc/apache2/sites-available/000-default.conf
und den gesamten Inhalt durch den folgenden ersetzen: (F9 löscht eine Zeile)
Bis Zabbix 5.2
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /usr/share/zabbix
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/usr/share/zabbix">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
<IfModule mod_php7.c>
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value max_input_vars 10000
php_value always_populate_raw_post_data -1
php_value date.timezone Europe/Berlin
</IfModule>
</Directory>
<Directory "/usr/share/zabbix/conf">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
<Directory "/usr/share/zabbix/app">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
<Directory "/usr/share/zabbix/include">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
<Directory "/usr/share/zabbix/local">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
</VirtualHost>
Das stammt aus der Datei /etc/apache2/conf-enabled/zabbix.conf
, ich habe unter anderem die Zeitzone angepasst.
Ab Zabbix 5.4 / 6.0
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /usr/share/zabbix
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/usr/share/zabbix">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
<IfModule mod_php7.c>
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value max_input_vars 10000
php_value always_populate_raw_post_data -1
php_value date.timezone Europe/Berlin
</IfModule>
</Directory>
<Directory "/usr/share/zabbix/conf">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
<Directory "/usr/share/zabbix/app">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
<Directory "/usr/share/zabbix/include">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
<Directory "/usr/share/zabbix/local">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
<Directory "/usr/share/zabbix/vendor">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
</VirtualHost>
Danach Webserver neu starten:
systemctl restart apache2.service
Nun auf die Weboberfläche gehen, die sollte unter http://IP-Adresse oder http://DNS-Name verfügbar sein.
Anmerkung: So ein Linux trägt sich nicht von allein in den DNS Server ein, ggf. müsst Ihr den da von Hand nachtragen.
Webinterface konfigurieren
Ihr ruft den Zabbix-Server im Browser auf:
Wenn Ihr den Inhalt der 000-default.conf
wie zuvor beschrieben geändert habt sollte hier alles grün sein:
Die Datenbankkonfiguration, in die letzten 3 Felder muss überall "zabbix" stehen:
In dem leeren Feld könnt Ihr den Namen des Servers angeben. Dieser wird oben rechts und auf den Web-Tabs angezeigt:
Noch eben die Zusammenfassung bestätigen:
Geschafft!
Benutzername: Admin Passwort: zabbix
Zeitserver setzen
Damit die Uhrzeit des Zabbix-Servers auch immer genau ist kann dieser die Uhrzeit mit dem Internet abgleichen.
Dazu benötigten wir das Paket ntp:
apt install ntp -y systemctl enable ntp.service
Wer die voreingestellten Zeitserver nutzen will muss nichts mehr tun.
Wer eigene Zeitserver für die Abfrage nutzen will muss die Konfigurationsdatei bearbeiten:
nano /etc/ntp.conf # Specify one or more NTP servers. server IP-oder-DNS iburst
Für jeden Server eine Zeile, die Poolserver solltet Ihr dann auskommentieren
und danach den Service neu starten:
systemctl restart ntp.service
Die Synchronisation lässt sich per Befehl kontrollieren:
ntpq -p
Ausgabe:
remote refid st t when poll reach delay offset jitter ============================================================================== beastie.deuza.n 195.83.222.27 2 u 24 64 1 0.501 9.552 0.000 ns1.kashra.com .PPS. 1 u 23 64 1 29.484 9.128 0.000 fr1.tomhek.net 163.172.41.83 3 u 22 64 1 0.685 12.810 0.000 ip139.ip-5-196- 10.21.137.1 2 u 21 64 1 0.581 8.332 0.000 golem.canonical 193.79.237.14 2 u 20 64 1 8.674 13.075 0.000
Empfang von SNMP-Traps einrichten
fehlende Pakete nachinstallieren
Wir Installieren ggf. die benötigten Pakete nach (sollten schon vorhanden sein):
apt install -y snmp snmpd snmptt snmp-mibs-downloader snmptrapd
snmptrapd aktivieren und konfigurieren
snmpd deaktivieren:
systemctl stop snmpd.service && systemctl disable snmpd.service
snmptrapd aktivieren:
systemctl enable snmptrapd.service
snmptrapd konfigurieren:
nano /etc/snmp/snmptrapd.conf
und fügen die folgenden Zeilen ans Ende:
traphandle default /usr/sbin/snmptt disableAuthorization yes
und starten den Dienst:
systemctl start snmptrapd.service
snmptt konfigurieren
Zunächst die .ini Datei zum bearbeiten öffnen:
nano /etc/snmp/snmptt.ini
und die folgende Zeilen ändern (Denkt dran: STRG + W ruft die Suche auf):
mode = standalone translate_log_trap_oid = 2 net_snmp_perl_enable = 1 date_time_format = %H:%M:%S %Y/%m/%d log_file = /var/log/snmptt/snmptt.log log_system_enable = 1 mibs_environment = ALL
Dann die .conf Datei - wir sichern zunächst die Original-Datei (auch wenn wir die wahrscheinlich nie wieder brauchen) durch umbenennen:
mv /etc/snmp/snmptt.conf /etc/snmp/snmptt.conf.orig
und erstellen eine neue, leere Datei:
nano /etc/snmp/snmptt.conf
mit folgendem Inhalt:
EVENT general .* "General event" Normal FORMAT ZBXTRAP $aA $ar severity:$s $Fn$+*
Das stammt ursprünglich alles nahezu 1:1 von https://lab4.org/wiki/Zabbix_Monitoring_SNMP_Traps_empfangen aus dem Jahr 2018
Ich habe es nur an Ubuntu 20.04. angepasst.
Jetzt sorgen wir dafür das der Dienst auch automatisch startet:
systemctl enable snmptt.service && systemctl restart snmptt.service
logrotate für /var/log/snmptt/snmptt.log anpassen
Gerade wenn viele Einträge in der Datei
/var/log/snmptt/snmptt.log
landen kann reicht das wöchentliche Bereinigen der Datei nicht aus.
Deshalb passen wir logrotate an um die Größe der Datei zu begrenzen.
Nun noch die bereits vorhanden Konfigurationsdatei bearbeiten:
nano /etc/logrotate.d/snmptt
und folgenden Inhalt einfügen / anpassen:
/var/log/snmptt/*.log /var/log/snmptt/*.debug { missingok notifempty daily rotate 4 size 1M compress sharedscripts postrotate /etc/init.d/snmptt reload > /dev/null endscript maxage 365 }
Zabbix Server oder Proxy konfigurieren
Die Konfigurationsdatei zum bearbeiten öffnen:
nano /etc/zabbix/zabbix_server.conf oder nano /etc/zabbix/zabbix_proxy.conf
und folgende Zeilen suchen und ändern bzw. Kommentarzeichen davor entfernen:
SNMPTrapperFile=/var/log/snmptt/snmptt.log StartSNMPTrapper=1
Danach müssen wir den Zabbix Server oder Proxy Dienst neu starten:
systemctl restart zabbix-server.service oder systemctl restart zabbix-proxy.service
Trapper-Datei anlegen
Neuere Zabbix Versionen (ab 3.0) meckern wenn es die Traps-Datei nicht gibt.
Die wird aber ggf. erst beim ersten eintreffenden Trap erstellt. Deshalb:
snmptrap -v 1 -c public localhost 1.3.6.1.4.1.2.3 "" 6 3 0000 s s "Zabbix-SNMP-Traps"
Damit senden wir einen Test-Trap an uns selbst.
Nun sollte es die Datei geben:
ls -l /var/log/snmptt/snmptt.log
Ausgabe:
-rw-r--r-- 1 root root 158 Sep 6 09:55 /var/log/snmptt/snmptt.log
Der Inhalt sollte wie folgt sein:
20:33:21 2020/05/21 IBM-6611-APPN-MIB::ibm.3.0.3 Normal "General event" 10.100.12.16 - ZBXTRAP 10.100.12.16 127.0.0.1 severity:Normal .ccitt:Zabbix-SNMP-Traps
Das müssen wir nur einmal machen, nach einem Reboot ist die Datei noch vorhanden
Agent konfigurieren (nur Proxy)
Wir wollen natürlich unseren 'Zabbix Proxy' gleich mit überwachen!
Wenn es ein Server ist, ist dieser gleich automatisch mit drin (ist der erste Host der schon in der Liste steht, ist sogar schon aktiv!)
Bearbeiten wir zunächst die Konfigurationsdatei:
nano /etc/zabbix/zabbix_agentd.conf
und ändert folgende Zeile:
Hostname=zabbixproxy.domain.local
Den Namen passt Ihr natürlich an eure Bedürfnisse an - wichtig ist nur das Ihr den Host auf dem Zabbix-Server unter exakt dem gleichen Namen anlegt!
Das Start-Skript haben wir vorhin schon aktiviert.
Am besten bootet Ihr euren Zabbix Proxy nun einmal durch und prüft hinterher ob die Prozesse für den Agenten und den Server laufen.
Windows-Freigabe für Agenten-Dateien einrichten
In meinen früheren Anleitungen wurde in diesem Abschnitt beschrieben wie man eine Samba-Freigabe erstellt in welcher der Zabbix-Agent abgelegt wird.
Das mache ich in der Praxis nicht mehr - neuere Windows-Versionen finden es unvorstellbar das man auf eine Freigabe ohne Passwort zugreifen möchte.
Man könnte den Zabbix-Server zwar dazu zum Mitglied in der Domäne machen ... aber inzwischen erstelle ich einfach eine passende Freigabe auf einen der Windows-Server, in der Regel einer der Domänencontroller.
Das Installationspaket hat nur ein paar MByte, da findet sich ein Plätzchen.
Zabbix 5.4 / 6.0 Reporting-Services installieren / aktivieren
Installiert sollte es schon sein, falls nicht:
apt install zabbix-web-service
Dann aktivieren und starten:
systemctl enable zabbix-web-service.service systemctl start zabbix-web-service.service
Der Dienst lauscht per Default auf Port 10053 was in der /etc/zabbix/zabbix_web_service.conf
konfiguriert wird.
Anfragen nimmt er nur von lokal entgegen (127.0.0.1 / ::1)
Nun den Dienst auch noch im Zabbix-Server bekannt machen:
nano /etc/zabbix/zabbix_server.conf
und die folgenden Zeilen ändern:
StartReportWriters=3 WebServiceURL=http://localhost:10053/report
Im Anschluß Zabbix einmal neu starten:
systemctl restart zabbix-server.service
Im Webinterface müsst ihr nun einmal hinterlegen wir die Reporting-Services das Zabbix-Frontend erreichen können:
http://localhost/
Jetzt muss noch Google-Chromium installiert werden, den braucht der Dienst zum erstellen. Da wir keine GUI auf dem Zabbix-Server haben laden wir den Browser einfach direkt als Paket herunter und installieren diesen:
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb dpkg -i google-chrome-stable_current_amd64.deb apt install -f dpkg --configure -a
Ja, das ist etwas umständlich, wir installieren Chrome, er meckert über fehlende Abhängigkeiten, die beheben wir dann und lassen das Konfigurieren noch mal laufen.
Datensicherung des Zabbix-Servers
Bevorzugt installiere ich Zabbix-Server als Virtuelle Maschinen / VM.
Die Backup-Software sichert am besten einfach die gesamte VM.
Eigentlich macht quasi jede Backup-Software hierzu während der Sicherung einen Snapshot, sichert die Festplattendaten und löst dann den Snapshot wieder auf.
Wer dabei sicher gehen will das die Datenbank in einem konsistenten Zustand gesichert wird kann folgendes tun:
Methode 1: Cold Backup - Zabbix und Datenbank anhalten
Bei dieser Methode passiert folgendes:
- Die Zabbix-Server und die Datenbank werden vor einem Snapshot angehalten
- Der Snapshot wird erstellt
- Die Datenbank und der Zabbix-Server werden wieder gestartet
Unter VMware funktioniert das mit 2 Skripten die wir wie folgt anlegen:
nano /usr/sbin/pre-freeze-script
mit folgendem Inhalt:
#!/bin/sh
echo "$(date) pre-freeze start" >> /tmp/snapshot.log
systemctl stop zabbix-server.service
systemctl stop mysql.service
echo "$(date) pre-freeze stop" >> /tmp/snapshot.log
und
nano /usr/sbin/post-thaw-script
#!/bin/sh
echo "$(date) post-thaw start" >> /tmp/snapshot.log
systemctl start mysql.service
systemctl start zabbix-server.service
echo "$(date) post-thaw stop" >> /tmp/snapshot.log
Jetzt müssen wir die beiden Skripte noch ausführbar machen und dem root zuordnen:
chmod 0700 /usr/sbin/pre-freeze-script chmod 0700 /usr/sbin/post-thaw-script chown root:root /usr/sbin/pre-freeze-script chown root:root /usr/sbin/post-thaw-script
Voraussetzung ist das die VMware-Tools installiert sind!
Dabei ist es egal ob es sich um die Original VMware-Tools oder um die Open-VM-Tools aus den Repositories handelt.
Nun können wir die Skripts testen indem wir einen Snapshot mit den folgenden Einstellungen erstellen:
Wenn wir uns die Logs ansehen sollte
- Ein Eintrag in die Datei /tmp/snapshot.log vorgenommen
- Der Zabbix-Server gestoppt
- Der MySQL-Server gestoppt
- Wieder ein Eintrag in die Datei /tmp/snapshot.log geschrieben
- Der MySQL-Server wieder gestartet
- Der Zabbix-Server wieder gestartet
werden.
Methode 2: Hot Backup - Datenbank einfrieren
Bei dieser Methode passiert folgendes:
- Die Datenbank wird vor einem Snapshot auf "READ ONLY" gesetzt - zuvor werden noch alle Daten geschrieben ("FLUSH TABLES")
- Der Snapshot wird erstellt
- Die Datenbank wird wieder für Schreibzugriffe freigegeben
Unter VMware funktioniert das mit 2 Skripten die wir wie folgt anlegen:
nano /usr/sbin/pre-freeze-script
mit folgendem Inhalt:
#!/bin/sh
# 2018-04-20 Bernhard Linz
# Original script by Pascal Di Marco, check https://www.veeam.com/wp-consistent-protection-mysql-mariadb.html for more information
# Log will be write to syslog and(!) to /tmp/snapshot.log
echo "$0 pre-freeze start" | logger
echo "-------------------------------------------------------------------------------------" >> /tmp/snapshot.log
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') pre-freeze start" >> /tmp/snapshot.log
# Set Username and Passwort for MySQL Access. Set mysql_password="" if no password needed
mysql_username="root"
mysql_password=""
timeout=300
# ************************************************************************************************
# No Changes behind this line!
# ************************************************************************************************
# Check if username + password is used
if [ -n "$mysql_password" ]; then
use_credentials="-u$mysql_username -p$mysql_password"
else
use_credentials=""
fi
# Name of the Lockfile
lock_file=/tmp/mysql_tables_read_lock
sleep_time=$((timeout+10))
rm -f $lock_file
echo "$0 executing FLUSH TABLES WITH READ LOCK" | logger
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') executing FLUSH TABLES WITH READ LOCK" >> /tmp/snapshot.log
# Start READ LOCK - Process will send to background (and will still run after script is completed. Lock will stop if process is stopped
# After READ ONLY mode is entered the lockfile will be created. Process will stop when getting stop signal from post-thaw-script or timeout reached
mysql $use_credentials -e "FLUSH TABLES WITH READ LOCK; system touch $lock_file; system nohup sleep $sleep_time; system echo lock released|logger; " > /dev/null &
# get the PID of the mysql process
mysql_pid=$!
echo "$0 child pid $mysql_pid" | logger
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') child pid $mysql_pid" >> /tmp/snapshot.log
# Waiting for the lockfile ...
c=0
while [ ! -f $lock_file ]
do
# check if mysql is running
if ! ps -p $mysql_pid 1>/dev/null ; then
echo "$0 mysql command has failed (bad credentials?)" | logger
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') mysql command has failed (bad credentials?)" >> /tmp/snapshot.log
exit 1
fi
sleep 1
c=$((c+1))
# check if the script run into timeout
if [ $c -gt $timeout ]; then
echo "$0 timed out waiting for lock" | logger
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') timed out waiting for lock" >> /tmp/snapshot.log
touch $lock_file
kill $mysql_pid
fi
done
# write PID into the lockfile
echo $mysql_pid > $lock_file
echo "$0 pre-freeze stop" | logger
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') pre-freeze stop" >> /tmp/snapshot.log
exit 0
und
nano /usr/sbin/post-thaw-script
#!/bin/sh
# 2018-04-20 Bernhard Linz
# Original script by Pascal Di Marco, check https://www.veeam.com/wp-consistent-protection-mysql-mariadb.html for more information
# Log will be write to syslog and(!) to /tmp/snapshot.log
echo "$0 post-thaw start" | logger
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') post-thaw start" >> /tmp/snapshot.log
lock_file=/tmp/mysql_tables_read_lock
# get PID from lockfile
mysql_pid=$(cat $lock_file)
echo "$0 sending sigterm to $mysql_pid" | logger
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') sending sigterm to $mysql_pid" >> /tmp/snapshot.log
# and send stop to process
pkill -9 -P $mysql_pid
rm -f $lock_file
echo "$0 post-thaw stop" | logger
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') post-thaw stop" >> /tmp/snapshot.log
exit 0
Jetzt müssen wir die beiden Skripte noch ausführbar machen und dem root zuordnen:
chmod 0700 /usr/sbin/pre-freeze-script chmod 0700 /usr/sbin/post-thaw-script chown root:root /usr/sbin/pre-freeze-script chown root:root /usr/sbin/post-thaw-script
Voraussetzung ist das die VMware-Tools installiert sind!
Dabei ist es egal ob es sich um die Original VMware-Tools oder um die Open-VM-Tools aus den Repositories handelt.
Nun können wir die Skripts testen indem wir einen Snapshot mit den folgenden Einstellungen erstellen:
Beispielausgabe aus der
cat /tmp/snapshot.log
------------------------------------------------------------------------------------- /usr/sbin/pre-freeze-script 2018-04-20 11:37:12 pre-freeze start /usr/sbin/pre-freeze-script 2018-04-20 11:37:12 executing FLUSH TABLES WITH READ LOCK /usr/sbin/pre-freeze-script 2018-04-20 11:37:12 child pid 10992 /usr/sbin/pre-freeze-script 2018-04-20 11:37:13 pre-freeze stop /usr/sbin/post-thaw-script 2018-04-20 11:37:16 post-thaw start /usr/sbin/post-thaw-script 2018-04-20 11:37:16 sending sigterm to 10992 /usr/sbin/post-thaw-script 2018-04-20 11:37:16 post-thaw stop
Falls es mit dem Passwort mal hakt so müsste das auch dort stehen:
/usr/sbin/pre-freeze-script 2018-06-13 12:01:04 mysql command has failed (bad credentials?)
Mehr Details stehen ggf. im syslog'
tail -f -n 500 /var/log/syslog
Zabbix selbst nimmt den Vorgang relativ locker und meldet maximal einige slow query bei inserts.
In den meisten Umgebungen geht das so schnell das nicht einmal diese kommen (4 bis 5 Sekunden).
Festplatte im laufenden Betrieb vergrößern
Ihr habt den Zabbix-Server nach dieser Anleitung hier als VM installiert (und ohne LVM) und nun geht euch der Platz aus?
Kein Problem, Ihr könnt die Festplatte im laufenden Betrieb vergößern!
Schritt 1: Platz an die Festplatte anhängen
- Stellt sicher das auf der VM zur zeit kein Snapshot aktiv ist!
- Vergrößert die Festplatten um den benötigten Speicherplatz
in dem Beispiel hier wird der Platz von 50 auf 80GB vergrößert.
Schritt 2: Betriebssystem die neue Größe erkennen lassen
Die einfachste Methode ist den Server neu zu starten.
Wer will kann es aber auch im laufenden Betrieb durchführen, und das geht so:
apt install scsitools rescan-scsi-bus --forcerescan
Da kommen dann reichlich Meldungen.
Im Anschluß zur Kontrolle ein
fdisk -l
Die Ausgabe sollte ähnlich wie diese sein:
Festplatte /dev/loop0: 54,98 MiB, 57626624 Bytes, 112552 Sektoren Einheiten: Sektoren von 1 * 512 = 512 Bytes Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes Festplatte /dev/loop1: 71,28 MiB, 74735616 Bytes, 145968 Sektoren Einheiten: Sektoren von 1 * 512 = 512 Bytes Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes Festplatte /dev/loop2: 29,9 MiB, 31334400 Bytes, 61200 Sektoren Einheiten: Sektoren von 1 * 512 = 512 Bytes Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes GPT-PMBR-Größenunterschied (104857599 != 167772159) wird durch »write« korrigiert. Die Sicherungs-GPT-Tabelle befindet sich nicht am Ende des Gerätes. Das Problem wird durch »write« korrigiert. Festplatte /dev/sda: 80 GiB, 85899345920 Bytes, 167772160 Sektoren Festplattenmodell: Virtual disk Einheiten: Sektoren von 1 * 512 = 512 Bytes Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes Festplattenbezeichnungstyp: gpt Festplattenbezeichner: D205F6E7-853F-4CCC-83BE-67262A1827C8
Er meckert also schon das die Platte ungenutzten Platz hat (weshalb die GPT nicht mehr am Ende steht), zudem können wir in der Zeile
Festplatte /dev/sda: 80 GiB, 85899345920 Bytes, 167772160 Sektoren
sehen das es nun 80GB sind und nicht mehr 50GB
Schritt 3: Partition vergrößern
Das /
Verzeichnis, auch root-Verzeichnis genannt befindet sich auf dem Gerät
/dev/sda2
wenn Ihr nach dieser Anleitung installiert hattet. Kontrollieren könnte Ihr das z.B. mit
df -h
und dann schauen was links vom Verzeichnis /
steht:
Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf
udev 448M 0 448M 0% /dev
tmpfs 99M 1,1M 98M 2% /run
/dev/sda2 49G 5,5G 40G 8% /
Die nächsten Befehle gehen von /dev/sda2, wenn der Pfad anderes ist müsst Ihr diesen anpassen!
growpart /dev/sda 2 resize2fs /dev/sda2
Ja, beim ersten Befehl ist da ein Leerzeichen zwischen dem sda und der 2, beim zweiten Befehl nicht.
Schritt 4: Das war schon alles!
Ihr könnt mit
df -h
es einmal kontrollieren - aber das war schon alles:
Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf
udev 448M 0 448M 0% /dev
tmpfs 99M 1,1M 98M 2% /run
/dev/sda2 79G 5,5G 70G 8% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/loop0 55M 55M 0 100% /snap/core18/1880
/dev/loop1 72M 72M 0 100% /snap/lxd/16099
/dev/loop2 30M 30M 0 100% /snap/snapd/8542
tmpfs 99M 0 99M 0% /run/user/0
/dev/loop3 32M 32M 0 100% /snap/snapd/10707
/dev/loop4 56M 56M 0 100% /snap/core18/1944
/dev/loop5 70M 70M 0 100% /snap/lxd/19032
Upgrade auf 5.0.0
Wenn Ihr von einer Vor-Version auf die aktuelle Version wechseln wollt so ist das recht einfach,
Lest hierzu auch die offizielle Dokumentation / Anleitung von Zabbix:
https://www.zabbix.com/documentation/current/manual/installation/upgrade
Backup
Macht ein Backup eures Zabbix-Servers oder wie ich es bevorzuge: einen Snapshot.
Falls euer Zabbix-Server eine VM ist so fahrt diesen runter, macht einen Snapshot und fahrt ihn wieder hoch.
Benachrichtigungen deaktivieren
Falls ihr euch Emails bei Problemen senden lasst - deaktiviert das jetzt besser.
Die Probleme werden weiter auf dem Webinterface angezeigt.
Vorher alles andere Updaten
apt update && apt upgrade -y && apt autoremove -y
und danach am besten einen Reboot durchführen
Konfigurationsdateien sichern
Wir machen eine Kopie in das Home-Verzeichnis des root:
cp /etc/zabbix/zabbix_server.conf /root/ cp /etc/zabbix/zabbix_agentd.conf /root/
Zabbix stoppen
systemctl stop zabbix-server.service systemctl stop zabbix-agent.service
Repository ändern
Wir entfernen das alte Repository:
rm -Rf /etc/apt/sources.list.d/zabbix.list
und fügen das Repository für die 5.0er Version hinzu:
wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+focal_all.deb dpkg -i zabbix-release_5.0-1+focal_all.deb apt update rm zabbix-release_*
Zabbix-Server anhalten
systemctl stop zabbix-server.service zabbix-agent.service
Upgrade einspielen
apt upgrade -y
einspielen. Aber in Zabbix 5.0 hat sich was an den Paketen geändert, genauer gesagt ist es ein Paket mehr. Ohne das Paket funktioniert Zabbix zwar, aber das Webinterface nicht. Deshlab über den apt install
Weg, der kann nämlich auch Updates einspielen, dann aber halt nur für die angegebenen Pakete
Nun führt Ihr folgendes aus:
apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent zabbix-get zabbix-sender zabbix-java-gateway
und schon installiert er die neue Version über die alte.
Es wird eine Abfrage zu den beiden Konfigurationsdateien kommen - nämlich ob Ihr diese Überschreiben wollt (J oder Y) oder die vorhandene beibehalten (N).
Es wird auch funktionieren wenn Ihr die vorhandene beibehaltet. Es fehlen dann halt die Einträge für neuere Funktionen - diesen werden dann mit einem Default-Wert gesetzt was aber auch völlig ok ist.
Falls Ihr die Dateien überschreibt müsst ihr diese dann mit den beiden zuvor gesicherten vergleichen und die neuen anpassen.
Ich empfehle eine 2. PuTTY Sitzung zu öffnen, dann könnt Ihr beide Dateien nebeneinander betrachten.
Vergleicht jeden Eintrag - hat sich zum Beispiel der Pfad zu den Alertscripts und Externalscripts geändert (den Ihr einfach wieder auf den alten Wert anpassen könnt).
Falls Ihr die Dateien nicht überschrieben habt müsst ihr nichts weiter machen.
Database history tables upgraded: No
Wenn eure Zabbix-Installation schon älter ist - im Sinne von das Ihr schon viele Upgrades von vorherigen Versionen mitgemacht habt - dann wird es nach dem Start im Dashboard von Zabbix im Bereich System information sehr wahrscheinlich einen Hinweis geben:
Database history tables upgraded: No
Der Grund ist das die History-Daten nun ein anderes Zahlenformat mit höherer Genauigkeit haben - das müssen wir in der Datenbank umstellen:
mysql -uzabbix -pzabbix -e "use zabbix; ALTER TABLE trends MODIFY value_min DOUBLE PRECISION DEFAULT '0.0000' NOT NULL,MODIFY value_avg DOUBLE PRECISION DEFAULT '0.0000' NOT NULL,MODIFY value_max DOUBLE PRECISION DEFAULT '0.0000' NOT NULL;ALTER TABLE history MODIFY value DOUBLE PRECISION DEFAULT '0.0000' NOT NULL"
Dieser Einzeiler erwartet das der Benutzer zabbix (-uzabbix
) mit dem Passwort zabbix (-pzabbix
) die Datenbank zabbix (use zabbix;
) nutzt.
Der Zabbix-Server sollte dazu unbedingt noch angehalten sein!
Das kann je nach Datenbankgröße sehr lange dauern!!!
Der erste Start
Öffnet eine 2. puTTY-Sitzung in welcher Ihr folgenden Befehl ausführt:
tail -n 100 -f /var/log/zabbix/zabbix_server.log
Ihr seht dann in Echtzeit das Log des Zabbix-Servers - da sollte was vom Stop des Servers stehen und nichts weiter passieren - der Dienst ist ja angehalten.
In eurer 1. puTTY Sitzung startet Ihr nun wieder den Zabbix-Agenten und -Server:
systemctl start zabbix-agent.service systemctl start zabbix-server.service
Im Log könnt Ihr sehen wie er startet und ein Datenbankupgrade durchführt. Geduld. Es dauert eben so lange wie es dauern muss.
Achtet auf Warnmeldungen - manchmal deaktiviert er Actions zu Triggern mit dem Hinweis das Ihr diese einmal manuell überprüfen sollt.
Nach einer Weile (30 Sekunden bis 30 Stunden) sollte das Upgrade abgeschlossen sein und er seine normalen Worker starten.
Sollte es keinerlei Log-Meldungen geben und der Dienst beendet sich einfach wieder so gibt es in der Regel einen Fehler in der Konfigurationsdatei.
Den genauen Fehler findet Ihr mit
journalctl -xe
Da steht dann über welchen Parameter er gestolpert ist.
Geduld
Der Server war eine Weile aus - lasst Ihn sich erst einmal beruhigen. gerade wenn Ihr Zabbix-Proxys haben prasseln nun jede menge Daten auf ihn ein.
Ihr könnt natürlich alles ansehen, mit dem Aktivieren der Benachrichtigungen solltet Ihr aber etwa 30 Minuten bis 1 Stunde warten - bis die Probleme durch das Upgrade wieder verschwunden sind und der Server wieder auf normaler last arbeitet.
Snapshot wieder löschen
Läuft alles wie gewünscht (was es tut wenn das Datenbankupgrade fehlerfrei durchgelaufenen ist) löscht den Snapshot wieder.
Benachrichtigungen wieder aktivieren
Hat sich alles wieder beruhigt, der Server lief eine Weile und die Problems List hat sich wieder normalisiert?
Dann könnt Ihr die Benachrichtigungen wieder scharf schalten.
Templates
Jetzt seit Ihr zwar auf der 5.0.0 Version, habt aber noch eure alten Templates.
Um die neuen Templates zu bekommen würde ich folgendes tun:
- Alle eigenen Templates haben bei mir sowieso immer ein eigenes kürzel im Namen vorweg, z.B. znil Template ...
- Alle Templates ohne so ein Präfix benenne ich um indem ich ein Präfix davor setze, z.B. old_ oder 4.0_
- Wenn wir die neuen importieren werden nämlich die alten Überschrieben / ergänzt falls es schon ein Template mit gleichem Namen gibt. Dadurch das wir alle umbenennen sollte das nicht vorkommen. Alternativ könnt Ihr auch nicht genutzte einfach löschen.
- Unter https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates könnt Ihr nun die neuen Templates herunterladen und dann importieren.
Ich habe die neuen Templates mal aus einer nackten 5.0.0 Installation in 2 Teilen exportiert (wegen der Abhängigkeiten):
Zabbix_5.0.0_Templates_Part_1.xml Zabbix_5.0.0_Templates_Part_2.xml
Der Import ist - Stand 22.05.2020 - noch ungetestet