Instalace LibreNMS na Ubuntu 20.04 (Install LibreNMS Ubuntu 20.04)

By | 16/01/2022

Last Updated on 20/08/2022 by administrator

Instalace LibreNMS na Ubuntu 20.04 (Install LibreNMS Ubuntu 20.04)

Instalace LibreNMS

Motivace:

LibreNMS je svobodný software (GNU GPL) pro monitorování síťových zařízení, využívající sběru informací hlavně díky protokolu SNMP. Využívá také technologie PHP/MySQL/ a základní správu poskytuje přes webového rozhraní. Má podporu pro mnoho síťových prvků, ale i podporu pro operační systémy. Seznam všech podporovaných zařízení lze nalézt zde. LibreNMS podporuje automatické objevování zařízení, notifikace do dalších služeb (pomocí e-mailu, Slacku, Pager Duty), je možné k němu přistupovat pomocí API či mobilní aplikace.

Demo aplikace si lze prohlédnout zde: https://demo.librenms.org/

OS:

Implementace instalace LibreNMS byla prakticky prováděna na Ubuntu 20.04 LTS.

Implementace a Instalace LibreNMS [1]:

Příkazem apt update se provede aktualizace seznamu balíčků z repozitářů. Příkaz software-properties-common poskytuje některé užitečné skripty pro přidávání a odstraňování PPA (Personal Package Archive) [5,6]. Příkazem add-apt-repository universe, se přidá jeden z pěti repozitářů universe (pokud již není přidán). Poslední příkaz apt install nainstaluje veškeré potřebné balíčky k plné funkci LibreNMS, jako je Apache2, MariaDB-server, Python či další:

apt update
apt install software-properties-common
add-apt-repository universe
apt update
apt install acl apache2 curl composer fping git graphviz imagemagick mariadb-client mariadb-server mtr-tiny nmap php7.4-cli php7.4-curl php7.4-fpm php7.4-gd php7.4-gmp php7.4-json php7.4-mbstring php7.4-mysql php7.4-snmp php7.4-xml php7.4-zip rrdtool snmp snmpd whois unzip python3-pymysql python3-dotenv python3-redis python3-setuptools python3-systemd python3-pip

Spustit jednoduchý “security” script, který je předinstalovaný s MySQL:

mysql_secure_installation

Script požádá o nastavení MySQL hesla pro root uživatele. Je doporučeno použít silné heslo. Dalšími otázkami bude, zda si přejeme vymazat anonymní uživatelé, zda chceme zakázat přihlášení pod rootem vzdáleně, vymazat “test database” a reload tabulek. Všechny tyto otázky potvrdit “y”, kromě změny root hesla, které již bylo nastaveno v prvním kroku čili bude zvoleno “n”, viz níže:

Enter current password for root (enter for none): nejakesilneheslo123
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Vytvoření uživatele librenms:

useradd librenms -d /opt/librenms -M -r -s "$(which bash)"

Legenda:

  • M – pro nového uživatele se nevytvoří home složka v lokaci /home
  • d – specifikuje umístění home složky
  • r – vytvoří system account
  • s – specifikuje typ shellu (v tomto případě bash)

Přejít do lokace /opt a stáhnout LibreNMS:

cd /opt
git clone https://github.com/librenms/librenms.git

Změnit vlastníka složky /opt/librenms a její podsložky na librenms a nastavit práva pro tuto složku:

chown -R librenms:librenms /opt/librenms
chmod 771 /opt/librenms

Příkaz setfacl udělí rozšířená práva již vlastnící skupině librenms (g::rwx) pro uvedené složky [2]:

setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
setfacl -R -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/

Přihlásit se jako uživatel librenms a scriptem nainstalovat PHP závislosti:

su - librenms
./scripts/composer_wrapper.php install --no-dev
logout

Pozn. Může se stát, že se výše uvedený script nemusí provést korektně, a to z důvodu nastavení přístupu do internetu přes proxy. Řešením je ruční instalace composer balíčku:

wget https://getcomposer.org/composer-stable.phar
mv composer-stable.phar /usr/bin/composer
chmod +x /usr/bin/composer

V obou souborech php.ini je potřeba přidat časové pásmo:

vi /etc/php/7.4/fpm/php.ini
vi /etc/php/7.4/cli/php.ini

