Установка и настройка системы мониторинга. Приведен пример подключения устройств по snmp или через собственный агент. Настройка nginx для работы по https опущена с целью уменьшения объема. Также настройка ESXi 6.5 для работы по snmp.
DOCS:
Устанавливать будем на примере:
- Debian Buster 10
- PHP-FPM 7.3
- Nginx 1.14.2
- MariaDB 10.3
- LibreNMS 1.54
- RRDtool 1.7.1
Подготовка:
Обновляем систему:
И устанавливаем необходимые пакеты.
# apt update && apt upgrade
# apt install curl fping git graphviz imagemagick mariadb-client mariadb-server mtr-tiny nginx nmap php7.3-cli php7.3-curl php7.3-fpm php7.3-gd php7.3-json php7.3-mbstring php7.3-mysql php7.3-snmp php7.3-xml php7.3-zip python-memcache python-mysqldb rrdtool snmp snmpd whois
- Дополнительные пакеты,
# apt install sudo acl htop net-tools
Устанавливаем snmp-mibs-downloader:
Он находится в несвободном репозитории.
# nano /etc/apt/sources.list
non-free
# apt update
# apt install snmp-mibs-downloader
# download-mibs
Users:
Создаем пользователя:
C отключенным шелом и одноименной группой.
# useradd librenms -b /home/ -m -U -s /bin/false
- Вернуть Shell
# usermod -s /bin/bash librenms
# passwd librenms
Создаем необходимые каталоги:
# mkdir -p -m 710 /home/librenms/www/{lnms.int.lan,logs}
Предоставляем пользователю librenms права на них:
# chown -R librenms:librenms /home/librenms/www
Предоставим Nginx доступ в домашнюю директорию пользователя librenms:
(… добавив пользователю www-data группу librenms)
# usermod -a -G librenms www-data
# gpasswd -d www-data librenms - Удалить пользователя librenms из группы www-data.
# id www-data - Проверить в какие группы входит пользователь www-data.
MariaDB:
Настраиваем MariaDB:
# mysql_secure_installation
MariaDB: (создаем пользователя и бд):
Логинимся к БД:
# mysql -u root -p'pass'
# Создаем пользователя:
MariaDB> CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'pass';
# Создаем БД:
MariaDB> CREATE DATABASE librenms CHARACTER SET utf8 COLLATE utf8_unicode_ci;
# Присваиваем права:
MariaDB> GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';
MariaDB> FLUSH PRIVILEGES;
MariaDB> quit
Настройка 50-server.cnf:
# nano /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
innodb_file_per_table=1
lower_case_table_names=0
# systemctl restart mysql
PHP-FPM:
Настройка пула www.conf:
# cp /etc/php/7.3/fpm/pool.d/www.conf /etc/php/7.3/fpm/pool.d/www.librenms.conf
# nano /etc/php/7.3/fpm/pool.d/www.librenms.conf
user = librenms
group = librenms
listen = /run/php/php7.3-fpm.librenms.sock
listen.owner = librenms
listen.group = librenms
listen.mode = 0660
Настройка php.ini:
# nano /etc/php/7.3/fpm/php.ini
date.timezone = Europe/Moscow
# nano /etc/php/7.3/cli/php.ini
date.timezone = Europe/Moscow
# /etc/init.d/php7.3-fpm restart
LibreNMS Install:
Устанавливаем composer и librenms:
# apt install curl git unzip
# curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# cd /home/librenms/www/lnms.int.lan/
- 1ый-способ:
# git clone https://github.com/librenms/librenms.git /home/librenms/www/lnms.int.lan/
- 2ой-способ:
# sudo -u librenms composer create-project --no-dev --keep-vcs librenms/librenms librenms dev-master
Устанавливаем права:
# chown -R librenms:librenms /home/librenms/www/lnms.int.lan
# setfacl -d -m g::rwx /home/librenms/www/lnms.int.lan/rrd /home/librenms/www/lnms.int.lan/logs /home/librenms/www/lnms.int.lan/bootstrap/cache/ /home/librenms/www/lnms.int.lan/storage/
# chmod -R ug=rwX /home/librenms/www/lnms.int.lan/rrd /home/librenms/www/lnms.int.lan/logs /home/librenms/www/lnms.int.lan/bootstrap/cache/ /home/librenms/www/lnms.int.lan/storage/
Nginx:
Очищаем старые конфиги:
# rm /etc/nginx/sites-enabled/default
# cp /etc/nginx/sites-available/default /etc/nginx/sites-available/lnms.int.lan
# cp /dev/null /etc/nginx/sites-available/lnms.int.lan
Настраиваем конфиг сайта:
Показать листинг:
# nano /etc/nginx/sites-available/lnms.int.lan
server {
listen 80;
server_name lnms.int.lan;
root /home/librenms/www/lnms.int.lan/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 /api/v0 {
try_files $uri $uri/ /api_v0.php?$query_string;
}
location ~ \.php {
include fastcgi.conf;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Включаем его и рестартуем nginx:
# ln -s /etc/nginx/sites-available/lnms.int.lan /etc/nginx/sites-enabled/lnms.int.lan
# /etc/init.d/nginx restart
SNMP & SNMPD:
Настройка snmp и snmpd:
# cp /home/librenms/www/lnms.int.lan/snmp.conf.example /etc/snmp/snmp.conf
- этот файл намеренно пуст, не добавляйте ничего
# cp /home/librenms/www/lnms.int.lan/snmpd.conf.example /etc/snmp/snmpd.conf
Контроль доступа VACM:
В первой строчке задаем свой Community.
# nano /etc/snmp/snmpd.conf
com2sec readonly default Community
group MyROGroup v2c readonly
view all included .1 80
access MyROGroup "" any noauth xact all none none
syslocation int.lan
syscontact mtv@open-networks.ru
#Distro Detection
extend .1.3.6.1.4.1.2021.7890.1 distro /usr/bin/distro
Distro:
# curl -o /usr/bin/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro
# chmod +x /usr/bin/distro
# systemctl restart snmpd
# netstat -antup | grep -i 161
Cron:
Планировщик Cron:
Тут необходимо поменять относительные пути на "/home/librenms/www/lnms.int.lan/"
# cp /home/librenms/www/lnms.int.lan/librenms.nonroot.cron /etc/cron.d/librenms
# nano /etc/cron.d/librenms
Настройка ротации логов:
# cp /home/librenms/www/lnms.int.lan/misc/librenms.logrotate /etc/logrotate.d/librenms
# nano /etc/logrotate.d/librenms
/home/librenms/www/lnms.int.lan/logs/*log {
su librenms librenms
weekly
rotate 6
compress
delaycompress
missingok
notifempty
create 664 librenms librenms
}
Web Install:
Создаем файл логов:
# sudo -u librenms touch logs/librenms.log
Переходим по адресу и устанавливаем:
http://lnms.int.lan/
# sudo -u librenms ./scripts/composer_wrapper.php install --no-dev
# cp config.php.default config.php
# nano config.php
# sudo -u librenms ./validate.php | https://lnms.int.lan/validate
# sudo -u librenms ./scripts/github-remove -d
Performance Optimizations: link
MySQL Optimisation:
# nano /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
innodb_flush_log_at_trx_commit = 0 или 2
# systemctl restart mysql
Если необходимо переместить .rrd графики на другой диск:
# nano config.php
$config['rrd_dir'] = "/mnt/data/lnms.int.lan/rrd";
# nano /etc/default/rrdcached
BASE_PATH=/mnt/data/lnms.int.lan/rrd/
RRDCached:
Показать листинг:
# apt-get install rrdcached
# nano /etc/default/rrdcached
DAEMON=/usr/bin/rrdcached
WRITE_TIMEOUT=1800
WRITE_JITTER=1800
WRITE_THREADS=4
BASE_PATH=/home/librenms/www/lnms.int.lan/rrd/
JOURNAL_PATH=/var/lib/rrdcached/journal/
PIDFILE=/var/run/rrdcached.pid
SOCKFILE=/var/run/rrdcached.sock
SOCKGROUP=librenms
DAEMON_GROUP=librenms
DAEMON_USER=librenms
BASE_OPTIONS="-B -F -R"
# chown librenms:librenms /var/lib/rrdcached/journal/
# systemctl restart rrdcached.service
# rrdtool -v
RRDtool 1.7.1
# nano /home/librenms/www/lnms.int.lan/config.php
$config['rrdtool_version'] = "1.7.1";
$config['rrdcached'] = "unix:/var/run/rrdcached.sock";
Polling modules:
# nano /home/librenms/www/lnms.int.lan/config.php
# - Disable OSPF polling
$config['poller_modules']['ospf'] = false;
Cleanup Options: link
# nano /home/librenms/www/lnms.int.lan/config.php
$config['syslog_purge'] = 14;
$config['eventlog_purge'] = 14;
$config['authlog_purge'] = 14;
$config['perf_times_purge'] = 14;
$config['device_perf_purge'] = 7;
#$config['rrd_purge'] = 90;// Not set by default
#$config['ports_purge'] = true;// Set to false by default
Мониторинг устройств:
Лучше использовать мониторинг по SNMP.
Check_MK (Unix-Agent): Check_MK Setup
Показать листинг:
# cd /home/librenms/www
# git clone https://github.com/librenms/librenms-agent.git
# cd librenms-agent
# cp check_mk_agent /usr/bin/check_mk_agent
# chmod +x /usr/bin/check_mk_agent
# cp check_mk@.service check_mk.socket /etc/systemd/system
# mkdir -p /usr/lib/check_mk_agent/plugins /usr/lib/check_mk_agent/local
# cp agent-local/nginx /usr/lib/check_mk_agent/local/nginx
# chmod +x /usr/lib/check_mk_agent/local/nginx
# systemctl enable check_mk.socket && systemctl start check_mk.socket
# Settings -> Edit -> Modules -> unix-agent -> On
# Settings -> Edit -> Applications -> Nginx -> On
SNMP: | Debian: Установка и настройка NET-SNMP | How to Add Devices to LibreNMS Monitoring Tool |
Настройка клиента для мониторинга:
# apt-get install snmpd
# cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.old && > /etc/snmp/snmpd.conf
- Контроль доступа VACM: (SNMPv2c)
# nano /etc/snmp/snmpd.conf
##
# Access Control - VACM (SNMPv2c)
##
# First, map the "community name" into a "security name"
# sec.name source community
com2sec readonly 192.168.X.X Community
# Second, map the "security name" into a "group name":
# groupName securityModel securityName
group rogroup v2c readonly
# Third, create a view for us to let the group have rights to:
# name incl/excl subtree mask(optional)
view all included .1 80
# Finally, grant the groups access to the view:
# group context sec.model sec.level prefix read write notif
access rogroup "" any noauth exact all none none
syslocation int.lan
syscontact mtv@open-networks.ru
#Distro Detection
extend .1.3.6.1.4.1.2021.7890.1 distro /usr/bin/distro
Install Distro Detection:
# curl -o /usr/bin/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro
# chmod +x /usr/bin/distro
# service snmpd restart
# service snmpd status
# netstat -antup | grep -i 161
# netstat -ntulp | grep 161
Полезные команды для сервера с LibreNMS:
Можно проверить доступность.
# snmpwalk -Os -v2c -c 'Community' 192.168.X.X
UPS-nut + NGINX + PHP-FPM + Memcached + MySQL. Applications
Обязательно проверяем и, если нужно, настраиваем под себя скрипт.
Показать листинг:
# cd /etc/snmp/
# wget https://github.com/librenms/librenms-agent/blob/master/snmp/ups-nut.sh
# nano /etc/snmp/ups-nut.sh
# wget https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/nginx -O /etc/snmp/nginx
# wget https://github.com/librenms/librenms-agent/raw/master/snmp/phpfpmsp -O /etc/snmp/phpfpmsp
# wget https://raw.githubusercontent.com/librenms/librenms-agent/master/agent-local/memcached -O /etc/snmp/memcached
# wget https://github.com/librenms/librenms-agent/raw/master/snmp/mysql -O /etc/snmp/mysql
# chmod +x /etc/snmp/ups-nut.sh
# chmod +x /etc/snmp/nginx
# chmod +x /etc/snmp/phpfpmsp
# chmod +x /etc/snmp/memcached
# chmod +x /etc/snmp/mysql
- Подключаем скрипты:
# nano /etc/snmp/snmpd.conf
extend ups-nut /etc/snmp/ups-nut.sh
extend nginx /etc/snmp/nginx
extend phpfpmsp /etc/snmp/phpfpmsp
extend memcached /etc/snmp/memcached
extend mysql /etc/snmp/mysql
# systemctl restart snmpd
nano /etc/snmp/mysql.cnf
<?php
$mysql_user = 'root';
$mysql_pass = 'toor';
$mysql_host = 'localhost';
$mysql_port = 3306;
Настройка SNMP в ESXi 6.5:
Через Shell.
Показать листинг:
Просмотреть текущую конфигурацию:
# esxcli system snmp get
Настройка snmp:
# esxcli system snmp set --communities Community
# esxcli system snmp set --port 161
# esxcli system snmp set --syscontact mtv@open-networks.ru
# esxcli system snmp set --syslocation int.lan
# esxcli system snmp set --enable true
Настройка Firewall:
- Разрешить подключения только для указанных IP-адресов.
# esxcli network firewall get
# esxcli network firewall ruleset set --ruleset-id snmp --allowed-all false
# esxcli network firewall ruleset allowedip add --ruleset-id snmp --ip-address 10.5.X.X
# esxcli network firewall ruleset set --ruleset-id snmp --enabled true
- Разрешить для всех.
# esxcli network firewall ruleset set --ruleset-id snmp --allowed-all true
# esxcli network firewall ruleset set --ruleset-id snmp --enabled true
- Проверка настроек через веб-интерфейс:
Host -> Manage -> Services -> snmpd
Networking -> Firewall rules -> SNMP Server