Zabbix

Zabbix ist ein Monitoringsystem das auf Agents basiert. Besonders die von Haus aus enthaltenen Graphen und Templates mit Autodiscovery von z.B. mountpoints sind von Vorteil.

:!: Diese Seite basiert auf Zabbix Version 3.4.

Passendes Paket auf zabbix.com herunterladen.

Beispiel für:

Debian Stretch + Zabbix 3.4.1:

wget https://repo.zabbix.com/zabbix/3.4/debian/pool/main/z/zabbix-release/zabbix-release_3.4-1+stretch_all.deb
dpkg -i zabbix-release_3.4-1+stretch_all.deb
apt update

Debian Jessie + Zabbix 3.4.1:

wget https://repo.zabbix.com/zabbix/3.4/debian/pool/main/z/zabbix-release/zabbix-release_3.4-1+jessie_all.deb
dpkg -i zabbix-release_3.4-1+jessie_all.deb
apt update

Weiter mit der Sektion 2 „Install and configure Zabbix server“ machen.

Agent Installation

apt install zabbix-agent
systemctl stop zabbix-agent.service
# check if still running:
lsof -i -n | grep zab
 
mv /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf.dist

Neue Config: /etc/zabbix/zabbix_agentd.conf

# my Zabbix config
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
# size of Logfile in MB, Range: 0-1024; 0 means "disable automatic log rotation"
LogFileSize=100
# Source IP address for outgoing connections
# SourceIP=
EnableRemoteCommands=1
ListenPort=10050
# Unique, case sensitive hostname.
# Required for active checks and must match hostname as configured on the server.
# Value is acquired from HostnameItem (default: HostnameItem=system.hostname) if undefined: 
Hostname=MY.HOSTNAME.DOMAIN.TLD
Server=1.2.3.4/32
ServerActive=1.2.3.4/32
systemctl start zabbix-agent.service
systemctl enable zabbix-agent.service

Alle Befehle ohne Passwort erlauben (nicht empfohlen):

zabbix ALL=NOPASSWD: ALL

Ausgewählte Befehle erlauben:

zabbix ALL=NOPASSWD: /etc/init.d/apache restart

Konfiguration

PHP-Konfiguration_

date.timezone = Europe/Berlin
max_execution_time = 300

Der Installationsassistent findet sich unter http://SERVER.TLD/zabbix/

Konfigurationsdatei (/usr/share/zabbix/conf/zabbix.conf.php; bei CentOS /etc/zabbix/web/zabbix.conf.php):

<?php
global $DB_TYPE, $DB_SERVER, $DB_PORT, $DB_DATABASE, $DB_USER, $DB_PASSWORD, $IMAGE_FORMAT_DEFAULT;
 
$DB_TYPE	= "MYSQL";
$DB_SERVER	= "localhost";
$DB_PORT	= "0";
$DB_DATABASE	= "zabbix";
$DB_USER	= "zabbix";
$DB_PASSWORD	= "Passwort";
 
$IMAGE_FORMAT_DEFAULT	= IMAGE_FORMAT_PNG;
?>

Danach ist der Login mit Admin und Passwort Zabbix möglich.

E-Mail

Telegram

Es wird benutzt:

Vorgehensweise:

  1. Bot bei Telegram anlegen
    1. dazu im Client mit BotFather eine neue Konversation starten, der Befehl ist: /newbot
    2. es führt ein Assistent durch die Einrichtung: man muss einen Benutzernamen eingeben der auf „bot“ endet
    3. …und bekommt am Ende einen token für die HTTP API (z.B. 124226418:BCF9EoD6k10O5qNDfhBL0ofneQ4OfIux5Fo)
  2. Skript ablegen in /usr/lib/zabbix/alertscripts
    #!/bin/sh
    # to must be $chat_id or "@username":
    to=$1 
    subject=$2
    body=$3
     
    botID="124226418:BCF9EoD6k10O5qNDfhBL0ofneQ4OfIux5Fo"
     
    curl -X POST --retry 5 --retry-delay 0 --retry-max-time 60 --data-urlencode "chat_id=$1" --data-urlencode "text=$2 $3" "https://api.telegram.org/$botID/sendMessage?disable_web_page_preview=true"
    if [ $? -ne 0 ]; then
            exit 1
    fi
  3. Im Monitoring-System: Administration → Media-types → Create Media Type
    1. Name: Telegram
    2. Type: Skript
    3. Script name: $Dateiname (ohne Pfad!)
    4. Script parameters:
      1. {ALERT.SENDTO}
      2. {ALERT.SUBJECT}
      3. {ALERT.MESSAGE}
    5. Options entsprechend ausfüllen
  4. Im Monitoring-System: Administration → Users → $Benutzername → Media → Add
    1. Type: Telegram
    2. Send to: $Benutzername (aus Telegram) oder die $ChatID