a odkomentovat date.timezone pod sekci [Date]. Níže je uvedený příklad pro časové pásmo Europe/Prague. Seznam všech podporovaných časových pásem je možné najít v https://www.php.net/manual/en/timezones.php:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Europe/Prague

Je potřeba, aby bylo stejné časové pásmo nastaveno na Ubuntu serveru, zde příklad pro časové pásmo Europe/Prague:

timedatectl set-timezone Europe/Prague

Dále je potřeba nakonfigurovat MariaDB a vytvořit databázi:

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

a přidat následující řádky pod sekci [mysqld]. Příkaz innodb_file_per_table=1 říká, že bude ukladát data a indexy v samostatnem souboru místo ve sdíleném prostoru tabulek [7] a příkaz lower_case_table_names=0 bude ukládat jména tabulek velkými písmeny:

innodb_file_per_table=1
lower_case_table_names=0

Částečný výpis 50-server.cnf souboru:

[mysqld]

#
# * Basic Settings
#

innodb_file_per_table=1
lower_case_table_names=0
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1

Pozn. Díky tomu, že databáze bude běžet na tomto serveru, je bind-address nastavena na localhost 127.0.0.1. Pokud je použitý jiný server pro DB, je potřeba změnit tuto IP adresu.

Povolit a restartovat MariaDB:

systemctl enable mariadb
systemctl restart mariadb

Přihlásit se do MariaDB pomocí hesla, které bylo zvoleno pro root uživatele (-u = username):

mysql -u root

Bude vytvořena nová databáze pro LibreNMS se jménem librenms s kódováním znaků uft8:

mysql> CREATE DATABASE librenms CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Vytvoření uživatele se jménem librenms, kterému je potřeba vytvořit heslo:

mysql> CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'zvolitsilneheslo';

Příkazem udělíme mu přístup uživateli librenms k databázi librenms:

mysql> GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';

Příkaz FLUSH PRIVILEGES; aplikuje nové změny a příkazem exit se odhlásí z MariaDB databáze:

mysql> FLUSH PRIVILEGES;
mysql> exit

Pozn. Každý MySQL příkaz musí končit středníkem (;).

Zkopírovat www.conf na librenms.conf a tento soubor otevřít:

cp /etc/php/7.4/fpm/pool.d/www.conf /etc/php/7.4/fpm/pool.d/librenms.conf
vi /etc/php/7.4/fpm/pool.d/librenms.conf

Přepsat [www] na [librenms], také přepsat user = www-data a group = www-data na user = librenms a group = librenms a nakonec přepsat listen = /run/php/php7.4-fpm.sock na listen = /run/php-fpm-librenms.sock. Částečný výpis souboru librenms.conf bude vypadat následovně:

; pool name ('www' here)
[librenms]

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = librenms
group = librenms

; Note: This value is mandatory.
listen = /run/php-fpm-librenms.sock

Aby mohl Apache tento obsah obsluhovat, je nutné vytvořit soubor virtuálního hostitele. Místo přímé úpravy defaultního konfiguračního souboru v /etc/apache2/sites-available/000-default.conf se vytvoří nový soubor librenms.conf ve složce /etc/apache2/sites-available/:

vi /etc/apache2/sites-available/librenms.conf

A vložit následující konfigurační blok, libovolně je možné změnit jméno serveru v poli ServerName:

<VirtualHost *:80> 
   DocumentRoot /opt/librenms/html/ 
   ServerName librenms.example.com

   AllowEncodedSlashes NoDecode
   <Directory "/opt/librenms/html/">
     Require all granted 
     AllowOverride All
     Options FollowSymLinks MultiViews
   </Directory>

  # Enable http authorization headers
  <IfModule setenvif_module>
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
  </IfModule>

  <FilesMatch ".+\.php$">
    SetHandler "proxy:unix:/run/php-fpm-librenms.sock|fcgi://localhost"
  </FilesMatch>
</VirtualHost>

Deaktivovat výchozí web definovaný v 000-default pomocí a2dissite:

a2dissite 000-default

Řetězec a2enmod povolí zadaný modul v konfiguraci Apache2. V tomto případě se jedná o modul proxy_fcgi, který poskytuje podporu pro Fast CGI. Přidružený setenvif nastavuje proměnné odeslané do FastCGI [3]:

a2enmod proxy_fcgi setenvif rewrite

Povolit web librenms pomocí a2ensite:

a2ensite librenms.conf

Restartovat Apache a PHP Fast Process Manager interpreter:

systemctl restart apache2
systemctl restart php7.4-fpm

Vytvořit symbolický link a zkopírovat lnms-completion.bash do /etc/bash_completion.d/ složky, což zajistí doplňování příkazů pro příkaz lnms díky použití tabulátoru:

ln -s /opt/librenms/lnms /usr/bin/lnms
cp /opt/librenms/misc/lnms-completion.bash /etc/bash_completion.d/

Zkopírovat a otevřít konfigurační soubor pro SMTPD snmpd.conf:

cp /opt/librenms/snmpd.conf.example /etc/snmp/snmpd.conf
vi /etc/snmp/snmpd.conf

V souboru snmpd.conf přepsat původní community string RANDOMSTRINGGOESHERE na libovolně jiný:

# Change RANDOMSTRINGGOESHERE to your preferred SNMP community string
com2sec readonly  default         RANDOMSTRINGGOESHERE

Stáhnutí souboru distro, které detekuje a jaký typ OS se jedná (v tomto případě se jedná o Linux a následně definuje příslušnou distribuci linuxu):

curl -o /usr/bin/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro
chmod +x /usr/bin/distro

Povolení a resetnutí snmpd:

systemctl enable snmpd
systemctl restart snmpd

Vytvoření Cron job pro automatizaci:

cp /opt/librenms/librenms.nonroot.cron /etc/cron.d/librenms

Pro lepší správu ukládaných logů lze využít rotování logů. Díky tomu lze logy rotovat, komprimovat, či mazat, pokud dojde k překročení určité velikostí souboru:

cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms

LibreNMS běží na IP adrese 192.168.0.7. Dokončit instalaci LibreNMS přes webový prohlížeč přes http://192.168.0.7/install/checks, nebo pomocí předefinovaného Server Name librenms.example.com/install/checks:

librenms web access
Zde by mělo být vše správně nainstalováno. Kliknout na ikonu databáze:

Instalace LibreNMS
V této rubrice budou nakonfigurované všechny parametry k databázi. Všechny předefinované parametry nechat být. Jako heslo použit to, které bylo vytvořeno v databázi MariaDB pro uživatele librenms:

Instalace LibreNMS - databaze
A pro vytvoření databáze kliknout na Build Database:

Instalace LibreNMS - databaze

Obrázek níže ukazuje, že byla databáze úspěšně vytvořena. Kliknutím na ikonu klíče pokračovat dále:

Instalace LibreNMS - databaze

V rubrice Create Admin User zvolit přihlašovací admin údaje k webovému rozhraní LibreNMS. Ty je dobré si někam zapsat. Následně kliknout na Add User:

Instalace LibreNMS - admin userPřed dokončení instalace, kliknout na validate your install:

Instalace LibreNMSInstalace LibreNMS je dokončena. Nakonec se přihlásit administrátorským heslem, které bylo vytvořeno v rubrice Create Admin User:

Instalace LibreNMS login

TIPY:

Aktualizace LibreNMS:

Aktualizace LibreNMS se provádí automaticky pomocí scriptu v /opt/librenms/daily.sh. Toto nastavení lze najít pod v GUI pod ozubeným kolečkem v System > Updates:

LibreNMS update

Jak zmigrovat LibreNMS na jiný server:

Viz. článek – How do I migrate my LibreNMS install to another server?

Monitorování aplikací:

Je možné sbírat statistická data různých aplikací a vykreslovat je do grafu LibreNMS a to např. pro Apache, BIND, MySQL, PiHole, NTP a mnoho dalších viz. článek https://docs.librenms.org/Extensions/Applications/

Řešení problémů:

1) Chyba “Fail: Database: incorrect column” [4]

Při přihlášení je možné, že se objeví chyba Fail: Database: incorrect column:

Fail: Database: incorrect column LibreNMS

Řešení problému:

Přihlásit se do MariaDB přes uživatele librenms a pomocí definovaného hesla pro librenms, které bylo vytvořeno výše v článku:

mysql -u librenms -p librenms

A stačí překopírovat příkazy níže:

mysql> SET TIME_ZONE='+00:00';
mysql> ALTER TABLE `notifications` CHANGE `datetime` `datetime` timestamp NOT NULL DEFAULT '1970-01-02 00:00:00' ;
mysql> ALTER TABLE `users` CHANGE `created_at` `created_at` timestamp NOT NULL DEFAULT '1970-01-02 00:00:01' ;

