Aktionen

Zabbix Server + Agent unter Ubuntu 18.04 LTS installieren

Aus znilwiki

Changelog:

  • 25.08.2016: Erste Version mit Ubuntu 18.04 und Zabbix 3.4.13
  • 01.11.2018: Zabbix 4.0.x ergänzt
  • 28.01.2019: Upgrade 3.x auf 4.0 ergänzt
  • 09.05.2019: netplan Beschreibung verbessert, Hinweis auf Ubuntu-Installations-ISO angepasst
  • 13.05.2019: Automatischer Start von ntp beim Booten fehlte
  • 28.05.2019: Hinweis auf Standard-System-Utilities entfernt / Hinweis auf MySQL Passwort entfernt
  • 01.06.2019: BugFix für Zabbix 4.2.2 hinzugefügt
  • 15.10.2019: Zabbix 4.4.x hinzugefügt
  • 05.12.2019: Fix für Reboot Probleme hinzugefügt



Inhaltsverzeichnis

1 Installation Ubuntu Server 18.04.x LTS (Long Term Support)



1.1 Einstellungen für die VM

Falls Ihr den Zabbix Server oder Proxy als VM installiert so erstellt diese mit den folgenden Einstellungen:

  • 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:

Danach Einstellungen der VM bearbeiten: Reiter Hardware:

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

Reiter Optionen

  • ...




1.2 Grundinstallation

Important.png
Hinweis:Verwendet die 64Bit Version mit dem herkömmlichen Installer: http://cdimage.ubuntu.com/releases/18.04/release/ (ubuntu-18.04.2-server-amd64.iso)


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

  • ClipCapIt-161125-104554.PNG Deutsch
  • ClipCapIt-161125-104745.PNG Ubuntu Server installieren
  • ClipCapIt-161125-104849.PNG [!] Select a language: <Ja>
  • ClipCapIt-161125-104951.PNG [!] Auswählen des Standorts: Deutschland
  • ClipCapIt-161125-105119.PNG [!] Tastatur konfigurieren: <Nein>
  • ClipCapIt-161125-105203.PNG [!] Tastatur konfigurieren: German
  • ClipCapIt-161125-105251.PNG [!] Tastatur konfigurieren: German
  • ClipCapIt-161125-105611.PNG [!] Netzwerk einrichten: zabbix-server.domain.local (Name nach Wahl!)
  • ClipCapIt-161125-105710.PNG [!] Benutzer und Passwörter einrichten: installadmin (Benutzername nach Wahl)
  • ClipCapIt-161125-110151.PNG [!] Benutzer und Passwörter einrichten: installdadmin
  • ClipCapIt-161125-110255.PNG [!] Benutzer und Passwörter einrichten: test1234 (Kennwort nach Wahl)
  • ClipCapIt-161125-110359.PNG [!] Benutzer und Passwörter einrichten: test1234
  • ClipCapIt-161125-110444.PNG [!] Benutzer und Passwörter einrichten: <Nein>
  • ClipCapIt-161125-110558.PNG [!] Uhr einstellen: <Ja>
  • ClipCapIt-161125-110646.PNG [!!] Festplatten partitionieren: Geführt - gesamte Platte verwenden und LVM einrichten
  • ClipCapIt-161125-111037.PNG [!!] Festplatten partitionieren: Return
  • ClipCapIt-161125-111121.PNG [!!] Festplatten partitionieren: <Ja>
  • ClipCapIt-161125-111207.PNG [!] Festplatten partitionieren: <Weiter>
  • ClipCapIt-161125-111249.PNG [!] Festplatten partitionieren: <Ja>
  • ClipCapIt-161125-111514.PNG [!] Paketmanager konfigurieren: ggf. Proxy angeben <Weiter>
  • ClipCapIt-161125-111733.PNG [!] Konfiguriere tasksel: Keine automatischen Aktualisierungen
  • ClipCapIt-161125-111842.PNG [!] Softwareauswahl
    • [*] LAMP server
    • [*] OpenSSH Server
    • <Weiter>
  • ClipCapIt-161125-113924.PNG [!] GRUB-Bootloader auf einer Festplatte installieren: <Ja>
  • ClipCapIt-161125-114152.PNG [!!] Installation abschließen: <Weiter>
  • ClipCapIt-161125-114250.PNG Bootet neu, CD-ROM entfernen



1.3 root wieder freischalten

  • Mit Benutzer installadmin anmelden
sudo passwd root
  • Kennwort des Benutzer installadmin eintippen
  • neues Kennwort für "root" 2x eintippen
ClipCapIt-161125-140609.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:
sudo nano /etc/ssh/sshd_config

sucht nach der Zeile (STRG + W ist Suchen) nach

PermitRootLogin without-password

und ändert diese wie folgt:

PermitRootLogin yes
ClipCapIt-161125-140904.PNG

Speichert die Datei und startet den ssh Dienst neu:

sudo systemctl restart sshd

Ab dann klappt es auch mit dem SSH-Login für den Benutzer root, z.B. über puTTY
Jetzt

logout

eintippen - der (eingeschränkte) Benutzer installadmin hat sich somit abgemeldet


1.4 Installadmin löschen

Gleich der erste Test - wir melden uns als root an und löschen den installadmin mit dem unsicheren Kennwort wieder.
Als root anmelden

deluser --remove-home installadmin
ClipCapIt-161125-141443.PNG




1.5 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-161125-141717.PNG




1.6 Feste IP-Adresse vergeben

Als root anmelden Konfigurationsdatei bearbeiten:

nano /etc/netplan/01-netcfg.yaml
Important.png
Hinweis:Sollte es die Datei nicht geben: Bearbeitet die Datei die in dem Verzeichnis schon vorhanden ist!


Die Netzwerkkarte hat einen Namen der in der Regel mit

ens...

beginnt. In meiner VM ist es ens160. Den Namen könnt Ihr z.B. mit dem Befehl

ip addr

herausfinden.

network:
  ethernets:
    ens160:
      addresses:
      - 192.168.45.140/24
      gateway4: 192.168.45.1
      nameservers:
        addresses:
        - 8.8.8.8
        - 8.8.4.4
        search:
        - znil.local
      optional: true
 version: 2
  • mehrere DNS-Server werden einfach durch weitere entsprechende Zeilen angegeben, Suchdomänen dito
  • Beachtet das Einrücken! Wichtig ist das alles wie oben jeweils auf einer Senkrechten Ebene steht udn das es immer jeweils 2 Leerzeichen mehr oder weniger eingerückt ist
  • Speichern STRG + x, danach j und den Dateinamen mit Enter bestätigen
netplan --debug apply

Falls es Fehler gibt (- vergessen etc.) wird das in der Debugging-Ausgabe stehen.
Falls es geklappt hat - was wir mit

ip addr

prüfen führen wir einen reboot durch:

reboot

eintippen und den Server damit wieder neu starten.


1.7 Updates einspielen

  • wieder anmelden als root - ggf. per puTTY - dann können wir schön die nachfolgenden Befehle per Copy&Paste einfügen.
  • Updates suchen für Betriebssystem: (aktualisiert den Katalog aus den Update-Quellen)
apt update
  • Updates einspielen:
apt dist-upgrade -y
  • Nach Update überflüssige Pakete entfernen:
apt autoremove -y




1.8 Automatische Updates deaktivieren

Sicherheitshalber - ich hatte jetzt 4 Zabbix Server wo die /boot zu 100% voll war wegen der Kernelupdates.
Das verhindern wir mit:

apt remove -y unattended-upgrades

Nun werden auch diese nicht automatisch eingespielt.

Nachtrag: Scheinbar wird nun keine extra /boot Partition angelegt sondern es liegt mit auf der Hauptpartition. Ich werde das mal beobachten.


1.9 Benötigte Programme für Zabbix installieren

apt install dnsutils htop make gcc libc6-dev libmysqlclient-dev libcurl4-openssl-dev libssh2-1-dev libsnmp-dev libiksemel-dev mysql-server libopenipmi-dev fping php7.2-gd snmp libsnmp-base openjdk-11-jdk unixodbc unixodbc-dev libxml2 libxml2-dev snmp-mibs-downloader snmpd snmptrapd snmptt python-pywbem php7.2-ldap traceroute ipmitool libldap2-dev php7.2-bcmath php7.2-mbstring php7.2-xml ttf-dejavu-core -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 - und anderem zum Beispiel die ganzen PHP-Pakete.


2 Zabbix Server installieren

2.1 Installationspfade

Achtung - entgegen meiner Anleitungen für Ubuntu 12.04. und 14.04. sind die Pfade nach der Installation nun anders:
Binärdateien:

/usr/sbin/zabbix_agentd
/usr/sbin/zabbix_server
/usr/sbin/zabbix_proxy
/usr/bin/zabbix_get
/usr/bin/zabbix_sender

Konfigurationsdateien:

/etc/zabbix/zabbix_agentd.conf
/etc/zabbix/zabbix_server.conf
/etc/zabbix/zabbix_proxy.conf
/etc/zabbix/zabbix_java_gateway.conf

Scripte:

/usr/lib/zabbix/externalscripts
/usr/lib/zabbix/alertscripts/

Javagateway:

/usr/sbin/zabbix_java_gateway




2.2 Zabbix Repository hinzufügen

Für die Version 3.0.x LTS (Support bis 28.02.2021)
wget https://repo.zabbix.com/zabbix/3.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.0-2+bionic_all.deb
dpkg -i zabbix-release_3.0-2+bionic_all.deb
apt update
Für die Version 3.4.x (Support am 31.10.2018 abgelaufen!)
wget https://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+bionic_all.deb
dpkg -i zabbix-release_3.4-1+bionic_all.deb
apt update
Für die Version 4.0.x LTS (Support bis 31.10.2023)
wget https://repo.zabbix.com/zabbix/4.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.0-2+bionic_all.deb
dpkg -i zabbix-release_4.0-2+bionic_all.deb
apt update
Für die Version 4.2.x (Support bis 31.10.2019)
wget https://repo.zabbix.com/zabbix/4.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.2-1+bionic_all.deb
dpkg -i zabbix-release_4.2-1+bionic_all.deb
apt update
Für die Version 4.4.x (Support bis 2. Quartal 2020)
wget https://repo.zabbix.com/zabbix/4.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.4-1+bionic_all.deb
dpkg -i zabbix-release_4.4-1+bionic_all.deb
apt update





2.3 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 wollte!




2.3.1 Button Zabbix SERVER.png Als Server

apt install zabbix-server-mysql zabbix-frontend-php zabbix-agent zabbix-get zabbix-sender zabbix-java-gateway



2.3.2 Button Zabbix PROXY.png Als Proxy

apt install zabbix-proxy-mysql zabbix-agent zabbix-get zabbix-sender zabbix-java-gateway



2.4 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/3.4/manual/appendix/install/db_scripts

