Kategória: Raspberry π

Zmenené: 30. máj 2015

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.

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:

  1. 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
    
  2. 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
    
  3. 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/
    
  4. upraviť cestu k databáze v nastavení servera v /usr/local/etc/zabbix_server.conf:

    DBName=/var/lib/sqlite/zabbix.db
    
  5. 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 a Short-Description upraviť podľa súboru

    Po ú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):

  1. 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;
        }
    }
    
  2. pridať ho do zoznamu povolených stránok:

    cd /etc/nginx/sites/enabled
    ln -s ../sites-available/zabbix zabbix
    
  3. 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:

  1. Úvodná obrazovka:

    nastavenie web. rozhrania Zabbix
  2. Kontrola potrebných nastavení a závislostí – nesplnené nastavenia PHP – po oprave použiť tlačidlo Retry:

    nastavenie web. rozhrania Zabbix
  3. Kontrola potrebných nastavení – všetko je v poriadku:

    nastavenie web. rozhrania Zabbix
  4. Nastavenie databázy – prvé zobrazenie ukazuje bludné polia – treba použiť tlačidlo Test Connection

    nastavenie web. rozhrania Zabbix
  5. Po otestovaní spojenia sa objavia správne polia, treba zadať cestu k databáze SQLite:

    nastavenie web. rozhrania Zabbix
  6. Nastavenia podrobností servera – predvolené hodnoty:

    nastavenie web. rozhrania Zabbix
  7. Zhrnutie inštalačných nastavení:

    nastavenie web. rozhrania Zabbix
  8. Dokončenie inštalácie – všimnite si OK pri konfiguračnom súbore:

    nastavenie web. rozhrania Zabbix

Prvé spustenie

Po dokončení inštalácie sa objaví prihlasovací formulár:

prihlásenie do Zabbix

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 Administration -> Users, v rozbaľovacom zozname vpravo zvoľte Users 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ť:

úprava administrátora

Pridanie localhost

Lokálny stroj s práve nainštalovaným serverom zabbix je pripravený, len je vypnutý, a tak stačí prejsť do Nastavenia -> Hosty, 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):

mapa Zabbix

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é…