Aktionen

Zabbix Server + Agent unter Ubuntu 22.04 LTS installieren: Unterschied zwischen den Versionen

Aus znilwiki

(47 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:
<u>'''Changelog:'''</u><br>
<u>'''Changelog:'''</u><br>
* 26.04.2022: Seite erstellt, jedoch noch nicht angepasst
* 26.04.2022: Seite erstellt, jedoch noch nicht angepasst
{{Vorlage:AchtungBaustelle}}
* 21.07.2022: Erste Version, SNMP-Traps Empfang funktioniert noch nicht
{{Vorlage:AchtungBaustelle}}
* 08.08.2022: Fix für SNMP-Trap Probleme gefunden und in Anleitung eingebaut
{{Vorlage:AchtungBaustelle}}
* 12.08.2022: Alles Mist mit '''''snmptt''''' => rausgeworfen und durch '''''zabbix_trap_receiver.pl''''' ersetzt
----
<big>'''Ubuntu 22.04 LTS ist zwar schon erschienen, es gibt aber von Zabbix noch kein Repository dafür - und somit noch keine offizielle Unterstützung. Sobald das Repo erscheint werde ich diesen Artikel anpassen und vervollständigen.</big><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
----
----
==Installation Ubuntu Server 22.04.x LTS (Long Term Support)==
==Installation Ubuntu Server 22.04.x LTS (Long Term Support)==
Zeile 13: Zeile 10:
----
----
===Einstellungen für die VM===
===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:<br>
Falls Ihr den Zabbix Server oder Proxy als virtuelle Maschine (VM) installiert so könnt Ihr Beispielsweise folgenden Einstellungen nehmen. Diese berücksichtigen auch die Mindestanforderungen von Ubuntu 22.04<br>
* Konfiguration: '''Typisch'''
* Konfiguration: '''Typisch'''
* Name und Speicherort: '''Nach eigener Wahl'''
* Name und Speicherort: '''Nach eigener Wahl'''
Zeile 30: Zeile 27:
<u>Reiter Hardware:</u>
<u>Reiter Hardware:</u>
* Arbeitsspeicher:
* Arbeitsspeicher:
** Server '''2GB''' oder mehr
** Server '''4GB''' oder mehr
** Proxy '''1GB''' oder mehr
** Proxy '''2GB''' oder mehr
* CPUs:
* CPUs:
** Anzahl der virtuellen Sockets
** Anzahl der virtuellen Sockets
*** Server: '''2 oder mehr'''
*** Server: '''4 oder mehr'''
*** Proxy: '''1'''
*** Proxy: '''2 oder mehr'''
** Anzahl der Cores pro Socket: '''1''' (Immer Anzahl der Sockets erhöhen)
** Anzahl der Cores pro Socket: '''1''' (Immer Anzahl der Sockets erhöhen)
<u>Reiter Optionen</u>
<u>Reiter Optionen</u>
Zeile 205: Zeile 202:
===Automatische Updates deaktivieren===
===Automatische Updates deaktivieren===
Ich persönlich möchte nicht das der Zabbix-Server automatisch Updates einspielt.<br>
Ich persönlich möchte nicht das der Zabbix-Server automatisch Updates einspielt.<br>
Die automatischen Updates aktualisieren - soweit ich das beobachten konnte - nur den Kernel. Aber auch das möchte ich nicht sondern geplant durchführen.<br>
Die automatischen Updates aktualisieren - soweit ich das beobachten konnte - nur den Kernel. Aber auch das möchte ich nicht. Ich möchte das geplant durchführen.<br>
Die automatischen Updates verhindern wir mit<br>
Die automatischen Updates verhindern wir mit<br>
  apt remove -y unattended-upgrades
  apt remove -y unattended-upgrades
Zeile 213: Zeile 210:
Die nachfolgende Zeile installiert alles notwendige um alle Features eines Zabbix-Server zu nutzen. Als Datenbank wird MariaDB verwendet.<br>
Die nachfolgende Zeile installiert alles notwendige um alle Features eines Zabbix-Server zu nutzen. Als Datenbank wird MariaDB verwendet.<br>
Wer lieber MySQL verwenden will muss in der Zeile {{Key|mariadb-server}} durch {{Key|mysql-server}} ersetzen:<br>
Wer lieber MySQL verwenden will muss in der Zeile {{Key|mariadb-server}} durch {{Key|mysql-server}} ersetzen:<br>
  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 install dnsutils htop make gcc libc6-dev libmysqlclient-dev libcurl4-openssl-dev libssh2-1-dev libsnmp-dev libiksemel-dev mariadb-server libopenipmi-dev fping php8.1-gd snmp libsnmp-base openjdk-11-jdk unixodbc unixodbc-dev libxml2 libxml2-dev snmp-mibs-downloader snmpd snmptrapd snmptt sblim-wbemcli php8.1-ldap traceroute ipmitool libldap2-dev php8.1-bcmath php8.1-mbstring php8.1-xml fonts-dejavu-core libnet-snmp-perl libnet-ip-perl libnet-netmask-perl libnet-dns-perl libxml-writer-perl -y
{{Tipp| Zum kopieren der oberen Zeile mit der Maus vor das <code>apt</code> gehen und 3x Klicken. Ggf. mehrmals versuchen - bis die ganze Zeile markiert ist. Diese kann dann so in z.B. PuTTY eingefügt werden}}<br>
{{Tipp| Zum kopieren der oberen Zeile mit der Maus vor das <code>apt</code> gehen und 3x Klicken. Ggf. mehrmals versuchen - bis die ganze Zeile markiert ist. Diese kann dann so in z.B. PuTTY eingefügt werden}}<br>
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.<br>
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.<br>
Zeile 222: Zeile 219:
==Zabbix Server installieren==
==Zabbix Server installieren==
===Zabbix Repository hinzufügen===
===Zabbix Repository hinzufügen===
<div style="background:lightblue"><u>'''Für die Version 4.0.x LTS (Support bis 31.10.2023)'''</u><br>
<div style="background:lightgreen"><u>'''Für die Version 6.0.x LTS (Support bis 28.02.2027)'''</u><br>
  <nowiki>wget https://repo.zabbix.com/zabbix/4.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.0-3+focal_all.deb</nowiki>
  <nowiki>wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-3+ubuntu22.04_all.deb</nowiki>
  dpkg -i zabbix-release_4.0-3+focal_all.deb
  dpkg -i zabbix-release_6.0-3+ubuntu22.04_all.deb
apt update
rm zabbix-release_*
</div>
<div style="background:yellow"><u>'''Für die Version 6.2.x (Support bis 31.01.2023)'''</u><br>
<nowiki>wget https://repo.zabbix.com/zabbix/6.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.2-1+ubuntu22.04_all.deb</nowiki>
dpkg -i zabbix-release_6.2-1+ubuntu22.04_all.deb
  apt update
  apt update
  rm zabbix-release_*
  rm zabbix-release_*
</div>
</div>
<div style="background:yellow"><u>'''Für die Version 4.4.x (Support abgelaufen am 31.03.2020)'''</u><br>
<!--
  <nowiki>wget https://repo.zabbix.com/zabbix/4.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.4-1+focal_all.deb</nowiki>
<div style="background:lightblue"><u>'''Für die Version 4.0.x LTS (Support bis 31.10.2023)'''</u><br>
  dpkg -i zabbix-release_4.4-1+focal_all.deb
  <nowiki>wget https://repo.zabbix.com/zabbix/6.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.2-1+ubuntu22.04_all.deb</nowiki>
  dpkg -i zabbix-release_6.2-1+ubuntu22.04_all.deb
  apt update
  apt update
  rm zabbix-release_*
  rm zabbix-release_*
Zeile 252: Zeile 256:
  rm zabbix-release_*
  rm zabbix-release_*
</div>
</div>
<div style="background:lightgreen"><u>'''Für die Version 6.0.x LTS (Support bis 28.02.2027)'''</u><br>
-->
<nowiki>wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-1+ubuntu20.04_all.deb</nowiki>
dpkg -i zabbix-release_6.0-1+ubuntu20.04_all.deb
apt update
rm zabbix-release_*
</div>
 
----
----


Zeile 268: Zeile 266:
----
----
====[[Datei:Button_Zabbix_SERVER.png]] Als Server====
====[[Datei:Button_Zabbix_SERVER.png]] Als Server====
<u>'''Bis Version 5.2'''</u>
<u>'''Ab Version 6.0'''</u>
apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent zabbix-get zabbix-sender zabbix-java-gateway
<u>'''Ab Version 5.4 / 6.0'''</u>
  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
  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
<br>
<br>
----
----


====[[Datei:Button_Zabbix_PROXY.png]] Als Proxy====
====[[Datei:Button_Zabbix_PROXY.png]] Als Proxy====
<u>'''Bis Version 5.2'''</u>
<u>'''Ab Version 6.0'''</u>
apt install -y zabbix-proxy-mysql zabbix-agent zabbix-get zabbix-sender zabbix-java-gateway
<u>'''Ab Version 5.4'''</u>
  apt install -y zabbix-proxy-mysql zabbix-sql-scripts zabbix-agent zabbix-get zabbix-sender zabbix-java-gateway
  apt install -y zabbix-proxy-mysql zabbix-sql-scripts zabbix-agent zabbix-get zabbix-sender zabbix-java-gateway
<br>
<br>
Zeile 310: Zeile 305:
und unterhalb von <br>
und unterhalb von <br>
  [mysqld]
  [mysqld]
Diese Zeilen einfügen:
Diese Zeilen einfügen ('''und die Kommentare lesen / beachten!!!)''':
  # Größe der Logdatei statt 10MB
  # Größe der Logdatei statt 10MB
  innodb_log_file_size = 512M
  innodb_log_file_size = 512M
Zeile 319: Zeile 314:
  # Wieviel Hauptspeicher soll zum Puffern verwendet werden? Nehmt die Hälfte des vorhandenen Speichers (bei 4GB RAM also 2G, bei 1G also 512M)
  # 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
  innodb_buffer_pool_size = 1G
# Eigenes Fehlerprotokoll wieder aktivieren
log_error = /var/log/mysql/error.log
   
   
mit {{key|STRG}} + {{key|x}} den nano verlassen und speichern bestätigen {{key|j}} + {{key|Enter}})<br>
mit {{key|STRG}} + {{key|x}} den nano verlassen und speichern bestätigen {{key|j}} + {{key|Enter}})<br>
Zeile 382: Zeile 380:
  mysql -u root -e "create user 'zabbix'@'localhost' identified by 'zabbix'"
  mysql -u root -e "create user 'zabbix'@'localhost' identified by 'zabbix'"
  mysql -u root -e "grant all privileges on zabbix.* to 'zabbix'@'localhost'"
  mysql -u root -e "grant all privileges on zabbix.* to 'zabbix'@'localhost'"
mysql -u root -e "SET GLOBAL log_bin_trust_function_creators = 1"
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.
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.
{{Hinweis| Hinschauen! Hier folgen 2 unterschiedliche Wege für Server oder Proxy!}}<br>
{{Hinweis| Hinschauen! Hier folgen 2 unterschiedliche Wege für Server oder Proxy!}}<br>
[[Datei:Button_Zabbix_SERVER.png]]<big>''' Bei einem Server:'''</big>
[[Datei:Button_Zabbix_SERVER.png]]<big>''' Bei einem Server:'''</big>
<br>
<u>'''Bis Version 5.2'''</u><br>
zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix -pzabbix zabbix
<br>
<u>'''Ab Version 5.4'''</u><br>
zcat /usr/share/doc/zabbix-sql-scripts/mysql/create.sql.gz | mysql -uzabbix -pzabbix zabbix
<br>
<br>
<u>'''Ab Version 6.0'''</u><br>
<u>'''Ab Version 6.0'''</u><br>
Zeile 399: Zeile 392:
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!<br>
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!<br>
<br>
<br>
<u>'''Bis Version 5.2'''</u><br>
zcat /usr/share/doc/zabbix-proxy-mysql/schema.sql.gz | mysql -uzabbix -pzabbix zabbix<br>
<br>
<u>'''Ab Version 5.4'''</u><br>
zcat /usr/share/doc/zabbix-proxy-mysql/schema.sql.gz | mysql -uzabbix -pzabbix zabbix<br>
<u>'''Ab Version 6.0'''</u><br>
<u>'''Ab Version 6.0'''</u><br>
  zcat /usr/share/doc/zabbix-proxy-mysql/schema.sql.gz | mysql -uzabbix -pzabbix zabbix<br>
  cat /usr/share/doc/zabbix-sql-scripts/mysql/proxy.sql | mysql -uzabbix -pzabbix zabbix<br>
{{Hinweis| Beim Import des Datenbankschemas von Zabbix Version 4.0 LTS unter MariaDB kann es zu einem Fehler kommen}}
Genaueres siehe [https://www.zabbix.com/forum/zabbix-troubleshooting-and-problems/415218-error-1118-during-copy-of-host-import-initial-schema-and-data hier]<br>
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.
----
----


Zeile 445: Zeile 430:
<source>
<source>
# This is a configuration file for Zabbix server daemon
# This is a configuration file for Zabbix server daemon
# To get more information about Zabbix, visit http://www.zabbix.com
</source>
 
</div>
############ GENERAL PARAMETERS #################
<br>
 
----
### Option: ListenPort
[[Datei:Button_Zabbix_PROXY.png]] <big>'''Bei einem Proxy:'''</big>
#      Listen port for trapper.
nano /etc/zabbix/zabbix_proxy.conf
#
* folgende Zeilen finden und auf diese Werte ändern, ggf. den '''#''' davor entfernen, {{key|STRG}} + {{key|W}} ist suchen!
# Mandatory: no
ProxyMode=0
# Range: 1024-32767
# Default:
#IP oder DNS Name des Zabbix-Servers an den gemeldet werden soll. Falls der Port nicht 10051 ist dann mit : dahinter setzen
# ListenPort=10051
Server=123.123.123.123   
 
### Option: SourceIP
# Hostname -> unter diesem Namen müssen wir den Proxy auch auf dem Hauptserver anlegen!
#      Source IP address for outgoing connections.
Hostname=zabbixproxy
#
   
# Mandatory: no
DBHost=localhost
# Default:
DBName=zabbix
# SourceIP=
DBUser=zabbix
 
DBPassword=zabbix
### Option: LogType
#      Specifies where log messages are written to:
EnableRemoteCommands=1
#              system - syslog
#              file    - file specified with LogFile parameter
Timeout=30
#              console - standard output
#
StartVMwareCollectors=5
# Mandatory: no
# Nachfolgend: Richtig, nichts darf hinter dem = stehen!
# Default:
Fping6Location=
# LogType=file
 
<br>
### Option: LogFile
----
#      Log file name for LogType 'file' parameter.
{{Hinweis|Unter Ubuntu 22.04 ist<code>fping</code> und <code>fping6</code> 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.<br>
#
Die Fehlermeldung die er bringt ist<br>
# Mandatory: no
Cannot detect the minimum interval of /usr/bin/fping6
# Default:
}}<br>
# 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
===Automatischen Start beim Booten einrichten===
 
<!--
### Option: DebugLevel
Dazu müssen wir die Start/Stop Scripte hinterlegen. Ubuntu 16.04.x nutzt [https://wiki.ubuntuusers.de/systemd/systemd] für das Starten und Stoppen von Diensten.<br>
#      Specifies debug level:
Wenn wir schon auf 16.04. umsteigen dann richtig! Also legen wir passende Info-Dateien für Zabbix an.<br> Nebenbei lösen wir damit das Problem der Start-Reihenfolge, wir können angeben das der Zabbix-Server erst gestartet werden darf wenn MySQL schon läuft - und umgekehrt, erst Zabbix Server beenden, dann MySQL<br>
#      0 - basic information about starting and stopping of Zabbix processes
[[Datei:Button_Zabbix_SERVER.png]] <big>'''Auf einem Server'''</big>
#      1 - critical information
<br>
#      2 - error information
nano /lib/systemd/system/zabbix-server.service
#      3 - warnings
<u>Inhalt:</u><br>
#      4 - for debugging (produces lots of information)
[Unit]
#      5 - extended debugging (produces even more information)
Description=Zabbix Server
#
After=syslog.target network.target mysql.service
# Mandatory: no
# Range: 0-5
[Service]
# Default:
Type=oneshot
# DebugLevel=3
ExecStart=/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
 
ExecReload=/sbin/zabbix_server -R config_cache_reload
### Option: PidFile
RemainAfterExit=yes
#      Name of PID file.
PIDFile=/tmp/zabbix_server.pid
#
# Mandatory: no
[Install]
# Default:
WantedBy=multi-user.target
# PidFile=/tmp/zabbix_server.pid
Danach müssen wir den Service noch aktivieren:<br>
 
systemctl enable zabbix-server.service
PidFile=/var/run/zabbix/zabbix_server.pid
<br>
 
<br>
### Option: DBHost
----
#      Database host name.
[[Datei:Button_Zabbix_PROXY.png]] <big>'''Auf einem Proxy'''</big>
#      If set to localhost, socket is used for MySQL.
<br>
#      If set to empty string, socket is used for PostgreSQL.
nano /lib/systemd/system/zabbix-proxy.service
#
<u>Inhalt:</u><br>
# Mandatory: no
[Unit]
# Default:
Description=Zabbix Proxy
# DBHost=localhost
After=syslog.target network.target mysql.service
 
### Option: DBName
[Service]
#      Database name.
Type=oneshot
#      For SQLite3 path to database file must be provided. DBUser and DBPassword are ignored.
ExecStart=/sbin/zabbix_proxy -c /etc/zabbix/zabbix_proxy.conf
#
ExecReload=/sbin/zabbix_proxy -R config_cache_reload
# Mandatory: yes
RemainAfterExit=yes
# Default:
PIDFile=/tmp/zabbix_proxy.pid
# DBName=
 
[Install]
DBName=zabbix
WantedBy=multi-user.target
 
Danach müssen wir den Service noch aktivieren:<br>
### Option: DBSchema
systemctl enable zabbix-proxy.service
#      Schema name. Used for IBM DB2 and PostgreSQL.
<br>
#
<br>
# Mandatory: no
----
# Default:
[[Datei:Button_Zabbix_AGENT.png]] <big>'''und noch der Agent'''</big>
# DBSchema=
<br>
 
nano /lib/systemd/system/zabbix-agent.service
### Option: DBUser
<u>Inhalt:</u><br>
#      Database user. Ignored for SQLite.
[Unit]
#
Description=Zabbix Agent
# Mandatory: no
After=syslog.target network.target
# Default:
# DBUser=
[Service]
 
Type=oneshot
DBUser=zabbix
ExecStart=/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
 
RemainAfterExit=yes
### Option: DBPassword
PIDFile=/tmp/zabbix/zabbix_agentd.pid
#      Database password. Ignored for SQLite.
#      Comment this line if no password is used.
[Install]
#
WantedBy=multi-user.target
# Mandatory: no
Danach müssen wir den Service noch aktivieren:<br>
# Default:
systemctl enable zabbix-server.service
# DBPassword=
<br>
DBPassword=zabbix
<br>
 
----
### Option: DBSocket
-->
#      Path to MySQL socket.
Die notwendigen Skripte werden bei der Installation aus den Repository direkt mit installiert, wir müssen diese nur noch aktivieren:<br>
#
[[Datei:Button_Zabbix_SERVER.png]] <big>'''Auf einem Server'''</big>
# Mandatory: no
<br>
# Default:
systemctl enable zabbix-server.service
# DBSocket=/tmp/mysql.sock
<br>
 
<br>
### Option: DBPort
----
#      Database port when not using local socket. Ignored for SQLite.
[[Datei:Button_Zabbix_PROXY.png]] <big>'''Auf einem Proxy'''</big>
#
<br>
# Mandatory: no
systemctl enable zabbix-proxy.service
# Range: 1024-65535
<br>
# Default (for MySQL):
<br>
# DBPort=3306
----
 
[[Datei:Button_Zabbix_AGENT.png]] <big>'''und noch der Agent'''</big>
############ ADVANCED PARAMETERS ################
<br>
 
systemctl enable zabbix-agent.service
### Option: StartPollers
<br>
#      Number of pre-forked instances of pollers.
<br>
#
----
# 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
===Start von Zabbix testen===
#       IP address (or hostname) of Zabbix Java gateway.
Nun müsste man den Zabbix Server wie andere Dienste auch über {{Key|systemctl}} starten können
#       Only required if Java pollers are started.
systemctl start zabbix-server
#
Wenn alles in Ordnung ist gibt es keine Rückmeldung durch '''''systemctl''''', also fragen wir nach dem Status:<br>
# Mandatory: no
systemctl status zabbix-server
# Default:
<u>Ausgabe:</u><br>
# JavaGateway=
● zabbix-server.service - Zabbix Server
 
       Loaded: loaded (/lib/systemd/system/zabbix-server.service; enabled; vendor preset: enabled)
### Option: JavaGatewayPort
       Active: active (running) since Thu 2020-05-21 17:47:54 CEST; 5s ago
#       Port that Zabbix Java gateway listens on.
    Process: 18816 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)
