Достаточно долгое время у меня работал поток NodeRED, вполне успешно мониторивший сеть и отправляющий мне уведомления, когда что-то отваливалось. Но к нему у меня была одна претензия – не было панели управления и ситуативного мониторинга, а пилить ее с помощью плагина node-red-dashboard мне совершенно не хотелось! В итоге решился и пошел искать…
Сперва остановился на Icinga 2, но, вдоволь намучившись с установкой и все же запустив ее на 64-битной системе, обнаружил, что это не совсем то, что я ожидал – «из коробки» оно не работает совершенно! Мало того, что помимо ядра нужно ставить Icinga Web 2, дабы хоть что-то видеть, так еще и Icinga Director, чтобы управлять всем этим не залезая в консоль и конфиги! И все это устанавливается с собирается исключительно с матом… моим матом на всех знакомых и не очень языках! К слову, Icinga Director я так полностью и не уговорил работать… Но не суть, т.к. к тому времени я понял, что это пустая трата времени и средства не соответствуют задаче, т.к. мало поставить, нужно еще и настроить, а при первом взгляде на все это… становится печально.
Выругавшись, пошел искать дальше и, как позже выяснилось, угадал, т.к. LibreNMS меня более чем удовлетворила! – ставится не без труда, но вполне быстро и «из коробки» имеет все, что мне нужно1)!
Как оказалось, в официальной документации нет варианта инструкции по установке LibreNMS на Debian 11 вместе c Apache2), поэтому в процессе я вел заметки, чтобы собрать все воедино.
Но потом почесал репу, снес Apache и поставил Nginx, что отразил в сей инструкции!
В репозитории Debian 11 (bullseye) нет PHP 8.x, максимально, что там есть на сегодня, это 7.4, а LibreNMS требуется версия PHP не ниже 8.1. Соответственно, для начала нужно подключить дополнительный репозиторий, а потом установить зависимости:
sudo -s
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
nano /etc/apt/sources.list.d/sury-php.list
и добавляем в него, сохраняем, закрываем
deb https://packages.sury.org/php/ bullseye main
apt update
apt install acl curl fping git graphviz imagemagick mariadb-client mariadb-server mtr-tiny nginx-full nmap php-cli php-curl php-fpm php-gd php-gmp php-json php-mbstring php-mysql php-snmp php-xml php-zip python3-dotenv python3-pymysql python3-redis python3-setuptools python3-systemd python3-pip rrdtool snmp snmpd whois
apt install acl curl apache2 fping git graphviz imagemagick libapache2-mod-fcgid mariadb-client mariadb-server mtr-tiny nmap php-cli php-curl php-fpm php-gd php-gmp php-json php-mbstring php-mysql php-snmp php-xml php-zip rrdtool snmp snmpd whois python3-pymysql python3-dotenv python3-redis python3-setuptools python3-systemd python3-pip
Тут стоит отметить, что я намеренно ставлю версию 8.1, а не последнюю3), т.к. при первоначальной установке я столкнулся с проблемой – сыпались стили web-интерфейса, не показывались графики и на каждом углу были предупреждения типа «Exception: Creation of dynamic property … is deprecated». В общем, погуглив немного, я предположил, что это проблема версии PHP. И частично это оказалось верно – после понижения версии, большая часть предупреждений исчезла, но не все и web-интерфейс не начал нормально работать.
Позже я, конечно, разобрался, что проблема была в опрометчиво установленном мной переключателе «reporting.dump_errors» в «Global Settings» → «System» → «Reporting», но версию уже менять не стал. Поэтому, скорее всего, можно ставить последнюю, используя оригинальную строку.
Если web-интерфейс LibreNMS дико долго загружается, особенно, там, где есть графики, на вкладке «Alet Rules» или «Global Settings», и непонятно что, а всякие php-fpm и прочие Nginx'ы настроены на самую великую производительность и вы в конец заебались… посмотрите, может у вас тоже включена галочка «Error reporting» на странице «About LibreNMS»?!! Если это так, попробуйте… ну так, случайно ее выключить и отчистить кэш… Я офигел!.. Одни маты, чо…
useradd librenms -d /opt/librenms -M -r -s "$(which bash)"
cd /opt && git clone https://github.com/librenms/librenms.git
chown -R librenms:librenms /opt/librenms && chmod 771 /opt/librenms
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/
su - librenms
./scripts/composer_wrapper.php install --no-dev && exit
nano /etc/mysql/mariadb.conf.d/50-server.cnf
и в конце секции «[mysqld]» добавляем, сохраняем, закрываем
innodb_file_per_table=1 lower_case_table_names=0
systemctl enable mariadb && systemctl restart mariadb
mysql -u root -p
CREATE DATABASE librenms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost'; FLUSH PRIVILEGES;
exit
Клонируем9) конфигурацию по умолчанию и открываем ее
cp /etc/php/8.2/fpm/pool.d/www.conf /etc/php/8.2/fpm/pool.d/librenms.conf && nano /etc/php/8.2/fpm/pool.d/librenms.conf
[librenms]
»,librenms
»,listen = /run/php-fpm-librenms.sock
».Дополнительно можно исправить следующие настройки10):
pm = dynamic pm.max_children = 50 pm.start_servers = 7 pm.min_spare_servers = 5 pm.max_spare_servers = 10 pm.process_idle_timeout = 10s pm.max_requests = 500
После этих корректировок из логов пропали предупреждения:
По сути, на маленьких проектах работают совершенно одинаково, поэтому…
nano /etc/nginx/sites-enabled/librenms.vhost
server { listen 80; server_name librenms.example.com; root /opt/librenms/html; index index.php; charset utf-8; gzip on; gzip_types text/css application/javascript text/javascript application/x-javascript image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ [^/]\.php(/|$) { fastcgi_pass unix:/run/php-fpm-librenms.sock; fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi.conf; } location ~ /\.(?!well-known).* { deny all; } }
rm /etc/nginx/sites-enabled/default
systemctl restart nginx php8.2-fpm
nano /etc/apache2/sites-available/librenms.conf
<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>
a2dissite 000-default && a2enmod proxy_fcgi setenvif rewrite && a2ensite librenms.conf
systemctl restart apache2 php8.2-fpm
ln -s /opt/librenms/lnms /usr/bin/lnms
cp /opt/librenms/misc/lnms-completion.bash /etc/bash_completion.d/
cp /opt/librenms/librenms.nonroot.cron /etc/cron.d/librenms
cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms
exit
Все! Осталось перейти по адресу сервера браузером и завершить настройку. В конце соглашаемся с прохождением проверки13) и доделываем, что оно просит.
Для резервного копирования можно использовать этот скрипт с такой конфигурацией14):
/etc/cron.d/librenms /etc/php/8.2/fpm/php.ini /etc/php/8.2/cli/php.ini /etc/mysql/mariadb.conf.d/50-server.cnf /etc/php/8.2/fpm/pool.d/librenms.conf /etc/nginx/sites-enabled/librenms.vhost /etc/syslog-ng/conf.d/librenms.conf /etc/snmp/snmpd.conf /etc/default/rrdcached /etc/snmp/mysql.cnf /etc/apt/apt.conf.d/10periodic /etc/snmp/smart.config /etc/snmp/systemd.json /opt/librenms/rrd /opt/librenms/.env /opt/librenms/config.php
Обратите внимание, что в этот список входят файлы конфигураций дополнительных компонентов, упомянутых в других статьях из раздела ниже.
librenms
Обсуждение