В этой статье собраны настройки для некоторых приложений LibreNMS, используемых лично мной, а также решения проблем и нюансов, которые не описаны в официальной документации, но с которыми столкнулся я.
Этот функционал можно задействовать, или через агента, или через расширения snmpd. Почему-то я остановился на втором варианте… Не помню.
Все приложения в нормальной ситуации включаются в консоли LibreNMS автоматически после очередного обнаружения, которое выполняется в 33 минуты каждого 6 часа. Можно форсировать это событие, нажав на странице «Device Settings» кнопку «Rediscover device» – тогда обнаружение будет выполнено в течение 5 минут. Если приложение не активируется автоматически, это можно сделать вручную на странице настроек «Applications».
Все манипуляции проводятся c LibreNMS 23.2.0, установленной на Raspberry Pi 4 Model B под управлением Raspberry Pi OS 11 (bullseye) с правами пользователя «root» (sudo -s
). В основном, все они типовые, поэтому базовые действия указаны с комментариями только в пером случае.
apt install python3-urllib3
wget https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/apache-stats.py -O /etc/snmp/apache-stats.py
chmod +x /etc/snmp/apache-stats.py
mkdir -p /var/cache/librenms/
echo "extend apache /etc/snmp/apache-stats.py" | tee -a /etc/snmp/snmpd.conf >/dev/null
systemctl restart snmpd
wget https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/nginx -O /etc/snmp/nginx
chmod +x /etc/snmp/nginx
echo "extend nginx /etc/snmp/nginx" | tee -a /etc/snmp/snmpd.conf >/dev/null
systemctl restart snmpd
nano /etc/nginx/sites-enabled/librenms.vhost
и добавляем в конце секции «server»
location /nginx-status { stub_status on; access_log off; allow 127.0.0.1; deny all; }
systemctl reload nginx
Для проверки, можно ввести curl http://localhost/nginx-status
, ответ должен быть такой:
root@servos:/home/nikolay# curl http://localhost/nginx-status Active connections: 1 server accepts handled requests 93 93 439 Reading: 0 Writing: 1 Waiting: 0
nano /etc/snmp/mysql.cnf
добавляем в него строки, правим, закрываем
<?php $mysql_user = 'root'; $mysql_pass = 'toor'; $mysql_host = 'localhost'; $mysql_port = 3306;
Последние две можно опустить, если они не отличаются.
wget https://github.com/librenms/librenms-agent/raw/master/snmp/mysql -O /etc/snmp/mysql
chmod +x /etc/snmp/mysql
mkdir -p /var/cache/librenms/
echo "extend mysql /etc/snmp/mysql" | tee -a /etc/snmp/snmpd.conf >/dev/null
systemctl restart snmpd
Показывает количество ожидающих обновлений.
wget https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/osupdate -O /etc/snmp/osupdate
chmod +x /etc/snmp/osupdate
echo "extend osupdate /etc/snmp/osupdate" | tee -a /etc/snmp/snmpd.conf >/dev/null
systemctl restart snmpd
echo "APT::Periodic::Update-Package-Lists "1";" > /etc/apt/apt.conf.d/10periodic
wget https://github.com/librenms/librenms-agent/raw/master/snmp/phpfpmsp -O /etc/snmp/phpfpmsp
chmod +x /etc/snmp/phpfpmsp
echo "extend phpfpmsp /etc/snmp/phpfpmsp" | tee -a /etc/snmp/snmpd.conf >/dev/null
systemctl restart snmpd
nano /etc/php/8.2/fpm/pool.d/librenms.conf
в соответствующем месте раскомментировать или добавить следующее
pm.status_path = /fpm-status
и перезапустить PHP-FPM
systemctl restart php8.2-fpm
nano /etc/snmp/phpfpmsp
и заменить или исправить
url="http://localhost/fpm-status?full"
nano /etc/nginx/sites-enabled/librenms.vhost
location /fpm-status { allow 127.0.0.1; deny all; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; include fastcgi_params; fastcgi_pass unix:/run/php-fpm-librenms.sock; }
nano /etc/apache2/sites-enabled/librenms.conf
<LocationMatch "/fpm-status"> Order Allow,Deny Allow from localhost ProxyPass unix:/run/php-fpm-librenms.sock|fcgi://localhost/fpm-status </LocationMatch>
Для проверки можно использовать curl http://localhost/fpm-status
, ответ должен быть такой:
root@servos:/home/nikolay# curl http://localhost/fpm-status pool: librenms process manager: dynamic start time: 15/Mar/2023:08:20:12 +1000 start since: 206819 accepted conn: 28536 listen queue: 0 max listen queue: 0 listen queue len: 0 idle processes: 2 active processes: 1 total processes: 3 max active processes: 5 max children reached: 160 slow requests: 0
Установка стандартная:
wget https://raw.githubusercontent.com/librenms/librenms-agent/master/agent-local/rrdcached -O /etc/snmp/rrdcached
chmod +x /etc/snmp/rrdcached
echo "extend rrdcached /etc/snmp/rrdcached" | tee -a /etc/snmp/snmpd.conf >/dev/null
systemctl restart snmpd
Вот только… не рабочая!
Долго пришлось повозиться, т.к. нигде никакие ошибки не появлялись, хотя оно не работало, пока я не вспомнил, что тут есть встроенный отладчик! Хотя и потом пришлось приложить голову, чтобы понять, в чем дело!
В моем случае, находим целую группу ошибок, говорящую нам, что скрипт не может подключиться никаким из доступных ему вариантов. Но в одном случае, так и должно быть, т.к. мы не публикуем службу на порту, а вот другая ошибка –
[Errno 13] Permission denied: /var/run/rrdcached.sock
– уже странная, т.к. этот сокет вполне себе используется и проблем, вроде, нет.
Далее, используя отборный русский мат, опытным путем выясняем, что в файле конфигурации RRD
nano /etc/default/rrdcached
нужно настроить «SOCKMODE», дав права для сокета на чтение и запись для «других»2)!
SOCKMODE=0766
apt install smartmontools
wget https://github.com/librenms/librenms-agent/raw/master/snmp/smart -O /etc/snmp/smart
chmod +x /etc/snmp/smart
nano /etc/snmp/smart.config
и добавляем в него
cache=/var/cache/librenms/smart smartctl=/usr/bin/env smartctl useSN=0 sda
Где «useSN», это использование для отображения в консоли LibreNMS серийный номер накопителя (=1) или его символьное название (=0), а «sda», это название накопителя в системе3) – может быть, как коротким «sda», так и полным «/dev/sda» – это влияет на отображение его в консоли LibreNMS соответствующим образом. На каждый отслеживаемый накопитель отдельная строка, подробнее в документации. Касательно кэша, см. ниже.
echo "extend smart /usr/bin/sudo /etc/snmp/smart" | tee -a /etc/snmp/snmpd.conf >/dev/null
systemctl restart snmpd
Отдельно стоит сказать про путь кэша – если отслеживаемых накопителей в системе 1 или 2, то данная настройка не актуальна, т.к. он банально не используется и, главное, этого файла не должно быть5)! Если больше, то крайне желательно добавить в Cron задание, которое будет вне периода выполнения основного скрипта считывать параметры SMART и обновлять (аргумент «-u») их в файле «/var/cache/librenms/smart».
echo "*/3 * * * * root /etc/snmp/smart -u" | tee -a /etc/cron.d/librenms >/dev/null
В таком случае, при выполнении опроса устройства, будет использоваться как раз файл кэша, а не оперативный запрос от скрипта.
wget https://github.com/librenms/librenms-agent/raw/master/snmp/systemd.py -O /etc/snmp/systemd.py
chmod +x /etc/snmp/systemd.py
echo "extend systemd /etc/snmp/systemd.py" | tee -a /etc/snmp/snmpd.conf >/dev/null
systemctl restart snmpd
nano /etc/snmp/systemd.json
и добавить в него
{ "systemctl_cmd": "/bin/systemctl", "include_inactive_units": "True" }
Данное приложение добавляет специфические для этой платформы данные – температуру CPU и GPU, напряжения ядра и памяти, частоту, кодеки. Оно не отображается в меню настроек устройства «Applications» и в главном меню LibreNMS!
wget https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/raspberry.sh -O /etc/snmp/raspberry.sh
chmod +x /etc/snmp/raspberry.sh
echo "extend raspberry /usr/bin/sudo /bin/sh /etc/snmp/raspberry.sh" | tee -a /etc/snmp/snmpd.conf >/dev/null
systemctl restart snmpd
visudo
добавляем в него, сохраняем и закрываем
Debian-snmp ALL=(ALL) NOPASSWD: /bin/sh /etc/snmp/raspberry.sh
Имя пользователя «Debian-snmp» необходимо заменить на то, с правами какого пользователя запускается демон SNMP6).
/etc/snmp/smart -g
»./etc/snmp/smart -u
», к примеру, для проверки…
Обсуждение