#
    Main PID: 18830 (zabbix_server)
# Mandatory: no
      Tasks: 62 (limit: 4621)
# Range: 1024-32767
       Memory: 139.1M
# Default:
      CGroup: /system.slice/zabbix-server.service
# JavaGatewayPort=10052
              ├─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]
### Option: StartJavaPollers
              ├─18833 /usr/sbin/zabbix_server: ipmi manager #1 [scheduled 0, polled 0 values, idle 5.016619 sec during 5.016881 sec]
#       Number of pre-forked instances of Java pollers.
              ├─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]
# Mandatory: no
              ├─18836 /usr/sbin/zabbix_server: http poller #1 [got 0 values in 0.000710 sec, idle 5 sec]
# Range: 0-1000
              ├─18837 /usr/sbin/zabbix_server: discoverer #1 [processed 0 rules in 0.000605 sec, idle 60 sec]
# Default:
              ├─18838 /usr/sbin/zabbix_server: history syncer #1 [processed 0 values, 0 triggers in 0.000026 sec, idle 1 sec]
# StartJavaPollers=0
              ├─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]
### Option: StartVMwareCollectors
              ├─18841 /usr/sbin/zabbix_server: history syncer #4 [processed 0 values, 0 triggers in 0.000024 sec, idle 1 sec]
#       Number of pre-forked vmware collector instances.
              ├─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
# Mandatory: no
              ├─18844 /usr/sbin/zabbix_server: ipmi poller #2 started
# Range: 0-250
              ├─18846 /usr/sbin/zabbix_server: ipmi poller #3 started
# Default:
              ├─18847 /usr/sbin/zabbix_server: ipmi poller #4 started
# StartVMwareCollectors=0
              ├─18848 /usr/sbin/zabbix_server: ipmi poller #5 started
StartVMwareCollectors=5
              ├─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]
### Option: VMwareFrequency
              ├─18851 /usr/sbin/zabbix_server: vmware collector #1 [updated 0, removed 0 VMware services in 0.000019 sec, idle 5 sec]
#       How often Zabbix will connect to VMware service to obtain a new data.
              ├─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]
# Mandatory: no
              ├─18861 /usr/sbin/zabbix_server: vmware collector #4 [updated 0, removed 0 VMware services in 0.000019 sec, idle 5 sec]
# Range: 10-86400
              ├─18862 /usr/sbin/zabbix_server: vmware collector #5 [updated 0, removed 0 VMware services in 0.000017 sec, idle 5 sec]
# Default:
              ├─18863 /usr/sbin/zabbix_server: task manager [processed 0 task(s) in 0.001796 sec, idle 5 sec]
# VMwareFrequency=60
              ├─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]
### Option: VMwarePerfFrequency
              ├─18867 /usr/sbin/zabbix_server: poller #3 [got 0 values in 0.000047 sec, idle 3 sec]
#       How often Zabbix will connect to VMware service to obtain performance data.
              ├─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]
# Mandatory: no
              ├─18870 /usr/sbin/zabbix_server: unreachable poller #1 [got 0 values in 0.000057 sec, idle 5 sec]
# Range: 10-86400
              ├─18872 /usr/sbin/zabbix_server: unreachable poller #2 [got 0 values in 0.000051 sec, idle 5 sec]
# Default:
              ├─18876 /usr/sbin/zabbix_server: unreachable poller #3 [got 0 values in 0.000044 sec, idle 5 sec]
# VMwarePerfFrequency=60
              ├─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]
### Option: VMwareCacheSize
              ├─18879 /usr/sbin/zabbix_server: trapper #1 [processed data in 0.000000 sec, waiting for connection]
#       Size of VMware cache, in bytes.
              ├─18880 /usr/sbin/zabbix_server: trapper #2 [processed data in 0.000000 sec, waiting for connection]
#       Shared memory size for storing VMware data.
              ├─18881 /usr/sbin/zabbix_server: trapper #3 [processed data in 0.000000 sec, waiting for connection]
#       Only used if VMware collectors are started.
              ├─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]
# Mandatory: no
              ├─18884 /usr/sbin/zabbix_server: icmp pinger #1 [got 0 values in 0.000038 sec, idle 5 sec]
# Range: 256K-2G
              ├─18885 /usr/sbin/zabbix_server: icmp pinger #2 [got 0 values in 0.000041 sec, idle 5 sec]
# Default:
              ├─18886 /usr/sbin/zabbix_server: icmp pinger #3 [got 0 values in 0.000043 sec, idle 5 sec]
# VMwareCacheSize=8M
              ├─18887 /usr/sbin/zabbix_server: icmp pinger #4 [got 0 values in 0.000040 sec, idle 5 sec]
VMwareCacheSize=64M
Zum Verlassen {{Key|q}} drücken.<br>
 
Genaueres können wir uns auch noch einmal im Log-File ansehen:<br>
### Option: VMwareTimeout
tail -fn 1000 /var/log/zabbix/zabbix_server.log
#       Specifies how many seconds vmware collector waits for response from VMware service.
<u>Ausgabe:</u><br>
#
17748:20220721:153654.849 Starting Zabbix Server. Zabbix 6.0.6 (revision 3f7597e3ea3).
# Mandatory: no
17748:20220721:153654.849 ****** Enabled features ******
# Range: 1-300
17748:20220721:153654.849 SNMP monitoring:          YES
# Default:
17748:20220721:153654.849 IPMI monitoring:          YES
# VMwareTimeout=10
17748:20220721:153654.849 Web monitoring:            YES
 
17748:20220721:153654.849 VMware monitoring:        YES
### Option: SNMPTrapperFile
17748:20220721:153654.849 SMTP authentication:       YES
#       Temporary file used for passing data from SNMP trap daemon to the server.
17748:20220721:153654.849 ODBC:                      YES
#       Must be the same as in zabbix_trap_receiver.pl or SNMPTT configuration file.
17748:20220721:153654.849 SSH support:              YES
#
17748:20220721:153654.849 IPv6 support:              YES
# Mandatory: no
17748:20220721:153654.849 TLS support:              YES
# Default:
17748:20220721:153654.849 ******************************
# SNMPTrapperFile=/tmp/zabbix_traps.tmp
17748:20220721:153654.849 using configuration file: /etc/zabbix/zabbix_server.conf
 
17748:20220721:153654.874 current database version (mandatory/optional): 06000000/06000004
### Option: StartSNMPTrapper
17748:20220721:153654.874 required mandatory version: 06000000
#       If 1, SNMP trapper process is started.
17750:20220721:153654.880 starting HA manager
#
17750:20220721:153654.884 HA manager started in active mode
# Mandatory: no
17748:20220721:153654.885 server #0 started [main process]
# Range: 0-1
17751:20220721:153654.886 server #1 started [service manager #1]
# Default:
17752:20220721:153654.886 server #2 started [configuration syncer #1]
# StartSNMPTrapper=0
17756:20220721:153655.131 server #3 started [alert manager #1]
 
17758:20220721:153655.132 server #5 started [alerter #2]
### Option: ListenIP
17759:20220721:153655.132 server #6 started [alerter #3]
#       List of comma delimited IP addresses that the trapper should listen on.
17760:20220721:153655.133 server #7 started [preprocessing manager #1]
#       Trapper will listen on all network interfaces if this parameter is missing.
17761:20220721:153655.134 server #8 started [preprocessing worker #1]
#
17763:20220721:153655.135 server #10 started [preprocessing worker #3]
# Mandatory: no
17766:20220721:153655.136 server #13 started [lld worker #2]
# Default:
17767:20220721:153655.136 server #14 started [ipmi manager #1]
# ListenIP=0.0.0.0
17768:20220721:153655.141 server #15 started [housekeeper #1]
 
17776:20220721:153655.141 server #23 started [escalator #1]
# ListenIP=127.0.0.1
17762:20220721:153655.143 server #9 started [preprocessing worker #2]
 
17765:20220721:153655.143 server #12 started [lld worker #1]
### Option: HousekeepingFrequency
17764:20220721:153655.145 server #11 started [lld manager #1]
#      How often Zabbix will perform housekeeping procedure (in hours).
17771:20220721:153655.146 server #18 started [discoverer #1]
#      Housekeeping is removing outdated information from the database.
17777:20220721:153655.147 server #24 started [ipmi poller #1]
#      To prevent Housekeeper from being overloaded, no more than 4 times HousekeepingFrequency
17772:20220721:153655.149 server #19 started [history syncer #1]
#      hours of outdated information are deleted in one housekeeping cycle, for each item.
17770:20220721:153655.150 server #17 started [http poller #1]
#      To lower load on server startup housekeeping is postponed for 30 minutes after server start.
17769:20220721:153655.150 server #16 started [timer #1]
#      With HousekeepingFrequency=0 the housekeeper can be only executed using the runtime control option.
17773:20220721:153655.151 server #20 started [history syncer #2]
#      In this case the period of outdated information deleted in one housekeeping cycle is 4 times the
17774:20220721:153655.151 server #21 started [history syncer #3]
#      period since the last housekeeping cycle, but not less than 4 hours and not greater than 4 days.
17775:20220721:153655.152 server #22 started [history syncer #4]
#
17757:20220721:153655.152 server #4 started [alerter #1]
# Mandatory: no
17778:20220721:153655.153 server #25 started [proxy poller #1]
# Range: 0-24
17784:20220721:153655.154 server #26 started [self-monitoring #1]
# Default:
17790:20220721:153655.163 server #28 started [task manager #1]
# HousekeepingFrequency=1
17791:20220721:153655.164 server #29 started [poller #1]
 
17792:20220721:153655.167 server #30 started [poller #2]
### Option: MaxHousekeeperDelete
17793:20220721:153655.172 server #31 started [poller #3]
#       The table "housekeeper" contains "tasks" for housekeeping procedure in the format:
17799:20220721:153655.174 server #37 started [unreachable poller #4]
#       [housekeeperid], [tablename], [field], [value].
17795:20220721:153655.175 server #33 started [poller #5]
#       No more than 'MaxHousekeeperDelete' rows (corresponding to [tablename], [field], [value])
17798:20220721:153655.178 server #36 started [unreachable poller #3]
#       will be deleted per one task in one housekeeping cycle.
17803:20220721:153655.178 server #41 started [trapper #3]
#       SQLite3 does not use this parameter, deletes all corresponding rows without a limit.
17800:20220721:153655.181 server #38 started [unreachable poller #5]
#       If set to 0 then no limit is used at all. In this case you must know what you are doing!
17794:20220721:153655.181 server #32 started [poller #4]
#
17801:20220721:153655.182 server #39 started [trapper #1]
# Mandatory: no
17804:20220721:153655.185 server #42 started [trapper #4]
# Range: 0-1000000
17802:20220721:153655.186 server #40 started [trapper #2]
# Default:
17789:20220721:153655.186 server #27 started [vmware collector #1]
# MaxHousekeeperDelete=5000
17797:20220721:153655.189 server #35 started [unreachable poller #2]
 
17796:20220721:153655.192 server #34 started [unreachable poller #1]
### Option: SenderFrequency
17808:20220721:153655.194 server #44 started [icmp pinger #1]
#       How often Zabbix will try to send unsent alerts (in seconds).
17809:20220721:153655.194 server #45 started [icmp pinger #2]
#
17807:20220721:153655.195 server #43 started [trapper #5]
# Mandatory: no
17810:20220721:153655.196 server #46 started [icmp pinger #3]
# Range: 5-3600
17811:20220721:153655.200 server #47 started [icmp pinger #4]
# Default:
17812:20220721:153655.201 server #48 started [icmp pinger #5]
# SenderFrequency=30
17822:20220721:153655.203 server #54 started [alert syncer #1]
 
17818:20220721:153655.203 server #50 started [icmp pinger #7]
### Option: CacheSize
17823:20220721:153655.204 server #55 started [history poller #1]
#       Size of configuration cache, in bytes.
17819:20220721:153655.204 server #51 started [icmp pinger #8]
#       Shared memory size for storing host, item and trigger data.
17820:20220721:153655.204 server #52 started [icmp pinger #9]
#
17817:20220721:153655.205 server #49 started [icmp pinger #6]
# Mandatory: no
17821:20220721:153655.205 server #53 started [icmp pinger #10]
# Range: 128K-8G
17824:20220721:153655.206 server #56 started [history poller #2]
# Default:
17825:20220721:153655.208 server #57 started [history poller #3]
# CacheSize=8M
17829:20220721:153655.209 server #59 started [history poller #5]
CacheSize=128M
17826:20220721:153655.210 server #58 started [history poller #4]
 
17830:20220721:153655.216 server #60 started [availability manager #1]
### Option: CacheUpdateFrequency
17831:20220721:153655.218 server #61 started [trigger housekeeper #1]
#       How often Zabbix will perform update of configuration cache, in seconds.
17832:20220721:153655.219 server #62 started [odbc poller #1]
#
17792:20220721:153656.171 enabling Zabbix agent checks on host "Zabbix server": interface became available
# Mandatory: no
Wie Ihr seht ist der erste Host schon im Monitoring - Der Server selbst (der Agent startet automatisch bei der Installation).<br>
# Range: 1-3600
<br>
# Default:
Bei einem Proxy kann es noch folgende Fehlermeldung geben:<br>
# CacheUpdateFrequency=60
:<code>failed to update local proxy configuration copy: Can't open JSON object or array ""failed"}"</code><br>
 
<br>
### Option: StartDBSyncers
Naja, wir müssen den Proxy auf unserem Zabbix-Server unter
#      Number of pre-forked instances of DB Syncers.
Administration - Proxies
#
noch anlegen - und zwar bitte genau mit dem gleichen Namen wie in der <code>zabbix_proxy.conf</code> unter <code>Hostname=</code> angegeben - dann ist der Fehler weg.<br>
# Mandatory: no
<br>
# Range: 1-100
Bei Erfolg sollte das dann so aussehen:<br>
# Default:
:[[Datei:Zabbix_General_Proxys.png]]<br>
# StartDBSyncers=4
An den Sekunden unter ''''Last seen (age)'''' sehen wir die letzte Kontaktaufnahme.<br>
Wenn da überhaupt etwas steht hatten wir Erfolg!
<br>
----


### Option: HistoryCacheSize
==Sprachdateien für Zabbix 6.0 installieren==
#      Size of history cache, in bytes.
Zabbix 6.0 braucht noch ein paar zusätzliche Sprachdateien, die installieren wir sonst ist das Webinterface voll mit Fehlermeldungen:<br>
#      Shared memory size for storing history data.
apt install -y language-pack-en
#
locale-gen en_US.UTF-8
# Mandatory: no
update-locale
# Range: 128K-2G
<br>
# Default:
<br>
# HistoryCacheSize=16M
----
HistoryCacheSize=64M
==Webinterface installieren (nur Server)==
 
* Schon jetzt findet Ihr die Weboberfläche unter '''<nowiki>http://servername/zabbix</nowiki>''' (nach einem Neustart, aber mit falscher Zeitzone)
### Option: HistoryIndexCacheSize
* Wenn es aber ein exklusiver Server für Zabbix ist möchte ich auf die Eingabe von /zabbix verzichten - das wird nachfolgend beschrieben.
#      Size of history index cache, in bytes.
* Ich installiere hier also so das man den Server später nur mit '''<nowiki>http://servername</nowiki>''' aufrufen kann
#      Shared memory size for indexing history cache.
===Konfigurationsdatei bearbeiten===
#
[[Datei:Button_Zabbix_SERVER.png]]<br>
# Mandatory: no
nano /etc/apache2/sites-available/000-default.conf
# Range: 128K-2G
und den gesamten Inhalt durch den folgenden ersetzen: ({{Key|F9}} löscht eine Zeile)<br>
# Default:
<big><u>'''Ab Zabbix 6.0'''</u></big>
# HistoryIndexCacheSize=4M
<source lang="XML">
HistoryIndexCacheSize=16M
<VirtualHost *:80>
 
    ServerAdmin webmaster@localhost
### Option: TrendCacheSize
    DocumentRoot /usr/share/zabbix
#      Size of trend cache, in bytes.
    ErrorLog ${APACHE_LOG_DIR}/error.log
#      Shared memory size for storing trends data.
    CustomLog ${APACHE_LOG_DIR}/access.log combined
#
# Mandatory: no
    <Directory "/usr/share/zabbix">
# Range: 128K-2G
        Options FollowSymLinks
# Default:
        AllowOverride None
# TrendCacheSize=4M
        Order allow,deny
TrendCacheSize=64M
        Allow from all
 
        <IfModule mod_php.c>
### Option: ValueCacheSize
            php_value max_execution_time 300
