1 2 3 4 5 |
!!! Совет плохой, но иногда надо, ибо что то сделать по tty (console 0) нет возможности, лезет куча сообщений #отключить сообщения dmesg --console-off #отключить сообщения выше 1 уровня dmesg --console-level 1 |
1 2 3 4 5 |
!!! Совет плохой, но иногда надо, ибо что то сделать по tty (console 0) нет возможности, лезет куча сообщений #отключить сообщения dmesg --console-off #отключить сообщения выше 1 уровня dmesg --console-level 1 |
Ссылки:
1 |
https://docs.librenms.org/Installation/Install-LibreNMS/ |
Что?
1 |
Что то похожие на zabbix |
Желательные репы для debian 11
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
0. vim /etc/apt/sources.list ------------------------- deb http://deb.debian.org/debian bullseye main contrib non-free deb-src http://deb.debian.org/debian bullseye main contrib non-free deb http://deb.debian.org/debian-security/ bullseye-security main contrib non-free deb-src http://deb.debian.org/debian-security/ bullseye-security main contrib non-free deb http://deb.debian.org/debian bullseye-updates main contrib non-free deb-src http://deb.debian.org/debian bullseye-updates main contrib non-free deb http://deb.debian.org/debian bullseye-backports main contrib non-free deb-src http://deb.debian.org/debian bullseye-backports main contrib non-free ------------------------- 1. Обновляем пакеты apt update && apt upgrade -y |
Установка:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
!!! Рекомендуется ставить на чистую систему 0. Ставим пакеты: # apt install acl curl composer fping git graphviz imagemagick mariadb-client mariadb-server mtr-tiny nginx-full 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 python3-dotenv python3-pymysql python3-redis python3-setuptools python3-systemd python3-pip rrdtool snmp snmpd whois vim apt install acl curl composer fping git graphviz imagemagick mariadb-client mariadb-server \ mtr-tiny nginx-full 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 python3-dotenv python3-pymysql \ python3-redis python3-setuptools python3-systemd python3-pip rrdtool snmp snmpd whois vim 1. Добавляем пользователя useradd librenms -d /opt/librenms -M -r -s "$(which bash)" 2. Скачиваем дистрибутив cd /opt git clone https://github.com/librenms/librenms.git 3. Выставляем разрешения: 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/ 4. Устанавливаем зависимости !!! вводить по одной строчки su - librenms ./scripts/composer_wrapper.php install --no-dev exit 5. Иногда когда используется прокси пункт "4" не полностью срабатывает: wget https://getcomposer.org/composer-stable.phar mv composer-stable.phar /usr/bin/composer chmod +x /usr/bin/composer 6. Настраиваем временную зону !!! временные зоны смотреть тут https://php.net/manual/en/timezones.php !!! пример Europe/Moscow Редактируем файлы: vim /etc/php/7.4/fpm/php.ini vim /etc/php/7.4/cli/php.ini timedatectl set-timezone Europe/Moscow 7. Готовим базу: После [mysqld] нужо добавить две строчки vim /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 8. Создаем пользователя и базу: mysql -u root 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. Меняем настройки PHP-FPM cp /etc/php/7.4/fpm/pool.d/www.conf /etc/php/7.4/fpm/pool.d/librenms.conf vim /etc/php/7.4/fpm/pool.d/librenms.conf ----------------------------------------- # Изменяем [www] на [librenms]: [librenms] # Изменяем user и group на "librenms": user = librenms group = librenms # Изменяем listen на уникальный: listen = /run/php-fpm-librenms.sock ----------------------------------------- 10. Создаем конфиг для nginx vim /etc/nginx/sites-enabled/librenms.vhost ------------------------------------------- server { listen 80; server_name librenms.example.com; server_name _; 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; } } ------------------------------------------- 11. Перезапускаем nginx и php7.4-fpm rm /etc/nginx/sites-enabled/default systemctl reload nginx systemctl restart php7.4-fpm 12. Дополнительные фичи SNMP ln -s /opt/librenms/lnms /usr/bin/lnms #cp /opt/librenms/librenms.nonroot.cron /etc/cron.d/librenms cp /opt/librenms/misc/lnms-completion.bash /etc/bash_completion.d/ cp /opt/librenms/snmpd.conf.example /etc/snmp/snmpd.conf vim /etc/snmp/snmpd.conf ----------------------- # Находим RANDOMSTRINGGOESHERE и меняем на свое комьюнити ----------------------- 13. Добавляем агент librenms curl -o /usr/bin/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro chmod +x /usr/bin/distro systemctl enable snmpd systemctl restart snmpd 14. cron + logrotate cp /opt/librenms/librenms.nonroot.cron /etc/cron.d/librenms cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms 15. Далее заходим librenms.example.com (надеюсь догадались изменить на свой домен) и производим первую настройку http://librenms.example.com/install |
error virtual host
1 2 3 4 5 6 |
https://community.librenms.org/t/404-not-found-on-virtual-host/12771 Решение: Зайти в веб морду global-settings -> system -> server -> Specific URL удалить http: |
debian standart repository
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
vim /etc/apt/sources.list ------------------------- deb http://deb.debian.org/debian bullseye main contrib non-free deb-src http://deb.debian.org/debian bullseye main contrib non-free deb http://deb.debian.org/debian-security/ bullseye-security main contrib non-free deb-src http://deb.debian.org/debian-security/ bullseye-security main contrib non-free deb http://deb.debian.org/debian bullseye-updates main contrib non-free deb-src http://deb.debian.org/debian bullseye-updates main contrib non-free deb http://deb.debian.org/debian bullseye-backports main contrib non-free deb-src http://deb.debian.org/debian bullseye-backports main contrib non-free ------------------------- |
Установка:
1 2 3 |
apt-get update && sudo apt-get install snmp snmpd apt-get install snmp-mibs-downloader download-mibs |
Готовим конфиг snmpd.conf — Находим две строки и редактируем их:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
!!! находим строку "#agentaddress 127.0.0.1,[::1]", приводим к виду "agentaddress udp:161" !!! находим строку "rocommunity public default -V systemonly", приводим к виду "rocommunity vasian 192.168.0.0/16" !!! vasian - наше комьюнити !!! 192.168.0.0/16 - наша сеть vim /etc/snmp/snmpd.conf ------------------------ #agentaddress 127.0.0.1,[::1] agentaddress udp:161 # Read-only access to everyone to the systemonly view #rocommunity public default -V systemonly #rocommunity6 public default -V systemonly rocommunity vasian 192.168.0.0/16 ------------------------ |
Проверка:
1 2 3 4 5 6 7 |
ss -alnp | grep snmp | grep 161 snmpwalk -v 2c -c myCommunity localhost snmpwalk -v2c -c public localhost snmpwalk -v2c -c public 192.168.0.1 snmpwalk -v2c -c YouCommunity 192.168.0.1 | head snmptranslate -Tp |
snmp v3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
0. Останавливаем демон snmpd systemctl stop snmpd 1. Для snmpv3 требуется создать пользователя, для этого используется команда net-snmp-create-v3-user net-snmp-create-v3-user [-ro] [-A authpass] [-a MD5|SHA] [-X privpass][-x DES|AES] [username] net-snmp-create-v3-user -ro -A SecUREDpass -a SHA -X StRongPASS -x AES snmpreadonly Выполнив эту команду в файл snmpd.conf (по умолчанию /etc/snmp/snmpd.conf, но могут быть и /var/lib/snmp/snmpd.conf, /usr/share/snmp/snmpd.conf ) createUser snmpreadonly SHA "SecUREDpass" AES StRongPASS rouser snmpreadonly 2. Для проверки локально: net-snmp-create-v3-user -x AES -a SHA 3. Запускаем демон snmpd systemctl start snmpd systemctl enable snmpd 4. Проверяем snmpwalk -v3 -a SHA -A SecUREDpass -x AES -X StRongPASS -l authPriv -u snmpreadonly localhost | head -10 |
Пример конфига snmpd.conf:
1 2 3 4 5 6 7 8 |
sysServices 72 master agentx agentaddress udp:161 view systemonly included .1.3.6.1.2.1.1 view systemonly included .1.3.6.1.2.1.25.1 rocommunity vasian 192.168.0.0/16 createUser snmpreadonly SHA "SecUREDpass" AES "StRongPASS" rouser snmpreadonly |
Приоритет:
1 2 3 |
Rsyslog фильтрует сообщения для дальнейшего управления. Используются следующие фильтры: facility and priority (Источники и приоритеты) -> Фильтры свойств -> Фильтры основанные на выражениях |
Категории источники:
1 2 3 4 5 6 7 8 |
auht/authpriv - сообщения процессов аутентификации; cron - логи имеющие отношения к планировщику; daemon - логи запущенных демонов (сервисов); kernel - логи ядра; mail - логи почты; syslog - логи имеющике отношение к syslog и другим сервисам; lpr - логи печати; local0-local7 - выделенные для административных целей. |
Приоритеты:
1 2 3 4 5 6 7 8 |
Priority (Приоритеты) - уровень приоритетности (важности) сообщений emerg (0) - экстренные; alert (1) - тревожные; err (3) - ошибки; warn (4) - предупреждения; notice (5) - уведомления; info (6) - информация; debug (7) - наивысший уровень (отладка) |
Примеры использования фильтров:
1 2 3 4 5 6 7 8 |
Все лог сообщения сгенерированные подсистемой ядра с любым уровнем важности записывать в файл /var/log/kernel.log kern.* /var/kernel.log Отбрасывает все лог сообщения и прекращает их обработку. *.* ~ Фильтровать и записывать в файл все лог сообщения от источника "daemon" с уровнем важности "err" daemon.err /var/log/error_daemo.log |
Фильтры базирующиеся на свойствах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Синтаксис :property, [!]compare-operation, "value" Операторы сравнения: contains - проверяет содержится ли строка, представленная в значении, в свойстве; isequal - проверяет значение и свойство, они должные быть полностью идентичны; startswith - проверяет находится ли значение в "value" в начале свойства; regex - сравнение с помощью регулярных выражений; ereregex - использование расширенных регулярных выражений; isempty - является ли свойство пустым (не имеющим значения). Наиболее полезные типы свойств: msg - тело сообщения; hostname - имя хоста отправившего сообщение; source - алиас hostname; fromhost - имя хоста от которого было полученно сообщение (если имя удалось разрешить); fromhost-ip - тоже самое, что и fromhost только всегда ip-адрес; syslogtag - TAG сообщения; programname - имя программы; syslogfacility - источник лог сообщения в форме цифры; syslogfacility-text - источник лог сообщения в текстовой форме; syslogseverity - уровень важности в цифровом виде; syslogseverity-text - уровень важности в текстовом виде; pri - источник и приоритет в виде числа; pri-text - источник и приоритет в текстовом формате; timegenerated - время когда сообщение было полученно. |
Примеры использования фильтров базирующиеся на свойствах:
1 2 3 4 5 6 7 8 |
Если в теле сообщения встречается данный текст "DHCPREQUEST(lxdbr0)", то записывать сообщение в файл /var/log/syslog :msg, contains, "DHCPREQUEST(lxdbr0)" /var/log/syslog Если ip-адрес [хоста от которого полученно сообщение "192.168.1.1", то записать сообщение в файл /var/log/router.log :fromhost-ip, isequal, "192.168.1.1" /var/log/router.log Если имя хоста содержит текст "ubuntu", то записать его в файл /var/log/ubuntu-servers.log :fromhost, regex ".*ubuntu.*" /var/log/ubuntu-servers.log |
Фильтры основанные на выражениях:
1 2 3 4 5 6 7 8 9 10 11 |
Синтаксис: if EXPRESSION then ACTION else ACTION Примеры: Если facility равно "local1" и cообщение содержит "mysql" то записывать его в файл /var/log/db.log if $syslogfacility-text == "local1" and $msg contains "mysql" then /var/log/db.log Если сообщение содержит в себе текст "666" то записать его в файл "/var/log/666.log", если нет содержит то записать в файл "/var/log/non_666.log" if $msg contains "666" then { action(type="omfile" file="/var/log/666.log") } else { action(type="omfile" file="/var/log/non_666.log") } |
Пример фильтра не пишем лог
1 2 3 4 5 6 7 8 |
#no logging :msg, contains, "YOU_TEXT_MESSAGE_1" stop :msg, contains, "YOU_TEXT_MESSAGE_2" stop :msg, contains, "YOU_TEXT_MESSAGE_3" stop :msg, contains, "YOU_TEXT_MESSAGE_4" stop #sent log to loanalyzer *.* @@172.17.1.100 |
Шаблоны
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Шаблоны можно использовать для динамической генерации имен лог файлов Синтаксис: $template имя_шаблона, опции Примеры: $template remote_logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" daemon.* ?remote_logs Сначала задаем шаблон с именем "remote_logs" потом указываем что запись лог сообщений необходимо вести в файл "/var/log/%HOSTNAME%/%PROGRAMNAME%.log", где %HOSTNAME% и %PROGRAMNAME% это свойства, грубо говоря переменные, которые зависят от источника лог сообщений. Потом с помощью знака ? и имени шаблона указываем, привязываем шаблон к фильтру сообщений. Получаем, что сообщения с источником сервисов писать в лог файл с названием как у службы и находящийся в директории с именем как у соответствующего хоста. |
Прием логов:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Rsyslog сервер можно настроить на прием лог сообщений от других хостов. Для этого необходимо внести изменения в конфигурационный файл /etc/rsyslog.conf Для работы по протоколу UDP: module(load="imudp") input(type="imudp" port="514") Для работы по протоколу TCP: module(load="imtcp") input(type="imtcp" port="514") Возможно работа одновременного по обоим протоколам. После перезапуска сервер сможет принимать логи от удаленных хостов и обрабатывать их согласно настроенным фильтрам. |
Отправка логов на удаленный Rsyslog сервер:
1 2 3 4 5 6 7 |
Для отправки логов на другой сервер необходимо вместо лог файла указать конструкцию с @ или @@ и ip-адрес сервера и порт: Отправлять все логи на 172.20.1.58 по протоколу UDP *.* @172.20.1.58:514 Отправлять все логи на 172.20.1.58 по протоколу TCP *.* @@172.20.1.58:514 |
1 2 3 4 5 6 7 8 |
#no logging :msg, contains, "YOU_TEXT_MESSAGE_1" stop :msg, contains, "YOU_TEXT_MESSAGE_2" stop :msg, contains, "YOU_TEXT_MESSAGE_3" stop :msg, contains, "YOU_TEXT_MESSAGE_4" stop #sent log to loanalyzer *.* @@172.17.1.100 |
Ссылки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
https://www.zabbix.com/documentation/current/manual/api/changes_5.2_-_5.4 https://www.zabbix.com/ru/zabbix_api https://www.zabbix.com/documentation/current/ru/manual/api https://www.zabbix.com/documentation/current/ru/manual/api/reference/host/get https://www.zabbix.com/documentation/current/ru/manual/api/reference https://www.zabbix.com/documentation/current/ru/manual/api/reference/trigger https://www.zabbix.com/documentation/current/ru/manual/api/reference/trigger/get https://www.zabbix.com/documentation/current/ru/manual/web_interface/frontend_sections/monitoring/problems https://www.zabbix.com/documentation/current/ru/manual/api/reference/problem/get https://www.zabbix.com/documentation/current/manual/api/reference/problem/get https://www.zabbix.com/documentation/current/ru/manual/api/reference/event/get https://pypi.org/project/py-zabbix/ https://github.com/adubkov/py-zabbix https://py-zabbix.readthedocs.io/en/latest/api.html https://habr.com/ru/post/325876/ https://catonrug.blogspot.com/2018/07/learning-python-because-of-zabbix-api.html https://blog.zabbix.com/getting-started-with-zabbix-api/1381/ https://www.jsonrpc.org/specification https://www.json.org/json-en.html |
Python, JSON со структурой
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ 'host': 'Hostname' 'groups': [...] 'interfaces': [{},{},{}] 'inventory': {} 'templates': [{},{},{}] 'inventory_mode': '1' 'proxy_hostid': 'INT' 'status': '0' } [] - массив \ список {} - словарь |
Python настройка подключения к серверу zabbix:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER ' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) # Завершаем подключения zapi.user.logout() |
Пример №1 Печатаем список хостов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) # Добываем информацию узлы # monitored_host - "флаг" - Возврат узлов сети только под наблюдением. result1 = zapi.host.get(monitored_hosts=1, output='extend') # Формируем список hostnames1 = [host['host'] for host in result1] # Если нужно можем распечатать список # print(hostnames1) # Печатаем список хостов красиво for i in hostnames1: print(i) # Завершаем подключения zapi.user.logout() |
Пример №2 Печатаем список хостов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) #Печатаем список узлов пример 1 for host in zapi.host.get(output = ['hostid','host','name'], selectInterfaces=['ip','port','dns']): print (host) #Печатаем список узлов пример 2 host_and_ip = zapi.host.get(output = ['hostid','host','name'], selectInterfaces=['ip','port','dns']) for i in host_and_ip: # print(i) print(i['host'], i['name'], i['interfaces']) # Завершаем подключения zapi.user.logout() |
Пример №3 Печатаем список групп
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) print(f" \nПечатаем список групп:") groups = zapi.hostgroup.get(output=['itemid','name']) for group in groups: print (group['groupid'],group['name']) # Завершаем подключения zapi.user.logout() |
Пример №4 Печатаем список хостов из группы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) print(f" \nПечатаем список групп:") groups = zapi.hostgroup.get(output=['itemid','name']) for group in groups: print (group['groupid'],group['name']) print(f" \nПолучаем список хостов в группе с id 2") hosts = zapi.host.get(groupids=2, output=['hostid','name']) for host in hosts: print (host['hostid'],host['name']) # Завершаем подключения zapi.user.logout() |
Пример №5 Печатаем список item
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER ' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) #Получаем список item с хоста c id 10268 print(f" \nПолучаем список item с хоста c id 10268") items = zapi.item.get(hostids=10268, output=['itemid','name']) for item in items: print (item['itemid'],item['name']) # Завершаем подключения zapi.user.logout() |
Пример №6 Печатаем triggers
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) # Получить список всех проблем (триггеры сработали) triggers = zapi.trigger.get(only_true=1, skipDependent=1, monitored=1, active=1, output='extend', expandDescription=1, selectHosts=['host'], ) # Получить список какие проблемы не подтверждены. unack_triggers = zapi.trigger.get(only_true=1, skipDependent=1, monitored=1, active=1, output='extend', expandDescription=1, selectHosts=['host'], withLastEventUnacknowledged=1, ) unack_trigger_ids = [t['triggerid'] for t in unack_triggers] for t in triggers: t['unacknowledged'] = True if t['triggerid'] in unack_trigger_ids \ else False # Распечатать список, содержащий только "сработавшие" триггеры print (f"\n печатаем триггеры") for t in triggers: if int(t['value']) == 1: print("{0} - {1} {2}".format(t['hosts'][0]['host'], t['description'], '(Unack)' if t['unacknowledged'] else '') ) # Завершаем подключения zapi.user.logout() |
Пример №7 Печатаем все triggers которые сработали у группы хостов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
from datetime import datetime from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) #Печатаем список групп print(f" \nПечатаем список групп:") groups = zapi.hostgroup.get(output=['itemid','name']) for group in groups: print (group['groupid'],group['name']) # Получаем триггеры группы узлов с groupids = 2 triggers = zapi.trigger.get(groupids=2, output='extend', expandDescription=1, selectHosts=['host'],) #print(f"\n Печатаем все триггеры groupids2 {triggers}") print("\n") # Печатаем триггеры for t in triggers: print("{0} - {1} - {2}".format(t['hosts'][0]['host'], t['description'], datetime.utcfromtimestamp(int(t['lastchange'])).strftime('%Y-%m-%d %H:%M:%S'))) # Завершаем подключения zapi.user.logout() |
Пример №8 Печатаем проблемы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
###!!!! из доков Для получения проблем, которые были решены ранее, используйте event.get метод. from datetime import datetime from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) ## Получаем все проблемы по хосту hsrv1_factoria ## !!! На самом деле не все!!! из доков Для получения проблем, которые были решены ранее, используйте event.get метод. problem = zapi.problem.get(host='hsrv1_factoria', recent='true') ##print("\n", problem) for pr in problem: #print("{0} - {1} - {2} ".format(pr['eventid'], pr['name'], pr['clock'])) print("{0} - {1} - {2} ".format(pr['eventid'], pr['name'], datetime.utcfromtimestamp(int(pr['clock'])).strftime('%Y-%m-%d %H:%M:%S'))) # Завершаем подключения zapi.user.logout() |
Пример №9 Печатаем все проблемы (history.get)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
from datetime import datetime from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) #Zabbix ведет время от создания linux #Для уточнения времени исполняем стандартную команду linux #date -d @1620925819 #date +%s # Получаем все проблемы для группы хостов groupids=2 начиная с даты 1620925819 (Чт 13 мая 2021 20:10:19 MSK) problem = zapi.event.get(groupids=2,time_from=1620925819) ## Может пригодится для уточнения объектов ##print("\n", problem) for pr in problem: print("{0} - {1} - {2} ".format(pr['eventid'], pr['name'], datetime.utcfromtimestamp(int(pr['clock'])).strftime('%Y-%m-%d %H:%M:%S'))) # Завершаем подключения zapi.user.logout() |
Пример №10 Печатаем все проблемы (history.get) и сохраняем в файл out.csv
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
from contextlib import redirect_stdout from datetime import datetime from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) #Zabbix ведет время от создания linux #Для уточнения времени исполняем стандартную команду linux #date -d @1620925819 #date +%s # Получаем все проблемы для группы хостов groupids=2 начиная с даты 1620925819 (Чт 13 мая 2021 20:10:19 MSK) problem = zapi.event.get(groupids=2,time_from=1620925819) ## Может пригодится для уточнения объектов ##print("\n", problem) #Запись CSV файла with open('out.csv', 'w', encoding='utf_8') as f: with redirect_stdout(f): for pr in problem: print("{0};{1};{2} ".format(pr['eventid'], pr['name'], datetime.utcfromtimestamp(int(pr['clock'])).strftime('%Y-%m-%d %H:%M:%S'))) # Завершаем подключения zapi.user.logout() |
Пример №11 Создаем узлы (do_request)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) #Печатаем все группы узлов print(f" \nПечатаем список групп:") groups = zapi.hostgroup.get(output=['itemid','name']) for group in groups: print (group['groupid'],group['name']) #Список ид teplate и имя teplate teplates = zapi.template.get(with_items=1) # для теста вывалить все в teplates #print(teplates) for i in teplates: print(i['templateid'], i['host']) # Создаем узел blablalbalba1 c "ip": "8.8.8.9" в группе с id 5 zapi.do_request(method="host.create",params={ "host": "blablalbalba1", "interfaces": [ { "type": 1, "main": 1, "useip": 1, "ip": "8.8.8.9", "dns": "", "port": "10050" } ], "groups": [ { "groupid": "5" } ], "templates": [ { "templateid": "10001" } ], } ) # Проверяем print(f" \nПолучаем список хостов в группе с id 5") hosts = zapi.host.get(groupids=5, output=['hostid','name']) for host in hosts: print (host['hostid'],host['name']) # Завершаем подключения zapi.user.logout() |
Пример №12 Создаем элемент данных (do_request)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
from pyzabbix.api import ZabbixAPI, ZabbixAPIException import sys # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) #Печатаем все группы узлов print(f" \nПечатаем список групп:") groups = zapi.hostgroup.get(output=['itemid','name']) for group in groups: print (group['groupid'],group['name']) #Получаем список хостов в группе 5 print(f" \nПолучаем список хостов в группе с id 5:") hosts = zapi.host.get(groupids=5, output=['hostid','name']) for host in hosts: print (host['hostid'],host['name']) host_name = 'blablalbalba1' hosts = zapi.host.get(filter={"host": host_name}, selectInterfaces=["interfaceid"]) if hosts: host_id = hosts[0]["hostid"] print("\nНайден host id {0}".format(host_id)) try: item = zapi.item.create( hostid=host_id, name='Used disk space on $1 in %', key_='vfs.fs.size[/,pused]', type=0, value_type=3, interfaceid=hosts[0]["interfaces"][0]["interfaceid"], delay=30 ) except ZabbixAPIException as e: print(e) sys.exit() print("Добавили item для itemid {0} на host: {1}".format(item["itemids"][0], host_name)) else: print(f"\nХост {host_name} не обнаружен.") # Завершаем подключения zapi.user.logout() |
Пример №13 Создаем триггер (do_request)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
from pyzabbix.api import ZabbixAPI, ZabbixAPIException import sys # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) #Печатаем все группы узлов print(f" \nПечатаем список групп:") groups = zapi.hostgroup.get(output=['itemid','name']) for group in groups: print (group['groupid'],group['name']) #Получаем список хостов в группе 5 print(f" \nПолучаем список хостов в группе с id 5:") hosts = zapi.host.get(groupids=5, output=['hostid','name']) for host in hosts: print (host['hostid'],host['name']) #Куда и что будем добавлять host_name = 'blablalbalba1' trg1="xxx1 {HOST.NAME}" exp1="last(/blablalbalba1/1111vfs.fs.size[/,pused])=0" pri1="4" hosts = zapi.host.get(filter={"host": host_name}, selectInterfaces=["interfaceid"]) if hosts: host_id = hosts[0]["hostid"] print("\nНайден host id {0}".format(host_id)) try: item = zapi.trigger.create(description=trg1, expression=exp1, priority=pri1) except ZabbixAPIException as e: print(e) sys.exit() print("Добавили trigger для {0}".format(host_name)) else: print(f"\nХост {host_name} не обнаружен.") # Завершаем подключения zapi.user.logout() |
Ссылка:
1 |
https://www.zabbix.com/documentation/current/manual/installation/upgrade/packages/rhel_centos |
Процесс:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
0. Обновляем пакеты yum update -y 1. Останавливаем zabbix systemctl stop zabbix-server systemctl stop zabbix-proxy systemctl stop zabbix-agent 2. Обновляем и устанавливаем репозиторий rpm -Uvh https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-release-5.4-1.el8.noarch.rpm 3. Выполняем upgrade пакетов zabbix yum upgrade zabbix-server-mysql zabbix-web-mysql zabbix-agent 4. Стартуем zabbix systemctl start zabbix-server systemctl start zabbix-agent systemctl start zabbix-agent 5. Проверяем лог и дожидаемся обновления: tail /var/log/zabbix/zabbix_server.log 6. После завершения обновления проверяем работу zabbix |
Ссылки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
https://bestmonitoringtools.com/upgrade-zabbix-to-the-latest-version/ https://serveradmin.ru/obnovlenie-zabbix-4-4-do-5-0/ https://serveradmin.ru/ustanovka-i-nastrojka-zabbix-5-0/ http://alexvaleev.ru/mysql-row-size-too-large/ https://www.zabbix.com/documentation/5.0/manual/installation/upgrade_notes_500 https://www.zabbix.com/documentation/2.0/ru/manual/installation/upgrade https://www.tyler-wright.com/zabbix34to40-error-events-table/ https://mariadb.com/kb/en/troubleshooting-row-size-too-large-errors-with-innodb/ http://mithrandir.ru/professional/databases/mysql-row-size-too-large.html https://www.google.com/ "The Zabbix database version does not match current requirements. Your database version: 4030046. Required version: 5000000. Please contact your system administrator." "zabbix 5 как обновить базу вручную" "Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual." The maximum row size for the used table type, not counting BLOBs, is 8126. "Row size too large?" |
Backup zabbix
1 2 3 4 5 6 7 8 9 10 11 12 |
0. выключаем zabbix-server systemctl stop zabbix-server 1. создаем папки для бэкапа mkdir -p /opt/zabbix_backup/bin_files /opt/zabbix_backup/conf_files /opt/zabbix_backup/doc_files mkdir -p /opt/zabbix_backup/web_files /opt/zabbix_backup/db_files 2. Бэкпим web файлы cp -rp /usr/share/zabbix/ /opt/zabbix_backup/web_files 3. Бэкапим databases mysql mysqldump -h localhost -u'root' -p'rootDBpass' --single-transaction 'zabbix' | gzip > /opt/zabbix_backup/db_files/zabbix_backup.sql.gz |
Update zabbix debian stage 1
1 2 3 4 5 6 7 8 9 10 11 |
0. сносим zabbix-release dpkg --purge zabbix-release 1. update sudo wget https://repo.zabbix.com/zabbix/5.0/debian/pool/main/z/zabbix-release/zabbix-release_5.0-1+$(lsb_release -sc)_all.deb sudo dpkg -i zabbix-release_5.0-1+$(lsb_release -sc)_all.deb apt update apt install -y --only-upgrade zabbix-server-mysql zabbix-frontend-php 2.ставим zabbix-apache-conf apt-get install -y zabbix-apache-conf |
Update zabbix ubuntu stage 1
1 2 3 4 5 6 7 8 9 10 11 |
0. сносим zabbix-release dpkg --purge zabbix-release 1. update wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+$(lsb_release -sc)_all.deb dpkg -i zabbix-release_5.0-1+$(lsb_release -sc)_all.deb apt update apt install -y --only-upgrade zabbix-server-mysql zabbix-frontend-php 2. ставим zabbix-apache-conf apt-get install -y zabbix-apache-conf |
Update zabbix Centos stage 1
1 2 3 4 |
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/$(rpm -E %{rhel})/x86_64/zabbix-release-5.0-1.el$(rpm -E %{rhel}).noarch.rpm dnf clean all dnf upgrade -y zabbix-server-mysql zabbix-web-mysql dnf install -y zabbix-apache-conf |
Zabbix update stage 2
1 2 3 4 5 6 7 8 9 10 11 |
!!! При запуске zabbix начнется процесс обновления базы данных 0. Запускаем zabbix-server systemctl start zabbix-server 1. Наблюдаем за логами zabbix cat /var/log/zabbix/zabbix_server.log | grep database 2. Очищаем кеш браузера и подключаемся к zabbix 3. Проверяем версию zabbix zabbix_server -V |
Проверка databases mysql
1 2 3 4 5 6 7 8 9 |
mysql -u'zabbix' -p'zabbixDBpass' zabbix -e "show create table history;" | history | CREATE TABLE history ( itemid bigint(20) unsigned NOT NULL, clock int(11) NOT NULL DEFAULT '0', value double(16,4) NOT NULL DEFAULT '0.0000', ns int(11) NOT NULL DEFAULT '0', KEY history_1 (itemid,clock) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin | |
apply it PostGreSql users need to change “mysql” with “postgresql” in the URL path:
1 2 3 |
!!! Применяется после обновления с postgres на mysql wget https://git.zabbix.com/projects/ZBX/repos/zabbix/raw/database/mysql/double.sql mysql -u'zabbix' -p'zabbixDBpass' zabbix < double.sql |
Проверка базы данных zabbix mysql
1 2 3 4 5 6 7 8 |
mysql -u'zabbix' -p'zabbixDBpass' zabbix -e "show create table history;" history | CREATE TABLE history ( itemid bigint(20) unsigned NOT NULL, clock int(11) NOT NULL DEFAULT '0', value double NOT NULL DEFAULT '0', ns int(11) NOT NULL DEFAULT '0', KEY history_1 (itemid,clock) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin | |
Убрать предупреждения базы данных
1 2 3 4 5 6 |
Now we need to add the line bellow to “zabbix.conf.php” with the text editor to remove warning message from the frontend. nano /etc/zabbix/web/zabbix.conf.php ------------------------------------ $DB['DOUBLE_IEEE754'] = 'true'; ------------------------------------ |
Не запускается zabbix-server №1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
!!! в логах ошибки 0. проверяем cat /var/log/zabbix/zabbix_server.log | grep database ------------------------------------------------------ 1331:20200727:174531.353 current database version (mandatory/optional): 05000000/05000001 1331:20200727:174531.389 database is not upgraded to use double precision values Duplicate column name 'name' [alter table `events` add `name` varchar(2048) default '' not null] ------------------------------------------------------ 1. Как вариант можно удалить дублирующую строку mysql -u zabbix-user -p USE zabbix-db-name; ALTER TABLE events DROP COLUMN name; exit 2. Пытаемся запустить zabbix и проверяем логи systemctl start zabbix-server cat /var/log/zabbix/zabbix_server.log | grep database |
Не запускается zabbix-server №2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
0. проверяем логи cat /var/log/zabbix/zabbix_server.log | grep database ---------------------------------------- ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. ---------------------------------------- [Warning] InnoDB: Cannot add field col in table db1.tab because after adding it, the row size is 8478 which is greater than maximum allowed size (8126) for a record on index leaf page. ---------------------------------------- 1. Можно изменить формат таблицы mysql -u zabbix-user -p USE zabbix-db-name; ALTER TABLE ИМЯ_Таблицы ROW_FORMAT=DYNAMIC; exit 2. Пытаемся запустить zabbix и проверяем логи systemctl start zabbix-server cat /var/log/zabbix/zabbix_server.log | grep database Пример: mysql -u zabbix-user -p USE zabbix-db-name; ALTER TABLE tableName ENGINE = InnoDB ROW_FORMAT = Dynamic; exit |
vim /etc/rsyslog.conf
1 2 3 4 5 6 7 8 9 10 11 12 |
#!!! Добавляем # zimbra audit log $ModLoad imfile $InputFileName /opt/zimbra/log/audit.log # путь до лога за которым наблюдаем (права на чтение должны быть выданы) $InputFileStateFile zimbra # произвольное имя $InputFileTag zimbra: # произвольное имя метки $InputFileFacility local3 # желаемое имя Facility $InputFileSeverity info # желаемое имя Severity $InputRunFileMonitor # необходимая опция для наблюдения за файлом local3.info @@192.168.1.165 |
Ссылки:
1 2 3 |
https://www.zabbix.com/download?zabbix=5.0&os_distribution=debian&os_version=10_buster&db=mysql&ws=apache - инструкция по установки zabbix https://www.digitalocean.com/community/tutorials/how-to-install-mariadb-on-debian-10 - инструкция по mariadb и паролю root https://wiki.debian.org/Zabbix |
Установка:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
!!! Не забудь изменить пароли на свои 0. Добавим репозиторий # wget https://repo.zabbix.com/zabbix/5.0/debian/pool/main/z/zabbix-release/zabbix-release_5.0-1+buster_all.deb # dpkg -i zabbix-release_5.0-1+buster_all.deb # apt update 1. Ставим пакеты apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent 2. Ставим mariadb sudo apt install mariadb-server sudo mysql_secure_installation 3. Создаем пользователя и бузу zabbix в mariadb !!! измени пароль 'password' mysql -uroot -p mysql> create database zabbix character set utf8 collate utf8_bin; mysql> create user zabbix@localhost identified by 'password'; mysql> grant all privileges on zabbix.* to zabbix@localhost; mysql> quit; 4. Заливаем базу: zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix 5. Редактируем файл zabbix_server.conf и прописываем наш пароль для db: vim /etc/zabbix/zabbix_server.conf ------------------------------ DBPassword=password ------------------------------ 6. Редактируем временную зону в файле /etc/zabbix/apache.conf: vim /etc/zabbix/apache.conf --------------------------- # ищем это php_value date.timezone Europe/Riga php_value date.timezone Europe/Moscow --------------------------- 7. Перезапускаем zabbix и apache2 systemctl restart zabbix-server zabbix-agent apache2 8. Добавляем zabbix и apache2 в автозагрузку systemctl enable zabbix-server zabbix-agent apache2 |
Подключение:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
!!! При первом подключении к zabbix нужно будет завершить установку. !!! Возможно zabbix не сможет записать в файл zabbix.conf.php !!! Находится тут /usr/share/zabbix/conf/zabbix.conf.php !!! Zabbix предложит скачать файл и сохранить его вручную. default url: http://server_ip_or_name/zabbix default login: Admin default pass: zabbix |
Установка zabbix-server
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
!!! можно воспользоваться официальной инструкцией !!! https://www.zabbix.com/ru/download?zabbix=5.4&os_distribution=debian&os_version=11_bullseye&db=mysql&ws=apache 0. устанавливаем пакет apt install zabbix-server-mysql 1. Создаем файл zabbix.sql nano zabbix.sql --------------- #drop database zabbix; create database zabbix character set utf8 collate utf8_bin; grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix'; --------------- 2. Создаем базу mysql < zabbix.sql 3. Загружаем таблицы zcat /usr/share/zabbix-server-mysql/schema.sql.gz | mysql -uzabbix -pzabbix zabbix zcat /usr/share/zabbix-server-mysql/images.sql.gz | mysql -uzabbix -pzabbix zabbix zcat /usr/share/zabbix-server-mysql/data.sql.gz | mysql -uzabbix -pzabbix zabbix 3. Редактируем конфигурацию сервера zabbix nano /etc/zabbix/zabbix_server.conf Можно просто вставить в самый конец файла. ----------------------------------- DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=zabbix ----------------------------------- 4. Запускаем zabbix systemctl enable zabbix-server service zabbix-server start |
Установка и запуск web интерфейса
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
0. Установка пакетов apt install zabbix-frontend-php php-mysql 1. Редактируем файл и указываем правильную временную зону /etc/apache2/conf-available/zabbix-frontend-php.conf ---------------------------------------------------- php_value date.timezone Europe/Moscow ---------------------------------------------------- 2. Активируем конфиг и перезапускаем zabbix a2enconf zabbix-frontend-php service apache2 reload 3. Создаем пустой файл и выдаем на него права для apache2 touch /etc/zabbix/zabbix.conf.php chown www-data /etc/zabbix/zabbix.conf.php 4. Заходим на веб интерфейс http://ВАШ_IP_адрес/zabbix/setup.php 5. Проверяем конфиг less /etc/zabbix/zabbix.conf.php -------------------------------- <?php // Zabbix GUI configuration file. global $DB; $DB['TYPE'] = 'MYSQL'; $DB['SERVER'] = 'localhost'; $DB['PORT'] = '0'; $DB['DATABASE'] = 'zabbix'; $DB['USER'] = 'zabbix'; $DB['PASSWORD'] = 'zabbix'; // Schema name. Used for IBM DB2 and PostgreSQL. $DB['SCHEMA'] = ''; $ZBX_SERVER = 'localhost'; $ZBX_SERVER_PORT = '10051'; $ZBX_SERVER_NAME = ''; $IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG; -------------------------------- |
Пароль по умолчанию
1 2 |
Логин: Admin Пароль: zabbix |
Что и как мониторит zabbix
1 2 |
Собственно мониторинг начинается тогда когда будет подключен хотя бы один item (Элемент данных) Т.е. настроенный интерфейс в хосте ни на что не влияет.(почти) |
Простые проверки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
https://www.zabbix.com/documentation/4.0/ru/manual/config/items/itemtypes/simple_checks - док Хост может не иметь не одного интерфейса zabbix, но можно выполнять простые проверки. варианты: net.tcp.service[http] net.tcp.service.perf[http,,8080] net.tcp.service[ftp,,155] net.udp.service.perf[ntp] net.tcp.service.perf[http] - возвращает float (число с точкой) Пример net.tcp.service.perf[http] Создаем узел. Имя узла сети: ya.ru Группа: любая Интерфейс любой: главное указать DNS (в нашем случае ya.ru) Добавляем item (Элемент данных) Имя: любое Тип: Simple check(Простая проверка) Тип информации: Float (Число с точкой) Интервал обновления: желаемый (30s 10m 9h 300d) Ну и собственно можем идти наблюдать в в мониторинге -> Последние данные Также никто нам не запрещает создать узел и в варианте простой проверки указывать следующие: icmpping[192.168.1.1] - возвращает dec (целое число) (0 - Fulse (не сработала), 1 - True(ок, сработала)) net.tcp.service[tcp,192.168.15.53,3389] - проверяем доступность порта 3389 (rdp) для хоста 192.168.15.53 То есть указывать хос\порт\протокол который мы проверяем, и одним узлом проверять множество узлов. |
Триггеры
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ya.ru:net.tcp.service.perf[http].last()}=0 {server.corpX.un:icmpping[192.168.1.1].last()}=0 {server.corpX.un:net.tcp.service[tcp,192.168.15.53,3389].last()}=0 Можно настроить зависимость триггера, что бы он не срабатывал когда сработал другой триггер. Например у нас есть два триггера. Один проверяет доступность интернета. Второй проверяет доступность сайта в интернете. Логично будет что бы срабатывал только первый когда у нас не доступен интернет. Так же можно вычислять среднее значение для срабатывания триггера {ya.ru:net.tcp.service.perf[https].avg(5m)}>0.4 |
zabbix пассивное получение значений / элемент trapper
1 2 3 4 5 6 7 8 9 10 |
Настройка узла -------------- Name: my item (как угодно) Type: Zabbix trapper Key: my.item Allowed hosts: 127.0.0.1 --------------- zabbix_sender -z 127.0.0.1 -p 10051 -s server -k my.item -o 1 |
zabbix-agent минимальная конфигурация
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
zabbix_get -s IP/DNSNAME -p 10050 -k agent.version - тестирование подключения к zabbix-server с сервера zabbix zabbix_agent -p - показать доступные элементы Zabbix-agent в обычном режиме vim /etc/zabbix/zabbix-agentd.comf ---------------------------------- LogFile=/var/log/zabbix-agent/zabbix_agentd.log LogFileSize=0 Server=IP_ADDRESS_SERVER_ZABBIX #ServerActive=IP_ADDRESS_SERVER_ZABBIX Hostname=HOSTNAME_CLIENT_FOR_ZABBIX Include=/etc/zabbix/zabbix_agentd.conf.d/ ---------------------------------- Zabbix-agent в активном режиме vim /etc/zabbix/zabbix-agentd.conf !!! для этого режима требуется настраивать обнаружение (Настройка->Действия->Авто регистрация) !!! в авто Дискавери не забудь прикрепить шаблон Zabbix agent (active), а иначе получишь неадекватные данные ---------------------------------- LogFile=/var/log/zabbix-agent/zabbix_agentd.log LogFileSize=0 StartAgents=0 # Не слушаем сеть \ не ожидаем подключения заббикс сервера #Server=192.168.15.246 # эта запись не нужна в активном режиме ServerActive=192.168.15.246 # как раз этой записью сообщаем агенту что данные шлем сами Hostname=HOSTNAME_CLIENT_FOR_ZABBIX # как наш агент будет представляется серверу заббикс ListenIP=0.0.0.0 # не сообщаем свой IP адресс Include=/etc/zabbix/zabbix_agentd.conf.d/ ---------------------------------- |
Установка агента zabbix на CentOS7:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
yum install -y zabbix-agent - установка агента systemctl start zabbix-agent - запуск агента systemctl enable zabbix-agent - добавление в автозагрузку nano /etc/zabbix/zabbix_agentd.conf - редактируем и исправляем строки ---------------------------------- StartAgents=2 Server=192.168.15.246 - ip нашего сервера zabbix Hostname=sdv - имя клиента который подключается к zabbix ---------------------------------- service zabbix-agent stop - останавливаем агент service zabbix-agent start - запускаем агент |
Установка агента zabbix на debian:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
apt update apt upgrade apt install zabbix-agent - установка агента systemctl start zabbix-agent - запуск агента systemctl enable zabbix-agent - добавление в автозагрузку nano /etc/zabbix/zabbix_agentd.conf - редактируем и исправляем строки ---------------------------------- StartAgents=2 Server=192.168.15.246 - ip нашего сервера zabbix Hostname=sdv - имя клиента который подключается к zabbix ---------------------------------- service zabbix-agent stop - останавливаем агент service zabbix-agent start - запускаем агент |
Установка агента zabbix на windows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
0. Качаем agent zabbix для windows https://www.zabbix.com/download_agents#tab:34 1. Создаем папку zabbix на диске c:\ 2. Распаковываем в нее 4 файла zabbix_agentd.exe zabbix_agentd.win.conf zabbix_get.exe zabbix_sender.exe 3. редактируем файл zabbix_agentd.win.conf ------------------------------------------ Server = 192.168.15.246 - ip адрес Zabbix-севера Hostname = namehost - имя хоста, на который устанавливаем агент HostnameItem = PC_NAME - имя хоста, на который устанавливаем агент LogFile=c:\zabbix\zabbix_agentd.log - указываем место для записи логов в файл ------------------------------------------ 4. Переходим в каталог на клиенте cd c:\zabbix 5. Устанавливаем службу agent-zabbix zabbix_agentd.exe -c c:\zabbix\zabbix_agentd.conf --install 6.Нужно создать разрешающее правило в Брандмауэре Windows. Брандмауэр Защитника Windows – Дополнительные параметры – Правило для входящих подключений – Создать правило… Тип правила: Для порта; Протоколы и порты: Протокол TCP; Определенные локальные порты: 10050; Действие: Разрешить подключение; Профиль: Галочки Доменный, Частный, Публичный; Имя: Zabbix Agent; |
Zabbix-agent в обычном режиме + psk
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
== На клиенте == 0. редактируем конфиг агента vim /etc/zabbix/zabbix-agentd.comf ---------------------------------- LogFile=/var/log/zabbix-agent/zabbix_agentd.log LogFileSize=0 Server=IP_ADDRESS_SERVER_ZABBIX Hostname=ClientZabbix Include=/etc/zabbix/zabbix_agentd.conf.d/ TLSConnect=psk TLSAccept=psk ##TLSAccept=unencrypted,psk TLSPSKFile=/etc/zabbix/zabbix_agentd.psk TLSPSKIdentity=ClientZabbix ---------------------------------- 1. Генерируем файл PSK и распространяем его между агентами и сервером zabbix openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk - генерируем файл PSK scp /etc/zabbix/zabbix_agentd.psk server_zabbix:ClientZabbix.psk - копируем файл на server_zabbix service zabbix-agent restart - перезапускаем агент == На сервере == 2. Проверяем zabbix_get -s IP/DNSNAME -p 10050 -k agent.version - тестирование подключения к zabbix-server с сервера zabbix zabbix_get -s ClientZabbix -p 10050 -k agent.version - проверяем без ключа zabbix_get -s ClientZabbix -k system.sw.packages --tls-connect=psk --tls-psk-identity="ClientZabbix" --tls-psk-file=ClientZabbix.psk - тестируем с ключом 3. В веб интерфейсе zabbix-server добавляем шифрование по PSK для узла ClientZabbix |
Макросы
1 2 3 4 |
Макросы в zabbix, они же переменные. Макрос - перед макросам должен быть знак доллар ($) и все это заключено в фигурные скобки {}, пример: {$SSH_PORT} |
UserParameter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Используется для написания своих ключей для zabbix-agent vim /etc/zabbix/zabbix-agentd.comf - добавляем ---------------------------------- #UnsafeUserParameters=1 #UserParameter=listinstalledsoft,powershell -Command Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall; powershell -Command Get-ChildItem HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall #UserParameter=lmstat[*],C:\Progra~1\PTC\flexnet\bin\lmutil lmstat -a -c $1 #UserParameter=dir[*],dir $1 #UserParameter=runcommand[*],$1 UserParameter=bbb[*],wc -l $1 | cut -d' ' -f1 ---------------------------------- service zabbix-agent restart - перезапускаем агент Проверяем: zabbix_get -s gate -k bbb[/etc/passwd] sudo -u zabbix zabbix_agentd -t 'bbb[/etc/passwd]' |
UserParameter пример с ssl (проверяем сколько жить сертификату сайта )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
0. !!! В zabbix_agentd.conf должен быть параметр (Include=/etc/zabbix/zabbix_agentd.d/*.conf) vim /etc/zabbix/zabbix-agentd.comf ----------------------------------------- PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 Server=127.0.0.1,85.143.162.134 ServerActive=127.0.0.1 StartAgents=2 Hostname=Zabbix Server Timeout=10 UnsafeUserParameters=0 Include=/etc/zabbix/zabbix_agentd.d/*.conf ------------------------------------------ 1. В каталоге (/etc/zabbix/zabbix_agentd.d/) файл ssl.conf vim /etc/zabbix/zabbix_agentd.d/ssl.conf ------------------------------------------ UserParameter=ssl.discovery[*],/etc/zabbix/scripts/sslcheck/ssl_discovery.sh UserParameter=ssl.expire[*],/etc/zabbix/scripts/sslcheck/ssl_check.sh $1 ------------------------------------------ 2. в каталоге (/etc.zabbix.scripts/sslcheck/) файлы: list.txt - список доменов у которых проверяем ssl vim ssl_check.sh - скрипт который проверяет валидность сертификата сайта --------------------------------------------- #!/bin/sh SERVER=$1 TIMEOUT=25 RETVAL=0 TIMESTAMP=`echo | date` if [ -z "$2" ] then PORT=443; else PORT=$2; fi EXPIRE_DATE=`echo | openssl s_client -connect $SERVER:$PORT -servername $SERVER 2>/dev/null | openssl x509 -noout -dates 2>/dev/null | grep notAfter | cut -d'=' -f2` EXPIRE_SECS=`date -d "${EXPIRE_DATE}" +%s` EXPIRE_TIME=$(( ${EXPIRE_SECS} - `date +%s` )) if test $EXPIRE_TIME -lt 0 then RETVAL=0 else RETVAL=$(( ${EXPIRE_TIME} / 24 / 3600 )) fi echo ${RETVAL} ------------------------------------ vim ssl_discovery.sh - файл приводит список lixt.txt для читаемости zabbix ----------------------------- #!/bin/bash JSON=$(for i in `cat /etc/zabbix/scripts/sslcheck/list.txt`; do printf "{\"{#SSL}\":\"$i\"},"; done | sed 's/^\(.*\).$/\1/') printf "{\"data\":[" printf "$JSON" printf "]}" ----------------------------- 4. Тестирование root@zabbix-server:~# sudo -u zabbix zabbix_agentd -t 'ssl.discovery' ssl.discovery [t|{"data":[{"{#SSL}":"XXXXX.ru"},{"{#SSL}":"XXXXX.ru"},{"{#SSL}":"XXXXX.ru"},{"{#SSL}":"XXXXX.ru"}]}] root@zabbix-server:~# sudo -u zabbix zabbix_agentd -t 'ssl.expire[XXXXX.ru]' ssl.expire[XXXXX.ru] [t|400] curl -Is https://XXXXX.ru | head -n 1 |
UserParameter пример с dhcp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
0. Устанавливаем пакет apt install dhcpd-pools - устанавливаем пакет dhcpd-pools 1. Проверяем работу программы которая нам будет показывать сколько выдано у нас адресов dhcpd-pools -l /var/lib/dhcp/dhcpd.leases -c /etc/dhcp/dhcpd.conf - покажет сколько адресов выдано 2. создаем скрипт dhcp_stat.sh vim /etc/zabbix/scripts/dhcp_stat.sh (!!! все любят складывать скрипты /usr/local/bin/) ------------------------------- #!/bin/sh CMD='/usr/bin/dhcpd-pools -l /var/lib/dhcp/dhcpd.leases -c /etc/dhcp/dhcpd.conf -f c | grep 192.168.8' MAX=`eval $CMD | cut -d'"' -f8` CUR=`eval $CMD | cut -d'"' -f10` eval RES=\$$1 echo $RES ------------------------------- Примеры запуска: # /usr/local/bin/dhcp_stat.sh MAX # /usr/local/bin/dhcp_stat.sh CUR 3. создаем файл в каталоге (/etc/zabbix/zabbix_agentd.d/) с именем (dhcp.conf) vim /etc/zabbix/zabbix_agentd.d/dhcp.conf ------------------------------------------ UserParameter=dhcp.stat[*],/usr/local/bin/dhcp_stat.sh $1 ------------------------------------------ 4. Проверка zabbix_get -s gate -k dhcp.stat[CUR] zabbix_get -s gate -k dhcp.stat[MAX] sudo -u zabbix zabbix_agentd -t 'dhcp.stat[CUR]' sudo -u zabbix zabbix_agentd -t 'dhcp.stat[MAX]' |
zabbix_agentd -t / zabbix_get
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
apt install jq - установка пакета jq для работы с json zabbix_agentd -t agent.version zabbix_agentd -t net.if.discovery zabbix_agentd -t net.if.in[eth0] zabbix_agentd -t net.if.out[eth0] zabbix_agentd -t vfs.fs.dicovery zabbix_agentd -t vfs.fs.size[/,pused] !!! zabbix_get - устарел, ставится отдельным пакетом. zabbix_get -s 192.168.1.10 -p 10050 -k agent.version zabbix_get -s 192.168.1.10 -p 10050 -k system.sw.os zabbix_get -s 192.168.1.10 -p 10050 -k system.cpu.util zabbix_get -s 192.168.1.10 -p 10050 -k net.if.discovery zabbix_get -s 192.168.1.10 -p 10050 -k net.if.in["eth0"] zabbix_get -s 192.168.1.10 -p 10050 -k net.if.out["eth0"] zabbix_get -s 192.168.1.10 -p 10050 -k vfs.fs.discovery zabbix_get -s 192.168.1.10 -p 10050 -k vfs.fs.size[/,pused] |
SNMP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
!!! snmp - simple network manager protocol !!! apt install snmp snmp-mibs-downloader - установка !!! MIB - manager information base !!! https://wiki.mikrotik.com/wiki/Manual:SNMP !!! /interface> print oid !!! :> /etc/snmp/snmp.conf - очистим содержимое конфига snmpget snmpset sbmpwalk snmpget -c public -v2c 10.0.0.25 .1.3.6.1.2.1.2.2.1.2.3 - получить инфу по MIB .1.3.6.1.2.1.2.2.1.2.3 snmpget -c public -v2c 10.0.0.25 iso.3.6.1.2.1.1.5.0 - получить инфу по MIB iso.3.6.1.2.1.1.5.0 snmpwalk -c public -v2c 10.0.0.25 - получить все MIB с устройства с ip 10.0.0.25 |
Установка и запуск zabbix proxy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
0. устанавливаем apt install snmp apt install zabbix-proxy-mysql 1. готовим базу данных mysql --------------------------- #drop database zabbix_proxy; #create database zabbix_proxy character set utf8 collate utf8_bin; gran all privileges on zabbix_proxy.* to zabbix@localhost indentified by 'zabbix'; --------------------------- zcat /usr/share/zabbix-proxy-mysql/schema.sql.gz | mysql -uzabix -p zabbix_proxy 2. редактируем конфиг vim /etc/zabbix/zabbix_proxy.conf --------------------------------- Hostname=gate ConfigFrequency=60 Server=zabbix.mynet.inc DBName=zabbix_proxy DBuser=zabbix DBPassword=zabbix -------------------------------- 3. запускаем systemctl enable zabbix-proxy service zabbix-proxy start |
zabbix api
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
apt install curl jq 0. получаем ключ для запросов к заббикс curl -s -k -X POST -H 'Content-type: application/json-rpc' -d ' { "jsonrpc": "2.0", "method": "user.login", "params": { "user": "Admin", "password": "zabbix" }, "id": 1, } ' http://127.0.0.1/zabbix/api_jsonrpc.php !!! тут мы получим ключ который потребуется далее { "jsonrpc": "2.0", "result": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "id": 1 } !!! ключ живет ровно столько сколько указано для времени активного сеанса пользователя !!! по умолчанию 30 дней 1. получаем список хостов из заббикс curl -s -k -X POST -H 'Content-type: application/json-rpc' -d ' { "jsonrpc": "2.0", "method": "host.get", "params": { "output": [ "hostid", "host" ], "selectInterfaces": [ "interfaceid", "ip" ] }, "id": 2, "auth": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" } ' http://127.0.0.1/zabbix/api_jsonrpc.php |
Отключить \ выключить вход через ldap:
1 2 3 |
mysql use zabbix; update config set authentication_type=0; |
MIB \ snmp \ snptt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
apt-get install snmp-mibs-downloader apt install snmptt ### Добавить mib download-mibs sed -i "s/^\(mibs *:\).*/#\1/" /etc/snmp/snmp.conf service snmpd restart ### Пример конфига snmptt.conf vim /etc/snmp/snmptt.conf -------------------------- EVENT ELRPReport .1.3.6.1.4.1.1916.1.1.6.0.2 "Status Events" Normal FORMAT ZBXTRAP $A $aA $3 EVENT BGPSESSCHANGE .1.3.6.1.4.1.2636.4.12.0.1 "Status Events" Normal FORMAT ZBXTRAP $A $aA $8 -------------------------- systemctl restart snmptt.service |
zabbix ограничение страниц в 20
1 2 3 4 5 |
zabbix ограничение страниц в 20 zabbix ограничения на количество элементов данных Решение: администрирование - общие параметры - gui |
Отключить триггеры на интерфейсы для хоста super_host_name1, база mysql
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
use zabbix; UPDATE triggers SET status = 1 WHERE triggers.triggerid IN ( SELECT triggers.triggerid FROM hosts, items, functions, triggers WHERE items.hostid = hosts.hostid AND items.itemid = functions.itemid AND functions.triggerid = triggers.triggerid AND triggers.description LIKE 'Interface % is {ITEM.VALUE1} on {HOST.NAME}' AND hosts.host = 'super_host_name1' ); |
Отключить триггеры на интерфейсы для хоста super_host_name1, база postgres
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
UPDATE triggers SET status = 1 WHERE triggers.triggerid IN ( SELECT triggers.triggerid FROM public.hosts, public.items, public.functions, public.triggers WHERE items.hostid = hosts.hostid AND items.itemid = functions.itemid AND functions.triggerid = triggers.triggerid AND triggers.description LIKE 'Interface % is {ITEM.VALUE1} on {HOST.NAME}' AND hosts.host = 'super_host_name1' ); |
ссылки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
https://www.zabbix.com/documentation/current/ https://www.zabbix.com/documentation/3.4/ru/manual/discovery/auto_registration - авто регистрация агентов https://www.zabbix.com/documentation/4.2/ru/manual/config/items/itemtypes/zabbix_agent https://www.zabbix.com/documentation/4.0/ru/manual/config/macros https://www.zabbix.com/documentation/4.0/ru/manual/config/templates https://www.zabbix.com/documentation/current/ru/manual/encryption/using_pre_shared_keys - использование шифрования https://www.zabbix.com/documentation/current/ru/manual/api - документация zabbix Api https://pypi.org/project/py-zabbix/ - документация zabbix Api управляем с помощью py-zabbix https://www.zabbix.com/ru/solutions - решения на zabbix https://share.zabbix.com/network_devices - огромная база template / шаблонов https://wikival.bmstu.ru/doku.php?id=zabbix._мониторинг_it_инфраструктуры_предприятия https://tradenark.com.ua/monitoring/zabbix/check-ssl-certificate-expire-date/ https://ixnfo.com/ustanovka-mib-v-ubuntu-i-reshenie-oshibki-snmp-cannot-find-module.html - MIB |
Введение:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Logrotate - это системная утилита, которая управляет автоматической ротацией и сжатием лог-файлов. Если в процессе длительной работы сервера файлы не были ротированы, сжаты и периодически не удалялись, то рано или поздно они могут занять весь доступный объем памяти. Logrotate устанавливается по умолчанию на сервере и настроена для обработки ротации журналов для всех установленных пакетов и приложений. Основной файл конфигурации — /etc/logrotate.conf. Для создания настроек отдельных логов — используем директорию /etc/logrotate.d адрес_файла_лога { директивы } |
Основные директивы управления и обработки логов:
1 2 3 4 5 6 7 8 9 10 |
Опции, определяющие интервал ротации: !!! Порядок выполнения : hourly,daily, weekly, monthly, ИЛИ size hourly - каждый час (cron для logrotate должен быть) daily - каждый день (по умолчанию) weekly - ротация раз в неделю monthly - ротация раз в месяц yearly - ротация раз в год size - размер лога, когда он будет достигнут будет перемещен, возможные варианты size 500M |
Дополнительные директивы, опции сжатия логов:
1 2 3 4 5 6 7 8 |
compress - Сжимать логи при ротации. По умолчанию для сжатия используется gzip compresscmd - Команда/программа, которая будет использоваться для сжатия логов compressoptions - Опции команды ротации, которые будут использоваться при сжатии логов uncompresscmd - Команда разархивации логов. По умолчанию gunzip compressext - Указать расширение файлов, которое будет указываться для сжатых логов delaycompress - Отложить сжатие лога до следующей ротации. Таким образом последняя версия лога после ротации будет несжатой, а более ранние — сжатыми nocompress - Не сжимать логи при ротации nodelaycompress - Не откладывать сжатие до следующей итерации ротации. Эта опция перегружает опцию delaycompress |
Дополнительные директивы, опции копирования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
copy - Копировать лог-файл, но не изменять оригинал. Эту опцию можно использовать, когда надо создать снимок лога на определенный момент, вместо ротации, либо когда для усечения лога используется внешняя программа. Если используется опция copy, то опция create, если она указана, не будет иметь никакого эффекта, так как старый лог остается. copytruncate - Урезать оригинальный файл до нулевого размера после создания копии вместо переименования оригинального файла и создания нового. Эта опция используется тогда, когда программе, записывающей лог, нельзя указать, что нужно закрыть связанный с файлом лога дескриптор и открыть новый. Такая программа может продолжать писать в старый файл. При использовании этой опции есть один момент, связанный с тем, что на копирование требуется некоторое время и поэтому файл не может быть скопирован мгновенно. За время копирования в лог могут быть добавлены записи, которые будут утеряны при усечении файла до нулевого размера. При использовании этой опции опция create также не будет иметь эффекта, так как старый файл остается на месте nocopy - Не копировать оригинальный лог-файл. Эта опция перегружает опцию copy nocopytruncate - Не усекать оригинальный лог-файл после создания копии. Эта опция перегружает опцию copytruncate |
Дополнительные директивы, опции создания нового лог-файла (после ротации старого):
1 2 3 4 5 6 7 8 9 10 |
create права владелец группа create владелец группа - Указать права доступа, владельца и группу владения нового свежесоздаваемого лог-файла сразу после его создания. Как уже упоминалось, если используются опции copy и copytruncate, то create не имеет смысла, так как старый файл остается на месте, новый файл не создается. Чтобы опция create отработала, файл должен отсутствовать. Права указываются восьмеричными значениями в таком же виде, как и при использовании программы chmod. Например, 644 или 600. Если какое-то значение (права/владелец/группа) опущено, то оно будет таким же, как у оригинального файла nocreate - Новые лог-файлы не создаются. Эта опция перегружает опцию create |
Дополнительные директивы, опции, связанные с удалением файла лога: