Zabbix na Raspberry
Pretože používam RasPi ako domáci server, rozhodol som sa, že si doma urobím aj nejaký monitorovací server. A tak ponúkam popis inštalácie a základného nastavenia monitorovacieho systému Zabbix s databázou SQLite a webovým serverom Nginx na Raspberry Pi v2B, s nečakaným koncom.
Obsah článku
Výber nástroja
Raspberry Pi používam ako domáci server už niečo viac ako dva roky. Najprv som mal Raspberry Pi B+, pred niekoľkými mesiacmi som ho doplnil o verziu 2B+, ktorá ponúka (oi.) 4-jadrový procesor a 1 GB RAM.
Na starom stroji som sa pôvodne pokúšal vytvoriť si vlastný odľahčený nástroj, postavený na RRDtool a Pythone, ale to neviedlo nikam. Potom som používal RPi-Monitor, ktorý je však prednostne zameraný na sledovanie informácií o RasPi samotnom. A hoci ponúka aj možnosti rozšírenia, nejak som sa k nim nikdy nedostal, ale hlavne tento nástroj prichádza s vlastným webovým serverom (v perle), čo mi príde zbytočné.
V práci používam Cacti a považujem ho za výborný nástroj, ktorý možno rozšíriť na monitorovanie prakticky čohokoľvek (vrátane prípadných externých senzorov). Ako úložisko (webového rozhrania) používa databázu MySQL, a výkonom MySQL na RasPi nemám dobré skúsenosti, a keď som objavil Zabbix, ktorý ponúka ja podporu SQLite, rozhodol som sa vyskúšať ho.
Poznámka
Dokumentácia Zabbix upozorňuje, že použitie databázy SQLite na server môže skončiť poškodením databázy a následnou stratou dát, ale rozhodol som sa to vyskúšať v nádeji, že v prípade mojej maličkej domácej siete to nebude až také zlé.
Inštalácia servera a agenta
Balíky so serverom Zabbix sú dostupné v úložisku, ale k dispozícii je server s podporou len MySQL a PostgreSQL, podpora MySQL je dostupná len pre proxy Zabbix, a tak je nutné urobiť inštaláciu manuálne, čo však nie je nevýhoda, ale skôr len nepríjemnosť, pretože to inštaláciu (a neskoršie aktualizácie) trochu komplikuje.
Príprava
Začal som vytvorením samostatného adresára, do ktorého som stiahol a rozbalil zdrojové kódy Zabbix (v dobe písania vetzia 2.4.5):
mkdir ~/zabbix
cd zabbix
wget http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/2.4.5/zabbix-2.4.5.tar.gz
tar xavf zabbix-2.4.5.tar.gz
cd zabbix-2.4.5/
Kompilácia
Samotný server a agent Zabbix je napísaný v jazyku C, takže je potrebná jeho kompilácia, ku ktorej potrebuje niekoľko knižníc, preto je potrebné zaistiť ich nainštalovanie. Samotný výber potrebných knižníc je závislý na zvolených konfiguračných voľbách:
apt-get install fping sqlite3 make pkg-config libsnmp-dev php5-dev libiksemel-dev /
libsqlite3-dev libcurl4-openssl-dev
Okrem knižníc je potrebné nainštalovať aj rozšírenia PHP:
apt-get install php5-curl php5-gd php5-sqlite php-gettext
Po nainštalovaní potrebných závislostí možno spustiť samotnú inštaláciu, najprv teda konfigurácia kompilácie, kde zapínam podporu servera i aagenta, databázu SQLite, pridávam podporu SNMP, XMPP (Jabber) a curl:
./configure --enable-server --enable-agent \
--with-sqlite3 --with-net-snmp --with-jabber --with-libcurl
Poznámka
Nepoužívam IPv6, ak potrebujete, pridajte --enable-ipv6
.
S výsledkom:
Configuration:
Detected OS: linux-gnueabihf
Install path: /usr/local
Compilation arch: linux
Compiler: gcc
Compiler flags: -g -O2 -I/usr/include -I/usr/local/include -I/usr/lib/perl/5.14/CORE -I. -I/usr/include
Enable server: yes
Server details:
With database: SQLite v3.x
WEB Monitoring: cURL
Native Jabber: yes
SNMP: yes
IPMI: no
SSH: no
ODBC: no
Linker flags: -rdynamic -L/usr/lib -L/usr/lib -L/usr/lib/arm-linux-gnueabihf
Libraries: -lm -ldl -lresolv -lsqlite3 -liksemel -lnetsnmp -lcurl
Enable proxy: no
Enable agent: yes
Agent details:
Linker flags: -rdynamic -L/usr/lib/arm-linux-gnueabihf
Libraries: -lm -ldl -lresolv -lcurl
Enable Java gateway: no
LDAP support: no
IPv6 support: no
Ak konfiguračný skript úspešne skončil, možno spustiť kompiláciu:
make
Poznámka
Tento krok možno preskočiť a samotnú kompiláciu spustiť spolu s inštaláciou…
Inštalácia
Po úspešnej kompilácii je možné Zabbix nainštalovať a pripraviť mu potrebné veci v systéme – väčšina z týchto krokov vyžaduje práva root a budem im venovať nasledujúcu kapitulu. Takže teraz samotná inštalácia (ako root):
make install
Nastavenie systému
Tieto kroky väčšinou robí inštalácia balíka, ale pri inštalácii zo zdrojového kódu je potrebné ich urobiť manuálne:
vytvorenie používateľa a jehho pridanie do skupiny
www-data
:groupadd zabbix useradd --system --gid zabbix --no-create-home --home-dir /dev/null --shell /bin/sh zabbix adduser www-data zabbix
vytvorenie a príprava databázy:
mkdir /var/lib/sqlite/ sqlite3 /var/lib/sqlite/zabbix.db < database/sqlite3/schema.sql sqlite3 /var/lib/sqlite/zabbix.db < database/sqlite3/images.sql sqlite3 /var/lib/sqlite/zabbix.db < database/sqlite3/data.sql
nastaviť prístupové práva k databáze:
chmod 775 /var/lib/sqlite/ chmod 664 /var/lib/sqlite/* chown -R zabbix:www-data /var/lib/sqlite/
upraviť cestu k databáze v nastavení servera v
/usr/local/etc/zabbix_server.conf
:DBName=/var/lib/sqlite/zabbix.db
pridanie a úprava štartovacích skriptov:
cp misc/init.d/debian/zabbix-server /etc/init.d/ cp misc/init.d/debian/zabbix-agent /etc/init.d/
Na začiatok každého skriptu je potrebné pridať hlavičku, inak nebude update-rc.d schopný vytvoriť závislosti štartu:
### BEGIN INIT INFO # Provides: zabbix-server/agent # Required-Start: # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Initialize Zabbix server/agent # Description: ### END INIT INFO
Poznámka
Polia
Provides
aShort-Description
upraviť podľa súboruPo úprave ich pridať do štartu systému:
update-rc.d zabbix-server defaults update-rc.d zabbix-agent defaults Nakoniec oba démony spustiť:: invoke-rc.d zabbix-server start invoke-rc.d zabbix-agent start
Webové rozhranie
Inštalácia webového rozhrania spočíva v dvoch krokoch, najprv inštalácia rozhrania:
mkdir /srv/www/zabbix
cp -a frontends/php/* /srv/www/zabbix/
chown -R www-data:www-data /srv/www/zabbix
Na splnenie požiadavkov webového rozhrania Zabbix je potrebné zaistiť tieto nastavenia PHP:
max_execution_time 300
max_input_time 300
post_max_size 16M
date.timezone Europe/Bratislava
Poznámka
Samozrejme, časovú zónu si vyberte podľa vlastnej potreby.
Nastavenie Nginx
Môžete samozrejme použiť akýkoľvek webový server, ktorý podporuje PHP, ja používam Nginx
a rozhodol som sa vytvoriť pre Zabbix samostatného virtuálneho hostiteľa (pre ktorého
mám vytvorenú položku DNS s menom zabbix.skk
):
vytvoriť nového virtuálneho hostiteľa:
touch /etc/nginx/sites-available/zabbix
s obsahom:
## Zabbix frontend ## server { listen 80; root /srv/www/zabbix; index index.php; server_name zabbix zabbix.skk; error_log /var/log/nginx/zabbix_error.log; access_log /var/log/nginx/zabbix_access.log; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi.conf; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } # minimize access and error log writing location ~* ^/(favicon.ico|robots.txt)$ { allow all; access_log off; log_not_found off; } location ~* ^.+.(css|js|jpe?g|gif|png|ico|xml)$ { access_log off; expires 30d; #log_not_found off; } }
pridať ho do zoznamu povolených stránok:
cd /etc/nginx/sites/enabled ln -s ../sites-available/zabbix zabbix
nakoniec znova načítať konfiguráciu nginx:
invoke-rc.d nginx reload
Dokončenie inštalácie
Po nastavení Nginx možno otvoriť webové rozhranie Zabbix v prehliadači, ja som mu nastavil samostatné doménové meno, a tak otváram http://zabbix.skk:
Úvodná obrazovka:
Kontrola potrebných nastavení a závislostí – nesplnené nastavenia PHP – po oprave použiť tlačidlo Retry:
Kontrola potrebných nastavení – všetko je v poriadku:
Nastavenie databázy – prvé zobrazenie ukazuje bludné polia – treba použiť tlačidlo Test Connection
Po otestovaní spojenia sa objavia správne polia, treba zadať cestu k databáze SQLite:
Nastavenia podrobností servera – predvolené hodnoty:
Zhrnutie inštalačných nastavení:
Dokončenie inštalácie – všimnite si OK pri konfiguračnom súbore:
Prvé spustenie
Po dokončení inštalácie sa objaví prihlasovací formulár:

Predvolené prihlasovacie údaje sú: meno Admin a heslo zabbix. Po ich zadaní sa zobrazí východzia nástenka:

Ďalšie kroky
Hoci sa webové rozhranie Zabbix zobrazilo, popravde veľa toho v ňom nie je, preto je dobré urobiť ďalšie kroky…
Zmena administrátora
Ponechať akúkoľvek službu s predvolenými nastaveniami je častou chybou začiatočníkov, i preto tu výslovne spomeniem ako zmeniť predvolený účet a heslo administrátora Zabbix.
Prejdite do
, v rozbaľovacom zozname vpravo zvoľte a kliknite na používateľa Admin. Vo formulári potom zmeňte prihlasovacie meno (Alias) a heslo (Change password), prípadne aj ďalšie polia (námatkovo Language). Nezabudnite zmeny uložiť:
Pridanie localhost
Lokálny stroj s práve nainštalovaným serverom zabbix je pripravený, len je vypnutý, a tak stačí prejsť do
, tam kliknúť na Zabbix server, v ňom zaškrtnúť Povolené a zmeny uložiť (Aktualizovať).Teraz môžete pozerať grfy, či sledovať iné parametre, napr. si pozrieť mapu (kde je zatiaľ, samozrejme, len jeden stroj):

Záver
Zabbix sa mi podarilo bez problémov skompilovať, nainštalovať i rozbehnúť na Raspberry Pi B2, to je tá lepšia časť. Tou horšou časťou je, že autori majú pravdu, keď píšu, že SQLite nie je pre server vhodné riešenie databázy, pretože i keď monitorujem len jediný stroj, stretával som sa vo webovom rozhraní s touto chybou:
SQLite3::query(): Unable to execute statement: database is locked [screens.php:176 \
→ CView->render() → include() → CScreenBuilder->show() → CScreenMap->get() \
→ getActionMapBySysmap() → CFrontendApiWrapper->get() → CApiWrapper->__call() \
→ CFrontendApiWrapper->callMethod() → CApiWrapper->callMethod() \
→ CFrontendApiWrapper->callClientMethod() → CLocalApiClient->callMethod() \
→ call_user_func_array() → CTrigger->get() → CApiService->customFetch() \
→ DBselect() → SQLite3->query() in /srv/www/zabbix/include/db.inc.php:429]
Error in query [SELECT t.triggerid FROM triggers t WHERE 1=0 AND t.flags IN \
('0','4')] Error code [5] Message [database is locked]
Síce sa táto chyba neobjavovala často, predsa len to považujem (aj s ohľadom na zber dát) za možný problém v budúcnosti
Nehodnotím čas strávený inštaláciou za zbytočný – jednak som si všimol pri vytváraní databázy, aké je to pomalé a jednak vidím, že Zabbix server má naozaj problém s SQLite. No keď už mám používať MySQL, tak zvolím Cacti, najmä preto, že s ním viem pracovať a prispôsobovať si ho, ale i preto, že oddeľuje databázy na zápis dát (RRD) a webové rozhranie (MySQL), no o jeho inštalácii niekedy inokedy…
Poznámka
Nech tento článok zároveň poslúži ako ukážka toho, že nie každému článku na internete možno slepo dôverovať – a verte mi, že som ich ohľadom kadejakých inštalácií na Raspberry Pi našiel veľa a všetky mali jedno spoločné – zabúdali, že nainštalovať niečo nestačí, musí to byť ešte aj použiteľné…