#      Size of history value cache, in bytes.
            php_value memory_limit 128M
#      Shared memory size for caching item history data requests.
            php_value post_max_size 16M
#      Setting to 0 disables value cache.
            php_value upload_max_filesize 2M
#
            php_value max_input_time 300
# Mandatory: no
            php_value max_input_vars 10000
# Range: 0,128K-64G
            php_value always_populate_raw_post_data -1
# Default:
            php_value date.timezone Europe/Berlin
# ValueCacheSize=8M
        </IfModule>
ValueCacheSize=64M
    </Directory>
 
    <Directory "/usr/share/zabbix/conf">
### Option: Timeout
        Order deny,allow
#      Specifies how long we wait for agent, SNMP device or external check (in seconds).
        Deny from all
#
        <files *.php>
# Mandatory: no
            Order deny,allow
# Range: 1-30
            Deny from all
# Default:
        </files>
# Timeout=3
    </Directory>
 
    <Directory "/usr/share/zabbix/app">
Timeout=30
        Order deny,allow
 
        Deny from all
### Option: TrapperTimeout
        <files *.php>
#      Specifies how many seconds trapper may spend processing new data.
            Order deny,allow
#
            Deny from all
# Mandatory: no
        </files>
# Range: 1-300
    </Directory>
# Default:
    <Directory "/usr/share/zabbix/include">
# TrapperTimeout=300
        Order deny,allow
 
        Deny from all
### Option: UnreachablePeriod
        <files *.php>
#      After how many seconds of unreachability treat a host as unavailable.
            Order deny,allow
#
            Deny from all
# Mandatory: no
        </files>
# Range: 1-3600
    </Directory>
# Default:
    <Directory "/usr/share/zabbix/local">
# UnreachablePeriod=45
        Order deny,allow
 
        Deny from all
### Option: UnavailableDelay
        <files *.php>
#      How often host is checked for availability during the unavailability period, in seconds.
            Order deny,allow
#
            Deny from all
# Mandatory: no
        </files>
# Range: 1-3600
    </Directory>
# Default:
    <Directory "/usr/share/zabbix/vendor">
# UnavailableDelay=60
        Order deny,allow
 
        Deny from all
### Option: UnreachableDelay
        <files *.php>
#      How often host is checked for availability during the unreachability period, in seconds.
            Order deny,allow
#
            Deny from all
# Mandatory: no
        </files>
# Range: 1-3600
    </Directory>
# Default:
</VirtualHost>
# UnreachableDelay=15
</source>
 
----
### Option: AlertScriptsPath
Danach Webserver neu starten:
#      Full path to location of custom alert scripts.
systemctl restart apache2.service
#      Default depends on compilation options.
<br>
#
Nun auf die Weboberfläche gehen, die sollte unter '''<nowiki>http://IP-Adresse</nowiki>''' oder '''<nowiki>http://DNS-Name</nowiki>''' verfügbar sein.<br>
# Mandatory: no
Anmerkung: So ein Linux trägt sich nicht von allein in den DNS Server ein, ggf. müsst Ihr den da von Hand nachtragen.<br>
# Default:
<br>
# AlertScriptsPath=${datadir}/zabbix/alertscripts
<br>
 
----
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
===Webinterface konfigurieren===
#      You may include individual files or all files in a directory in the configuration file.
Ihr ruft den Zabbix-Server im Browser auf:<br>
#      Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.
:[[Datei:ClipCapIt-220721-154507.PNG]]<br>
#
<br>
# Mandatory: no
Wenn Ihr den Inhalt der <code>000-default.conf</code> wie zuvor beschrieben geändert habt sollte hier alles grün sein:<br>
# Default:
:[[Datei:ClipCapIt-220721-154541.PNG]]<br>
# Include=
<br>
 
Die Datenbankkonfiguration, in die letzten 3 Felder muss überall "zabbix" stehen:<br>
# Include=/usr/local/etc/zabbix_server.general.conf
:[[Datei:ClipCapIt-220721-154625.PNG]]<br>
# Include=/usr/local/etc/zabbix_server.conf.d/
<br>
# Include=/usr/local/etc/zabbix_server.conf.d/*.conf
In dem leeren Feld könnt Ihr den Namen des Servers angeben. Dieser wird oben rechts und auf den Web-Tabs angezeigt:<br>
 
:[[Datei:ClipCapIt-220721-154719.PNG]]<br>
### Option: SSLCertLocation
<br>
#      Location of SSL client certificates.
Noch eben die Zusammenfassung bestätigen:<br>
#      This parameter is used only in web monitoring.
:[[Datei:ClipCapIt-220721-154904.PNG]]<br>
#
<br>
# Mandatory: no
Geschafft!<br>
# Default:
:[[Datei:ClipCapIt-220721-154944.PNG]]<br>
# SSLCertLocation=${datadir}/zabbix/ssl/certs
<br>
:[[Datei:ClipCapIt-220721-155019.PNG]]<br>
Benutzername: Admin
Passwort:     zabbix
{{Hinweis| '''Admin''' mit großem '''A'''!}}<br>
<br>
<br>
----


### Option: SSLKeyLocation
==Zeitserver setzen==
#      Location of private keys for SSL client certificates.
<!--{{Hinweis| '''ntp''' soll man in zukünftigen Ubuntu Versionen nicht mehr verwenden. Zumindest unter 18.04. funktioniert der aber noch wunderbar}}<br>-->
#      This parameter is used only in web monitoring.
Damit die Uhrzeit des Zabbix-Servers auch immer genau ist kann dieser die Uhrzeit mit dem Internet abgleichen.<br>
#
Dazu benötigten wir das Paket {{Key|ntp}}:<br>
# Mandatory: no
apt install ntp -y
# Default:
systemctl enable ntp.service
# SSLKeyLocation=${datadir}/zabbix/ssl/keys
<br>
 
Wer die voreingestellten Zeitserver nutzen will muss nichts mehr tun.<br>
### Option: SSLCALocation
Wer eigene Zeitserver für die Abfrage nutzen will muss die Konfigurationsdatei bearbeiten:<br>
#      Override the location of certificate authority (CA) files for SSL server certificate verification.
nano /etc/ntp.conf
#      If not set, system-wide directory will be used.
# Specify one or more NTP servers.
#      This parameter is used only in web monitoring and SMTP authentication.
server IP-oder-DNS iburst
#
Für jeden Server eine Zeile, die Poolserver solltet Ihr dann auskommentieren
# Mandatory: no
und danach den Service neu starten:<br>
# Default:
systemctl restart ntp.service
# SSLCALocation=
<br>
 
Die Synchronisation lässt sich per Befehl kontrollieren:<br>
####### LOADABLE MODULES #######
ntpq -p
 
<u>'''Ausgabe:'''</u><br>
### Option: LoadModulePath
      remote          refid      st t when poll reach  delay  offset  jitter
#      Full path to location of server modules.
==============================================================================
#      Default depends on compilation options.
  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
# Mandatory: no
  fr1.tomhek.net  163.172.41.83    3 u  22  64    1    0.685  12.810  0.000
# Default:
  ip139.ip-5-196- 10.21.137.1      2 u  21  64    1    0.581    8.332  0.000
# LoadModulePath=${libdir}/modules
  golem.canonical 193.79.237.14    2 u  20  64    1    8.674  13.075  0.000
 
### 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=
</source></div>
* speichern und verlassen
<br>
<br>
<br>
<br>
----
----
[[Datei:Button_Zabbix_PROXY.png]] <big>'''Bei einem Proxy:'''</big>
 
nano /etc/zabbix/zabbix_proxy.conf
==Empfang von SNMP-Traps einrichten==
* folgende Zeilen finden und auf diese Werte ändern, ggf. den '''#''' davor entfernen, {{key|STRG}} + {{key|W}} ist suchen!
{{Hinweis|Neue Methode! Statt '''''snmptt''''' wird ein Perl-Script von Zabbix.com verwendet. '''''snmptt''''' machte bei mir unter Ubuntu 22.04 jede menge Ärger<br>Die Lösung stammt in Teilen von https://sbcode.net/zabbix/snmp-traps/<br>}}
ProxyMode=0
[[Datei:Button_Zabbix_SERVER.png]] und [[Datei:Button_Zabbix_PROXY.png]]<br>
===fehlende Pakete nachinstallieren===
  Server=IP oder DNS Name des Zabbix-Servers an den gemeldet werden soll
Wir Installieren ggf. die benötigten Pakete nach (sollten schon vorhanden sein):<br>
  apt install -y snmp snmpd snmptt snmp-mibs-downloader snmptrapd libnet-snmp-perl libnet-ip-perl libnet-netmask-perl libnet-dns-perl libxml-writer-perl
ServerPort=10051
<br>
   
<br>
  # Hostname -> unter diesem Namen müssen wir den Proxy auch auf dem Hauptserver anlegen!
----
Hostname=zabbixproxy
===snmptrapd aktivieren und konfigurieren===
   
snmpd deaktivieren:
DBHost=localhost
  systemctl stop snmpd.service && systemctl disable snmpd.service
  DBName=zabbix
snmptrapd aktivieren:
  DBUser=zabbix
  systemctl enable snmptrapd.service
DBPassword=zabbix
snmptrapd konfigurieren:
   
  nano /etc/snmp/snmptrapd.conf
EnableRemoteCommands=1
und fügen die folgenden Zeilen ans Ende:<br>
  perl do "/usr/bin/zabbix_trap_receiver.pl";
  Timeout=30
  disableAuthorization yes
und starten den Dienst:<br>
  StartVMwareCollectors=5
  systemctl start snmptrapd.service
# Nachfolgend: Richtig, nichts darf hinter dem = stehen!
<!--
  Fping6Location=
Wir bearbeiten die Datei
  nano /etc/default/snmpd
und ändern die Zeile
  SNMPDRUN=yes
in
  SNMPDRUN=no
<br>
<br>
----
{{Hinweis|Unter Ubuntu 20.04 ist<code>fping</code> und <code>fping6</code> 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.<br>
Die Fehlermeldung die er bringt ist<br>
Cannot detect the minimum interval of /usr/bin/fping6
}}<br>
----
==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.<br>
Also führen wir ein Upgrade durch - dabei verwenden wir das Repository direkt von '''''mariadb.org''''':<br>
<nowiki>apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'</nowiki>
<nowiki>add-apt-repository 'deb [arch=amd64] http://mariadb.mirror.globo.tech/repo/10.5/ubuntu focal main'</nowiki>
apt update && apt upgrade -y
apt install mariadb-server mariadb-client
Wenn er fragt ob er die <code>/etc/mysql/mariadb.conf.d/50-server.cnf</code> überschreiben soll sagt Ihr <code>N</code><br>
Bearbeitet diese Datei einmal:
nano /etc/mysql/mariadb.conf.d/50-server.cnf
und entfernt das <code>#</code> am Anfang der folgenden Zeile:
#log_error = /var/log/mysql/error.log
zu
log_error = /var/log/mysql/error.log
Ansonsten werden Fehler etc. nicht mehr in die Log-Datei geschrieben<br>
Im Anschluss den Dienst neu starten:
systemctl restart mariadb.service
<br>
<br>
Dann die Datei
nano /etc/default/snmptrapd
und ändern die Zeile
TRAPDRUN=no
in
TRAPDRUN=yes
<br>
<br>
----
===Automatischen Start beim Booten einrichten===
<!--
Dazu müssen wir die Start/Stop Scripte hinterlegen. Ubuntu 16.04.x nutzt [https://wiki.ubuntuusers.de/systemd/systemd] für das Starten und Stoppen von Diensten.<br>
Wenn wir schon auf 16.04. umsteigen dann richtig! Also legen wir passende Info-Dateien für Zabbix an.<br> Nebenbei lösen wir damit das Problem der Start-Reihenfolge, wir können angeben das der Zabbix-Server erst gestartet werden darf wenn MySQL schon läuft - und umgekehrt, erst Zabbix Server beenden, dann MySQL<br>
[[Datei:Button_Zabbix_SERVER.png]] <big>'''Auf einem Server'''</big>
<br>
<br>
nano /lib/systemd/system/zabbix-server.service
Nun Konfigurieren wir den Dienst noch:<br>
<u>Inhalt:</u><br>
<br>
  [Unit]
  nano /etc/snmp/snmptrapd.conf
Description=Zabbix Server
und fügen die folgenden Zeilen ans Ende:<br>
After=syslog.target network.target mysql.service
  traphandle default /usr/sbin/snmptt
  disableAuthorization yes
[Service]
Type=oneshot
ExecStart=/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
  ExecReload=/sbin/zabbix_server -R config_cache_reload
  RemainAfterExit=yes
PIDFile=/tmp/zabbix_server.pid
[Install]
WantedBy=multi-user.target
Danach müssen wir den Service noch aktivieren:<br>
systemctl enable zabbix-server.service
<br>
<br>
<br>
<br>
-->
----
----
[[Datei:Button_Zabbix_PROXY.png]] <big>'''Auf einem Proxy'''</big>
 
<br>
===zabbix_trap_receiver.pl einrichten===
  nano /lib/systemd/system/zabbix-proxy.service
Aktuelles Skript herunterladen:
<u>Inhalt:</u><br>
  <nowiki>wget https://git.zabbix.com/projects/ZBX/repos/zabbix/raw/misc/snmptrap/zabbix_trap_receiver.pl -O /usr/bin/zabbix_trap_receiver.pl</nowiki>
[Unit]
und ausführbar machen
Description=Zabbix Proxy
  chmod a+x /usr/bin/zabbix_trap_receiver.pl
After=syslog.target network.target mysql.service
[Service]
Type=oneshot
ExecStart=/sbin/zabbix_proxy -c /etc/zabbix/zabbix_proxy.conf
ExecReload=/sbin/zabbix_proxy -R config_cache_reload
RemainAfterExit=yes
PIDFile=/tmp/zabbix_proxy.pid
[Install]
WantedBy=multi-user.target
Danach müssen wir den Service noch aktivieren:<br>
  systemctl enable zabbix-proxy.service
<br>
<br>
<br>
Für den Fall das der Download nicht zur Verfügung steht hier der Inhalt der Datei:
<source lang="perl">
#!/usr/bin/env perl
#
# Zabbix
# Copyright (C) 2001-2022 Zabbix SIA
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
#
#########################################
#### ABOUT ZABBIX SNMP TRAP RECEIVER ####
#########################################
# This is an embedded perl SNMP trapper receiver designed for sending data to the server.
# The receiver will pass the received SNMP traps to Zabbix server or proxy running on the
# same machine. Please configure the server/proxy accordingly.
#
# Read more about using embedded perl with Net-SNMP:
#      http://net-snmp.sourceforge.net/wiki/index.php/Tut:Extending_snmpd_using_perl
#################################################
#### ZABBIX SNMP TRAP RECEIVER CONFIGURATION ####
#################################################
### Option: SNMPTrapperFile
#      Temporary file used for passing data to the server (or proxy). Must be the same
#      as in the server (or proxy) configuration file.
#
# Mandatory: yes
# Default:
$SNMPTrapperFile = '/tmp/zabbix_traps.tmp';
### Option: DateTimeFormat
#      The date time format in strftime() format. Please make sure to have a corresponding
#      log time format for the SNMP trap items.
#
# Mandatory: yes
# Default:
$DateTimeFormat = '%H:%M:%S %Y/%m/%d';
###################################
#### ZABBIX SNMP TRAP RECEIVER ####
###################################
use Fcntl qw(O_WRONLY O_APPEND O_CREAT);
use POSIX qw(strftime);
sub zabbix_receiver
{
        my (%pdu_info) = %{$_[0]};
        my (@varbinds) = @{$_[1]};
        # open the output file
        unless (sysopen(OUTPUT_FILE, $SNMPTrapperFile, O_WRONLY|O_APPEND|O_CREAT, 0666))
        {
                print STDERR "Cannot open [$SNMPTrapperFile]: $!\n";
                return NETSNMPTRAPD_HANDLER_FAIL;
        }
        # get the host name
        my $hostname = $pdu_info{'receivedfrom'} || 'unknown';
        if ($hostname ne 'unknown')
        {
                $hostname =~ /\[(.*?)\].*/;                    # format: "UDP: [127.0.0.1]:41070->[127.0.0.1]"
                $hostname = $1 || 'unknown';
        }
        # print trap header
        #      timestamp must be placed at the beginning of the first line (can be omitted)
        #      the first line must include the header "ZBXTRAP [IP/DNS address] "
        #              * IP/DNS address is the used to find the corresponding SNMP trap items
        #              * this header will be cut during processing (will not appear in the item value)
        printf OUTPUT_FILE "%s ZBXTRAP %s\n", strftime($DateTimeFormat, localtime), $hostname;
        # print the PDU info
        print OUTPUT_FILE "PDU INFO:\n";
        foreach my $key(keys(%pdu_info))
        {
                if ($pdu_info{$key} !~ /^[[:print:]]*$/)
                {
                        my $OctetAsHex = unpack('H*', $pdu_info{$key}); # convert octet string to hex
                        $pdu_info{$key} = "0x$OctetAsHex";              # apply 0x prefix for consistency
                }
                printf OUTPUT_FILE "  %-30s %s\n", $key, $pdu_info{$key};
        }
        # print the variable bindings:
        print OUTPUT_FILE "VARBINDS:\n";
        foreach my $x (@varbinds)
        {
                printf OUTPUT_FILE "  %-30s type=%-2d value=%s\n", $x->[0], $x->[2], $x->[1];
        }
        close (OUTPUT_FILE);
        return NETSNMPTRAPD_HANDLER_OK;
}
NetSNMP::TrapReceiver::register("all", \&zabbix_receiver) or
        die "failed to register Zabbix SNMP trap receiver\n";
print STDOUT "Loaded Zabbix SNMP trap receiver\n";
</source>
----
----
[[Datei:Button_Zabbix_AGENT.png]] <big>'''und noch der Agent'''</big>
 
<br>
===MIBS nutzen===
  nano /lib/systemd/system/zabbix-agent.service
Die MIBS übersetzen die OID in lesbare Namen. Um diese zu nutzen:
<u>Inhalt:</u><br>
  nano /etc/snmp/snmp.conf
  [Unit]
und dort aus
Description=Zabbix Agent
mibs :
After=syslog.target network.target
ein
#mibs :
[Service]
machen. Dann den dienst neu starten:<br>
Type=oneshot
  systemctl restart snmptrapd.service
ExecStart=/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
----
RemainAfterExit=yes
 
  PIDFile=/tmp/zabbix/zabbix_agentd.pid
===logrotate für /tmp/zabbix_traps.tmp erstellen===
Gerade wenn viele Einträge in der Datei
[Install]
  /tmp/zabbix_traps.tmp
  WantedBy=multi-user.target
landen kann das schon mal einigen Platz kosten.<br>
Danach müssen wir den Service noch aktivieren:<br>
Deshalb nutzen wir '''''logrotate''''' an um die Größe der Datei zu begrenzen.<br>
  systemctl enable zabbix-server.service
  nano /etc/logrotate.d/zabbix_traps
und folgenden Inhalt einfügen / anpassen:<br>
  /tmp/zabbix_traps.tmp {
        '''su snmptt Debian-snmp'''
        '''create 666 snmptt Debian-snmp'''
        missingok
        notifempty
        '''daily'''
        rotate 4
        '''size 1M'''
        compress
        sharedscripts
        '''maxage 365'''
}
<br>
<br>
<br>
<br>
----
----
-->
 
Die notwendigen Skripte werden bei der Installation aus den Repository direkt mit installiert, wir müssen diese nur noch aktivieren:<br>
===Zabbix Server oder Proxy konfigurieren===
[[Datei:Button_Zabbix_SERVER.png]] <big>'''Auf einem Server'''</big>
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:<br>
SNMPTrapperFile=/tmp/zabbix_traps.tmp
StartSNMPTrapper=1
<br>
<br>
  systemctl enable zabbix-server.service
Danach müssen wir den Zabbix Server oder Proxy Dienst neu starten:<br>
  systemctl restart zabbix-server.service
oder
systemctl restart zabbix-proxy.service
<br>
<br>
<br>
<br>
----
----
[[Datei:Button_Zabbix_PROXY.png]] <big>'''Auf einem Proxy'''</big>
 
<br>
===Trapper-Datei anlegen / Testen===
  systemctl enable zabbix-proxy.service
Die Datei <code>/tmp/zabbix_traps.tmp</code> gibt es noch nicht.<br>
<br>
Die wird aber ggf. erst beim ersten eintreffenden Trap erstellt. Deshalb:<br>
<br>
  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.<br>
Nun sollte es die Datei geben:<br>
ls -l /tmp/zabbix_traps.tmp
Ausgabe:
-rw-r--r-- 1 root root 158 Sep  6 09:55 /var/log/snmptt/snmptt.log
Der Inhalt sollte wie folgt sein:
11:41:32 2022/08/12 ZBXTRAP 127.0.0.1
PDU INFO:
  notificationtype              TRAP
  receivedfrom                  UDP: [127.0.0.1]:44623->[127.0.0.1]:162
  community                      public
  version                        0
  transactionid                  1
  requestid                      0
  errorstatus                    0
  errorindex                    0
  messageid                      0
VARBINDS:
  DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (0) 0:00:00.00
  SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: SNMPv2-SMI::enterprises.2.3.0.3
  SNMPv2-SMI::snmpV2            type=4  value=STRING: "Zabbix-SNMP-Traps"
  SNMP-COMMUNITY-MIB::snmpTrapAddress.0 type=64 value=IpAddress: 172.16.2.164
  SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 type=4  value=STRING: "public"
  SNMPv2-MIB::snmpTrapEnterprise.0 type=6  value=OID: SNMPv2-SMI::enterprises.2.3
Nach einem Reboot ist Datei weg bis der erste Trap eintrifft - was Zabbix aber nicht zu stören scheint.<br>
----
----
[[Datei:Button_Zabbix_AGENT.png]] <big>'''und noch der Agent'''</big>
<!--==VMware Tools installieren==
Wenn euer Zabbix-Server auch eine virtuelle Maschine ist installiert Ubuntu 16.04.x automatische die Open-VM-Tools.<br>
<br>
<br>
  systemctl enable zabbix-agent.service
{{Hinweis| Die '''Open-VM-Tools''' sind bereits installiert! Nachfolgendes müsst Ihr nur ausführen wenn es denn unbedingt die Original VMware-Tools sein müssen!}}<br>
Wollt Ihr - Warum auch immer - die VMware-Tools von vSphere installieren so geht wie folgt vor:
* Open-VM-Tools deinstallieren:<br>
  apt remove open-vm-tools
apt purge open-vm-tools
* VMware Tools installieren im vSphere Client auswählen
* CD Mounten:
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
* Entpacken (Versionsnnummer eurer Tools anpassen)
tar xzvf /mnt/cdrom/VMwareTools-10.0.0-3000743.tar.gz -C /tmp/
* Installieren
cd /tmp/vmware-tools-distrib/
./vmware-install.pl -d
* Schalter -d heisst er gleich durchrauscht ohne nachzufragen und die Standard-Verzeichnisse nimmt.
* Falls er hier mit den Hinweis auf die Open-VM-Tools abbricht:
./vmware-install.pl
:und von Hand weiter machen. Alle Fragen ggf. einfach nur mit {{key|Enter}} bzw, {{key|Return}} bestätigen.<br>
* netter weise wirft er die CD auch gleich wieder raus
* Fertig!
<br>
<br>
<br>
<br>
----
----
-->


===Start von Zabbix testen===
==Agent konfigurieren (nur Proxy)==
Nun müsste man den Zabbix Server wie andere Dienste auch über {{Key|systemctl}} starten können
Wir wollen natürlich unseren ''''Zabbix Proxy'''' gleich mit überwachen!<br>
systemctl start zabbix-server
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!)
Wenn alles in Ordnung ist gibt es keine Rückmeldung durch '''''systemctl''''', also fragen wir nach dem Status:<br>
Bearbeiten wir zunächst die Konfigurationsdatei:<br>
systemctl status zabbix-server
  nano /etc/zabbix/zabbix_agentd.conf
<u>Ausgabe:</u><br>
und ändert folgende Zeile:<br>
  ● zabbix-server.service - Zabbix Server
Hostname=zabbixproxy.domain.local
      Loaded: loaded (/lib/systemd/system/zabbix-server.service; enabled; vendor preset: enabled)
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!<br>
      Active: active (running) since Thu 2020-05-21 17:47:54 CEST; 5s ago
{{Hinweis| Ihr wollt die zabbix_agent<big>'''d'''</big>.conf ändern, NICHT die zabbix_agent.conf - man beachte den feinen Unterschied!}}<br>
    Process: 18816 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)
<br>
    Main PID: 18830 (zabbix_server)
Das Start-Skript haben wir vorhin schon aktiviert.
      Tasks: 62 (limit: 4621)
<br>
      Memory: 139.1M
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.<br>
      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]