Welche Lokales angezeigt werden legt einseits der Translation status fest (muss mindestens 75% übersetzt sein):

/usr/share/zabbix/include/locales.inc.php :

function getLocales() {
	return [
		'en_GB' => ['name' => _('English (en_GB)'),	'display' => true],
		'en_US' => ['name' => _('English (en_US)'),	'display' => true],
		'bg_BG' => ['name' => _('Bulgarian (bg_BG)'),	'display' => false],
		'ca_ES' => ['name' => _('Catalan (ca_ES)'),	'display' => false],
		'zh_CN' => ['name' => _('Chinese (zh_CN)'),	'display' => false],
		'zh_TW' => ['name' => _('Chinese (zh_TW)'),	'display' => false],
		'cs_CZ' => ['name' => _('Czech (cs_CZ)'),	'display' => false],
		'nl_NL' => ['name' => _('Dutch (nl_NL)'),	'display' => false],
		'fi_FI' => ['name' => _('Finnish (fi_FI)'),	'display' => false],
		'fr_FR' => ['name' => _('French (fr_FR)'),	'display' => true],
		'ka_GE' => ['name' => _('Georgian (ka_GE)'),	'display' => false],
		'de_DE' => ['name' => _('German (de_DE)'),	'display' => true],
		'el_GR' => ['name' => _('Greek (el_GR)'),	'display' => false],
		'he_IL' => ['name' => _('Hebrew (he_IL)'),	'display' => false],
		'hu_HU' => ['name' => _('Hungarian (hu_HU)'),	'display' => false],
		'id_ID' => ['name' => _('Indonesian (id_ID)'),	'display' => false],
		'it_IT' => ['name' => _('Italian (it_IT)'),	'display' => true],
		'ko_KR' => ['name' => _('Korean (ko_KR)'),	'display' => false],
		'ja_JP' => ['name' => _('Japanese (ja_JP)'),	'display' => false],
		'lv_LV' => ['name' => _('Latvian (lv_LV)'),	'display' => false],
		'lt_LT' => ['name' => _('Lithuanian (lt_LT)'),	'display' => false],
		'nb_NO' => ['name' => _('Norwegian (nb_NO)'),	'display' => false],
		'fa_IR' => ['name' => _('Persian (fa_IR)'),	'display' => false],
		'pl_PL' => ['name' => _('Polish (pl_PL)'),	'display' => false],
		'pt_BR' => ['name' => _('Portuguese (pt_BR)'),	'display' => false],
		'pt_PT' => ['name' => _('Portuguese (pt_PT)'),	'display' => false],
		'ro_RO' => ['name' => _('Romanian (ro_RO)'),	'display' => false],
		'ru_RU' => ['name' => _('Russian (ru_RU)'),	'display' => false],
		'sk_SK' => ['name' => _('Slovak (sk_SK)'),	'display' => false],
		'es_ES' => ['name' => _('Spanish (es_ES)'),	'display' => true],
		'sv_SE' => ['name' => _('Swedish (sv_SE)'),	'display' => false],
		'tr_TR' => ['name' => _('Turkish (tr_TR)'),	'display' => false],
		'uk_UA' => ['name' => _('Ukrainian (uk_UA)'),	'display' => false],
		'vi_VN' => ['name' => _('Vietnamese (vi_VN)'),	'display' => false]
	];
}

…aber auch die Lokales die im System vorhanden sind. Bei Debian/Ubuntu lässt sich das zu festlegen (die obigen Codes z.B. „de_DE“ müssen in der UTF8-Variante vorhanden sein):

dpkg-reconfigure locales

Möchte man keine CA für die Absicherung der Kommunikation zwischen Server und dem Agent einsetzen, so sind alternativ pre-shared keys (PSK) möglich. Siehe auch: Using pre-shared keys.

# 32Byte / 256 Bit-Zufallszeichenkette erzeugen:
openssl rand -hex 32 > /etc/zabbix/zabbix.psk
chmod 600 /etc/zabbix/zabbix.psk
chown zabbix.zabbix /etc/zabbix/zabbix.psk

Den Inhalt von /etc/zabbix/zabbix.psk auf dem Server/Proxy eintragen (Karteikarte encryptiong, Methode umstellen!):

/etc/zabbix/zabbix_agentd.conf:

TLSConnect=psk
TLSAccept=psk
TLSPSKFile=/etc/zabbix/zabbix.psk
TLSPSKIdentity=$SERVERNAME_oder_anderer_String
systemctl restart zabbix-agent.service

E-Mail-Einstellungen (Server ausgehend)