Die Zabbix-Datenbank kann recht groß werden - wir passen MySQL deshalb aus Performance-Gründe einmal an (diesen Tipp habe ich schamlos von Das 4. Labor übernommen.

  • MySQL Einstellungen bearbeiten:
nano /etc/mysql/mysql.conf.d/mysqld.cnf

Wer MariaDB einsetzt muss statt dessen diese Datei nehmen:

nano /etc/mysql/mariadb.conf.d/50-server.cnf

und unterhalb von

[mysqld]

Diese Zeilen einfügen:

# Größe der Logdatei statt 10MB
innodb_log_file_size = 512M
# Transaktionswerte nach Möglichkeit nicht in den Doublewritebuffer schreiben
innodb_doublewrite = 0
# Transaktionen schon bestätigen sobald diese im Cache stehen:
innodb_flush_log_at_trx_commit = 2
# Wieviel Hauptspeicher soll zum Puffern verwendet werden? Nehmt die Hälfte des vorhandenen Speichers (bei 4GB RAM also 2G, bei 1G also 512M)
innodb_buffer_pool_size = 1G
# 2-Phasen Übertragung ausschalten
innodb_support_xa = 0

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



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:

2018-09-06T08:24:43.395732Z 0 [Note] /usr/sbin/mysqld: Shutdown complete
2018-09-06T08:24:43.726443Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-09-06T08:24:43.728929Z 0 [Note] /usr/sbin/mysqld (mysqld 5.7.23-0ubuntu0.18.04.1) starting as process 3630 ...
2018-09-06T08:24:43.734806Z 0 [Warning] option 'innodb-support-xa': boolean value 'No' wasn't recognized. Set to OFF.
2018-09-06T08:24:43.735293Z 0 [Warning] InnoDB: Using innodb_support_xa is deprecated and the parameter may be removed in future releases. Only innodb_support_xa=ON is allowed.
2018-09-06T08:24:43.735397Z 0 [Note] InnoDB: PUNCH HOLE support available
2018-09-06T08:24:43.735434Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2018-09-06T08:24:43.735443Z 0 [Note] InnoDB: Uses event mutexes
2018-09-06T08:24:43.735451Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2018-09-06T08:24:43.735459Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
2018-09-06T08:24:43.735467Z 0 [Note] InnoDB: Using Linux native AIO
2018-09-06T08:24:43.735965Z 0 [Note] InnoDB: Number of pools: 1
2018-09-06T08:24:43.736151Z 0 [Note] InnoDB: Using CPU crc32 instructions
2018-09-06T08:24:43.738774Z 0 [Note] InnoDB: Initializing buffer pool, total size = 2G, instances = 8, chunk size = 128M
2018-09-06T08:24:43.976407Z 0 [Note] InnoDB: Completed initialization of buffer pool
2018-09-06T08:24:44.031741Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
2018-09-06T08:24:44.044410Z 0 [Note] InnoDB: Highest supported file format is Barracuda.
2018-09-06T08:24:44.148010Z 0 [Warning] InnoDB: Resizing redo log from 2*3072 to 2*32768 pages, LSN=2589629
2018-09-06T08:24:44.271836Z 0 [Warning] InnoDB: Starting to delete and rewrite log files.
2018-09-06T08:24:44.284341Z 0 [Note] InnoDB: Setting log file ./ib_logfile101 size to 512 MB
2018-09-06T08:24:44.285177Z 0 [Note] InnoDB: Progress in MB:
 100 200 300 400 500
2018-09-06T08:24:46.299669Z 0 [Note] InnoDB: Setting log file ./ib_logfile1 size to 512 MB
2018-09-06T08:24:46.299964Z 0 [Note] InnoDB: Progress in MB:
 100 200 300 400 500
2018-09-06T08:24:48.398616Z 0 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
2018-09-06T08:24:48.398933Z 0 [Warning] InnoDB: New log files created, LSN=2589629
2018-09-06T08:24:48.399537Z 0 [Note] InnoDB: Creating shared tablespace for temporary tables
2018-09-06T08:24:48.399771Z 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
2018-09-06T08:24:48.462122Z 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
2018-09-06T08:24:48.463309Z 0 [Note] InnoDB: 96 redo rollback segment(s) found. 96 redo rollback segment(s) are active.
2018-09-06T08:24:48.463458Z 0 [Note] InnoDB: 32 non-redo rollback segment(s) are active.
2018-09-06T08:24:48.464140Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 4433ms. The settings might not be optimal. (flushed=0 and evicted=0, during the time.)
2018-09-06T08:24:48.464322Z 0 [Note] InnoDB: 5.7.23 started; log sequence number 2589620
2018-09-06T08:24:48.464678Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
2018-09-06T08:24:48.465036Z 0 [Note] Plugin 'FEDERATED' is disabled.
2018-09-06T08:24:48.468732Z 0 [Note] InnoDB: Buffer pool(s) load completed at 180906  8:24:48
2018-09-06T08:24:48.476168Z 0 [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key
2018-09-06T08:24:48.476346Z 0 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
2018-09-06T08:24:48.476500Z 0 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
2018-09-06T08:24:48.476649Z 0 [Note] Server socket created on IP: '0.0.0.0'.
2018-09-06T08:24:48.492281Z 0 [Note] Event Scheduler: Loaded 0 events
2018-09-06T08:24:48.492687Z 0 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.7.23-0ubuntu0.18.04.1'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Ubuntu)

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



2.5 MySQL Datenbank einrichten

  • Zabbix Datenbank anlegen:
  • Hinweis: er wird nach einem Passwort fragen - das ist das was sie beim Setup dem MySQL root Benutzer gegeben haben! ( Passwort-nach-Wahl )
  • Habt Ihr kein Kennwort vergeben müsst Ihr trotzdem Enter drücken!
mysql -u root -e "create database zabbix character set utf8 collate utf8_bin"
mysql -u root -e "grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix'"


  • nun die Datenbanktabellen anlegen - das geschieht nun unter dem Datenbankbenutzer "zabbix" der das Passwort "zabbix" hat - 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:

zcat /usr/share/doc/zabbix-server-mysql/create.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!

zcat /usr/share/doc/zabbix-proxy-mysql/schema.sql.gz | mysql -uzabbix -pzabbix zabbix



2.6 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=5
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

Hier klicken (Toggle) für die ganze zabbix_server.conf
# This is a configuration file for Zabbix server daemon
# To get more information about Zabbix, visit http://www.zabbix.com

############ GENERAL PARAMETERS #################

### Option: ListenPort
#       Listen port for trapper.
#
# Mandatory: no
# Range: 1024-32767
# Default:
# ListenPort=10051

### Option: SourceIP
#       Source IP address for outgoing connections.
#
# Mandatory: no
# Default:
# SourceIP=

### Option: LogType
#       Specifies where log messages are written to:
#               system  - syslog
#               file    - file specified with LogFile parameter
#               console - standard output
#
# Mandatory: no
# Default:
# LogType=file

### Option: LogFile
#       Log file name for LogType 'file' parameter.
#
# Mandatory: no
# Default:
# LogFile=

LogFile=/var/log/zabbix/zabbix_server.log

### Option: LogFileSize
#       Maximum size of log file in MB.
#       0 - disable automatic log rotation.
#
# Mandatory: no
# Range: 0-1024
# Default:
# LogFileSize=1

LogFileSize=0

### Option: DebugLevel
#       Specifies debug level:
#       0 - basic information about starting and stopping of Zabbix processes
#       1 - critical information
#       2 - error information
#       3 - warnings
#       4 - for debugging (produces lots of information)
#       5 - extended debugging (produces even more information)
#
# Mandatory: no
# Range: 0-5
# Default:
# DebugLevel=3

### Option: PidFile
#       Name of PID file.
#
# Mandatory: no
# Default:
# PidFile=/tmp/zabbix_server.pid

PidFile=/var/run/zabbix/zabbix_server.pid

### Option: DBHost
#       Database host name.
#       If set to localhost, socket is used for MySQL.
#       If set to empty string, socket is used for PostgreSQL.
#
# Mandatory: no
# Default:
# DBHost=localhost

### Option: DBName
#       Database name.
#       For SQLite3 path to database file must be provided. DBUser and DBPassword are ignored.
#
# Mandatory: yes
# Default:
# DBName=

DBName=zabbix

### Option: DBSchema
#       Schema name. Used for IBM DB2 and PostgreSQL.
#
# Mandatory: no
# Default:
# DBSchema=

### Option: DBUser
#       Database user. Ignored for SQLite.
#
# Mandatory: no
# Default:
# DBUser=

DBUser=zabbix

### Option: DBPassword
#       Database password. Ignored for SQLite.
#       Comment this line if no password is used.
#
# Mandatory: no
# Default:
# DBPassword=
DBPassword=zabbix

### Option: DBSocket
#       Path to MySQL socket.
#
# Mandatory: no
# Default:
# DBSocket=/tmp/mysql.sock

### Option: DBPort
#       Database port when not using local socket. Ignored for SQLite.
#
# Mandatory: no
# Range: 1024-65535
# Default (for MySQL):
# DBPort=3306

############ ADVANCED PARAMETERS ################

### Option: StartPollers
#       Number of pre-forked instances of pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartPollers=5

### Option: StartIPMIPollers
#       Number of pre-forked instances of IPMI pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartIPMIPollers=0
StartIPMIPollers=5

### Option: StartPollersUnreachable
#       Number of pre-forked instances of pollers for unreachable hosts (including IPMI and Java).
#       At least one poller for unreachable hosts must be running if regular, IPMI or Java pollers
#       are started.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartPollersUnreachable=1
StartPollersUnreachable=5

### Option: StartTrappers
#       Number of pre-forked instances of trappers.
#       Trappers accept incoming connections from Zabbix sender, active agents and active proxies.
#       At least one trapper process must be running to display server availability and view queue
#       in the frontend.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartTrappers=5

### Option: StartPingers
#       Number of pre-forked instances of ICMP pingers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartPingers=1
StartPingers=10

### Option: StartDiscoverers
#       Number of pre-forked instances of discoverers.
#
# Mandatory: no
# Range: 0-250
# Default:
# StartDiscoverers=1

### Option: StartHTTPPollers
#       Number of pre-forked instances of HTTP pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartHTTPPollers=1

### Option: StartTimers
#       Number of pre-forked instances of timers.
#       Timers process time-based trigger functions and maintenance periods.
#       Only the first timer process handles the maintenance periods.
#
# Mandatory: no
# Range: 1-1000
# Default:
# StartTimers=1

### Option: StartEscalators
#       Number of pre-forked instances of escalators.
#
# Mandatory: no
# Range: 0-100
# Default:
# StartEscalators=1

### Option: JavaGateway
#       IP address (or hostname) of Zabbix Java gateway.
#       Only required if Java pollers are started.
#
# Mandatory: no
# Default:
# JavaGateway=

### Option: JavaGatewayPort
#       Port that Zabbix Java gateway listens on.
#
# Mandatory: no
# Range: 1024-32767
# Default:
# JavaGatewayPort=10052

### Option: StartJavaPollers
#       Number of pre-forked instances of Java pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartJavaPollers=0

### Option: StartVMwareCollectors
#       Number of pre-forked vmware collector instances.
#
# Mandatory: no
# Range: 0-250
# Default:
# StartVMwareCollectors=0
StartVMwareCollectors=5

### Option: VMwareFrequency
#       How often Zabbix will connect to VMware service to obtain a new data.
#
# Mandatory: no
# Range: 10-86400
# Default:
# VMwareFrequency=60

### Option: VMwarePerfFrequency
#       How often Zabbix will connect to VMware service to obtain performance data.
#
# Mandatory: no
# Range: 10-86400
# Default:
# VMwarePerfFrequency=60

### Option: VMwareCacheSize
#       Size of VMware cache, in bytes.
#       Shared memory size for storing VMware data.
#       Only used if VMware collectors are started.
#
# Mandatory: no
# Range: 256K-2G
# Default:
# VMwareCacheSize=8M
VMwareCacheSize=64M

### Option: VMwareTimeout
#       Specifies how many seconds vmware collector waits for response from VMware service.
#
# Mandatory: no
# Range: 1-300
# Default:
# VMwareTimeout=10

### Option: SNMPTrapperFile
#       Temporary file used for passing data from SNMP trap daemon to the server.
#       Must be the same as in zabbix_trap_receiver.pl or SNMPTT configuration file.
#
# Mandatory: no
# Default:
# SNMPTrapperFile=/tmp/zabbix_traps.tmp

### Option: StartSNMPTrapper
#       If 1, SNMP trapper process is started.
#
# Mandatory: no
# Range: 0-1
# Default:
# StartSNMPTrapper=0

### Option: ListenIP
#       List of comma delimited IP addresses that the trapper should listen on.
#       Trapper will listen on all network interfaces if this parameter is missing.
#
# Mandatory: no
# Default:
# ListenIP=0.0.0.0

# ListenIP=127.0.0.1

### Option: HousekeepingFrequency
#       How often Zabbix will perform housekeeping procedure (in hours).
#       Housekeeping is removing outdated information from the database.
#       To prevent Housekeeper from being overloaded, no more than 4 times HousekeepingFrequency
#       hours of outdated information are deleted in one housekeeping cycle, for each item.
#       To lower load on server startup housekeeping is postponed for 30 minutes after server start.
#       With HousekeepingFrequency=0 the housekeeper can be only executed using the runtime control option.
#       In this case the period of outdated information deleted in one housekeeping cycle is 4 times the
#       period since the last housekeeping cycle, but not less than 4 hours and not greater than 4 days.
#
# Mandatory: no
# Range: 0-24
# Default:
# HousekeepingFrequency=1

### Option: MaxHousekeeperDelete
#       The table "housekeeper" contains "tasks" for housekeeping procedure in the format:
#       [housekeeperid], [tablename], [field], [value].
#       No more than 'MaxHousekeeperDelete' rows (corresponding to [tablename], [field], [value])
#       will be deleted per one task in one housekeeping cycle.
#       SQLite3 does not use this parameter, deletes all corresponding rows without a limit.
#       If set to 0 then no limit is used at all. In this case you must know what you are doing!
#
# Mandatory: no
# Range: 0-1000000
# Default:
# MaxHousekeeperDelete=5000

### Option: SenderFrequency
#       How often Zabbix will try to send unsent alerts (in seconds).
#
# Mandatory: no
# Range: 5-3600
# Default:
# SenderFrequency=30

### Option: CacheSize
#       Size of configuration cache, in bytes.
#       Shared memory size for storing host, item and trigger data.
#
# Mandatory: no
# Range: 128K-8G
# Default:
# CacheSize=8M
CacheSize=128M

### Option: CacheUpdateFrequency
#       How often Zabbix will perform update of configuration cache, in seconds.
#
# Mandatory: no
# Range: 1-3600
# Default:
# CacheUpdateFrequency=60

### Option: StartDBSyncers
#       Number of pre-forked instances of DB Syncers.
#
# Mandatory: no
# Range: 1-100
# Default:
# StartDBSyncers=4

### Option: HistoryCacheSize
#       Size of history cache, in bytes.
#       Shared memory size for storing history data.
#
# Mandatory: no
# Range: 128K-2G
# Default:
# HistoryCacheSize=16M
HistoryCacheSize=64M

### Option: HistoryIndexCacheSize
#       Size of history index cache, in bytes.
#       Shared memory size for indexing history cache.
#
# Mandatory: no
# Range: 128K-2G
# Default:
# HistoryIndexCacheSize=4M
HistoryIndexCacheSize=16M

### Option: TrendCacheSize
#       Size of trend cache, in bytes.
#       Shared memory size for storing trends data.
#
# Mandatory: no
# Range: 128K-2G
# Default:
# TrendCacheSize=4M
TrendCacheSize=64M

### Option: ValueCacheSize
#       Size of history value cache, in bytes.
#       Shared memory size for caching item history data requests.
#       Setting to 0 disables value cache.
#
# Mandatory: no
# Range: 0,128K-64G
# Default:
# ValueCacheSize=8M
ValueCacheSize=64M

### Option: Timeout
#       Specifies how long we wait for agent, SNMP device or external check (in seconds).
#
# Mandatory: no
# Range: 1-30
# Default:
# Timeout=3

Timeout=30

### Option: TrapperTimeout
#       Specifies how many seconds trapper may spend processing new data.
#
# Mandatory: no
# Range: 1-300
# Default:
# TrapperTimeout=300

### Option: UnreachablePeriod
#       After how many seconds of unreachability treat a host as unavailable.
#
# Mandatory: no
# Range: 1-3600
# Default:
# UnreachablePeriod=45

### Option: UnavailableDelay
#       How often host is checked for availability during the unavailability period, in seconds.
#
# Mandatory: no
# Range: 1-3600
# Default:
# UnavailableDelay=60

### Option: UnreachableDelay
#       How often host is checked for availability during the unreachability period, in seconds.
#
# Mandatory: no
# Range: 1-3600
# Default:
# UnreachableDelay=15

### Option: AlertScriptsPath
#       Full path to location of custom alert scripts.
#       Default depends on compilation options.
#
# Mandatory: no
# Default:
# AlertScriptsPath=${datadir}/zabbix/alertscripts

AlertScriptsPath=/usr/lib/zabbix/alertscripts

### Option: ExternalScripts
#       Full path to location of external scripts.
#       Default depends on compilation options.
#
# Mandatory: no
# Default:
# ExternalScripts=${datadir}/zabbix/externalscripts

ExternalScripts=/usr/lib/zabbix/externalscripts

### Option: FpingLocation
#       Location of fping.
#       Make sure that fping binary has root ownership and SUID flag set.
#
# Mandatory: no
# Default:
# FpingLocation=/usr/sbin/fping

FpingLocation=/usr/bin/fping

### Option: Fping6Location
#       Location of fping6.
#       Make sure that fping6 binary has root ownership and SUID flag set.
#       Make empty if your fping utility is capable to process IPv6 addresses.
#
# Mandatory: no
# Default:
# Fping6Location=/usr/sbin/fping6

Fping6Location=/usr/bin/fping6

### Option: SSHKeyLocation
#       Location of public and private keys for SSH checks and actions.
#
# Mandatory: no
# Default:
# SSHKeyLocation=

### Option: LogSlowQueries
#       How long a database query may take before being logged (in milliseconds).
#       Only works if DebugLevel set to 3, 4 or 5.
#       0 - don't log slow queries.
#
# Mandatory: no
# Range: 1-3600000
# Default:
# LogSlowQueries=0

LogSlowQueries=3000

### Option: TmpDir
#       Temporary directory.
#
# Mandatory: no
# Default:
# TmpDir=/tmp

### Option: StartProxyPollers
#       Number of pre-forked instances of pollers for passive proxies.
#
# Mandatory: no
# Range: 0-250
# Default:
# StartProxyPollers=1

### Option: ProxyConfigFrequency
#       How often Zabbix Server sends configuration data to a Zabbix Proxy in seconds.
#       This parameter is used only for proxies in the passive mode.
#
# Mandatory: no
# Range: 1-3600*24*7
# Default:
# ProxyConfigFrequency=3600

### Option: ProxyDataFrequency
#       How often Zabbix Server requests history data from a Zabbix Proxy in seconds.
#       This parameter is used only for proxies in the passive mode.
#
# Mandatory: no
# Range: 1-3600
# Default:
# ProxyDataFrequency=1

### Option: AllowRoot
#       Allow the server to run as 'root'. If disabled and the server is started by 'root', the server
#       will try to switch to the user specified by the User configuration option instead.
#       Has no effect if started under a regular user.
#       0 - do not allow
#       1 - allow
#
# Mandatory: no
# Default:
# AllowRoot=0

### Option: User
#       Drop privileges to a specific, existing user on the system.
#       Only has effect if run as 'root' and AllowRoot is disabled.
#
# Mandatory: no
# Default:
# User=zabbix

### Option: Include
#       You may include individual files or all files in a directory in the configuration file.
#       Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.
#
# Mandatory: no
# Default:
# Include=

# Include=/usr/local/etc/zabbix_server.general.conf
# Include=/usr/local/etc/zabbix_server.conf.d/
# Include=/usr/local/etc/zabbix_server.conf.d/*.conf

### Option: SSLCertLocation
#       Location of SSL client certificates.
#       This parameter is used only in web monitoring.
#
# Mandatory: no
# Default:
# SSLCertLocation=${datadir}/zabbix/ssl/certs

### Option: SSLKeyLocation
#       Location of private keys for SSL client certificates.
#       This parameter is used only in web monitoring.
#
# Mandatory: no
# Default:
# SSLKeyLocation=${datadir}/zabbix/ssl/keys

### Option: SSLCALocation
#       Override the location of certificate authority (CA) files for SSL server certificate verification.
#       If not set, system-wide directory will be used.
#       This parameter is used only in web monitoring and SMTP authentication.
#
# Mandatory: no
# Default:
# SSLCALocation=

####### LOADABLE MODULES #######

### Option: LoadModulePath
#       Full path to location of server modules.
#       Default depends on compilation options.
#
# Mandatory: no
# Default:
# LoadModulePath=${libdir}/modules

### Option: LoadModule
#       Module to load at server startup. Modules are used to extend functionality of the server.
#       Format: LoadModule=<module.so>
#       The modules must be located in directory specified by LoadModulePath.
#       It is allowed to include multiple LoadModule parameters.
#
# Mandatory: no
# Default:
# LoadModule=

####### TLS-RELATED PARAMETERS #######

### Option: TLSCAFile
#       Full pathname of a file containing the top-level CA(s) certificates for
#       peer certificate verification.
#
# Mandatory: no
# Default:
# TLSCAFile=

### Option: TLSCRLFile
#       Full pathname of a file containing revoked certificates.
#
# Mandatory: no
# Default:
# TLSCRLFile=

### Option: TLSCertFile
#       Full pathname of a file containing the server certificate or certificate chain.
#
# Mandatory: no
# Default:
# TLSCertFile=

### Option: TLSKeyFile
#       Full pathname of a file containing the server private key.
#
# Mandatory: no
# Default:
# TLSKeyFile=
  • speichern und verlassen




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

Server=IP oder DNS Name des Zabbix-Servers an den gemeldet werden soll

ServerPort=10051

# Hostname -> unter diesem Namen müssen wir den Proxy auch auf dem Hauptserver anlegen!
Hostname=zabbixproxy

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix

Timeout=30

StartVMwareCollectors=5




2.7 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




2.8 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 2018-09-06 08:35:50 UTC; 1min 8s ago
  Process: 3879 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)
 Main PID: 3893 (zabbix_server)
    Tasks: 58 (limit: 4662)
   CGroup: /system.slice/zabbix-server.service
           ├─3893 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
           ├─3900 /usr/sbin/zabbix_server: configuration syncer [synced configuration in 0.011559 sec, idle 60 sec]
           ├─3901 /usr/sbin/zabbix_server: ipmi manager #1 [scheduled 0, polled 0 values, idle 5.005529 sec during 5.005531 sec]
           ├─3902 /usr/sbin/zabbix_server: alerter #1 started
           ├─3903 /usr/sbin/zabbix_server: alerter #2 started
           ├─3904 /usr/sbin/zabbix_server: alerter #3 started
           ├─3905 /usr/sbin/zabbix_server: housekeeper [startup idle for 30 minutes]
           ├─3906 /usr/sbin/zabbix_server: timer #1 [processed 0 triggers, 0 events in 0.000017 sec, 0 maintenances in 0.000000 sec, idle 30 sec]
           ├─3910 /usr/sbin/zabbix_server: http poller #1 [got 0 values in 0.000538 sec, idle 5 sec]
           ├─3911 /usr/sbin/zabbix_server: discoverer #1 [processed 0 rules in 0.000525 sec, idle 60 sec]
           ├─3912 /usr/sbin/zabbix_server: history syncer #1 [synced 0 items in 0.000002 sec, idle 1 sec]
           ├─3913 /usr/sbin/zabbix_server: history syncer #2 [synced 0 items in 0.000002 sec, idle 1 sec]
           ├─3917 /usr/sbin/zabbix_server: history syncer #3 [synced 0 items in 0.000001 sec, idle 1 sec]
           ├─3918 /usr/sbin/zabbix_server: history syncer #4 [synced 0 items in 0.000001 sec, idle 1 sec]
           ├─3919 /usr/sbin/zabbix_server: escalator #1 [processed 0 escalations in 0.000595 sec, idle 3 sec]
           ├─3920 /usr/sbin/zabbix_server: ipmi poller #1 started
           ├─3921 /usr/sbin/zabbix_server: ipmi poller #2 started
           ├─3925 /usr/sbin/zabbix_server: ipmi poller #3 started
           ├─3926 /usr/sbin/zabbix_server: ipmi poller #4 started
           ├─3927 /usr/sbin/zabbix_server: ipmi poller #5 started
           ├─3929 /usr/sbin/zabbix_server: proxy poller #1 [exchanged data with 0 proxies in 0.000008 sec, idle 5 sec]
           ├─3930 /usr/sbin/zabbix_server: self-monitoring [processed data in 0.000018 sec, idle 1 sec]
           ├─3931 /usr/sbin/zabbix_server: vmware collector #1 [updated 0, removed 0 VMware services in 0.000007 sec, idle 5 sec]
           ├─3932 /usr/sbin/zabbix_server: vmware collector #2 [updated 0, removed 0 VMware services in 0.000006 sec, idle 5 sec]
           ├─3933 /usr/sbin/zabbix_server: vmware collector #3 [updated 0, removed 0 VMware services in 0.000004 sec, idle 5 sec]
           ├─3934 /usr/sbin/zabbix_server: vmware collector #4 [updated 0, removed 0 VMware services in 0.000004 sec, idle 5 sec]
           ├─3936 /usr/sbin/zabbix_server: vmware collector #5 [updated 0, removed 0 VMware services in 0.000007 sec, idle 5 sec]
           ├─3937 /usr/sbin/zabbix_server: task manager [processed 0 task(s) in 0.000266 sec, idle 5 sec]
           ├─3938 /usr/sbin/zabbix_server: poller #1 [got 0 values in 0.000007 sec, idle 5 sec]
           ├─3939 /usr/sbin/zabbix_server: poller #2 [got 0 values in 0.000007 sec, idle 5 sec]
           ├─3940 /usr/sbin/zabbix_server: poller #3 [got 0 values in 0.000007 sec, idle 5 sec]
           ├─3941 /usr/sbin/zabbix_server: poller #4 [got 0 values in 0.000008 sec, idle 5 sec]
           ├─3942 /usr/sbin/zabbix_server: poller #5 [got 0 values in 0.000007 sec, idle 5 sec]
           ├─3943 /usr/sbin/zabbix_server: unreachable poller #1 [got 0 values in 0.000009 sec, idle 5 sec]
           ├─3944 /usr/sbin/zabbix_server: unreachable poller #2 [got 0 values in 0.000006 sec, idle 5 sec]
           ├─3945 /usr/sbin/zabbix_server: unreachable poller #3 [got 0 values in 0.000007 sec, idle 5 sec]
           ├─3946 /usr/sbin/zabbix_server: unreachable poller #4 [got 0 values in 0.000028 sec, idle 5 sec]
           ├─3947 /usr/sbin/zabbix_server: unreachable poller #5 [got 0 values in 0.000006 sec, idle 5 sec]
           ├─3948 /usr/sbin/zabbix_server: trapper #1 [processed data in 0.000844 sec, waiting for connection]
           ├─3951 /usr/sbin/zabbix_server: trapper #2 [processed data in 0.000000 sec, waiting for connection]
           ├─3952 /usr/sbin/zabbix_server: trapper #3 [processed data in 0.000000 sec, waiting for connection]
           ├─3953 /usr/sbin/zabbix_server: trapper #4 [processed data in 0.000000 sec, waiting for connection]
           ├─3954 /usr/sbin/zabbix_server: trapper #5 [processed data in 0.000000 sec, waiting for connection]
           ├─3955 /usr/sbin/zabbix_server: icmp pinger #1 [got 0 values in 0.000005 sec, idle 5 sec]
           ├─3956 /usr/sbin/zabbix_server: icmp pinger #2 [got 0 values in 0.000008 sec, idle 5 sec]
           ├─3958 /usr/sbin/zabbix_server: icmp pinger #3 [got 0 values in 0.000004 sec, idle 5 sec]
           ├─3959 /usr/sbin/zabbix_server: icmp pinger #4 [got 0 values in 0.000004 sec, idle 5 sec]
           ├─3960 /usr/sbin/zabbix_server: icmp pinger #5 [got 0 values in 0.000008 sec, idle 5 sec]
           ├─3961 /usr/sbin/zabbix_server: icmp pinger #6 [got 0 values in 0.000007 sec, idle 5 sec]
           ├─3962 /usr/sbin/zabbix_server: icmp pinger #7 [got 0 values in 0.000008 sec, idle 5 sec]
           ├─3963 /usr/sbin/zabbix_server: icmp pinger #8 [got 0 values in 0.000008 sec, idle 5 sec]
           ├─3964 /usr/sbin/zabbix_server: icmp pinger #9 [got 0 values in 0.000009 sec, idle 5 sec]
           ├─3965 /usr/sbin/zabbix_server: icmp pinger #10 [got 0 values in 0.000008 sec, idle 5 sec]
           ├─3966 /usr/sbin/zabbix_server: alert manager #1 [sent 0, failed 0 alerts, idle 5.012184 sec during 5.012186 sec]
           ├─3968 /usr/sbin/zabbix_server: preprocessing manager #1 [queued 0, processed 0 values, idle 5.009544 sec during 5.009549 sec]
           ├─3969 /usr/sbin/zabbix_server: preprocessing worker #1 started
           ├─3970 /usr/sbin/zabbix_server: preprocessing worker #2 started
           └─3971 /usr/sbin/zabbix_server: preprocessing worker #3 started

Sep 06 08:35:49 zabbix02 systemd[1]: Starting Zabbix Server...
Sep 06 08:35:50 zabbix02 systemd[1]: zabbix-server.service: Supervising process 3893 which is not our child. We'll most likely not notice when it exits.
Sep 06 08:35:50 zabbix02 systemd[1]: Started Zabbix Server.

Genaueres können wir uns auch noch einmal im Log-File ansehen:

tail -fn 1000 /var/log/zabbix/zabbix_server.log

Ausgabe:

 3893:20180906:083550.123 Starting Zabbix Server. Zabbix 3.4.13 (revision 84139).
 3893:20180906:083550.123 ****** Enabled features ******
 3893:20180906:083550.123 SNMP monitoring:           YES
 3893:20180906:083550.123 IPMI monitoring:           YES
 3893:20180906:083550.123 Web monitoring:            YES
 3893:20180906:083550.123 VMware monitoring:         YES
 3893:20180906:083550.123 SMTP authentication:       YES
 3893:20180906:083550.123 Jabber notifications:      YES
 3893:20180906:083550.123 Ez Texting notifications:  YES
 3893:20180906:083550.123 ODBC:                      YES
 3893:20180906:083550.123 SSH2 support:              YES
 3893:20180906:083550.123 IPv6 support:              YES
 3893:20180906:083550.123 TLS support:               YES
 3893:20180906:083550.123 ******************************
 3893:20180906:083550.123 using configuration file: /etc/zabbix/zabbix_server.conf
 3893:20180906:083550.148 current database version (mandatory/optional): 03040000/03040007
 3893:20180906:083550.148 required mandatory version: 03040000
 3893:20180906:083550.174 server #0 started [main process]
 3900:20180906:083550.175 server #1 started [configuration syncer #1]
 3901:20180906:083550.175 server #2 started [ipmi manager #1]
 3903:20180906:083550.176 server #4 started [alerter #2]
 3904:20180906:083550.177 server #5 started [alerter #3]
 3905:20180906:083550.178 server #6 started [housekeeper #1]
 3906:20180906:083550.178 server #7 started [timer #1]
 3911:20180906:083550.182 server #9 started [discoverer #1]
 3910:20180906:083550.185 server #8 started [http poller #1]
 3913:20180906:083550.186 server #11 started [history syncer #2]
 3912:20180906:083550.187 server #10 started [history syncer #1]
 3920:20180906:083550.191 server #15 started [ipmi poller #1]
 3919:20180906:083550.192 server #14 started [escalator #1]
 3902:20180906:083550.193 server #3 started [alerter #1]
 3917:20180906:083550.193 server #12 started [history syncer #3]
 3918:20180906:083550.194 server #13 started [history syncer #4]
 3921:20180906:083550.194 server #16 started [ipmi poller #2]
 3927:20180906:083550.199 server #19 started [ipmi poller #5]
 3925:20180906:083550.200 server #17 started [ipmi poller #3]
 3926:20180906:083550.200 server #18 started [ipmi poller #4]
 3930:20180906:083550.201 server #21 started [self-monitoring #1]
 3931:20180906:083550.201 server #22 started [vmware collector #1]
 3932:20180906:083550.201 server #23 started [vmware collector #2]
 3933:20180906:083550.202 server #24 started [vmware collector #3]
 3934:20180906:083550.204 server #25 started [vmware collector #4]
 3929:20180906:083550.204 server #20 started [proxy poller #1]
 3940:20180906:083550.210 server #30 started [poller #3]
 3941:20180906:083550.211 server #31 started [poller #4]
 3942:20180906:083550.214 server #32 started [poller #5]
 3945:20180906:083550.215 server #35 started [unreachable poller #3]
 3939:20180906:083550.215 server #29 started [poller #2]
 3938:20180906:083550.216 server #28 started [poller #1]
 3946:20180906:083550.216 server #36 started [unreachable poller #4]
 3936:20180906:083550.218 server #26 started [vmware collector #5]
 3947:20180906:083550.218 server #37 started [unreachable poller #5]
 3937:20180906:083550.219 server #27 started [task manager #1]
 3944:20180906:083550.219 server #34 started [unreachable poller #2]
 3948:20180906:083550.220 server #38 started [trapper #1]
 3943:20180906:083550.222 server #33 started [unreachable poller #1]
 3951:20180906:083550.224 server #39 started [trapper #2]
 3953:20180906:083550.228 server #41 started [trapper #4]
 3954:20180906:083550.229 server #42 started [trapper #5]
 3952:20180906:083550.236 server #40 started [trapper #3]
 3955:20180906:083550.236 server #43 started [icmp pinger #1]
 3964:20180906:083550.238 server #51 started [icmp pinger #9]
 3956:20180906:083550.239 server #44 started [icmp pinger #2]
 3958:20180906:083550.242 server #45 started [icmp pinger #3]
 3961:20180906:083550.242 server #48 started [icmp pinger #6]
 3960:20180906:083550.243 server #47 started [icmp pinger #5]
 3959:20180906:083550.243 server #46 started [icmp pinger #4]
 3965:20180906:083550.244 server #52 started [icmp pinger #10]
 3966:20180906:083550.244 server #53 started [alert manager #1]
 3962:20180906:083550.245 server #49 started [icmp pinger #7]
 3963:20180906:083550.245 server #50 started [icmp pinger #8]
 3968:20180906:083550.245 server #54 started [preprocessing manager #1]
 3969:20180906:083550.339 server #55 started [preprocessing worker #1]
 3970:20180906:083550.343 server #56 started [preprocessing worker #2]
 3971:20180906:083550.344 server #57 started [preprocessing worker #3]
 3948:20180906:083626.577 cannot send list of active checks to "127.0.0.1": host [Zabbix server] not monitored
 3953:20180906:083826.592 cannot send list of active checks to "127.0.0.1": host [Zabbix server] not monitored



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!


2.9 Zabbix Server hängt beim herunterfahren/reboot

Unter Umständen bleibt der Zabbix-Server (also die ganze Maschine inklusive dem Ubuntu Betriebssystem) bei einem Shutdown oder einem Reboot beim herunterfahren hängen.
Grund ist das ggf. zuerst der MySQL Server gestoppt wird und dann erst versucht wird den Zabbix-Server zu beenden.
Der wartet dann endlos darauf das er seine Daten noch mal mit der Datenbank synchronisieren kann.

Lösung:

nano /lib/systemd/system/zabbix-server.service

und folgende Änderungen vornehmen (die in Fettschrift):

[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target
After=mysql.service

[Service]
Environment="CONFFILE=/etc/zabbix/zabbix_server.conf"
EnvironmentFile=-/etc/default/zabbix-server
Type=forking
Restart=on-failure
PIDFile=/run/zabbix/zabbix_server.pid
KillMode=control-group
ExecStart=/usr/sbin/zabbix_server -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
TimeoutSec=300s

[Install]
WantedBy=multi-user.target

Dann das System über die Änderungen informieren:

systemctl daemon-reload

und neu starten

systemctl restart zabbix-server.service



Was haben wir geändert?
Zum einen haben wir die Abhängigkeit zum MySQL Server eingestellt:

After=mysql.service

bedeutet das er erst den Zabbix Server starten soll wenn MySQL läuft. Beim herunterfahren gilt das ganz umgekehrt - erst Zabbix beenden, dann MySQL.

TimeoutSec=300s

bedeutet das er nach 5 Minuten den Dienst von Zabbix auf jedem Fall beendet - auch wenn der noch nicht soweit ist. Ursprünglich steht das auf unendlich.
Der Gedanke der Programmierer war das bei einem Datenbankupgrade (macht MySQL nach Updates gerne) der Zabbix Server solang warten soll.

Quellen:


3 Webinterface installieren (nur Server)

  • Schon jetzt findet Ihr die Weboberfläche unter http://servername/zabbix
  • Wenn es aber ein exklusiver Server für Zabbix ist möchte ich auf die Eingabe von /zabbix verzichten - das wir nachfolgend beschrieben.
  • Ich installiere hier also so das man den Server später nur mit http://servername aufrufen kann

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

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /usr/share/zabbix
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        <Directory "/usr/share/zabbix">
            Options FollowSymLinks
            AllowOverride None
            Order allow,deny
            Allow from all

            <IfModule mod_php7.c>
                php_value max_execution_time 300
                php_value memory_limit 128M
                php_value post_max_size 16M
                php_value upload_max_filesize 8M
                php_value max_input_time 300
                php_value max_input_vars 10000
                php_value always_populate_raw_post_data -1
                php_value date.timezone Europe/Berlin
            </IfModule>
        </Directory>

        <Directory "/usr/share/zabbix/conf">
            Order deny,allow
            Deny from all
            <files *.php>
                Order deny,allow
                Deny from all
            </files>
        </Directory>

        <Directory "/usr/share/zabbix/app">
            Order deny,allow
            Deny from all
            <files *.php>
                Order deny,allow
                Deny from all
            </files>
        </Directory>

        <Directory "/usr/share/zabbix/include">
            Order deny,allow
            Deny from all
            <files *.php>
                Order deny,allow
                Deny from all
            </files>
        </Directory>

        <Directory "/usr/share/zabbix/local">
            Order deny,allow
            Deny from all
            <files *.php>
                Order deny,allow
                Deny from all
            </files>
        </Directory>
</VirtualHost>

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.



3.2 Fehler ab Zabbix 4.2.2

Falls statt des Webinterfaces nur die Fehlermeldung

Insufficient file system permissions. Assets cache directory is not writable. <retry>

zu sehen ist:

sudo chmod -R 777 /usr/share/zabbix/assets

Die Lösung stammt von hier: https://www.zabbix.com/forum/zabbix-troubleshooting-and-problems/379595-insufficient-file-system-permissions-assets-cache-directory-is-not-writable
Dort gibt es auch den Vorschlag das ganze über Gruppenzugehörigkeit zu lösen.
Ich habe mich aber dagegen entschieden da ich oft Interface und Zabbix-Server trenne und dann den jeweils passenden Benutzer heraussuchen müsste (Umgebung in der jede Subdomain/Doamin unter einem eigenen Benutzer läuft).


3.3 Webinterface konfigurieren

Ihr ruft den Zabbix-Server im Browser auf:
ClipCapIt-180906-105511.PNG

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

Die Datenbankkonfiguration, in die letzten 3 Felder muss überall "zabbix" stehen:
Zabbix-Server-Webinterface-konfigurieren-003.png

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

Noch eben die Zusammenfassung bestätigen:
Zabbix-Server-Webinterface-konfigurieren-005.png

Geschafft!
Zabbix-Server-Webinterface-konfigurieren-006.png

Zabbix-Server-Webinterface-konfigurieren-007.png
Benutzername: Admin
Passwort:     zabbix
Important.png
Hinweis: Admin mit großem A!





4 Zeitserver setzen

Important.png
Hinweis: ntp soll man in zukünftigen Ubuntu Versionen nicht mehr verwenden. Zumindest unter 18.04. funktioniert der aber noch wunderbar


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




5 Empfang von SNMP-Traps einrichten

Button Zabbix SERVER.png und Button Zabbix PROXY.png

5.1 fehlende Pakete nachinstallieren

Wir Installieren ggf. die benötigten Pakete nach (sollten schon vorhanden sein):

apt install snmp snmpd snmptt snmp-mibs-downloader snmptrapd




5.2 snmptrapd aktivieren und konfigurieren

Wir bearbeiten die Datei

nano /etc/default/snmpd

und ändern die Zeile

SNMPDRUN=yes

in

SNMPDRUN=no



Dann die Datei

nano /etc/default/snmptrapd

und ändern die Zeile

TRAPDRUN=no

in

TRAPDRUN=yes



Nun Konfigurieren wir den Dienst noch:

nano /etc/snmp/snmptrapd.conf

und fügen die folgenden Zeilen ans Ende:

traphandle default /usr/sbin/snmptt
disableAuthorization yes




5.3 snmptt konfigurieren

Zunächst die .ini Datei zum bearbeiten öffnen:

nano /etc/snmp/snmptt.ini

und die folgende Zeilen ändern (Denkt dran: STRG + W ruft die Suche auf):

mode = standalone
translate_log_trap_oid = 2
net_snmp_perl_enable = 1
date_time_format = %H:%M:%S %Y/%m/%d
log_file = /var/log/snmptt/snmptt.log
log_system_enable = 1
mibs_environment = ALL

Dann die .conf Datei - wir sichern zunächst die Original-Datei (auch wenn wir die wahrscheinlich nie wieder brauchen) durch umbenennen:

mv /etc/snmp/snmptt.conf /etc/snmp/snmptt.conf.orig

und erstellen eine neue, leere Datei:

nano /etc/snmp/snmptt.conf

mit folgendem Inhalt:

EVENT general .* "General event" Normal
FORMAT ZBXTRAP $aA $ar severity:$s $Fn$+*


Das stammt alles nahezu 1:1 von http://lab4.org/wiki/Zabbix_Monitoring_SNMP_Traps_empfangen
Ich habe es nur an Ubuntu 18.04. angepasst.

Nun noch die Dienste neu starten:

systemctl restart snmpd.service && systemctl restart snmptrapd.service && systemctl restart snmptt.service




5.4 logrotate für /var/log/snmptt/snmptt.log anpassen

Gerade wenn viele Einträge in der Datei

/var/log/snmptt/snmptt.log

landen kann reicht das wöchentliche Bereinigen der Datei nicht aus.
Deshalb passen wir logrotate an um die Größe der Datei zu begrenzen.
Nun noch die bereits vorhanden Konfigurationsdatei bearbeiten:

nano /etc/logrotate.d/snmptt

und folgenden Inhalt einfügen / anpassen:

/var/log/snmptt/*.log /var/log/snmptt/*.debug {
   missingok
   notifempty
   daily
   rotate 4
   size 1M
   compress
   sharedscripts
   postrotate
       /etc/init.d/snmptt reload > /dev/null
   endscript
   maxage 365
}




5.5 Zabbix Server oder Proxy konfigurieren

Die Konfigurationsdatei zum bearbeiten öffnen:

nano /etc/zabbix/zabbix_server.conf
oder
nano /etc/zabbix/zabbix_proxy.conf

und folgende Zeilen suchen und ändern bzw. Kommentarzeichen davor entfernen:

SNMPTrapperFile=/var/log/snmptt/snmptt.log
StartSNMPTrapper=1


Danach müssen wir den Zabbix Server oder Proxy Dienst neu starten:

systemctl restart zabbix-server.service
oder
systemctl restart zabbix-proxy.service




5.6 Trapper-Datei anlegen

Neuere Zabbix Versionen (ab 3.0) meckern wenn es die Traps-Datei nicht gibt.
Die wird aber ggf. erst beim ersten eintreffenden Trap erstellt. Deshalb:

snmptrap -v 1 -c public localhost 1.3.6.1.4.1.2.3 "" 6 3 0000 s s "Zabbix-SNMP-Traps"

Damit senden wir einen Test-Trap an uns selbst.
Nun sollte es die Datei geben:

ls -l /var/log/snmptt/snmptt.log

Ausgabe:

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

Das müssen wir nur einmal machen, nach einem Reboot ist die Datei noch vorhanden



6 VMware Tools installieren

Wenn euer Zabbix-Server auch eine virtuelle Maschine ist installiert Ubuntu 16.04.x automatische die Open-VM-Tools.

Important.png
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!


Wollt Ihr - Warum auch immer - die VMware-Tools von vSphere installieren so geht wie folgt vor:

  • Open-VM-Tools deinstallieren:
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 Enter bzw, Return bestätigen.
  • netter weise wirft er die CD auch gleich wieder raus
  • Fertig!




7 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, muss nur aktiviert werden) 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.



8 Windows-Freigabe für Agenten-Dateien einrichten

8.1 Vorwort

Die Dateien für die Verteilung des Agenten lege ich regelmäßig auf dem Zabbix-Server bzw. Zabbix-Proxy ab.
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.
Wenn Bedenken bestehen (zu recht) kann die Freigabe auch auf "readonly" gesetzt werden. Dann kann das Installationsskript aber auch kein Log dorthin schreiben.
Die einfachste Lösung aus meiner Sicht ist:

  • 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 chmod auf "Nur Lesen" gesetzt werden, "Schreiben" dann nur noch für den Log-Ordner so fern vorhanden.



8.2 Voraussetzungen

Wenn die Installation nachträglich erfolgt - erst einmal Updaten!

apt update
apt upgrade


Nun installieren wir Samba - damit erstellt man Windows-Freigaben unter Linux:

apt install samba samba-common-bin

das dauert einen Moment - und danach können wir Samba konfigurieren.
Konfiguration erfolgt über ein zentrale Datei:

nano /etc/samba/smb.conf

In dieser ändern wie folgende Zeilen (wie immer: mit STRG + W kann man in nano suchen)

workgroup = ZNIL         ; NetBIOS Domänenname in euerer Umgebung, könnt Ihr auch auf WORKGROUP lassen
wins support = no
wins server = 192.168.1.1 ; Falls es einen WINS-Server bei euch im Netzwerk gibt, geben wir diesen hier an

Jetzt geht es mit der eigentlichen Freigabe weiter:


8.2.1 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.
Logdateien können ebenfalls einfach hinein geschrieben werden.
Die Nachteile könnten sein:

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


Wir bearbeiten weiter die

nano /etc/samba/smb.conf

ganz am Schluss fügen wir folgende Zeilen hinzu:

[agent]
comment = Zabbix Agents
path = /share/zabbix/agent
guest ok = yes
read only = no

dann speichern und verlassen.
Nun müssen wir den Ordner noch anlegen:

mkdir -p /share/zabbix/agent
chmod 777 /share/zabbix/agent

und den Dienst von Samba neu starten:

systemctl restart smbd


Ab jetzt können wir über

\\IP-Adresse-Zabbix-Proxy\agent

von Windows aus auf die Freigabe zugreifen und die Dateien dort ablegen.

Important.png
Hinweis: Wenn Ihr statt der IP-Adresse einen Namen verwenden wollt müsst Ihr diesen Namen auf euren DNS Server anlegen




8.2.2 Einrichtung Freigabe (sichere Version)

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.
Für die Logdateien wir deine separate Freigabe erstellt in die jeder Schreiben kann.
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.

Wir bearbeiten weiter die

nano /etc/samba/smb.conf

ganz am Schluss fügen wir folgende Zeilen hinzu:

[agent]
comment = Zabbix Agents
path = /share/zabbix/agent
guest ok = yes
read only = yes

[agent$]
comment = Zabbix Agents Management
path = /share/zabbix/agent
guest ok = no
read only = no
valid users = agent
browsable = no

[logging]
comment = Logging of agent installations
path = /share/zabbix/logging
guest ok = yes
read only = no

dann speichern und verlassen.
Nun müssen wir die Ordner noch anlegen:

mkdir -p /share/zabbix/agent
mkdir -p /share/zabbix/logging
chmod 777 /share/zabbix/agent
chmod 777 /share/zabbix/logging

Jetzt müssen wir noch den Benutzer für den Zugriff auf agent$ anlegen.
Den Namen des Benutzer haben wir oben schon mit agent festegelegt, in der Zeile mit valid users = agent Angelegt wird dieser wie folgt:

useradd -M -s /sbin/nologin agent
passwd agent

und das gewünschte Passwort 2x eingeben.
Jetzt noch der Samba Teil:

smbpasswd -a agent
smbpasswd -e agent

Da musstet Ihr das gleiche Passwort noch einmal zweimal eingeben.
Jetzt den Dienst von Samba neu starten:

systemctl restart smbd


Ab jetzt können wir über

\\IP-Adresse-Zabbix-Proxy\agent

von Windows aus auf die Freigabe zugreifen.
Ruft Ihr statt dessen

\\IP-Adresse-Zabbix-Proxy\agent$

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.
Nur habt Ihr in dieser nun auch Schreibrechte und könnt die Dateien ablegen.
Auf

\\IP-Adresse-Zabbix-Proxy\logging

hat jeder Schreibrechte, hier sollten aber ja nur Textdateien landen.

Important.png
Hinweis: Wenn Ihr statt der IP-Adresse einen Namen verwenden wollt müsst Ihr diesen Namen auf euren DNS Server anlegen


Important.png
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




8.3 Probleme beim Zugriff auf die Freigabe - Windows 10 / Windows Server 2016

Die Freigabe \\IP-Adresse-Zabbix-Proxy\agent erlaubt nun eigentlich den Zugriff ohne Benutzername und Passwort.
Als erstes testet ob Ihr weiter kommt wenn Ihr beim Benutzernamen einfach einen Buchstaben eingebt und das Passwort leer lasst. Wenn nicht:
Windows 10 kann sich einfach nicht mehr einen Zugriff ohne Anmeldung vorstellen und will unbedingt ein Passwort nutzen.
Dazu hier der Microsoft-Artikel

Lösung 1:
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.


Lösung 2:
Ihr richtet die Gruppenrichtlinie entsprechend des obigen Microsoft-Artikel ein.
Lokal geht das mit

gpedit.msc

und ändert die folgende Richtlinie:

Computerkonfiguration => Administrative Vorlagen => Netzwerk => LanMan-Arbeitsstation => Unsichere Gastanmeldungen aktivieren
ClipCapIt-180201-104636.PNG

Die Passwortabfrage poppt dann immer noch auf - aber einfach einen beliebigen Buchstaben als Benutzernamen angeben, Passwort leer lassen und es klappt.
Skripte können dann wieder ohne Abfrage direkt auf die Freigabe zugreifen.



9 Datensicherung des Zabbix-Servers

Bevorzugt installiere ich Zabbix-Server als Virtuelle Maschinen / VM's.
Die Backup-Software sichert am besten einfach die gesamte VM.
Eigentlich jede Backup-Software macht 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:


9.1 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:

Pre-and-Post-Scripts-001.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!





9.2 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 (oder auf leer zu ändern)
#!/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="ThePassword"
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:

Pre-and-Post-Scripts-001.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!





10 Upgrade von 3.x auf 4.x (oder 4.x auf 4.y)

Wenn Ihr von einer Vor-Version auf die aktuelle Version wechseln wollt so ist das recht einfach:

10.1 Backup

Macht ein Backup eures Zabbix-Servers oder wie ich es bevorzuge: einen Snapshot.
Falls euer Zabbix-Server eine VM ist so fahrt diesen runter, macht einen Snapshot und fahrt ihn wieder hoch.


10.2 Benachrichtigungen deaktivieren

Falls ihr euch Emails bei Problemen senden lasst - deaktiviert das jetzt besser.
Die Probleme werden weiter auf dem Webinterface angezeigt.


10.3 Vorher alles andere Updaten

apt update && apt upgrade -y && apt autoremove -y

und danach am besten einen Reboot durchführen


10.4 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/



10.5 Zabbix stoppen

systemctl stop zabbix-server.service
systemctl stop zabbix-agent.service



10.6 Repository ändern

Fügt einfach das Repository für die 4.0er Version hinzu:

Für die Version 4.0.x LTS (Support bis 31.10.2023)
wget https://repo.zabbix.com/zabbix/4.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.0-2+bionic_all.deb
dpkg -i zabbix-release_4.0-2+bionic_all.deb
apt update

Nun führt Ihr folgendes aus:

apt upgrade -y

und schon installiert er die neue Version über die alte.
Es wird eine Abfrage zu den beiden Konfigurationsdateien kommen - nämlich ob Ihr diese Überschreiben wollt (J oder Y) oder die vorhandene beibehalten (N).
Es wird auch funktionieren wenn Ihr die vorhandene beibehaltet. Es fehlen dann halt die Einträge für neuere Funktionen - diesen werden dann mit einem Default-Wert gesetzt was aber auch völlig ok ist.
Falls Ihr die Dateien überschreibt müsst ihr diese dann mit den beiden zuvor gesicherten vergleichen und die neuen anpassen.
Ich empfehle eine 2. puTTY Sitzung zu öffnen, dann könnt Ihr beide Dateien nebeneinander betrachten.
Vergleicht jeden Eintrag - so hat sich zum Beispiel der Pfad zu den Alertscripts und Externalscripts geändert (den Ihr einfach wieder auf den alten Wert anpassen könnt).

Falls Ihr die Dateien nicht überschrieben habt müsst ihr nichts weiter machen.


10.7 Der erste Start

Öffnet eine 2. puTTY-Sitzung in welcher Ihr folgenden Befehl ausführt:

tail -n 100 -f /var/log/zabbix/zabbix_server.log

Ihr seht dann in Echtzeit das Log des Zabbix-Servers - da sollte was vom Stop des Servers stehen und nichts weiter passieren - der Dienst ist ja angehalten.
In eurer 1. puTTY Sitzung startet Ihr nun wieder den Zabbix-Agenten und -Server:

systemctl start zabbix-agent.service
systemctl stop zabbix-server.service

Im Log könnt Ihr sehen wie er startet und ein Datenbankupgrade durchführt. Gedult. Es dauert eben so lange wie es dauern muss.
Achtet auf Warnmeldungen - manchmal deaktiviert er Actions zu Triggern mit dem Hinweis das Ihr diese einmal manuell überprüfen sollt.
Nach einer Weile (30 Sekunden bis 30 Stunden) sollte das Upgrade ageschlossen sein und er seine normalen Worker starten.

Sollte es keinerlei Log-Meldungen geben und der Dienst beendet sich einfach wieder so gibt es in der Regel einen Fehler in der Konfigurationsdatei.
Den genauen Fehler findet Ihr mit

journalctl -xe

Da steht dann über welchen Parameter er gestolpert ist.


10.8 Geduld

Der Server war eine Weile aus - lasst Ihn sich erst einmal beruhigen. gerade wenn Ihr Zabbix-Proxys haben prasseln nun jede menge Daten auf ihn ein.
Ihr könnt natürlich alles ansehen, mit dem Aktivieren der Benachrichtigungen solltet Ihr aber etwa 30 Minuten bis 1 Stunde warten - bis die Probleme durch das Upgrade wieder verschwunden sind und der Server wieder auf normaler last arbeitet.


10.9 Snapshot wieder löschen

Läuft alles wie gewünscht (was es tut wenn das Datenbankupgrade fehlerfrei durchgelaufenen ist) löscht den Snapshot wieder.


11 Kommentare


Christian

10 Monaten zuvor
Punktzahl 0++

Hallo Bernhard, danke für deine super Guides zum Thema Zabbix. Wäre es möglich, dass du eine kleine Anleitung schreibst wie man einen nach deiner Anleitung installierten Zabbix 3.4 Server auf Version 4.0 updaten kann? Gruß

Christian

Alex

8 Monaten zuvor
Punktzahl 0++

Hi Bernhard,

zur Info für dich: einige der Pakete in 1.9 gibt es nicht mehr.

Gruß Alex

Alex

8 Monaten zuvor
Punktzahl 0++

Hat sich erledigt. Aber eventuell könntest du den Hinweis hinzufügen, dass man mit dem Befehl "sudo add-apt-repository universe" das Repository für Universe hinzufügen muss?

Gruß Alex

BLinz

8 Monaten zuvor
Punktzahl 0++

Einspruch, Hörensagen! Ich habe mehrmals nach meiner eigenen Anleitung diverse Zabbix-Server und Proxys aufgesetzt und ich musste niemals das Universe-Repository hinzufügen. Vermutlich hast du von einem anderem als den von mir beschriebenen Medium installiert.

Wie in 1.2 verwende ich das ISO mit dem herkömmlichen Installer, unter anderem weil diese noch die Auswahl für LAMP bietet.

Christian

6 Monaten zuvor
Punktzahl 0++

Moin Bernhard, wollte heute einen neuen Zabbix Server auf Ubuntu 18.04.2 installieren. Während der Installation kann man nun nicht mehr " standard system utilities" auswählen. Auch wird nicht mehr nach dem Root PW für mysql gefragt. Muss ich das PW nun manuell erstellen? Gruß

Christian

BLinz

6 Monaten zuvor
Punktzahl 0++

Guter Hinweis. Ich habe es oben mal geändert, bei Gelegenheit werde ich die Screenshots auch noch mal aktualisieren.

Nein, ein Passwort für den root frü MySQL braucht es nicht - der root kann sich schlichtweg ohne anmelden. Und die System-Utilities braucht es nicht mehr, das benötigte ist nun schon ab Werk drin.
Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen. Bei einem Kommentar wird deine IP-Adresse zusammen mit dem Text, den angegebenen Namen bzw. der Email-Adresse in der Datenbank für die Kommentare dauerhaft gespeichert. Genaueres kannst du hier nachlesen: Datenschutzerklärung