==Windows-Freigabe für Agenten-Dateien einrichten==
              ├─18833 /usr/sbin/zabbix_server: ipmi manager #1 [scheduled 0, polled 0 values, idle 5.016619 sec during 5.016881 sec]
In meinen früheren Anleitungen wurde in diesem Abschnitt beschrieben wie man eine Samba-Freigabe erstellt in welcher der Zabbix-Agent abgelegt wird.<br>
              ├─18834 /usr/sbin/zabbix_server: housekeeper [startup idle for 30 minutes]
Das mache ich in der Praxis nicht mehr - neuere Windows-Versionen finden es unvorstellbar das man auf eine Freigabe ohne Passwort zugreifen möchte.<br>
              ├─18835 /usr/sbin/zabbix_server: timer #1 [updated 0 hosts, suppressed 0 events in 0.001532 sec, idle 5 sec]
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.<br>
              ├─18836 /usr/sbin/zabbix_server: http poller #1 [got 0 values in 0.000710 sec, idle 5 sec]
Das Installationspaket hat nur ein paar MByte, da findet sich ein Plätzchen.<br>
              ├─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]
===Vorwort===
              ├─18840 /usr/sbin/zabbix_server: history syncer #3 [processed 0 values, 0 triggers in 0.000025 sec, idle 1 sec]
Die Dateien für die Verteilung des Agenten lege ich regelmäßig auf dem Zabbix-Server bzw. Zabbix-Proxy ab.<br>
              ├─18841 /usr/sbin/zabbix_server: history syncer #4 [processed 0 values, 0 triggers in 0.000024 sec, idle 1 sec]
Ja, ich richte hier eine "Jeder Vollzugriff" - Freigabe ein - meinen '''''AgentAutoUpdate''''' lasse ich am liebsten mit '''SYSTEM''' Rechten laufen (wegen UAC-Kontrolle) - und so gibt es kein Problem mit den Zugriffsberechtigungen.<br>
              ├─18842 /usr/sbin/zabbix_server: escalator #1 [processed 0 escalations in 0.001428 sec, idle 3 sec]
Wenn Bedenken bestehen (zu recht) kann die Freigabe auch auf "readonly" gesetzt werden. Dann kann das Installationsskript aber auch kein Log dorthin schreiben.<br>
              ├─18843 /usr/sbin/zabbix_server: ipmi poller #1 started
Die einfachste Lösung aus meiner Sicht ist:<br>
              ├─18844 /usr/sbin/zabbix_server: ipmi poller #2 started
* Zunächst wie hier beschrieben mit Vollzugriff enrichten
              ├─18846 /usr/sbin/zabbix_server: ipmi poller #3 started
* Von einem Windows-Rechner aus kann auf die Freigabe zugegriffen und die notwendigen Dateien dorthin kopiert werden
              ├─18847 /usr/sbin/zabbix_server: ipmi poller #4 started
* Wenn nach Tests alles läuft können die Rechte im Ordner per <code>chmod</code> auf "Nur Lesen" gesetzt werden, "Schreiben" dann nur noch für den Log-Ordner so fern vorhanden.<br>
              ├─18848 /usr/sbin/zabbix_server: ipmi poller #5 started
<br>
              ├─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]
===Voraussetzungen===
              ├─18851 /usr/sbin/zabbix_server: vmware collector #1 [updated 0, removed 0 VMware services in 0.000019 sec, idle 5 sec]
Wenn die Installation nachträglich erfolgt - erst einmal Updaten!
              ├─18852 /usr/sbin/zabbix_server: vmware collector #2 [updated 0, removed 0 VMware services in 0.000020 sec, idle 5 sec]
  apt update
              ├─18860 /usr/sbin/zabbix_server: vmware collector #3 [updated 0, removed 0 VMware services in 0.000020 sec, idle 5 sec]
  apt upgrade
              ├─18861 /usr/sbin/zabbix_server: vmware collector #4 [updated 0, removed 0 VMware services in 0.000019 sec, idle 5 sec]
<br>
              ├─18862 /usr/sbin/zabbix_server: vmware collector #5 [updated 0, removed 0 VMware services in 0.000017 sec, idle 5 sec]
Nun installieren wir Samba - damit erstellt man Windows-Freigaben unter Linux:<br>
              ├─18863 /usr/sbin/zabbix_server: task manager [processed 0 task(s) in 0.001796 sec, idle 5 sec]
  apt install samba samba-common-bin
              ├─18864 /usr/sbin/zabbix_server: poller #1 [got 1 values in 0.000133 sec, idle 3 sec]
das dauert einen Moment - und danach können wir Samba konfigurieren.
              ├─18866 /usr/sbin/zabbix_server: poller #2 [got 0 values in 0.000044 sec, idle 3 sec]
<br>
              ├─18867 /usr/sbin/zabbix_server: poller #3 [got 0 values in 0.000047 sec, idle 3 sec]
Konfiguration erfolgt über ein zentrale Datei:<br>
              ├─18868 /usr/sbin/zabbix_server: poller #4 [got 0 values in 0.000045 sec, idle 3 sec]
  nano /etc/samba/smb.conf
              ├─18869 /usr/sbin/zabbix_server: poller #5 [got 0 values in 0.000065 sec, idle 3 sec]
In dieser ändern wie folgende Zeilen (wie immer: mit {{Key|STRG}} + {{Key|W}} kann man in '''''nano''''' suchen)<br>
              ├─18870 /usr/sbin/zabbix_server: unreachable poller #1 [got 0 values in 0.000057 sec, idle 5 sec]
  workgroup = ZNIL        ; NetBIOS Domänenname in euerer Umgebung, könnt Ihr auch auf WORKGROUP lassen
              ├─18872 /usr/sbin/zabbix_server: unreachable poller #2 [got 0 values in 0.000051 sec, idle 5 sec]
  wins support = no
              ├─18876 /usr/sbin/zabbix_server: unreachable poller #3 [got 0 values in 0.000044 sec, idle 5 sec]
  wins server = 192.168.1.1 ; Falls es einen WINS-Server bei euch im Netzwerk gibt, geben wir diesen hier an
              ├─18877 /usr/sbin/zabbix_server: unreachable poller #4 [got 0 values in 0.000054 sec, idle 5 sec]
Jetzt geht es mit der eigentlichen Freigabe weiter:<br>
              ├─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 {{Key|q}} drücken.<br>
Genaueres können wir uns auch noch einmal im Log-File ansehen:<br>
tail -fn 1000 /var/log/zabbix/zabbix_server.log
<u>Ausgabe:</u><br>
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).<br>
<br>
<br>
Bei einem Proxy kann es noch folgende Fehlermeldung geben:<br>
----
:<code>failed to update local proxy configuration copy: Can't open JSON object or array ""failed"}"</code><br>
===='''Einrichtung Freigabe (simple Version)'''====
Bei der "simplen Version" wird einfach eine Freigabe erstellt auf die jeder Vollzugriff hat. Die Installationsdateien für den Agenten könnt Ihr von jedem Windows Rechner aus einfach in der Freigabe ablegen.<br>
Logdateien können ebenfalls einfach hinein geschrieben werden.<br>
Die Nachteile könnten sein:<br>
* Jeder(!) kann die Dateien manipulieren
* Ein Trojaner könne die .exe Dateien in der Freigabe befallen und würde (Falls das automatische Update eingesetzt wird) ggf. auf jedem überwachten System verteilt werden
* ...
<br>
<br>
Naja, wir müssen den Proxy auf unserem Zabbix-Server unter
Wir bearbeiten weiter die
  Administration - Proxies
nano /etc/samba/smb.conf
noch anlegen - und zwar bitte genau mit dem gleichen Namen wie in der <code>zabbix_proxy.conf</code> unter <code>Hostname=</code> angegeben - dann ist der Fehler weg.<br>
ganz am Schluss fügen wir folgende Zeilen hinzu:<br>
[agent]
comment = Zabbix Agents
path = /share/zabbix/agent
guest ok = yes
  read only = no
 
dann speichern und verlassen.<br>
Nun müssen wir den Ordner noch anlegen:<br>
mkdir -p /share/zabbix/agent
chmod 777 /share/zabbix/agent
und den Dienst von Samba neu starten:<br>
systemctl restart smbd
<br>
<br>
Bei Erfolg sollte das dann so aussehen:<br>
Ab jetzt können wir über
:[[Datei:Zabbix_General_Proxys.png]]<br>
\\IP-Adresse-Zabbix-Proxy\agent
An den Sekunden unter ''''Last seen (age)'''' sehen wir die letzte Kontaktaufnahme.<br>
von Windows aus auf die Freigabe zugreifen und die Dateien dort ablegen.<br>
Wenn da überhaupt etwas steht hatten wir Erfolg!
{{Hinweis| Wenn Ihr statt der IP-Adresse einen Namen verwenden wollt müsst Ihr diesen Namen auf euren DNS Server anlegen}}<br>
<br>
<br>
----
----


==Sprachdateien für Zabbix 6.0 installieren==
===='''Einrichtung Freigabe (sichere Version)'''====
Zabbix 6.0 braucht noch ein paar zusätzliche Sprachdateien, die installieren wir sonst ist das Webinterface voll mit Fehlermeldungen:<br>
Bei der "sicheren Version" wird die gleiche Freigabe erstellt auf die jeder nur lesenden Zugriff hat. Das Setup des Agenten kann so weiterhin von jedem Rechner aus aufgerufen werden.<br>
apt install -y language-pack-en
Für die Logdateien wir deine separate Freigabe erstellt in die jeder Schreiben kann.<br>
locale-gen en_US.UTF-8
Der Ordner mit den Installationsdateien wird 2x Freigegeben, die zweite Freigabe ist versteckt und mit Benutzername und Passwort geschützt. Der Admin kann so weiterhin die Dateien bequem aktualisieren.<br>
update-locale
<br>
<br>
<br>
Wir bearbeiten weiter die
----
  nano /etc/samba/smb.conf
==Webinterface installieren (nur Server)==
ganz am Schluss fügen wir folgende Zeilen hinzu:<br>
* Schon jetzt findet Ihr die Weboberfläche unter '''<nowiki>http://servername/zabbix</nowiki>''' (nach einem Neustart, aber mit falscher Zeitzone)
[agent]
* Wenn es aber ein exklusiver Server für Zabbix ist möchte ich auf die Eingabe von /zabbix verzichten - das wird nachfolgend beschrieben.
comment = Zabbix Agents
* Ich installiere hier also so das man den Server später nur mit '''<nowiki>http://servername</nowiki>''' aufrufen kann
path = /share/zabbix/agent
===Konfigurationsdatei bearbeiten===
guest ok = yes
[[Datei:Button_Zabbix_SERVER.png]]<br>
read only = yes
  nano /etc/apache2/sites-available/000-default.conf
und den gesamten Inhalt durch den folgenden ersetzen: ({{Key|F9}} löscht eine Zeile)<br>
 
<big><u>'''Bis Zabbix 5.2'''</u></big>
<source lang="XML">
<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">
[agent$]
        Options FollowSymLinks
comment = Zabbix Agents Management
        AllowOverride None
path = /share/zabbix/agent
        Order allow,deny
guest ok = no
        Allow from all
read only = no
valid users = agent
browsable = no
   
   
        <IfModule mod_php7.c>
[logging]
            php_value max_execution_time 300
comment = Logging of agent installations
            php_value memory_limit 128M
path = /share/zabbix/logging
            php_value post_max_size 16M
guest ok = yes
            php_value upload_max_filesize 2M
read only = no
            php_value max_input_time 300
 
            php_value max_input_vars 10000
dann speichern und verlassen.<br>
            php_value always_populate_raw_post_data -1
Nun müssen wir die Ordner noch anlegen:<br>
            php_value date.timezone Europe/Berlin
  mkdir -p /share/zabbix/agent
        </IfModule>
mkdir -p /share/zabbix/logging
    </Directory>
chmod 777 /share/zabbix/agent
   
chmod 777 /share/zabbix/logging
    <Directory "/usr/share/zabbix/conf">
Jetzt müssen wir noch den Benutzer für den Zugriff auf <code>agent$</code> anlegen.<br>
        Order deny,allow
Den Namen des Benutzer haben wir oben schon mit '''agent''' festegelegt, in der Zeile mit <code>valid users = agent</code>
        Deny from all
Angelegt wird dieser wie folgt:<br>
        <files *.php>
  useradd -M -s /sbin/nologin '''agent'''
            Order deny,allow
passwd '''agent'''
            Deny from all
und das gewünschte Passwort 2x eingeben.<br>
        </files>
Jetzt noch der Samba Teil:
    </Directory>
smbpasswd -a agent
   
smbpasswd -e agent
    <Directory "/usr/share/zabbix/app">
Da musstet Ihr das gleiche Passwort noch einmal zweimal eingeben.<br>
        Order deny,allow