Následně stačí provést refresh webové stránky.

2) Chyba “Make sure your daily.sh cron is running and run ./daily.sh by hand to see if there are any errors.”

Při přihlášení je možné, že se objeví chyba Make sure your daily.sh cron is running and run ./daily.sh by hand to see if there are any errors.

Řešení problému:

Přihlásit se přes uživatele librenms:

su - librenms

A spustit script daily.sh:

./daily.sh

3) Chyba – Po přidání síťového zařízení se nic neděje:

Po přidání síťových zařízení se nevykreslují grafy, chybí zobrazení detekce OS či platformy a ostatní informace:

poller error

Řešení problému:

Může být chybějící soubor pro Cron, což obsahuje příkaz pro automatizaci příkazu pro polling:

cp /opt/librenms/librenms.nonroot.cron /etc/cron.d/librenms

Soubor librenms má stejné práva jako ostatní soubory v /etc/cron.d/, což je v tomto případě root:root.

Fungující poller:

poller fix

4) Chyba – Python3 module:

[FAIL] Python3 module issue found: ‘Required packages: [‘PyMySQL!=1.0.0’, ‘python-dotenv’, ‘redis>=3.0’, ‘setuptools’, ‘psutil>=5.6.0’, ‘command_runner>=1.3.0’] Package not found: The ‘command_runner>=1.3.0’ distribution was not found and is required by the application.

[FAIL] Python3 module issue found: 'Required packages: ['PyMySQL!=1.0.0', 'python-dotenv', 'redis>=3.0', 'setuptools', 'psutil>=5.6.0', 'command_runner>=1.3.0'] Package not found: The 'command_runner>=1.3.0' distribution was not found and is required by the application.

Řešení problému:

Instalace python3-pip a použití příkazu pip3 install, což ukazuje Fix:

sudo apt install python3-pip
sudo pip3 install -r /opt/librenms/requirements.txt

5) Varování – Log rotation not enabled:

Warning: Log rotation not enabled, could cause disk space issues

Warning: Log rotation not enabled, could cause disk space issues

Řešení problému:

Pro lepší správu ukládaných logů lze využít rotování logů. Díky tomu lze logy rotovat, komprimovat, či mazat, pokud dojde k překročení určité velikostí souboru:

cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms

Zdroj:

[1] https://unixcop.com/how-to-install-librenms-on-ubuntu-20-04/
[2] https://web.archive.org/web/20151220084629/http://turing.suse.de/~agruen/acl/linux-acls/online/
[3] https://askubuntu.com/questions/912326/what-does-a2enmod-proxy-fcgi-setenvif-do
[4] https://www.incredigeek.com/home/librenms-error-running-validate-php-database-incorrect-column/
[5] https://askubuntu.com/questions/1000118/what-is-software-properties-common
[6] https://www.linuxexpres.cz/praxe/co-je-a-k-cemu-slouzi-ppa
[7] https://www.vas-hosting.cz/blog-jak-na-upravy-v-mysql

Dobrovolný dar

Ahoj čtenáři, rád bych tě poprosil aby ses zamyslel, co je vše potřeba ke vzniku článku.
Jakožto amatérký softwarový kutil musím:

1) Nejdříve vše nastudovat v cizích jazycích.
2) Vše následně prakticky vyzkoušet.
3) Svoje poznatky a zkušenosti napsat do článku který si právě přečetl v jazyku kterému rozumíš.
4) Dát článku hlavu a patu a publikovat.

Každý článek zabere několik hodin práce, za kterou mi nikdo neplatí.
Prosím zvaž, kolik času jsem ti právě ušetřil.
Pokud ti to stojí aspoň za cenu jedné kávy, tak mi ji kup.
Předem moc děkuji.

Příspěvek tak můžeš provést zasláním libovolné částky na mé číslo účtu 1558701011/3030

Nebo můžeš dar poslat kliknutím na tento odkaz Podpořit tento WEB , který tě přesměruje na mou platební bránu Revolut.

Dar je také možné poslat ve formě Bitcoinu na BTC peněženku bc1qqdf5fp42a7srwwhh2rut8zr9x4jm5c8fqc9qw6

Veškeré peněžní prostředky budu také používat na zlepšení kvality své webové tvorby a na psaní nových technických návodů. Za každý dar předem děkuji.

Leave a Reply

Your email address will not be published. Required fields are marked *