Jetzt den Dienst von Samba neu starten:<br>
        Deny from all
  systemctl restart smbd
        <files *.php>
<br>
            Order deny,allow
Ab jetzt können wir über
            Deny from all
\\IP-Adresse-Zabbix-Proxy\agent
        </files>
von Windows aus auf die Freigabe zugreifen.<br>
    </Directory>
Ruft Ihr statt dessen
   
\\IP-Adresse-Zabbix-Proxy\agent'''$'''
    <Directory "/usr/share/zabbix/include">
auf sollte sich ein Fenster mit der Abfrage nach Benutzername und Passwort öffnen. Gebt die zuvor festgelegten Daten ein (Benutzer '''agent''' und euer festgelegtes Passwort) und ihr kommt wiederum auf die gleiche Freigabe.<br>
        Order deny,allow
Nur habt Ihr in dieser nun auch Schreibrechte und könnt die Dateien ablegen.<br>
        Deny from all
Auf<br>
        <files *.php>
  \\IP-Adresse-Zabbix-Proxy\logging
            Order deny,allow
hat jeder Schreibrechte, hier sollten aber ja nur Textdateien landen.<br>
            Deny from all
{{Hinweis| Wenn Ihr statt der IP-Adresse einen Namen verwenden wollt müsst Ihr diesen Namen auf euren DNS Server anlegen}}<br>
        </files>
{{Hinweis| Genaueres zum Schutz der Verzeichnisse mit Benutzername und Passwort (Standalone Samba Server, nicht in der Domäne) findet Ihr hier: https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Standalone_Server#Creating_a_Local_User_Account}}<br>
    </Directory>
<br>
   
----
    <Directory "/usr/share/zabbix/local">
 
        Order deny,allow
===Probleme beim Zugriff auf die Freigabe - Windows 10 / Windows Server 2016===
        Deny from all
Die Freigabe <code>\\IP-Adresse-Zabbix-Proxy\agent</code> erlaubt nun eigentlich den Zugriff ohne Benutzername und Passwort.<br>
        <files *.php>
Als erstes testet ob Ihr weiter kommt wenn Ihr beim Benutzernamen einfach einen Buchstaben eingebt und das Passwort leer lasst. Wenn nicht:<br>
            Order deny,allow
Windows 10 kann sich einfach nicht mehr einen Zugriff ohne Anmeldung vorstellen und will unbedingt ein Passwort nutzen.<br>
            Deny from all
Dazu [https://support.microsoft.com/de-ch/help/4046019/guest-access-smb2-disabled-by-default-in-windows-10-server-2016 hier der Microsoft-Artikel]<br>
        </files>
<br>
    </Directory>
<u>'''Lösung 1:'''</u><br>
</VirtualHost>
Ihr legt einen extra Benutzer für den Zugriff an, in diesem Beispiel heißt der Benutzer '''''installagent''''':
</source>
useradd -M -s /sbin/nologin '''installagent'''
Das stammt aus der Datei <code>/etc/apache2/conf-enabled/zabbix.conf</code>, ich habe unter anderem die Zeitzone angepasst.<br>
passwd '''installagent'''
 
smbpasswd -a '''installagent'''
<big><u>'''Ab Zabbix 5.4 / 6.0'''</u></big>
smbpasswd -e '''installagent'''
<source lang="XML">
Das Passwort dann nach Wahl. Gerne auch das gleiche wie der Benutzername '''installagent''' falls Ihr oben schon den Benutzer '''agent''' angelegt habt. Denn der kann trotzdem nur lesen auf die Freigabe des Agenten zugreifen.<br>
<VirtualHost *:80>
<br>
    ServerAdmin webmaster@localhost
<br>
    DocumentRoot /usr/share/zabbix
<u>'''Lösung 2:'''</u><br>
    ErrorLog ${APACHE_LOG_DIR}/error.log
Ihr richtet die Gruppenrichtlinie entsprechend des obigen Microsoft-Artikel ein.<br>
    CustomLog ${APACHE_LOG_DIR}/access.log combined
Lokal geht das mit<br>
   
gpedit.msc
    <Directory "/usr/share/zabbix">
und ändert die folgende Richtlinie:<br>
        Options FollowSymLinks
  Computerkonfiguration => Administrative Vorlagen => Netzwerk => LanMan-Arbeitsstation => Unsichere Gastanmeldungen aktivieren
        AllowOverride None
:[[Datei:ClipCapIt-180201-104636.PNG]]<br>
        Order allow,deny
Die Passwortabfrage poppt dann immer noch auf - aber einfach einen beliebigen Buchstaben als Benutzernamen angeben, Passwort leer lassen und es klappt.<br>
        Allow from all
Skripte können dann wieder ohne Abfrage direkt auf die Freigabe zugreifen.<br>
        <IfModule mod_php7.c>
<br>
            php_value max_execution_time 300
----
            php_value memory_limit 128M
-->
            php_value post_max_size 16M
<!--
            php_value upload_max_filesize 2M
===Proxy/Server mit in Windows-Domäne aufnehmen===
            php_value max_input_time 300
In manchen Domänen hatte ich nun das "Problem" das immer ein Fenster mit Benutzername / Passwort aufgeht - es ist dabei völlig egal was man eintippt, man kommt an die Freigabe.
            php_value max_input_vars 10000
War aber nervig.<br>
            php_value always_populate_raw_post_data -1
<u>'''Lösung:'''</u> Wir nehmen den ZabbixProxy mit in die Domäne auf und Ruhe ist!<br>
            php_value date.timezone Europe/Berlin
{{Hinweis| Ich hatte es jetzt bei einem Kunden da war es genau umgekehrt! Macht diesen Tipp nur wenn ihr das beschriebene Problem habt!}}<br>
        </IfModule>
Also noch mal<br>
    </Directory>
nano /etc/samba/smb.conf
    <Directory "/usr/share/zabbix/conf">
und dann wie folgt ändern:<br>
        Order deny,allow
security = domain
        Deny from all
workgroup = ZNIL
        <files *.php>
Workgroup MUSS dabei euren NetBIOS Domänen-Namen entsprechen.<br>
            Order deny,allow
Dann Speichern und die Dienste neu starten:<br>
            Deny from all
service smbd restart && service nmbd restart
        </files>
und mit folgendem Befehl der Domäne beitreten:<br>
    </Directory>
net rpc join -S <Domänencontroller> -U Administrator
    <Directory "/usr/share/zabbix/app">
'''''<Domänencontroller>''''' ersetzt ihr dabei durch den Namen eures primärem Dömencontroller, also dem Rolleninhaber<br>
        Order deny,allow
Er fragt dann nach dem Kennwort und ist dann Domänenmitglied - was Ihr gerne im AD kontrollieren könnt (landet unter '''''Computers''''')<br>
        Deny from all
Ab nun "rauscht" der Zugriff auf die Freigabe immer durch.<br>
        <files *.php>
<br>
            Order deny,allow
<br>
            Deny from all
<br>
        </files>
----
    </Directory>
-->
    <Directory "/usr/share/zabbix/include">
 
        Order deny,allow
==Zabbix 6.0 Reporting-Services installieren / aktivieren==
        Deny from all
Installiert sollte es schon sein, falls nicht:
        <files *.php>
apt install zabbix-web-service
            Order deny,allow
Dann aktivieren und starten:
            Deny from all
systemctl enable zabbix-web-service.service
        </files>
systemctl start zabbix-web-service.service
    </Directory>
Der Dienst lauscht per Default auf Port 10053 was in der <code>/etc/zabbix/zabbix_web_service.conf</code> konfiguriert wird.<br>
    <Directory "/usr/share/zabbix/local">
Anfragen nimmt er nur von lokal entgegen (127.0.0.1 / ::1)<br>
        Order deny,allow
Nun den Dienst auch noch im Zabbix-Server bekannt machen:<br>
        Deny from all
nano /etc/zabbix/zabbix_server.conf
        <files *.php>
und die folgenden Zeilen ändern:<br>
            Order deny,allow
StartReportWriters=3
            Deny from all
WebServiceURL=http://localhost:10053/report
        </files>
Im Anschluß Zabbix einmal neu starten:<br>
    </Directory>
  systemctl restart zabbix-server.service
    <Directory "/usr/share/zabbix/vendor">
<br>
        Order deny,allow
Im Webinterface müsst ihr nun einmal hinterlegen wir die Reporting-Services das Zabbix-Frontend erreichen können:<br>
        Deny from all
Unter {{Key|Administration}} . {{Key|General}} - {{Key|Other}} bei '''''Frontend URL''''' folgendes setzen:
        <files *.php>
http://localhost/
            Order deny,allow
<br>
            Deny from all
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:<br>
        </files>
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
    </Directory>
dpkg -i google-chrome-stable_current_amd64.deb
</VirtualHost>
apt install -f
</source>
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.<br>
Danach Webserver neu starten:
Dafür ist der dann installiert ohne das wir eine grafische Oberfläche auf dem Server installieren mussten.<br>
  systemctl restart apache2.service
<br>
Nun auf die Weboberfläche gehen, die sollte unter '''<nowiki>http://IP-Adresse</nowiki>''' oder '''<nowiki>http://DNS-Name</nowiki>''' verfügbar sein.<br>
Anmerkung: So ein Linux trägt sich nicht von allein in den DNS Server ein, ggf. müsst Ihr den da von Hand nachtragen.<br>
<br>
<br>
<br>
----
----


===Webinterface konfigurieren===
==Datensicherung des Zabbix-Servers==
Ihr ruft den Zabbix-Server im Browser auf:<br>
Bevorzugt installiere ich Zabbix-Server als Virtuelle Maschinen / VM.<br>
:[[Datei:ClipCapIt-200521-180409.PNG]]<br>
Die Backup-Software sichert am besten einfach die gesamte VM.<br>
<br>
Eigentlich macht quasi jede Backup-Software hierzu während der Sicherung einen Snapshot, sichert die Festplattendaten und löst dann den Snapshot wieder auf.<br>
Wenn Ihr den Inhalt der <code>000-default.conf</code> wie zuvor beschrieben geändert habt sollte hier alles grün sein:<br>
Wer dabei sicher gehen will das die Datenbank in einem konsistenten Zustand gesichert wird kann folgendes tun:<br>
:[[Datei:ClipCapIt-200521-180441.PNG]]<br>
----
===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
<br>
<br>
Die Datenbankkonfiguration, in die letzten 3 Felder muss überall "zabbix" stehen:<br>
Unter VMware funktioniert das mit 2 Skripten die wir wie folgt anlegen:<br>
:[[Datei:ClipCapIt-200521-180611.PNG]]<br>
nano /usr/sbin/pre-freeze-script
mit folgendem Inhalt:<br>
<source lang="bash">
#!/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
</source>
<br>
<br>
In dem leeren Feld könnt Ihr den Namen des Servers angeben. Dieser wird oben rechts und auf den Web-Tabs angezeigt:<br>  
und<br>
:[[Datei:ClipCapIt-200521-180655.PNG]]<br>
nano /usr/sbin/post-thaw-script
<br>
<source lang="bash">
Noch eben die Zusammenfassung bestätigen:<br>
#!/bin/sh
:[[Datei:ClipCapIt-200521-180719.PNG]]<br>
echo "$(date) post-thaw start" >> /tmp/snapshot.log
<br>
systemctl start mysql.service
Geschafft!<br>
systemctl start zabbix-server.service
:[[Datei:ClipCapIt-200521-180719.PNG]]<br>
echo "$(date) post-thaw stop" >> /tmp/snapshot.log
</source>
<br>
<br>
:[[Datei:ClipCapIt-200521-180819.PNG]]<br>
Jetzt müssen wir die beiden Skripte noch ausführbar machen und dem root zuordnen:<br>
  Benutzername: Admin
  chmod 0700 /usr/sbin/pre-freeze-script
  Passwort:     zabbix
chmod 0700 /usr/sbin/post-thaw-script
{{Hinweis| '''Admin''' mit großem '''A'''!}}<br>
chown root:root /usr/sbin/pre-freeze-script
  chown root:root /usr/sbin/post-thaw-script
<br>
<br>
Voraussetzung ist das die VMware-Tools installiert sind!<br>
Dabei ist es egal ob es sich um die Original VMware-Tools oder um die Open-VM-Tools aus den Repositories handelt.<br>
Nun können wir die Skripts testen indem wir einen Snapshot mit den folgenden Einstellungen erstellen:<br>
:[[Datei:ClipCapIt-200521-204401.PNG]]<br>
<br>
<br>
----
Wenn wir uns die Logs ansehen sollte
 
* Ein Eintrag in die Datei {{Key|/tmp/snapshot.log}} vorgenommen
==Zeitserver setzen==
* Der Zabbix-Server gestoppt
<!--{{Hinweis| '''ntp''' soll man in zukünftigen Ubuntu Versionen nicht mehr verwenden. Zumindest unter 18.04. funktioniert der aber noch wunderbar}}<br>-->
* Der MySQL-Server gestoppt
Damit die Uhrzeit des Zabbix-Servers auch immer genau ist kann dieser die Uhrzeit mit dem Internet abgleichen.<br>
* Wieder ein Eintrag in die Datei {{Key|/tmp/snapshot.log}} geschrieben
Dazu benötigten wir das Paket {{Key|ntp}}:<br>
* Der MySQL-Server wieder gestartet
apt install ntp -y
* Der Zabbix-Server wieder gestartet
systemctl enable ntp.service
werden.<br>
<br>
<br>
Wer die voreingestellten Zeitserver nutzen will muss nichts mehr tun.<br>
{{Hinweis| Das ganze funktioniert sowohl mit den original VMware-Tools als auch den Open-VM-Tools!}}<br>
Wer eigene Zeitserver für die Abfrage nutzen will muss die Konfigurationsdatei bearbeiten:<br>
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:<br>
systemctl restart ntp.service
<br>
Die Synchronisation lässt sich per Befehl kontrollieren:<br>
ntpq -p
<u>'''Ausgabe:'''</u><br>
      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
<br>
<br>
<br>
<br>
----
----


==Empfang von SNMP-Traps einrichten==
===Methode 2: Hot Backup - Datenbank einfrieren===
[[Datei:Button_Zabbix_SERVER.png]] und [[Datei:Button_Zabbix_PROXY.png]]<br>
Bei dieser Methode passiert folgendes:
===fehlende Pakete nachinstallieren===
* Die Datenbank wird vor einem Snapshot auf "READ ONLY" gesetzt - zuvor werden noch alle Daten geschrieben ("FLUSH TABLES")
Wir Installieren ggf. die benötigten Pakete nach (sollten schon vorhanden sein):<br>
* Der Snapshot wird erstellt
apt install -y snmp snmpd snmptt snmp-mibs-downloader snmptrapd
* Die Datenbank wird wieder für Schreibzugriffe freigegeben
<br>
<br>
<br>
Unter VMware funktioniert das mit 2 Skripten die wir wie folgt anlegen:<br>
----
  nano /usr/sbin/pre-freeze-script
===snmptrapd aktivieren und konfigurieren===
mit folgendem Inhalt:<br>
snmpd deaktivieren:
{{Warnung|Vergesst nicht das Passwort in Zeile 9 zu setzen (steht auf Leer was per Default passen sollte)}}
systemctl stop snmpd.service && systemctl disable snmpd.service
<source lang="bash">
snmptrapd aktivieren:
#!/bin/sh
systemctl enable snmptrapd.service
# 2018-04-20 Bernhard Linz
snmptrapd konfigurieren:
# Original script by Pascal Di Marco, check https://www.veeam.com/wp-consistent-protection-mysql-mariadb.html for more information
nano /etc/snmp/snmptrapd.conf
# Log will be write to syslog and(!) to /tmp/snapshot.log
und fügen die folgenden Zeilen ans Ende:<br>
echo "$0 pre-freeze start" | logger
  traphandle default /usr/sbin/snmptt
echo "-------------------------------------------------------------------------------------" >> /tmp/snapshot.log
disableAuthorization yes
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') pre-freeze start" >> /tmp/snapshot.log
und starten den Dienst:<br>
# Set Username and Passwort for MySQL Access. Set mysql_password="" if no password needed
systemctl start snmptrapd.service
mysql_username="root"
<!--
mysql_password=""
Wir bearbeiten die Datei
timeout=300
nano /etc/default/snmpd
 
und ändern die Zeile
# ************************************************************************************************
SNMPDRUN=yes
# No Changes behind this line!
in
# ************************************************************************************************
SNMPDRUN=no
# Check if username + password is used
<br>
if [ -n "$mysql_password" ]; then
<br>
    use_credentials="-u$mysql_username -p$mysql_password"
Dann die Datei
else
nano /etc/default/snmptrapd
    use_credentials=""
und ändern die Zeile
fi
TRAPDRUN=no
 
in
# Name of the Lockfile
TRAPDRUN=yes
lock_file=/tmp/mysql_tables_read_lock
<br>
<br>
Nun Konfigurieren wir den Dienst noch:<br>
<br>
nano /etc/snmp/snmptrapd.conf
und fügen die folgenden Zeilen ans Ende:<br>
traphandle default /usr/sbin/snmptt
disableAuthorization yes
<br>
<br>
-->
----


===snmptt konfigurieren===
sleep_time=$((timeout+10))
Zunächst die .ini Datei zum bearbeiten öffnen:
rm -f $lock_file
nano /etc/snmp/snmptt.ini
echo "$0 executing FLUSH TABLES WITH READ LOCK" | logger
und die folgende Zeilen ändern (Denkt dran: {{key|STRG}} + {{key|W}} ruft die Suche auf):<br>
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') executing FLUSH TABLES WITH READ LOCK" >> /tmp/snapshot.log
mode = standalone
 
translate_log_trap_oid = 2
# Start READ LOCK - Process will send to background (and will still run after script is completed. Lock will stop if process is stopped
net_snmp_perl_enable = 1
# 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
date_time_format = %H:%M:%S %Y/%m/%d
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 &
log_file = /var/log/snmptt/snmptt.log
# get the PID of the mysql process
log_system_enable = 1
mysql_pid=$!
mibs_environment = ALL
Dann die .conf Datei - wir sichern zunächst die Original-Datei (auch wenn wir die wahrscheinlich nie wieder brauchen) durch umbenennen:<br>
mv /etc/snmp/snmptt.conf /etc/snmp/snmptt.conf.orig
und erstellen eine neue, leere Datei:<br>
nano /etc/snmp/snmptt.conf
mit folgendem Inhalt:<br>
EVENT general .* "General event" Normal
FORMAT ZBXTRAP $aA $ar severity:$s $Fn$+*
<br>
Das stammt ursprünglich alles nahezu 1:1 von https://lab4.org/wiki/Zabbix_Monitoring_SNMP_Traps_empfangen aus dem Jahr 2018<br>
Ich habe es nur an Ubuntu 20.04. angepasst.<br>
<br>
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===
echo "$0 child pid $mysql_pid" | logger
Gerade wenn viele Einträge in der Datei
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') child pid $mysql_pid" >> /tmp/snapshot.log
/var/log/snmptt/snmptt.log
landen kann reicht das wöchentliche Bereinigen der Datei nicht aus.<br>
Deshalb passen wir '''''logrotate''''' an um die Größe der Datei zu begrenzen.<br>
Nun noch die bereits vorhanden Konfigurationsdatei bearbeiten:
nano /etc/logrotate.d/snmptt
und folgenden Inhalt einfügen / anpassen:<br>
/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'''
}
<br>
<br>
----


===Zabbix Server oder Proxy konfigurieren===
# Waiting for the lockfile ...
Die Konfigurationsdatei zum bearbeiten öffnen:
c=0
nano /etc/zabbix/zabbix_server.conf
while [ ! -f $lock_file ]
oder
do
nano /etc/zabbix/zabbix_proxy.conf
    # check if mysql is running
und folgende Zeilen suchen und ändern bzw. Kommentarzeichen davor entfernen:<br>
    if ! ps -p $mysql_pid 1>/dev/null ; then
SNMPTrapperFile=/var/log/snmptt/snmptt.log
        echo "$0 mysql command has failed (bad credentials?)" | logger
StartSNMPTrapper=1
        echo "$0 $(date '+%Y-%m-%d %H:%M:%S') mysql command has failed (bad credentials?)" >> /tmp/snapshot.log
<br>
        exit 1
Danach müssen wir den Zabbix Server oder Proxy Dienst neu starten:<br>
    fi
systemctl restart zabbix-server.service
    sleep 1
oder
    c=$((c+1))
systemctl restart zabbix-proxy.service
    # check if the script run into timeout
<br>
    if [ $c -gt $timeout ]; then
<br>
        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
===Trapper-Datei anlegen===
        kill $mysql_pid
Neuere Zabbix Versionen (ab 3.0) meckern wenn es die Traps-Datei nicht gibt.<br>
    fi
Die wird aber ggf. erst beim ersten eintreffenden Trap erstellt. Deshalb:<br>
done
snmptrap -v 1 -c public localhost 1.3.6.1.4.1.2.3 "" 6 3 0000 s s "Zabbix-SNMP-Traps"
# write PID into the lockfile
Damit senden wir einen Test-Trap an uns selbst.<br>
echo $mysql_pid > $lock_file
Nun sollte es die Datei geben:<br>
 
ls -l /var/log/snmptt/snmptt.log
echo "$0 pre-freeze stop" | logger
Ausgabe:
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') pre-freeze stop" >> /tmp/snapshot.log
-rw-r--r-- 1 root root 158 Sep  6 09:55 /var/log/snmptt/snmptt.log
 
Der Inhalt sollte wie folgt sein:
exit 0
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
</source>
.ccitt:Zabbix-SNMP-Traps
Das müssen wir nur einmal machen, nach einem Reboot ist die Datei noch vorhanden<br>
----
<!--==VMware Tools installieren==
Wenn euer Zabbix-Server auch eine virtuelle Maschine ist installiert Ubuntu 16.04.x automatische die Open-VM-Tools.<br>
<br>
<br>
{{Hinweis| Die '''Open-VM-Tools''' sind bereits installiert! Nachfolgendes müsst Ihr nur ausführen wenn es denn unbedingt die Original VMware-Tools sein müssen!}}<br>
und<br>
Wollt Ihr - Warum auch immer - die VMware-Tools von vSphere installieren so geht wie folgt vor:
nano /usr/sbin/post-thaw-script
* Open-VM-Tools deinstallieren:<br>
<source lang="bash">
apt remove open-vm-tools
#!/bin/sh
apt purge open-vm-tools
# 2018-04-20 Bernhard Linz
* VMware Tools installieren im vSphere Client auswählen
# Original script by Pascal Di Marco, check https://www.veeam.com/wp-consistent-protection-mysql-mariadb.html for more information
* CD Mounten:
# Log will be write to syslog and(!) to /tmp/snapshot.log
mkdir /mnt/cdrom
echo "$0 post-thaw start" | logger
mount /dev/cdrom /mnt/cdrom
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') post-thaw start" >> /tmp/snapshot.log
* Entpacken (Versionsnnummer eurer Tools anpassen)
tar xzvf /mnt/cdrom/VMwareTools-10.0.0-3000743.tar.gz -C /tmp/
* Installieren
  cd /tmp/vmware-tools-distrib/
./vmware-install.pl -d
* Schalter -d heisst er gleich durchrauscht ohne nachzufragen und die Standard-Verzeichnisse nimmt.
* Falls er hier mit den Hinweis auf die Open-VM-Tools abbricht:
./vmware-install.pl
:und von Hand weiter machen. Alle Fragen ggf. einfach nur mit {{key|Enter}} bzw, {{key|Return}} bestätigen.<br>
* netter weise wirft er die CD auch gleich wieder raus
* Fertig!
<br>
<br>
----
-->


==Agent konfigurieren (nur Proxy)==
lock_file=/tmp/mysql_tables_read_lock
Wir wollen natürlich unseren ''''Zabbix Proxy'''' gleich mit überwachen!<br>
 
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!)
# get PID from lockfile
Bearbeiten wir zunächst die Konfigurationsdatei:<br>
mysql_pid=$(cat $lock_file)
  nano /etc/zabbix/zabbix_agentd.conf
echo "$0 sending sigterm to $mysql_pid" | logger
und ändert folgende Zeile:<br>
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') sending sigterm to $mysql_pid" >> /tmp/snapshot.log
Hostname=zabbixproxy.domain.local
# and send stop to process
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!<br>
pkill -9 -P $mysql_pid
{{Hinweis| Ihr wollt die zabbix_agent<big>'''d'''</big>.conf ändern, NICHT die zabbix_agent.conf - man beachte den feinen Unterschied!}}<br>
rm -f $lock_file
<br>
Das Start-Skript haben wir vorhin schon aktiviert.
<br>
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.<br>
----


==Windows-Freigabe für Agenten-Dateien einrichten==
echo "$0 post-thaw stop" | logger
In meinen früheren Anleitungen wurde in diesem Abschnitt beschrieben wie man eine Samba-Freigabe erstellt in welcher der Zabbix-Agent abgelegt wird.<br>
echo "$0  $(date '+%Y-%m-%d %H:%M:%S') post-thaw stop" >> /tmp/snapshot.log
Das mache ich in der Praxis nicht mehr - neuere Windows-Versionen finden es unvorstellbar das man auf eine Freigabe ohne Passwort zugreifen möchte.<br>
 
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.<br>
exit 0
Das Installationspaket hat nur ein paar MByte, da findet sich ein Plätzchen.<br>
</source>
----
<!--
===Vorwort===
Die Dateien für die Verteilung des Agenten lege ich regelmäßig auf dem Zabbix-Server bzw. Zabbix-Proxy ab.<br>
Ja, ich richte hier eine "Jeder Vollzugriff" - Freigabe ein - meinen '''''AgentAutoUpdate''''' lasse ich am liebsten mit '''SYSTEM''' Rechten laufen (wegen UAC-Kontrolle) - und so gibt es kein Problem mit den Zugriffsberechtigungen.<br>
Wenn Bedenken bestehen (zu recht) kann die Freigabe auch auf "readonly" gesetzt werden. Dann kann das Installationsskript aber auch kein Log dorthin schreiben.<br>
Die einfachste Lösung aus meiner Sicht ist:<br>
* Zunächst wie hier beschrieben mit Vollzugriff enrichten
* Von einem Windows-Rechner aus kann auf die Freigabe zugegriffen und die notwendigen Dateien dorthin kopiert werden
* Wenn nach Tests alles läuft können die Rechte im Ordner per <code>chmod</code> auf "Nur Lesen" gesetzt werden, "Schreiben" dann nur noch für den Log-Ordner so fern vorhanden.<br>
<br>
<br>
----
Jetzt müssen wir die beiden Skripte noch ausführbar machen und dem root zuordnen:<br>
===Voraussetzungen===
chmod 0700 /usr/sbin/pre-freeze-script
Wenn die Installation nachträglich erfolgt - erst einmal Updaten!
chmod 0700 /usr/sbin/post-thaw-script
  apt update
chown root:root /usr/sbin/pre-freeze-script
apt upgrade
  chown root:root /usr/sbin/post-thaw-script
<br>
<br>
Nun installieren wir Samba - damit erstellt man Windows-Freigaben unter Linux:<br>
Voraussetzung ist das die VMware-Tools installiert sind!<br>
apt install samba samba-common-bin
Dabei ist es egal ob es sich um die Original VMware-Tools oder um die Open-VM-Tools aus den Repositories handelt.<br>
das dauert einen Moment - und danach können wir Samba konfigurieren.
Nun können wir die Skripts testen indem wir einen Snapshot mit den folgenden Einstellungen erstellen:<br>
:[[Datei:ClipCapIt-200521-204401.PNG]]<br>
<br>
<br>
Konfiguration erfolgt über ein zentrale Datei:<br>
Beispielausgabe aus der
  nano /etc/samba/smb.conf
cat /tmp/snapshot.log
In dieser ändern wie folgende Zeilen (wie immer: mit {{Key|STRG}} + {{Key|W}} kann man in '''''nano''''' suchen)<br>
 
workgroup = ZNIL        ; NetBIOS Domänenname in euerer Umgebung, könnt Ihr auch auf WORKGROUP lassen
-------------------------------------------------------------------------------------
wins support = no
/usr/sbin/pre-freeze-script 2018-04-20 11:37:12 pre-freeze start
wins server = 192.168.1.1 ; Falls es einen WINS-Server bei euch im Netzwerk gibt, geben wir diesen hier an
/usr/sbin/pre-freeze-script 2018-04-20 11:37:12 executing FLUSH TABLES WITH READ LOCK
Jetzt geht es mit der eigentlichen Freigabe weiter:<br>
/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
<br>
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'''''.<br>
In den meisten Umgebungen geht das so schnell das nicht einmal diese kommen (4 bis 5 Sekunden).<br>
{{Hinweis| Das ganze funktioniert sowohl mit den original VMware-Tools als auch den Open-VM-Tools!}}<br>
<br>
<br>
----
===='''Einrichtung Freigabe (simple Version)'''====
Bei der "simplen Version" wird einfach eine Freigabe erstellt auf die jeder Vollzugriff hat. Die Installationsdateien für den Agenten könnt Ihr von jedem Windows Rechner aus einfach in der Freigabe ablegen.<br>
Logdateien können ebenfalls einfach hinein geschrieben werden.<br>
Die Nachteile könnten sein:<br>
* Jeder(!) kann die Dateien manipulieren
* Ein Trojaner könne die .exe Dateien in der Freigabe befallen und würde (Falls das automatische Update eingesetzt wird) ggf. auf jedem überwachten System verteilt werden
* ...
<br>
<br>
Wir bearbeiten weiter die
----
nano /etc/samba/smb.conf
ganz am Schluss fügen wir folgende Zeilen hinzu:<br>
[agent]
comment = Zabbix Agents
path = /share/zabbix/agent
guest ok = yes
read only = no


dann speichern und verlassen.<br>
==Festplatte im laufenden Betrieb vergrößern==
Nun müssen wir den Ordner noch anlegen:<br>
Ihr habt den Zabbix-Server nach dieser Anleitung hier als VM installiert (und ohne LVM) und nun geht euch der Platz aus?<br>
mkdir -p /share/zabbix/agent
Kein Problem, Ihr könnt die Festplatte im laufenden Betrieb vergößern!<br>
chmod 777 /share/zabbix/agent
===Schritt 1: Platz an die Festplatte anhängen===
und den Dienst von Samba neu starten:<br>
* Stellt sicher das auf der VM zur zeit kein Snapshot aktiv ist!
systemctl restart smbd
* Vergrößert die Festplatten um den benötigten Speicherplatz
<br>
in dem Beispiel hier wird der Platz von 50 auf 80GB vergrößert.<br>
Ab jetzt können wir über
===Schritt 2: Betriebssystem die neue Größe erkennen lassen===
\\IP-Adresse-Zabbix-Proxy\agent
Die einfachste Methode ist den Server neu zu starten.<br>
von Windows aus auf die Freigabe zugreifen und die Dateien dort ablegen.<br>
Wer will kann es aber auch im laufenden Betrieb durchführen, und das geht so:<br>
{{Hinweis| Wenn Ihr statt der IP-Adresse einen Namen verwenden wollt müsst Ihr diesen Namen auf euren DNS Server anlegen}}<br>
apt install scsitools -y
<br>
rescan-scsi-bus --forcerescan
----
Da kommen dann reichlich Meldungen.<br>
 
Im Anschluß zur Kontrolle ein
===='''Einrichtung Freigabe (sichere Version)'''====
  fdisk -l
Bei der "sicheren Version" wird die gleiche Freigabe erstellt auf die jeder nur lesenden Zugriff hat. Das Setup des Agenten kann so weiterhin von jedem Rechner aus aufgerufen werden.<br>
Die Ausgabe sollte ähnlich wie diese sein:<br>
Für die Logdateien wir deine separate Freigabe erstellt in die jeder Schreiben kann.<br>
  Festplatte /dev/loop0: 54,98 MiB, 57626624 Bytes, 112552 Sektoren
Der Ordner mit den Installationsdateien wird 2x Freigegeben, die zweite Freigabe ist versteckt und mit Benutzername und Passwort geschützt. Der Admin kann so weiterhin die Dateien bequem aktualisieren.<br>
  Einheiten: Sektoren von 1 * 512 = 512 Bytes
<br>
  Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
Wir bearbeiten weiter die
  E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
  nano /etc/samba/smb.conf
ganz am Schluss fügen wir folgende Zeilen hinzu:<br>
  [agent]
  comment = Zabbix Agents
  path = /share/zabbix/agent
  guest ok = yes
read only = yes
   
   
  [agent$]
  Festplatte /dev/loop1: 71,28 MiB, 74735616 Bytes, 145968 Sektoren
  comment = Zabbix Agents Management
  Einheiten: Sektoren von 1 * 512 = 512 Bytes
  path = /share/zabbix/agent
  Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
  guest ok = no
  E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
read only = no
valid users = agent
browsable = no
   
   
  [logging]
  Festplatte /dev/loop2: 29,9 MiB, 31334400 Bytes, 61200 Sektoren
  comment = Logging of agent installations
Einheiten: Sektoren von 1 * 512 = 512 Bytes
  path = /share/zabbix/logging
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
  guest ok = yes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
  read only = no
  <span style="color:red">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.</span>
  <span style="background:lightgreen">Festplatte /dev/sda: 80 GiB, 85899345920 Bytes, 167772160 Sektoren</span>
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


dann speichern und verlassen.<br>
===Schritt 3: Partition vergrößern===
Nun müssen wir die Ordner noch anlegen:<br>
Das <code>/</code> Verzeichnis, auch root-Verzeichnis genannt befindet sich auf dem Gerät
mkdir -p /share/zabbix/agent
  /dev/sda2
mkdir -p /share/zabbix/logging
wenn Ihr nach dieser Anleitung installiert hattet. Kontrollieren könnte Ihr das z.B. mit
  chmod 777 /share/zabbix/agent
df -h
chmod 777 /share/zabbix/logging
und dann schauen was links vom Verzeichnis <code>/</code> steht:<br>
Jetzt müssen wir noch den Benutzer für den Zugriff auf <code>agent$</code> anlegen.<br>
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
Den Namen des Benutzer haben wir oben schon mit '''agent''' festegelegt, in der Zeile mit <code>valid users = agent</code>
  udev            448M      0  448M    0% /dev
Angelegt wird dieser wie folgt:<br>
tmpfs            99M    1,1M  98M    2% /run
  useradd -M -s /sbin/nologin '''agent'''
  <span style="background:yellow">/dev/sda2        49G    5,5G  40G    8% /</span>
  passwd '''agent'''
Die nächsten Befehle gehen von {{Key|/dev/sda2}}, wenn der Pfad anderes ist müsst Ihr diesen anpassen!<br>
und das gewünschte Passwort 2x eingeben.<br>
growpart /dev/sda 2
Jetzt noch der Samba Teil:
  resize2fs /dev/sda2
smbpasswd -a agent
Ja, beim ersten Befehl ist da ein Leerzeichen zwischen dem sda und der 2, beim zweiten Befehl nicht.<br>
smbpasswd -e agent
 
Da musstet Ihr das gleiche Passwort noch einmal zweimal eingeben.<br>
===Schritt 4: Das war schon alles!===
Jetzt den Dienst von Samba neu starten:<br>
Ihr könnt mit<br>
systemctl restart smbd
  df -h
<br>
es einmal kontrollieren - aber das war schon alles:
Ab jetzt können wir über
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
\\IP-Adresse-Zabbix-Proxy\agent
udev            448M      0  448M    0% /dev
von Windows aus auf die Freigabe zugreifen.<br>
tmpfs            99M    1,1M  98M    2% /run
Ruft Ihr statt dessen
<span style="background:lightgreen">/dev/sda2        79G    5,5G  70G    8% /</span>
  \\IP-Adresse-Zabbix-Proxy\agent'''$'''
tmpfs          491M      0  491M    0% /dev/shm
auf sollte sich ein Fenster mit der Abfrage nach Benutzername und Passwort öffnen. Gebt die zuvor festgelegten Daten ein (Benutzer '''agent''' und euer festgelegtes Passwort) und ihr kommt wiederum auf die gleiche Freigabe.<br>
tmpfs          5,0M      0  5,0M    0% /run/lock
Nur habt Ihr in dieser nun auch Schreibrechte und könnt die Dateien ablegen.<br>
tmpfs          491M      0  491M    0% /sys/fs/cgroup
Auf<br>
/dev/loop0      55M    55M    0  100% /snap/core18/1880
  \\IP-Adresse-Zabbix-Proxy\logging
/dev/loop1      72M    72M    0 100% /snap/lxd/16099
hat jeder Schreibrechte, hier sollten aber ja nur Textdateien landen.<br>
  /dev/loop2      30M    30M    0 100% /snap/snapd/8542
{{Hinweis| Wenn Ihr statt der IP-Adresse einen Namen verwenden wollt müsst Ihr diesen Namen auf euren DNS Server anlegen}}<br>
  tmpfs            99M      0  99M    0% /run/user/0
{{Hinweis| Genaueres zum Schutz der Verzeichnisse mit Benutzername und Passwort (Standalone Samba Server, nicht in der Domäne) findet Ihr hier: https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Standalone_Server#Creating_a_Local_User_Account}}<br>
/dev/loop3      32M    32M    0  100% /snap/snapd/10707
<br>
  /dev/loop4      56M    56M    0  100% /snap/core18/1944
----
  /dev/loop5      70M    70M    0 100% /snap/lxd/19032
 
===Probleme beim Zugriff auf die Freigabe - Windows 10 / Windows Server 2016===
Die Freigabe <code>\\IP-Adresse-Zabbix-Proxy\agent</code> erlaubt nun eigentlich den Zugriff ohne Benutzername und Passwort.<br>
Als erstes testet ob Ihr weiter kommt wenn Ihr beim Benutzernamen einfach einen Buchstaben eingebt und das Passwort leer lasst. Wenn nicht:<br>
Windows 10 kann sich einfach nicht mehr einen Zugriff ohne Anmeldung vorstellen und will unbedingt ein Passwort nutzen.<br>
Dazu [https://support.microsoft.com/de-ch/help/4046019/guest-access-smb2-disabled-by-default-in-windows-10-server-2016 hier der Microsoft-Artikel]<br>
<br>
<u>'''Lösung 1:'''</u><br>
Ihr legt einen extra Benutzer für den Zugriff an, in diesem Beispiel heißt der Benutzer '''''installagent''''':
  useradd -M -s /sbin/nologin '''installagent'''
  passwd '''installagent'''
  smbpasswd -a '''installagent'''
  smbpasswd -e '''installagent'''
Das Passwort dann nach Wahl. Gerne auch das gleiche wie der Benutzername '''installagent''' falls Ihr oben schon den Benutzer '''agent''' angelegt habt. Denn der kann trotzdem nur lesen auf die Freigabe des Agenten zugreifen.<br>
<br>
<br>
<u>'''Lösung 2:'''</u><br>
Ihr richtet die Gruppenrichtlinie entsprechend des obigen Microsoft-Artikel ein.<br>
Lokal geht das mit<br>
  gpedit.msc
und ändert die folgende Richtlinie:<br>
  Computerkonfiguration => Administrative Vorlagen => Netzwerk => LanMan-Arbeitsstation => Unsichere Gastanmeldungen aktivieren
:[[Datei:ClipCapIt-180201-104636.PNG]]<br>
Die Passwortabfrage poppt dann immer noch auf - aber einfach einen beliebigen Buchstaben als Benutzernamen angeben, Passwort leer lassen und es klappt.<br>
Skripte können dann wieder ohne Abfrage direkt auf die Freigabe zugreifen.<br>
<br>
----
-->
<!--
===Proxy/Server mit in Windows-Domäne aufnehmen===
In manchen Domänen hatte ich nun das "Problem" das immer ein Fenster mit Benutzername / Passwort aufgeht - es ist dabei völlig egal was man eintippt, man kommt an die Freigabe.
War aber nervig.<br>
<u>'''Lösung:'''</u> Wir nehmen den ZabbixProxy mit in die Domäne auf und Ruhe ist!<br>
{{Hinweis| Ich hatte es jetzt bei einem Kunden da war es genau umgekehrt! Macht diesen Tipp nur wenn ihr das beschriebene Problem habt!}}<br>
Also noch mal<br>
nano /etc/samba/smb.conf
und dann wie folgt ändern:<br>
security = domain
workgroup = ZNIL
Workgroup MUSS dabei euren NetBIOS Domänen-Namen entsprechen.<br>
Dann Speichern und die Dienste neu starten:<br>
service smbd restart && service nmbd restart
und mit folgendem Befehl der Domäne beitreten:<br>
net rpc join -S <Domänencontroller> -U Administrator
'''''<Domänencontroller>''''' ersetzt ihr dabei durch den Namen eures primärem Dömencontroller, also dem Rolleninhaber<br>
Er fragt dann nach dem Kennwort und ist dann Domänenmitglied - was Ihr gerne im AD kontrollieren könnt (landet unter '''''Computers''''')<br>
Ab nun "rauscht" der Zugriff auf die Freigabe immer durch.<br>
<br>
<br>
<br>
----
-->
 
==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 <code>/etc/zabbix/zabbix_web_service.conf</code> konfiguriert wird.<br>
Anfragen nimmt er nur von lokal entgegen (127.0.0.1 / ::1)<br>
Nun den Dienst auch noch im Zabbix-Server bekannt machen:<br>
nano /etc/zabbix/zabbix_server.conf
und die folgenden Zeilen ändern:<br>
StartReportWriters=3
WebServiceURL=http://localhost:10053/report
Im Anschluß Zabbix einmal neu starten:<br>
systemctl restart zabbix-server.service
<br>
Im Webinterface müsst ihr nun einmal hinterlegen wir die Reporting-Services das Zabbix-Frontend erreichen können:<br>
Unter {{Key|Administration}} . {{Key|General}} - {{Key|Other configuration parameters}} bei '''''Frontend URL''''' folgendes setzen:
http://localhost/
<br>
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:<br>
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.<br>
Dafür ist der dann installiert ohne das wir eine grafische Oberfläche auf dem Server installieren mussten.<br>
<br>
----
 
==Datensicherung des Zabbix-Servers==
Bevorzugt installiere ich Zabbix-Server als Virtuelle Maschinen / VM.<br>
Die Backup-Software sichert am besten einfach die gesamte VM.<br>
Eigentlich macht quasi jede Backup-Software hierzu während der Sicherung einen Snapshot, sichert die Festplattendaten und löst dann den Snapshot wieder auf.<br>
Wer dabei sicher gehen will das die Datenbank in einem konsistenten Zustand gesichert wird kann folgendes tun:<br>
----
===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
<br>
Unter VMware funktioniert das mit 2 Skripten die wir wie folgt anlegen:<br>
nano /usr/sbin/pre-freeze-script
mit folgendem Inhalt:<br>
<source lang="bash">
#!/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
</source>
<br>
und<br>
nano /usr/sbin/post-thaw-script
<source lang="bash">
#!/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
</source>
<br>
Jetzt müssen wir die beiden Skripte noch ausführbar machen und dem root zuordnen:<br>
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
<br>
Voraussetzung ist das die VMware-Tools installiert sind!<br>
Dabei ist es egal ob es sich um die Original VMware-Tools oder um die Open-VM-Tools aus den Repositories handelt.<br>
Nun können wir die Skripts testen indem wir einen Snapshot mit den folgenden Einstellungen erstellen:<br>
:[[Datei:ClipCapIt-200521-204401.PNG]]<br>
<br>
Wenn wir uns die Logs ansehen sollte
* Ein Eintrag in die Datei {{Key|/tmp/snapshot.log}} vorgenommen
* Der Zabbix-Server gestoppt
* Der MySQL-Server gestoppt
* Wieder ein Eintrag in die Datei {{Key|/tmp/snapshot.log}} geschrieben
* Der MySQL-Server wieder gestartet
* Der Zabbix-Server wieder gestartet
werden.<br>
<br>
{{Hinweis| Das ganze funktioniert sowohl mit den original VMware-Tools als auch den Open-VM-Tools!}}<br>
<br>
<br>
----
 
===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
<br>
Unter VMware funktioniert das mit 2 Skripten die wir wie folgt anlegen:<br>
nano /usr/sbin/pre-freeze-script
mit folgendem Inhalt:<br>
{{Warnung|Vergesst nicht das Passwort in Zeile 9 zu setzen (steht auf Leer was per Default passen sollte)}}
<source lang="bash">
#!/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
</source>
<br>
und<br>
nano /usr/sbin/post-thaw-script
<source lang="bash">
#!/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
</source>
<br>
Jetzt müssen wir die beiden Skripte noch ausführbar machen und dem root zuordnen:<br>
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
<br>
Voraussetzung ist das die VMware-Tools installiert sind!<br>
Dabei ist es egal ob es sich um die Original VMware-Tools oder um die Open-VM-Tools aus den Repositories handelt.<br>
Nun können wir die Skripts testen indem wir einen Snapshot mit den folgenden Einstellungen erstellen:<br>
:[[Datei:ClipCapIt-200521-204401.PNG]]<br>
<br>
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
<br>
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'''''.<br>
In den meisten Umgebungen geht das so schnell das nicht einmal diese kommen (4 bis 5 Sekunden).<br>
{{Hinweis| Das ganze funktioniert sowohl mit den original VMware-Tools als auch den Open-VM-Tools!}}<br>
<br>
<br>
----
 
==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?<br>
Kein Problem, Ihr könnt die Festplatte im laufenden Betrieb vergößern!<br>
===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.<br>
===Schritt 2: Betriebssystem die neue Größe erkennen lassen===
Die einfachste Methode ist den Server neu zu starten.<br>
Wer will kann es aber auch im laufenden Betrieb durchführen, und das geht so:<br>
apt install scsitools -y
rescan-scsi-bus --forcerescan
Da kommen dann reichlich Meldungen.<br>
Im Anschluß zur Kontrolle ein
fdisk -l
Die Ausgabe sollte ähnlich wie diese sein:<br>
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
<span style="color:red">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.</span>
<span style="background:lightgreen">Festplatte /dev/sda: 80 GiB, 85899345920 Bytes, 167772160 Sektoren</span>
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 <code>/</code> 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 <code>/</code> steht:<br>
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
udev            448M      0  448M    0% /dev
tmpfs            99M    1,1M  98M    2% /run
<span style="background:yellow">/dev/sda2        49G    5,5G  40G    8% /</span>
Die nächsten Befehle gehen von {{Key|/dev/sda2}}, wenn der Pfad anderes ist müsst Ihr diesen anpassen!<br>
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.<br>
 
===Schritt 4: Das war schon alles!===
Ihr könnt mit<br>
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
<span style="background:lightgreen">/dev/sda2        79G    5,5G  70G    8% /</span>
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,<br>
Lest hierzu auch die offizielle Dokumentation / Anleitung von Zabbix:<br>
https://www.zabbix.com/documentation/current/manual/installation/upgrade
----
===Backup===
Macht ein Backup eures Zabbix-Servers '''oder''' wie ich es bevorzuge: einen Snapshot.<br>
Falls euer Zabbix-Server eine VM ist so fahrt diesen runter, macht einen Snapshot und fahrt ihn wieder hoch.<br>
<br>
----
===Benachrichtigungen deaktivieren===
Falls ihr euch Emails bei Problemen senden lasst - deaktiviert das jetzt besser.<br>
Die Probleme werden weiter auf dem Webinterface angezeigt.<br>
<br>
----
===Vorher alles andere Updaten===
apt update && apt upgrade -y && apt autoremove -y
und danach am besten einen Reboot durchführen<br>
<br>
----
===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/
<br>
----
===Zabbix stoppen===
systemctl stop zabbix-server.service
systemctl stop zabbix-agent.service
<br>
----
===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:<br>
<div style="background:lightgreen"><u>'''Für die Version 5.0.x LTS (Support bis 31.05.2025)'''</u><br>
<nowiki>wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+focal_all.deb</nowiki>
dpkg -i zabbix-release_5.0-1+focal_all.deb
apt update
rm zabbix-release_*
</div>
----
===Zabbix-Server anhalten===
systemctl stop zabbix-server.service zabbix-agent.service
----
===Upgrade einspielen===
{{Hinweis|Normalerweise würden wir das Update per <code>apt upgrade -y</code> 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 <code>apt install</code> Weg, der kann nämlich auch Updates einspielen, dann aber halt nur für die angegebenen Pakete}}<br>
Nun führt Ihr folgendes aus:<br>
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.<br>
Es wird eine Abfrage zu den beiden Konfigurationsdateien kommen - nämlich ob Ihr diese Überschreiben wollt (J oder Y) oder die vorhandene beibehalten (N).<br>
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.<br>
Falls Ihr die Dateien überschreibt müsst ihr diese dann mit den beiden zuvor gesicherten vergleichen und die neuen anpassen.<br>
Ich empfehle eine 2. PuTTY Sitzung zu öffnen, dann könnt Ihr beide Dateien nebeneinander betrachten.<br>
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).<br>
<br>
Falls Ihr die Dateien nicht überschrieben habt müsst ihr nichts weiter machen.<br>
----
===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:<br>
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:<br>
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''''' (<code>-uzabbix</code>) mit dem Passwort '''''zabbix''''' (<code>-pzabbix</code>) die Datenbank '''''zabbix''''' (<code>use zabbix;</code>) nutzt.<br>
<br>
<big>'''Der Zabbix-Server sollte dazu unbedingt noch angehalten sein!'''</big><br>
<big>'''Das kann je nach Datenbankgröße sehr lange dauern!!!</big><br>
<br>
----
 
===Der erste Start===
Öffnet eine 2. puTTY-Sitzung in welcher Ihr folgenden Befehl ausführt:<br>
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.<br>
In eurer 1. puTTY Sitzung startet Ihr nun wieder den Zabbix-Agenten und -Server:<br>
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.<br>
Achtet auf Warnmeldungen - manchmal deaktiviert er Actions zu Triggern mit dem Hinweis das Ihr diese einmal manuell überprüfen sollt.<br>
Nach einer Weile (30 Sekunden bis 30 Stunden) sollte das Upgrade abgeschlossen sein und er seine normalen Worker starten.<br>
<br>
Sollte es keinerlei Log-Meldungen geben und der Dienst beendet sich einfach wieder so gibt es in der Regel einen Fehler in der Konfigurationsdatei.<br>
Den genauen Fehler findet Ihr mit<br>
journalctl -xe
Da steht dann über welchen Parameter er gestolpert ist.<br>
<br>
----
 
===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.<br>
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.<br>
<br>
----
===Snapshot wieder löschen===
Läuft alles wie gewünscht (was es tut wenn das Datenbankupgrade fehlerfrei durchgelaufenen ist) löscht den Snapshot wieder.<br>
<br>
----
===Benachrichtigungen wieder aktivieren===
Hat sich alles wieder beruhigt, der Server lief eine Weile und die '''''Problems''''' List hat sich wieder normalisiert?<br>
Dann könnt Ihr die Benachrichtigungen wieder scharf schalten.<br> 
----
===Templates===
Jetzt seit Ihr zwar auf der 5.0.0 Version, habt aber noch eure alten Templates.<br>
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.<br>
* 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):<br>
{{Hinweis|Rechte Maustaste und '''Link speichern unter ...''' nutzen!}}
[[Media:Zabbix_5.0.0_Templates_Part_1.xml|Zabbix_5.0.0_Templates_Part_1.xml]]
  [[Media:Zabbix_5.0.0_Templates_Part_2.xml|Zabbix_5.0.0_Templates_Part_2.xml]]
Der Import ist - Stand 22.05.2020 - noch ungetestet<br>
----
----


==Kommentare==
==Kommentare==
<comments />
<comments />

Version vom 15. August 2022, 11:26 Uhr

Changelog:

  • 26.04.2022: Seite erstellt, jedoch noch nicht angepasst
  • 21.07.2022: Erste Version, SNMP-Traps Empfang funktioniert noch nicht
  • 08.08.2022: Fix für SNMP-Trap Probleme gefunden und in Anleitung eingebaut
  • 12.08.2022: Alles Mist mit snmptt => rausgeworfen und durch zabbix_trap_receiver.pl ersetzt

Installation Ubuntu Server 22.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. Diese berücksichtigen auch die Mindestanforderungen von Ubuntu 22.04

  • 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.
    • Die Festplatte kann bei einer VM nachträglich vergrößert werden - siehe dazu den Abschnitt in diesem Artikel weiter unten
    • Thick-Provision Lazy-Zeroed

Danach Einstellungen der VM bearbeiten: Reiter Hardware:

  • Arbeitsspeicher:
    • Server 4GB oder mehr
    • Proxy 2GB oder mehr
  • CPUs:
    • Anzahl der virtuellen Sockets
      • Server: 4 oder mehr
      • Proxy: 2 oder mehr
    • Anzahl der Cores pro Socket: 1 (Immer Anzahl der Sockets erhöhen)

Reiter Optionen

  • ...




Grundinstallation

Important.png
Hinweis:Ich habe die offizielle ISO verwendet: https://ubuntu.com/download/server (Option 3: Manual install - ubuntu-22.04.1-live-server-amd64.iso). Es gibt zur Zeit keine Minimalversion mit LAMP Installer.


CD einlegen und los,
die Fragen beantwortet Ihr wie folgt (sind ggf. die Überschriften der Dialoge):

ClipCapIt-220427-115227.PNG Try or Install Ubuntu Server
ClipCapIt-220427-115721.PNG Deutsch
ClipCapIt-220427-115808.PNG German / German
ClipCapIt-220427-115850.PNG Ubuntu Server
ClipCapIt-220427-120131.PNG 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:
ClipCapIt-200521-152546.PNG ens160 => Bearbeite IPv4
ClipCapIt-200521-152642.PNG Manuell
ClipCapIt-200521-152742.PNG 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
ClipCapIt-200521-153302.PNG Erledigt
ClipCapIt-220427-120259.PNG Bei Bedarf, sonst leer lassen
ClipCapIt-220427-120335.PNG Erledigt
ClipCapIt-220427-120400.PNG Nutzt die ganze Festplatte ohne LVM (also Haken entfernen). Die Festplatte lässt sich später trotzdem leicht vergrößern
ClipCapIt-220427-120443.PNG Erledigt
ClipCapIt-220427-120505.PNG Fortfahren
ClipCapIt-220427-120827.PNG Ich lege hier den Benutzer installadmin an. Wählt euren Benutzer und Passwort nach Wunsch (Aufschreiben!)
ClipCapIt-220427-120914.PNG OpenSSH-Server auswählen => Erledigt (für Zugriff z.B. mit Putty)
ClipCapIt-220427-120938.PNG Erledigt

Ab jetzt heißt es abwarten. Wenn er kann lädt er gleich ein paar Sicherheitsupdates nach:

ClipCapIt-220427-121943.PNG Jetzt neustarten
ClipCapIt-220427-122036.PNG ISO aus der VM entfernen und Enter drücken
ClipCapIt-220427-122152.PNG 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:

ClipCapIt-200521-155245.PNG ClipCapIt-200521-155339.PNG ClipCapIt-200521-160706.PNG

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

Important.png
Hinweis: Ob nun wie ich immer als root arbeiten wollt oder aber als einfacher Benutzer und dann immer sudo verwendet müsst Ihr selbst wissen
  • Mit Benutzer installadmin anmelden
sudo -i
  • Kennwort des Benutzer installadmin eintippen
passwd root
  • neues Kennwort für "root" 2x eintippen
ClipCapIt-200521-161108.PNG
  • 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
ClipCapIt-200521-161435.PNG

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

Important.png
Hinweis:

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 wechseln

Anmelden 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 sudo ohne Passwort

Warning.png
Warnung: Da hier nur machen wenn Ihr NICHT als root arbeiten wollt sondern den Installadmin nutzen wollt, Ansonsten überspringen!

Wenn wir auf den root verzichten und uns immer mit einem Benutzer anmelden so möchte ich zumindest auf das ständige Passwort eingeben verzichten.

sudo visudo

und ganz am Ende folgendes anhängen:

installadmin ALL=(ALL) NOPASSWD: ALL

Nun reicht nach der Anmeldung als installadmin ein

sudo -i

um dauerhaft root zu sein.


Installadmin löschen

Warning.png
Warnung: Da hier nur machen wenn Ihr immer als root arbeiten wollt und auch gerade als root angemeldet seit

Alternativ arbeiten wir nur als root und 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.

ClipCapIt-200521-162422.PNG

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
ClipCapIt-200521-162802.PNG

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

Unter Ubuntu 22.04 scheint es nicht mehr ganz so schlimm wie unter 20.04 - aber in einer 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:

ClipCapIt-200521-163633.PNG

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. Ich möchte das 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 php8.1-gd snmp libsnmp-base openjdk-11-jdk unixodbc unixodbc-dev libxml2 libxml2-dev snmp-mibs-downloader snmpd snmptrapd snmptt sblim-wbemcli php8.1-ldap traceroute ipmitool libldap2-dev php8.1-bcmath php8.1-mbstring php8.1-xml fonts-dejavu-core libnet-snmp-perl libnet-ip-perl libnet-netmask-perl libnet-dns-perl libxml-writer-perl -y
Face-wink.png
Tipp: Zum kopieren der oberen Zeile mit der Maus vor das 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

Für die Version 6.0.x LTS (Support bis 28.02.2027)
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-3+ubuntu22.04_all.deb
dpkg -i zabbix-release_6.0-3+ubuntu22.04_all.deb
apt update
rm zabbix-release_*
Für die Version 6.2.x (Support bis 31.01.2023)
wget https://repo.zabbix.com/zabbix/6.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.2-1+ubuntu22.04_all.deb
dpkg -i zabbix-release_6.2-1+ubuntu22.04_all.deb
apt update
rm zabbix-release_*

Zabbix installieren

Die Installation der ausführbaren Dateien erfolgt bei allen Varianten nach /sbin !

Warning.png
Warnung: Achtet nachfolgend immer darauf ob Ihr den Zabbix Server oder den Zabbix Proxy installieren wollt!

Fehlermeldungen zum Zabbix Java Gateway ignorieren!


Button Zabbix SERVER.png Als Server

Ab Version 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



Button Zabbix PROXY.png Als Proxy

Ab Version 6.0

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

Important.png
Hinweis:Es funktioniert auch alles ohne diese Optimierungen! Diese kann man machen wenn der Server etwas größer wird weil wir hunderte von Servern und Geräten überwachen! In diesem Fall sollte auch der Festplattenplatz entsprechend dimensoniert sein! Für einen einfachen Server könnt Ihr das hier auch überspringen!

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 (und die Kommentare lesen / beachten!!!):

# 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
# Eigenes Fehlerprotokoll wieder aktivieren
log_error = /var/log/mysql/error.log


mit STRG + x den nano verlassen und speichern bestätigen j + Enter)

Warning.png
Warnung: Prüft unbedingt den Wert von 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


Damit nach einen Upgrade das Fehlerlogging weiter funktioniert entfernt das Kommentarzeichen auch in der folgenden Zeile: log_error = /var/log/mysql/error.log also das # am Anfang entfernen
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'"
mysql -u root -e "SET GLOBAL log_bin_trust_function_creators = 1"

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.

Important.png
Hinweis: Hinschauen! Hier folgen 2 unterschiedliche Wege für Server oder Proxy!


Button Zabbix SERVER.png Bei einem Server:
Ab Version 6.0

zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -pzabbix zabbix


Button Zabbix PROXY.png 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!

Ab Version 6.0

cat /usr/share/doc/zabbix-sql-scripts/mysql/proxy.sql | mysql -uzabbix -pzabbix zabbix

Konfigurationsdateien anpassen

Nun die Konfigurationsdatei bearbeiten:

Button Zabbix SERVER.png 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=

Hier klicken (Toggle) für die ganze zabbix_server.conf
# This is a configuration file for Zabbix server daemon



Button Zabbix PROXY.png Bei einem Proxy:

nano /etc/zabbix/zabbix_proxy.conf
  • folgende Zeilen finden und auf diese Werte ändern, ggf. den # davor entfernen, STRG + W ist suchen!
ProxyMode=0

#IP oder DNS Name des Zabbix-Servers an den gemeldet werden soll. Falls der Port nicht 10051 ist dann mit : dahinter setzen
Server=123.123.123.123     

# 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=



Important.png

Hinweis:Unter Ubuntu 22.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



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:
Button Zabbix SERVER.png Auf einem Server

systemctl enable zabbix-server.service




Button Zabbix PROXY.png Auf einem Proxy

systemctl enable zabbix-proxy.service




Button Zabbix AGENT.png und noch der Agent

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:

17748:20220721:153654.849 Starting Zabbix Server. Zabbix 6.0.6 (revision 3f7597e3ea3).
17748:20220721:153654.849 ****** Enabled features ******
17748:20220721:153654.849 SNMP monitoring:           YES
17748:20220721:153654.849 IPMI monitoring:           YES
17748:20220721:153654.849 Web monitoring:            YES
17748:20220721:153654.849 VMware monitoring:         YES
17748:20220721:153654.849 SMTP authentication:       YES
17748:20220721:153654.849 ODBC:                      YES
17748:20220721:153654.849 SSH support:               YES
17748:20220721:153654.849 IPv6 support:              YES
17748:20220721:153654.849 TLS support:               YES
17748:20220721:153654.849 ******************************
17748:20220721:153654.849 using configuration file: /etc/zabbix/zabbix_server.conf
17748:20220721:153654.874 current database version (mandatory/optional): 06000000/06000004
17748:20220721:153654.874 required mandatory version: 06000000
17750:20220721:153654.880 starting HA manager
17750:20220721:153654.884 HA manager started in active mode
17748:20220721:153654.885 server #0 started [main process]
17751:20220721:153654.886 server #1 started [service manager #1]
17752:20220721:153654.886 server #2 started [configuration syncer #1]
17756:20220721:153655.131 server #3 started [alert manager #1]
17758:20220721:153655.132 server #5 started [alerter #2]
17759:20220721:153655.132 server #6 started [alerter #3]
17760:20220721:153655.133 server #7 started [preprocessing manager #1]
17761:20220721:153655.134 server #8 started [preprocessing worker #1]
17763:20220721:153655.135 server #10 started [preprocessing worker #3]
17766:20220721:153655.136 server #13 started [lld worker #2]
17767:20220721:153655.136 server #14 started [ipmi manager #1]
17768:20220721:153655.141 server #15 started [housekeeper #1]
17776:20220721:153655.141 server #23 started [escalator #1]
17762:20220721:153655.143 server #9 started [preprocessing worker #2]
17765:20220721:153655.143 server #12 started [lld worker #1]
17764:20220721:153655.145 server #11 started [lld manager #1]
17771:20220721:153655.146 server #18 started [discoverer #1]
17777:20220721:153655.147 server #24 started [ipmi poller #1]
17772:20220721:153655.149 server #19 started [history syncer #1]
17770:20220721:153655.150 server #17 started [http poller #1]
17769:20220721:153655.150 server #16 started [timer #1]
17773:20220721:153655.151 server #20 started [history syncer #2]
17774:20220721:153655.151 server #21 started [history syncer #3]
17775:20220721:153655.152 server #22 started [history syncer #4]
17757:20220721:153655.152 server #4 started [alerter #1]
17778:20220721:153655.153 server #25 started [proxy poller #1]
17784:20220721:153655.154 server #26 started [self-monitoring #1]
17790:20220721:153655.163 server #28 started [task manager #1]
17791:20220721:153655.164 server #29 started [poller #1]
17792:20220721:153655.167 server #30 started [poller #2]
17793:20220721:153655.172 server #31 started [poller #3]
17799:20220721:153655.174 server #37 started [unreachable poller #4]
17795:20220721:153655.175 server #33 started [poller #5]
17798:20220721:153655.178 server #36 started [unreachable poller #3]
17803:20220721:153655.178 server #41 started [trapper #3]
17800:20220721:153655.181 server #38 started [unreachable poller #5]
17794:20220721:153655.181 server #32 started [poller #4]
17801:20220721:153655.182 server #39 started [trapper #1]
17804:20220721:153655.185 server #42 started [trapper #4]
17802:20220721:153655.186 server #40 started [trapper #2]
17789:20220721:153655.186 server #27 started [vmware collector #1]
17797:20220721:153655.189 server #35 started [unreachable poller #2]
17796:20220721:153655.192 server #34 started [unreachable poller #1]
17808:20220721:153655.194 server #44 started [icmp pinger #1]
17809:20220721:153655.194 server #45 started [icmp pinger #2]
17807:20220721:153655.195 server #43 started [trapper #5]
17810:20220721:153655.196 server #46 started [icmp pinger #3]
17811:20220721:153655.200 server #47 started [icmp pinger #4]
17812:20220721:153655.201 server #48 started [icmp pinger #5]
17822:20220721:153655.203 server #54 started [alert syncer #1]
17818:20220721:153655.203 server #50 started [icmp pinger #7]
17823:20220721:153655.204 server #55 started [history poller #1]
17819:20220721:153655.204 server #51 started [icmp pinger #8]
17820:20220721:153655.204 server #52 started [icmp pinger #9]
17817:20220721:153655.205 server #49 started [icmp pinger #6]
17821:20220721:153655.205 server #53 started [icmp pinger #10]
17824:20220721:153655.206 server #56 started [history poller #2]
17825:20220721:153655.208 server #57 started [history poller #3]
17829:20220721:153655.209 server #59 started [history poller #5]
17826:20220721:153655.210 server #58 started [history poller #4]
17830:20220721:153655.216 server #60 started [availability manager #1]
17831:20220721:153655.218 server #61 started [trigger housekeeper #1]
17832:20220721:153655.219 server #62 started [odbc poller #1]
17792:20220721:153656.171 enabling Zabbix agent checks on host "Zabbix server": interface 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:

Zabbix General Proxys.png

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

Button Zabbix SERVER.png

nano /etc/apache2/sites-available/000-default.conf

und den gesamten Inhalt durch den folgenden ersetzen: (F9 löscht eine Zeile)
Ab Zabbix 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_php.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:

:ClipCapIt-220721-154507.PNG


Wenn Ihr den Inhalt der 000-default.conf wie zuvor beschrieben geändert habt sollte hier alles grün sein:

ClipCapIt-220721-154541.PNG


Die Datenbankkonfiguration, in die letzten 3 Felder muss überall "zabbix" stehen:

ClipCapIt-220721-154625.PNG


In dem leeren Feld könnt Ihr den Namen des Servers angeben. Dieser wird oben rechts und auf den Web-Tabs angezeigt:

ClipCapIt-220721-154719.PNG


Noch eben die Zusammenfassung bestätigen:

ClipCapIt-220721-154904.PNG


Geschafft!

ClipCapIt-220721-154944.PNG


ClipCapIt-220721-155019.PNG
Benutzername: Admin
Passwort:     zabbix
Important.png
Hinweis: Admin mit großem A!





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

Important.png
Hinweis:Neue Methode! Statt snmptt wird ein Perl-Script von Zabbix.com verwendet. snmptt machte bei mir unter Ubuntu 22.04 jede menge Ärger
Die Lösung stammt in Teilen von https://sbcode.net/zabbix/snmp-traps/

Button Zabbix SERVER.png und Button Zabbix PROXY.png

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 libnet-snmp-perl libnet-ip-perl libnet-netmask-perl libnet-dns-perl libxml-writer-perl




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:

perl do "/usr/bin/zabbix_trap_receiver.pl";
disableAuthorization yes

und starten den Dienst:

systemctl start snmptrapd.service

zabbix_trap_receiver.pl einrichten

Aktuelles Skript herunterladen:

wget https://git.zabbix.com/projects/ZBX/repos/zabbix/raw/misc/snmptrap/zabbix_trap_receiver.pl -O /usr/bin/zabbix_trap_receiver.pl

und ausführbar machen

chmod a+x /usr/bin/zabbix_trap_receiver.pl


Für den Fall das der Download nicht zur Verfügung steht hier der Inhalt der Datei:

#!/usr/bin/env perl

#
# Zabbix
# Copyright (C) 2001-2022 Zabbix SIA
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
#

#########################################
#### ABOUT ZABBIX SNMP TRAP RECEIVER ####
#########################################

# This is an embedded perl SNMP trapper receiver designed for sending data to the server.
# The receiver will pass the received SNMP traps to Zabbix server or proxy running on the
# same machine. Please configure the server/proxy accordingly.
#
# Read more about using embedded perl with Net-SNMP:
#       http://net-snmp.sourceforge.net/wiki/index.php/Tut:Extending_snmpd_using_perl

#################################################
#### ZABBIX SNMP TRAP RECEIVER CONFIGURATION ####
#################################################

### Option: SNMPTrapperFile
#       Temporary file used for passing data to the server (or proxy). Must be the same
#       as in the server (or proxy) configuration file.
#
# Mandatory: yes
# Default:
$SNMPTrapperFile = '/tmp/zabbix_traps.tmp';

### Option: DateTimeFormat
#       The date time format in strftime() format. Please make sure to have a corresponding
#       log time format for the SNMP trap items.
#
# Mandatory: yes
# Default:
$DateTimeFormat = '%H:%M:%S %Y/%m/%d';

###################################
#### ZABBIX SNMP TRAP RECEIVER ####
###################################

use Fcntl qw(O_WRONLY O_APPEND O_CREAT);
use POSIX qw(strftime);

sub zabbix_receiver
{
        my (%pdu_info) = %{$_[0]};
        my (@varbinds) = @{$_[1]};

        # open the output file
        unless (sysopen(OUTPUT_FILE, $SNMPTrapperFile, O_WRONLY|O_APPEND|O_CREAT, 0666))
        {
                print STDERR "Cannot open [$SNMPTrapperFile]: $!\n";
                return NETSNMPTRAPD_HANDLER_FAIL;
        }

        # get the host name
        my $hostname = $pdu_info{'receivedfrom'} || 'unknown';
        if ($hostname ne 'unknown')
        {
                $hostname =~ /\[(.*?)\].*/;                    # format: "UDP: [127.0.0.1]:41070->[127.0.0.1]"
                $hostname = $1 || 'unknown';
        }

        # print trap header
        #       timestamp must be placed at the beginning of the first line (can be omitted)
        #       the first line must include the header "ZBXTRAP [IP/DNS address] "
        #              * IP/DNS address is the used to find the corresponding SNMP trap items
        #              * this header will be cut during processing (will not appear in the item value)
        printf OUTPUT_FILE "%s ZBXTRAP %s\n", strftime($DateTimeFormat, localtime), $hostname;

        # print the PDU info
        print OUTPUT_FILE "PDU INFO:\n";
        foreach my $key(keys(%pdu_info))
        {
                if ($pdu_info{$key} !~ /^[[:print:]]*$/)
                {
                        my $OctetAsHex = unpack('H*', $pdu_info{$key}); # convert octet string to hex
                        $pdu_info{$key} = "0x$OctetAsHex";              # apply 0x prefix for consistency
                }

                printf OUTPUT_FILE "  %-30s %s\n", $key, $pdu_info{$key};
        }

        # print the variable bindings:
        print OUTPUT_FILE "VARBINDS:\n";
        foreach my $x (@varbinds)
        {
                printf OUTPUT_FILE "  %-30s type=%-2d value=%s\n", $x->[0], $x->[2], $x->[1];
        }

        close (OUTPUT_FILE);

        return NETSNMPTRAPD_HANDLER_OK;
}

NetSNMP::TrapReceiver::register("all", \&zabbix_receiver) or
        die "failed to register Zabbix SNMP trap receiver\n";

print STDOUT "Loaded Zabbix SNMP trap receiver\n";

MIBS nutzen

Die MIBS übersetzen die OID in lesbare Namen. Um diese zu nutzen:

nano /etc/snmp/snmp.conf

und dort aus

mibs :

ein

#mibs :

machen. Dann den dienst neu starten:

systemctl restart snmptrapd.service

logrotate für /tmp/zabbix_traps.tmp erstellen

Gerade wenn viele Einträge in der Datei

/tmp/zabbix_traps.tmp

landen kann das schon mal einigen Platz kosten.
Deshalb nutzen wir logrotate an um die Größe der Datei zu begrenzen.

nano /etc/logrotate.d/zabbix_traps

und folgenden Inhalt einfügen / anpassen:

/tmp/zabbix_traps.tmp {
        su snmptt Debian-snmp
        create 666 snmptt Debian-snmp
        missingok
        notifempty
        daily
        rotate 4
        size 1M
        compress
        sharedscripts
        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=/tmp/zabbix_traps.tmp
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 / Testen

Die Datei /tmp/zabbix_traps.tmp gibt es noch nicht.
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 /tmp/zabbix_traps.tmp

Ausgabe:

-rw-r--r-- 1 root root 158 Sep  6 09:55 /var/log/snmptt/snmptt.log

Der Inhalt sollte wie folgt sein:

11:41:32 2022/08/12 ZBXTRAP 127.0.0.1
PDU INFO:
  notificationtype               TRAP
  receivedfrom                   UDP: [127.0.0.1]:44623->[127.0.0.1]:162
  community                      public
  version                        0
  transactionid                  1
  requestid                      0
  errorstatus                    0
  errorindex                     0
  messageid                      0
VARBINDS:
  DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (0) 0:00:00.00
  SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: SNMPv2-SMI::enterprises.2.3.0.3
  SNMPv2-SMI::snmpV2             type=4  value=STRING: "Zabbix-SNMP-Traps"
  SNMP-COMMUNITY-MIB::snmpTrapAddress.0 type=64 value=IpAddress: 172.16.2.164
  SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 type=4  value=STRING: "public"
  SNMPv2-MIB::snmpTrapEnterprise.0 type=6  value=OID: SNMPv2-SMI::enterprises.2.3

Nach einem Reboot ist Datei weg bis der erste Trap eintrifft - was Zabbix aber nicht zu stören scheint.


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!

Important.png
Hinweis: Ihr wollt die zabbix_agentd.conf ändern, NICHT die zabbix_agent.conf - man beachte den feinen Unterschied!



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 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:
Unter Administration . General - Other bei Frontend URL folgendes setzen:

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.
Dafür ist der dann installiert ohne das wir eine grafische Oberfläche auf dem Server installieren mussten.


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:

ClipCapIt-200521-204401.PNG


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.

Important.png
Hinweis: Das ganze funktioniert sowohl mit den original VMware-Tools als auch den Open-VM-Tools!





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:

Warning.png
Warnung: Vergesst nicht das Passwort in Zeile 9 zu setzen (steht auf Leer was per Default passen sollte)
#!/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:

ClipCapIt-200521-204401.PNG


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).

Important.png
Hinweis: Das ganze funktioniert sowohl mit den original VMware-Tools als auch den Open-VM-Tools!





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

Kommentare

Loading comments...