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: |
1 2 3 4 5 6 7 8 9 10 11 12 |
SNMP (Simple Network Management Protocol Простой протокол сетевого управления стандартный интернет-протокол для управления устройствами в IP-сетях на основе архитектур TCP/UDP. MIB (Managment Information Base) Это структурированный текстовый файл или несколько файлов, которые содержат информацию о всех объектах устройства. Объектом может быть какая-нибудь настройка или параметры системы. У каждого объекта есть свой набор полей, таких как тип данных, доступность (чтение, запись), статус (обязательный, необязательный), текстовое название настройки. Также объект может содержать другие объекты. OID — Object IDentificator - числовой идентификатор объекта в дереве MIB. Object Name - имя объекта, уникальная константа для всего MIB, однозначно соответствующая определённому OID. |
Feature | Version 1 | Version 2C | Version3 |
---|---|---|---|
GET request | + | + | + |
GET-NEXT request | + | + | + |
SET request | + | + | + |
GET-BULK request | — | + | + |
TRAP notification | + | + | + |
INFORM notification | — | + | + |
Community based security | + | + | — |
User based security | — | — | + |
Message Authentication | — | — | + |
Message Encryption (privacy) | — | — | + |
Тип | Описание | Пример | Дополнительно |
---|---|---|---|
Integer32 | Целое со знаком (32-бита) | .1.3.6.1.2.1.1.7.0 = INTEGER: 2 | от -2147483648 до 2147483647 |
Counter32 | Целое без знака (32-бита) | .1.3.6.1.2.1.1.7.1 = Counter32: 1 | от 0 до 4294967295, не доступно на запись, при переполнении сбрасывается в 0 |
Counter64 | Целое без знака (64-бита) | .1.3.6.1.2.1.31.1.1.1.8.6 = Counter64: 103 | не доступно на запись, после переполнения сбрасывается в ноль |
Gauge32 | Целое без знака (32-бита) | .1.3.6.1.2.1.2.2.1.5.49 = Gauge32: 100000000 | от 0 до 4294967295 |
TimeTicks | Целое без знака | .1.3.6.1.2.1.1.3.0 = Timeticks: (1299250300) 150 days, 9:01:43.00 | 1/100 секунд, не уменьшаемое |
OctetString | Строка/Массив байт | .1.3.6.1.2.1.1.9.1.3.1 = STRING: "RS capabilities" | Обычно до 255 байт |
Object Identifier | OID | .1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.3955.6.9.224.1 | |
IpAddress | IP адрес | .1.3.6.1.2.1.4.20.1.1.192.168.136.18 = IpAddress: 192.168.0.18 | |
HexString | Шестнадцатеричная строка | .1.3.6.1.2.1.2.2.1.6.1 = Hex-STRING: 3C DF 1E EA A7 65 | |
Null | Нет значения или пустое | .1.3.6.1.2.1.31.1.1.1.18.1 = "" |
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 |
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 8 9 |
ss -alnp | grep snmp | grep 161 snmpwalk -v 2c -c myCommunity localhost snmpwalk -v2c -c public localhost snmpwalk -On -v2c -c public localhost snmpwalk -v2c -c public 192.168.0.1 snmpwalk -v2c -c YouCommunity 192.168.0.1 | head snmptranslate -Tp |
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 |
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 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
cat /etc/snmp/snmpd.conf | grep -Ev "^#|^$" ------------------------------------------- com2sec readonly default public com2sec readwrite default private group MyROSystem v1 paranoid group MyROSystem v2c paranoid group MyROSystem usm paranoid group MyROGroup v1 readonly group MyROGroup v2c readonly group MyROGroup usm readonly group MyRWGroup v1 readwrite group MyRWGroup v2c readwrite group MyRWGroup usm readwrite view all included .1 80 view system included .iso.org.dod.internet.mgmt.mib-2.system access MyROSystem "" any noauth exact system none none access MyROGroup "" any noauth exact all none none access MyRWGroup "" any noauth exact all all none syslocation Unknown (configure /etc/snmp/snmpd.local.conf) syscontact Root <root@localhost> (configure /etc/snmp/snmpd.local.conf) exec shelltest /bin/sh /tmp/shtest ------------------------------------------- |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
0. Раскомментировать строку в файле “/etc/snmp/snmpd.conf”: -------------------------------------------------------- exec shelltest /bin/sh /tmp/shtest -------------------------------------------------------- 1. Создать файл “/tmp/shtest” и добавить в него следующие: cat > /tmp/shtest << "EOF" #!/bin/bash prog1=$(cat /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq) prog2=$(val=$(cat /sys/class/thermal/thermal_zone0/temp) ; result=$(echo "scale=2; $val / 1000.0" | bc) ; printf "%.2f\n" "$result") echo "freq_cpu=$prog1 Hz temper=$prog2 C" EOF 2. Использование: snmpwalk -v2c -c public localhost .1.3.6.1.4.1.2021.8 snmpwalk -On -v2c -c public localhost .1.3.6.1.4.1.2021.8 |
Приоритет:
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 |
Дополнительные директивы, опции, связанные с удалением файла лога:
1 2 3 4 5 6 7 8 9 10 |
shred - Удалять лог-файл при помощи программы команды «shred -u». По умолчанию используется unlink shredcycles количество - Указать количество циклов перезаписи содержимого файла до его удаления. Если опция не указана, будет использовано значение по умолчанию noshred - Не использовать shred для удаления maxage количество - Удалять файлы логов, которые старше, чем указанное количество дней. Возраст файлов проверяется только когда происходит ротация. Файлы высылаются по электронной почте на сконфигурированный адрес, если указаны опции mail и maillast |
Дополнительные директивы, опции, связанные с датами:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
dateext - Использовать в названии старых лог-файлов дату вместо номера. При использовании номера названия выглядят так: logfile.1.gz, logfile.2.gz и так далее nodateext - Не использовать дату в названиях старых лог-файлов. Эта опция перегружает опцию dateext dateformat форматная-строка - Указать форматную строку для даты, которая будет добавляться к названию лога. Форматная строка похожа на используемую в команде date, но допустимы только шаблоны %Y(четырехзначный номер года), %m(двузначный номер месяца), %d(двузначный номер дня месяца) и %s(unix time, количество секунд с 00:00 01.01.1970). Значение по умолчанию «-%Y%m%d», минус также включен в шаблон, при задании шаблона его можно упустить. Нужно отметить, что logrotate использует сортировку для определения более старых файлов, которые необходимо удалить, поэтому строка даты должна учитывать корректную сортировку. Именно поэтому вначале пишется обычно год, затем месяц и только затем день. dateyesterday - Использовать вчерашнюю дату при ротации. Таким образом, дата в названии файла будет соответствовать дате файла, который находится внутри архива |
Дополнительные директивы, опции, связанные с рассылкой логов:
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 |
mail адрес - Указать адрес, на который будет выслан старый лог после ротации nomail - Не отправлять старые логи по электронной почте. mailfirst - Отправлять самый свежий файл после ротации maillast - Отправлять самый старый файл после ротации. Этот вариант используется по умолчанию Опции, связанные с размером и существованием файла лога: maxsize размер - Лог ротируется, когда его размер превысит указанный, еще до наступления следующего интервала ротации (daily, weekly, monthly, yearly). Поскольку такая ротация не зависит от времени, поэтому использовать в названии файла дату не имеет смысла. minsize размер - Лог ротируется, когда его размер больше указанного, но не ранее, чем наступает соответствующий временной интервал ротации (daily, weekly, monthly, yearly) size размер - Лог ротируется, когда его размер больше указанного количества байт. Если после размера указана буква k, размер считается в килобайтах, если M — в мегабайтах, если G — в гигабайтах. Например, 1G или 10M. ifempty - Ротировать файл лога, даже если он пуст. Используется по умолчанию. notifempty - Не ротировать файл лога, если он пуст. Перегружает опцию ifempty. missingok - Если файл лога отсутствует, перейти к следующему без сообщения об ошибке nomissingok - Если файл лога отсутствует, возникнет ошибка. Этот параметр установлен по умолчанию. |
Дополнительные директивы, опции , связанные с директориями, в которых хранятся логи:
1 2 3 4 5 6 7 8 |
olddir директория - Директория, в которую будут перемещаться логи при ротации. Эта директория должна находиться на том же устройстве, что и ротируемый файл лога. Путь к директории можно указывать как абсолютный, так и без полного пути. Во втором случае он будет считаться поддиректорией директории, в которой хранится оригинальный файл лога. Когда эта опция указана, все старые версии логов попадают в эту директорию. Опция может быть перегружена опцией noolddir noolddir - Логи ротируются в той же директории, где находится оригинальный фай |
Дополнительные директивы, опции выполнения скриптов:
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 |
postrotate/endscript - Строки, находящиеся между словами postrotate и endscript, каждое из которых должно находиться в отдельной строке, выполняются с использованием /bin/sh после ротации файла лога. Обычно скрипту в качестве первого аргумента передается полное имя файла лога с путем. Если указана директива sharedscripts, то передается список файлов. Таким образом можно выполнить скрипт для всех файлов сразу prerotate/endscript - Строки, находящиеся между словами prerotate и endscript, каждое из которых должно находиться в отдельной строке, выполняются с использованием /bin/sh перед ротацией файла лога. Обычно скрипту в качестве первого аргумента передается полное имя файла лога с путем. Если указана директива sharedscripts, то передается список файлов. sharedscripts - В обычном режиме скрипты выполняются по одному разу на каждый файл, указанный для ротации. Таким образом скрипты могут быть выполнены несколько раз, по разу для каждого файла, указанного для ротации. Если указана директива sharedscripts, то скрипты выполняются по одному разу, но в качестве аргументов им передается список файлов. Если же ни один файл лога не ротируется, скрипты выполнены не будут. Если в процессе выполнения скрипта возникнет ошибка, то действие не будет завершено для всех логов. nosharedscripts - Запускать prerotate и postrotate скрипты для каждого лога, который ротируется. Это значение по умолчанию, кроме того, эта директива перегружает sharedscripts. Скриптам передается абсолютный путь к файлам логов. Если во время выполнения скрипта возникнет ошибка, то действие не будет завершено только для одного текущего файла лога. preremove/endscript - Строки, находящиеся между словами preremove и endscript, каждое из которых должно находиться в отдельной строке, выполняются с использованием /bin/sh перед удалением старого файла лога. logrotate передаст название файла, который будет удален, скрипту в качестве аргумента firstaction/endscript - Строки, находящиеся между словами firstaction и endscript, каждое из которых должно находиться в отдельной строке, выполняются с использованием /bin/sh один раз до того, как лог-файлы будут ротированы и еще до того, как будет выполнена секция prerotate. Это произойдет только в том случае, если хотя бы один лог-файл будет действительно ротироваться. Скрипту передается весь список файлов текущей секции в качестве аргументов. Если скрипт заканчивает работу с ошибкой, другого запуска не будет. lastaction/endscript - Строки, находящиеся между словами lastaction и endscript, каждое из которых должно находиться в отдельной строке, выполняются с использованием /bin/sh один раз только после того, как лог-файлы будут ротированы и даже после того, как будет выполнена секция postrotate. Это произойдет только в том случае, если хотя бы один лог-файл ротирован. Скрипту передается весь список файлов текущей секции в качестве аргументов. Если скрипт заканчивает работу с ошибкой, другого запуска не будет. |
Дополнительные директивы, общего назначения:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
extention расширение - Лог-файлы с указанным расширением могут сохранять его после ротации. Если используется компрессия, то расширение с типом архива (обычно .gz) появляется после расширения. Например, если у вас файл лога называется mylog.foo и вы хотите получить при ротации файл mylog.1.foo.gz, а не mylog.foo.1.gz rotate количество - Лог-файлы ротируются указанное количество раз до удаления или отправки на адрес, указанный в директиве mail. Если количество равно 0, старые версии просто удаляются вместо ротации. start номер - Указать номер, используемый как база для нумерации при ротации. Например, если вы указываете 0, то оригинальный файл будет ротироваться в файл с окончанием .0, и далее по увеличению, если указать 9, то нумерация начнется с .9. Файлы в любом случае будут ротироваться такое количество раз, которое указано в директиве count. su пользователь группа - Выполнять ротацию логов под указанным пользователем и группой вместо пользователя по умолчанию (обычно root). Если у пользователи или группы недостаточно прав для осуществления ротации, возникнет ошибка. include файл-или-директория - logrotate считывает указанный файл и вставляет его как есть в конфигурационный файл в место вставки директивы include. Если указана директория, файлы из нее сортируются по алфавиту и затем вставляются в конфигурацию. При этом, если файлы не являются обычными файлами, они игнорируются. Это могут быть, например, именованные пайпы или директории. Также игнорируются файлы, имеющие расширения, указанные в директории tabooext. tabooext [+] список - Изменение текущего списка игнорируемых расширений. Если перед списком стоит +, то текущий список дополняется указанным. Если + не указан, то список заменяется. По умолчанию список изначально включает следующие расширения: .rpmsave, .rpmorig, ~, .disabled, .dpkg-old, .dpkg-dist, .dpkg-new, .cfsaved, .ucf-old, .ucf-dist, .ucf-new, .rpmnew, .swp, .cfsaved, .rhn-cfg-tmp-* |
Часто используемые:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
notifempty - не ротировать пустой лог-файл rotate - указывает сколько старых логов нужно хранить, в параметрах передается количество dateext - добавляет дату ротации перед заголовком старого лога compress - указывает, что лог необходимо сжимать delaycompress - не сжимать последний и предпоследний журнал extension - сохранять оригинальный лог файл после ротации, если у него указанное расширение mail - отправлять Email после завершения ротации maxage - выполнять ротацию журналов, если они старше, чем указано missingok - не выдавать ошибки, если лог файла не существует olddir - перемещать старые логи в отдельную папку start - номер, с которого будет начата нумерация старых логов nocopytruncate - не сбрасывать файл журнала после копирования copytruncate - сбрасывать файл журнала после копирования create - указывает, что необходимо создать пустой лог файл после перемещения старого create 640 root – с какими правами и владельцем будет создан новый файл nocreate - не создавать пустой журнал postrotate/endscript - выполнить произвольные команды после ротации, между postrotate и endscript расположены команды интерпретатора sh(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 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 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
!!! Примеры: /etc/logrotate.d Пример 000: /var/log/mydaemon/mydaemon.log /var/log/mydaemon/error.log{ # Ежедневная ротация daily # Начинать нумерацию с 0 start 0 # Ротировать 30 раз до удаления rotate 30 # Не генерировать ошибку, если файла лога нет missingok # Удалять логи при помощи команды shred shred # Делать 3 цикла перезаписи shredcycles 3 # Отложить сжатие последнего лога delaycompress # Выполнять postrotate только один раз sharedscripts # После ротации послать программе сигнал SIGHUP, в результате чего # будут переоткрыты дескрипторы логов # (многие программы поддерживают такое поведение) postrotate kill -SIGHUP $(cat /var/run/mydaemon.pid) endscript } Пример 0: /var/log/runtel/cdr.log /var/log/runtel/core.log /var/log/runtel/event-hunter.log /var/log/runtel/iface.log { daily size 10M missingok copytruncate create 0640 root adm rotate 30 compress } Пример 1: /var/log/messages { size 10M rotate 3 compress delaycompress } Пример 2: /var/log/messages1 { daily size 10M rotate 3 compress delaycompress } Пример 3: /var/log/testing/logrotate.conf /var/log/testing/logs/*.log { hourly missingok rotate 24 compress create } Пример 4: /var/log/asterisk/debug /var/log/asterisk/console /var/log/asterisk/security /var/log/asterisk/messages /var/log/asterisk/full /var/log/asterisk/*_log /var/log/asterisk/cdr-csv/Master.csv { daily dateext dateformat -%Y%m%d.log missingok notifempty rotate 63 compress delaycompress sharedscripts postrotate /usr/sbin/asterisk -rx 'logger reload' > /dev/null 2> /dev/null endscript } Пример 5: /var/log/audit/audit.log { compress dateext rotate 15 daily missingok notifempty create 600 root root sharedscripts postrotate /sbin/service auditd restart 2> /dev/null > /dev/null || true endscript } Пример 6: /var/log/postgresql/*.log { daily rotate 7 copytruncate compress delaycompress notifempty missingok su root root } Пример 7: /var/log/php-fpm/*.log { rotate 14 missingok notifempty sharedscripts compress maxage 14 postrotate /bin/kill -SIGUSR1 `cat /var/run/php-fpm/php-fpm.pid 2>/dev/null` 2>/dev/null || true endscript } Пример 8: /var/log/logstash-forwarder/*.log { rotate 30 size=10M missingok notifempty compress maxage 30 postrotate (/usr/bin/systemctl restart logstash-forwarder || /sbin/service logstash-forwarder restart) > /dev/null 2>&1 endscript } /var/log/logstash-forwarder/*.err { rotate 30 size=10M missingok notifempty compress maxage 30 postrotate (/usr/bin/systemctl restart logstash-forwarder || /sbin/service logstash-forwarder restart) > /dev/null 2>&1 endscript } Пример 9: /var/log/dhcp.log { daily rotate 10 missingok notifempty compress delaycompress sharedscripts create 0600 root root postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript } Пример 10: /var/log/openvpn/openvpn*.log { daily rotate 7 compress copytruncate delaycompress missingok notifempty } |
Команды:
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 |
man logrotate - помощь С ключом -d программа будет только эмулировать полезную активность, выводя вам на экран диагностические сообщения (реально она логи не тронет). Теперь давайте протестируем, удачно ли создан конфиг: logrotate -d /etc/logrotate.d/example logrotate -d /etc/logrotate.d/example-app - выполнить проверку example-app logrotate -d /etc/logrotate.d/rsyslog.conf - выполнить проверку rsyslog.conf logrotate /etc/logrotate.conf --debug - можно выполнить тестирование конфигурации Если всё в порядке, то запускайте утилиту в боевом режиме: logrotate -v -f /etc/logrotate.d/example Если вы хотите заставить LogRotate производить ротацию файла журнала, тогда надо использовать флаг –force: logrotate /home/testing/logrotate.conf --state /home/testing/logrotate-state --verbose --force cat /var/lib/logrotate/status - информация о том, что и когда ротировал logrotate Подстройка расписания под себя: /etc/cron.d/logrotate_apache2 ------------ 0/30 * * * * root /usr/sbin/logrotate /etc/logrotate.d/apache2 ------------ |
Ссылки
1 2 3 |
http://loganalyzer.adiscon.com/downloads/ - последние версии тут https://loganalyzer.adiscon.com/articles/how-to-upgrade-loganalyzer/ - офф инструкция по обновлению https://github.com/rsyslog/loganalyzer - разработака на гите |
Обновление
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
0. !!! Перед обновление обезательно делаем бэкап. !!! ну хотябы так tar -cvzf loganalyzer.tar.bz2 /var/www/loganalyzer 1. переходим в любой каталог cd /root - перешли в каталог root 2. Скачиваем дистрибутив wget http://download.adiscon.com/loganalyzer/loganalyzer-4.1.11.tar.gz - скачиваем новый дистрибутив lofanalyzer 3. распаковываем tar -xvf loganalyzer-4.1.11.tar.gz - распаковываем архив 4. Обновляем loganalyzer !!! например просто перемещаем содержимое ранее скаченного архива !!! mv /root/loganalyzer-4.1.11/* /var/www/loganalyzer - обновляем loganalyzer P.S. Еще есть вариант обновлять через git git https://github.com/rsyslog/loganalyzer.git |
Создаем пустую базу loganalyzer:
1 2 3 4 |
mysql -u root -p - открываем консоль mysql CREATE DATABASE loganalyzer; - создать базу GRANT ALL PRIVILEGES ON loganalyzer.* TO 'loganalyzer'@'localhost' IDENTIFIED BY 'log_password'; - создать нового пользователя и дать ему доступ flush privileges; - применим привилегии |
Установка
1 2 3 4 5 6 7 8 9 10 11 12 13 |
!!! LAMP уже должен быть установлен http://loganalyzer.adiscon.com/tag/download/ - страница дистрибутива cd /var/www - переходим в каталог /var/www wget http://download.adiscon.com/loganalyzer/loganalyzer-4.1.5.tar.gz - скачиваем loganalyzer tar zxvf loganalyzer-4.1.5.tar.gz - распаковываем cd loganalyzer-4.1.5 - входим в только что распакованный каталог cp -r src/ /var/www/html/loganalyzer - копируем дистрибутив loganalyzer cp -r contrib/* /var/www/html/loganalyzer/ - копируем дистрибутив loganalyzer cd /var/www/html/loganalyzer/ - переходим в каталог /var/www/html/loganalyzer/ rm configure.sh secure.sh - разрешаем выполнение файлов configure.sh secure.sh touch config.php - создаем файл конфигурации chmod 777 config.php - даем полные права на редактирование chmod 666 config.php - убираем права на запись / даем права 666 config.php |
Шаги установки
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 |
------------------------------------------------------ 1. создаем базу для loganalyzer 2. очистим файл конфигурации /etc/loganalyzer/config.php 3. Теперь мы можем установить loganalyzer со воими настройками в браузере откроем http://server_name/loganalyzer/install.php Step 1 - жмем next Step 2 - жмем next Step 3 Basic configuration - заполняем (рекомендую создать свою базу loganalyzer) ------------------------------------------------------ database host - localhost database port - 3306 database name - loganalyzer databasr user - loganalyzer table prefix - пофиг database password - наш пароль Require user to be logged in - yes (позволит создать пароль для входа) ------------------------------------------------------ Step 4 Create tables - создать таблицы для loganalyzer Step 5 - тут нам напишут удалось или нет Step 6 Create The Main Useraccount - создаем пользователя для логина Step 7 Create the first source for syslog messages - Подключаем базу с логами cat /etc/rsyslog.conf - если требуется смотрим rsyslog параметры базы ------------------------------------------------------ source name - Любое source type - MYSQL Native select view - Syslog Fields table type - MonitorWare database host - localhost database port - 3306 database name - Syslog database tablename - SystemEvents databasr user - rsyslogdbadmin database password - наш пароль ------------------------------------------------------ |
Установка кодировки
1 |
Admin Center -> Preferences -> Default character encoding -> UTF8 |
Не забываем после установки убрать права на конфиг:
1 2 |
cd /var/www/html/loganalyzer/ - перешли в каталог loganalyzer chmod 644 config.php - убираем права |
Ручная чистка базы:
1 2 3 4 |
Очистка логов вручную если не сработало авто find / -name maintenance.php - ищем скрипты обслуживания loganalyzer cd /var/www/html/loganalyzer/cron - переход примерное расположение скриптов обслуживания php ./maintenance.php cleandata 1 olderthan 20 02 2018 - очистка базы до 20.02.2018 |
Скрипт очистки базы
1 2 3 |
#!/bin/sh cd /var/www/html/loganalyzer/cron/ php ./maintenance.php cleandata 1 olderthan 2592000 |
ссылки:
1 2 3 4 5 6 7 8 |
https://www.zabbix.com/wiki/non-english/ru/installation/debian - Установка Zabbix на Debian https://www.zabbix.com/documentation/2.0/ru/manual/concepts/agent - Агент https://www.zabbix.com/documentation/2.4/manual/installation/install_from_packages - установка из пакетов https://www.zabbix.com/documentation/2.0/ru/manual/discovery/network_discovery/rule - Настройка правил https://www.zabbix.com/documentation/2.0/ru/manual/appendix/install/windows_agent - Установка Zabbix Windows агента https://www.zabbix.com/documentation/3.0/ru/manual/config/visualisation/maps/map - графики http://blog.denisbondar.com/post/vsphere-esxi-zabbix - мануал по настройке мониторинга для ESXI https://wiki.mikrotik.com/wiki/Manual:SNMP - snmp mikrotik |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
LAMP(Linux Apache MySQL PHP) должен быть уже установлен wget http://repo.zabbix.com/zabbix/2.2/debian/pool/main/z/zabbix-release/zabbix-release_2.2-1+wheezy_all.deb dpkg -i zabbix-release_2.2-1+wheezy_all.deb apt-get update apt-get install zabbix-server-mysql zabbix-frontend-php apt-get install zabbix-agent для клиентских пк http ://youre_server_ip/zabbix Apache configuration file for Zabbix frontend is located in /etc/apache2/conf.d/zabbix. Some PHP settings are already configured. php_value max_execution_time 300 php_value memory_limit 128M php_value post_max_size 16M php_value upload_max_filesize 2M php_value max_input_time 300 php_value date.timezone Europe/Moscow |
VSPHERE ESXI 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 |
0. Следующий этап — настройка файла zabbix_server.conf. Включите следующие опции: StartVMwareCollectors = 1 VMwareCacheSize = 8M VMwareFrequency = 60 1. Создаем узел ESXi После импорта шаблонов можно приступить к созданию узла сети. Как обычно создаем новый узел сети в Zabbix: Настройка — Узлы сети — Создать узел сети. На вкладке Узел сети заполняем всю необходимую информацию: Имя узла, видимое имя, группа. IP-адрес здесь можно не указывать, так как ни одно стандартное средство для данного узла работать не будут. 2. На вкладке Шаблоны подключам один единственный шаблон: Template Virt VMware 3.Затем на вкладе Макросы создаем три макроса: {$URL} — в значении указываем URL https://IP-адрес-ESXi/sdk (не забудьте тут указать IP-адрес вашей ESXi. {$USERNAME} — в значении указываем имя пользователя {$PASSWORD} — в значении указываем пароль пользователя 4.Рекомендую в ESXi создать отдельного пользователя на самом верхнем уровне иерархии (в vSphere Client) с правами read only. 5.Спустя минимум час наблюдаем добавление виртуальных машин и гипервизора в Zabbix. Для этого переходим в меню: Настройка — Узлы сети и справа выбираем группу Hypervisors или Virtual Machines. Если у вас есть кластеры, то Zabbix создаст группы по кластерам автоматически. Если все появилось, то наблюдаем за собираемыми данными в меню: Мониторинг — Последние данные. |
Нагрузочный тест
1 2 3 |
https://www.zabbix.com/documentation/3.0/ru/manual/quickstart/notification cat /dev/urandom | md5sum |
Для настройки:
1 2 3 |
UDP:161 - для опросов UDP:162 - для получения трапов Для корректной работы v3 не забывайте указывать в настройках engine-id |
Сборка и просмотр логов
rsyslog — колектор логов
loganalyzer — просмотр логов
Источники:
1 2 3 4 5 6 7 8 9 10 11 12 |
http://www.k-max.name/linux/rsyslog-na-debian-nastrojka-servera/ - подробно о rsyslog https://habrahabr.ru/post/125410/ https://wiki.yola.ru/evtsys:evtsys https://habrahabr.ru/post/213519/ https://code.google.com/archive/p/eventlog-to-syslog/downloads - клиент для windows http://yakim.org.ua/articles/servers/113-rsyslog-loganalizer.html http://nolabnoparty.com/en/install-rsyslog-loganalyzer/ https://habrahabr.ru/post/321262/ http://terraltech.com/syslog-server-with-rsyslog-and-loganalyzer/ https://letsclearitup.com.ua/debian/sbor-i-prosmotr-logov-s-pomoshhyu-loganalyzer.html http://www.k-max.name/linux/syslogd-and-logrotate/ http://viking-k.livejournal.com/23689.html |
Установка коллектора логов:
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. rsyslog - по умолчанию установлен в debian и в дистрибутивах на его основе( например ubuntu -> linuxmint) apt-get install rsyslog - установка rsyslog 1. Приём на сервере nano /etc/rsyslog.conf В /etc/rsyslog.conf должны быть раскомментированы строки: ------------------------------------------------------ $ModLoad imudp $UDPServerRun 514 $ModLoad imtcp $InputTCPServerRun 514 ------------------------------------------------------ Файлы rsyslog /etc/default/rsyslog - файл задает опции, передаваемые демону rsyslogd при запуске /etc/init.d/rsyslog - стартовый скрипт /etc/logrotate.d/rsyslog - настройки ротации логов /etc/rsyslog.conf - основной конфиг /usr/lib/rsyslog/* - библиотеки для работы сислога /usr/sbin/rsyslogd - бинарник демона, который работает в фоне /usr/share/doc/rsyslog/* - файлы документации 2. Перечитываем настройки /etc/init.d/rsyslog restart 3. Нам требуется установить rsyslog-mysql для хранения логов в mysql !!! Внимание запоминаем все введенные данные (логины, пароли) apt-get install rsyslog-mysql P.s. На случай забывчивости dpkg-reconfigure rsyslog-mysql |
Установка loganalyzer — просмотр логов
Можно подключить любую базу с логами (текс, mysql, и т.д.)
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 |
0. Установка apt-get install apache2 php5 php5-mysql php5-gd phpmyadmin - ставим LAMP apt-get install loganalyzer - ставим loganalyzer 1. создаем базу для loganalyzer 2. очистим файл конфигурации /etc/loganalyzer/config.php 3. Теперь мы можем установить loganalyzer с настройками в браузере откроем http://server_name/loganalyzer/install.php Step 1 - жмем next Step 2 - жмем next Step 3 Basic configuration - заполняем (рекомендую создать свою базу loganalyzer) ------------------------------------------------------ database host - localhost database port - 3306 database name - loganalyzer databasr user - loganalyzer table prefix - пофиг database password - наш пароль Require user to be logged in - yes (позволит создаст пароль для входа) ------------------------------------------------------ Step 4 Create tables - создать таблицы для loganalyzer Step 5 - тут нам напишут удалось или нет Step 6 Create The Main Useraccount - создаем пользователя для логина Step 7 Create the first source for syslog messages - Подключаем базу с логами cat /etc/rsyslog.d/mysql.conf - если требуется смотрим rsyslog параметры базы ------------------------------------------------------ database host - localhost database port - 3306 database name - Syslog database tablename - SystemEvents databasr user - rsyslog database password - наш пароль ------------------------------------------------------ P.S. Файлы : /etc/rsyslog.d/mysql.conf - тут можно подсмотреть параметры подключения к mysql у rsyslog /etc/loganalyzer/config.php - файл конфигурации /usr/share/doc/loganalyzer - документация /usr/share/loganalyzer - каталог с файлами loganalyzer http://server_name/loganalyzer/ - вход в loganalyzer http://server_name/loganalyzer/install.php - установочный скрипт (следует удалить после настройки) |
Установка клиента для windows
брать тут:
1 |
https://code.google.com/archive/p/eventlog-to-syslog/downloads |
1 2 3 4 5 |
copy evtsys.* %systemroot%\system32 %systemroot%\system32\evtsys.exe -i -h hostname_ip -s 240 net start evtsys |
Параметры evtsys.exe
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 |
evtsys.exe -i -h 192.168.1.246 evtsys.exe -i -l 0 -h 192.168.1.246 ------------------------------------------------------ -i Установить сервис -u Удалить сервис -d Режим отладки. Запуститься как консольная программа -h syslog Имя хоста куда отправлять логи -b syslog2 Имя второго хоста кому дублировать логи -f 3 Facility -l 0 Минимальный уровень отсылаемых сообщений: 0=Всё, 1=Критические, 2=Ошибки, 3=Предупреждение, 4=Информация -n Отправлять только события включенные в evtsys.cfg -p 514 Номер порта syslog -q 0 Опросить DHCP чтобы получить имя хоста syslog и порт. 0=Включить, 1=Выключить -s 60 Интервал между сообщениями о статусе (в минутах). 0=Отключить ------------------------------------------------------ Facility -f 0 kernel messages 1 user-level messages 2 mail system 3 system daemons 4 security/authorization messages 5 messages generated internally by syslogd 6 line printer subsystem 7 network news subsystem 8 UUCP subsystem 9 clock daemon 10 security/authorization messages 11 FTP daemon 12 NTP subsystem 13 log audit 14 log alert 15 clock daemon 16 local use 0 (local0) 17 local use 1 (local1) 18 local use 2 (local2) 19 local use 3 (local3) 20 local use 4 (local4) 21 local use 5 (local5) 22 local use 6 (local6) 23 local use 7 (local7) |
Установка клиента rsyslog linux ( передаем на другой сервер rsyslog)
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 |
0) Установим (на debian скорее уже он установлен) apt-get install rsyslog 1) редактируем rsyslog.conf добавим строку *.* @@192.168.1.51 nano /etc/rsyslog.conf ------------------------------------------------------ ---конфиг--- *.* @@192.168.1.51 *.* @@nagios.b14esh.com ---конфиг--- ------------------------------------------------------ Описание: *.* — описание всех логов по важности и программах, которые их пишет. @@ — отсылать логи по TCP @ — отсылать логи по UDP 192.168.1.51 — сервер, на который будут направлены логи. service rsyslog restart Звездочка перед точкой соответствует любому источнику, после точки - любому уровню. Слово none после точки - никакому уровню для данного источника. Можно указывать несколько источников в одном селекторе (через запятую). *.*;auth,authpriv.none -/var/log/syslog *.*;auth,authpriv.none;cron.none -/var/log/syslog Источник (он же категория) может быть следующим: ------------------------------------------------------ 0 - kern - Сообщения ядра 1 - user - Сообщения пользовательских программ 2 - mail - Сообщения от почтовой системы. 3 - daemon - Сообщения от тех системных демонов, которые в отличие от FTP или LPR не имеют выделенных специально для них категорий. 4 - auth - Все что связано с авторизацией пользователей, вроде login и su (безопасность/права доступа) 5 - syslog - Система протоколирования может протоколировать сообщения от самой себя. 6 - lpr - Сообщения от системы печати. 7 - news - Сообщения от сервера новостей. (в настоящее время не используется) 8 - uucp - Сообщения от UNIX-to-UNIX Copy Protocol. Это часть истории UNIX и вероятнее всего она вам никогда не понадобится (хотя до сих пор определенная часть почтовых сообщений доставляется через UUCP). 9 - cron - Сообщения от системного планировщика. 10 - authpriv - То же самое, что и auth, однако сообщения этой категории записываются в файл, который могут читать лишь некоторые пользователи (возможно, эта категория выделена потому, что принадлежащие ей сообщения могут содержать открытые пароли пользователей, которые не должны попадать на глаза посторонним людям, и следовательно файлы протоколов должны иметь соответствующие права доступа). 11 - ftp - При помощи этой категории вы сможете конфигурировать ваш FTP сервер, что бы он записывал свои действия. 12 - NTP - сообщения сервера времени 13 - log audit 14 - log alert 15 - clock daemon - сообщения демона времени с 16 по 23 local0\local7 - Зарезервированные категории для использования администратором системы. Категория local7 обычно используется для сообщений, генерируемых на этапе загрузки системы. mark (не имеющая цифрового эквивалента) - присваивается отдельным сообщениям, формируемым самим демоном syslogd ------------------------------------------------------ Под приоритет (степени важности) сообщений заданы 8 уровней важности, которые кодируются числами от 0 до 7: ------------------------------------------------------ 0 - emerg (старое название PANIC) - Чрезвычайная ситуация. Система неработоспособна. 1 - alert - Тревога! Требуется немедленное вмешательство. 2 - crit - Критическая ошибка (критическое состояние). 3 - err (старое название ERROR) - Сообщение об ошибке. 4 - warning (старое название WARN) - Предупреждение. 5 - notice - Информация о каком-то нормальном, но важном событии. 6 - info - Информационное сообщение. 7 - debug - Сообщения, формируемые в процессе отладки. ------------------------------------------------------ |
Очистка базы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Очистка базы данных от лишней информации возможна двумя способами: 1. Вручную.В web-интерфейсе заходим в Центр администрирования, выбираем Источники данных и в открывшемся списке источников изем иконку с изображением мусорного ведерка. Дальше все делается в соответствующем мастере. 2.Автоматически. cd /var/www/loganalyzer/cron chmod +x maintenance.sh nano maintenance.sh cd /var/www/loganalyzer/cron/ php ./maintenance.php cleandata 1 olderthan 2592000 crontab -e # Удаляем лишнее из BD loganalyzer 1 3 * * * /var/www/loganalyzer/cron/maintenance.sh >> /tmp/maintenance.log |
как работают логи / logrotate / укорачивание
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Системный журнал постоянно растёт. Это значит, что каков бы ни был размер файловой системы /var, она в конце концов заполнится журналами под завязку — если как-то их не укорачивать. К сожалению, в Linux укоротить файл от начала, отрезав самые старые записи, нельзя, как нельзя и добавлять новые записи в начало файла. Эти операции легко реализовать с помощью копирования нужной области в новый файл и последующего переименования, но, во-первых, соблюсти атомарность таких составных операций нелегко, а во-вторых, они требуют удвоенного места в файловой системе на время работы (и, стало быть, каких-то аварийных процедур на случай нехватки места). Поэтому в Linux принят другой, существенно менее ресурсоёмкий алгоритм, помогающий избежать переполнения /var, т.е. «прокручивание» системных журналов. Суть алгоритма в следующем: когда настаёт пора укоротить журнал (например, раз в неделю или если файл журнала достиг определённого размера), этот файл переименовывают, и открывают новый пустой файл с тем же именем. Если хранить несколько (скажем, семь) переименованных старых фай-лов, с ними уже можно производить операцию «отбрасывания старого», самый старый — седьмой — файл удаляется, шестой переименовывается в седьмой, пятый — в шестой, и т.д. до первого (моложе которого только текущий журнал), который переименовывается во второй. Только тогда можно переименовать текущий журнал в «первый старый», и открыть новый. Получается очередь устаревающих файлов, пополняемая с одной стороны и усекаемая с другой. Как правило имя «первого старого» журнала получается добавлением к имени журнала суффикса *.1, второго —*.2 и т.д. Прокручиванием системных журналов занимается утилита logrotate, которая тоже управляется конфигурационным файлом /etc/logrotate.conf и в 64-каталогом /etc/logrotate.d/. Согласно настройкам, старые файлы можно сжимать упаковщиками bzip2 (как в примере) или gzlp, можно задавать им определённые права доступа, можно посылать сигнал некоторой службе (чтобы она заметила подмену журнала, если она сама, а не syslogd занимается его пополнением) и т. п. |
Для уровней важности, приняты следующие обозначения:
1 2 3 4 5 6 7 8 |
0: emergency (неработоспособность системы) 1: alerts (предупреждения, требующие немедленного вмешательства) 2: critical (критическое состояние) 3: errors (ошибки) 4: warning (предупреждения) 5: notice (уведомления) 6: info (информационные сообщения) 7: debug (отладочные сообщения) |
Systemd:
1 2 3 4 |
Systemd состоит из трех основных компонентов: systemd - менеджер системы и сервисов systemctl - утилита для просмотра и управление статусом сервисов systemd-analyze - предоставляет статистику по процессу загрузки системы, проверяет корректность unit-файлов и так же имеет возможности отладки systemd |
journalctl
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 |
journalctl --list-boots - просмотреть журналов загрузки journalctl -b - история с момента запуска системы journalctl -b 0 - просмотреть журнал начиная с текущего старта системы journalctl -b -1 - просмотреть журнал предыдущей загрузки journalctl -p 0 - посмотреть события emergency journalctl -p 2, journalctl покажет все сообщения с уровнями 2, 1 и 0. (alerts, emergency, critical) journalctl -f - чтобы следить за логами journalctl -xe - открыть журнал на последней записи journalctl _UID=0 - следить за логами пользователя с UID=0 journalctl _COMM=sshd - поиск по sshd journalctl _COMM=sshd -o json-pretty поиск по sshd в JSON journalctl _COMM=cron - история запуска по cron journalctl _COMM=cron --since=«date» --until="date" - история запуска по cron journalctl -k - посмотреть сообщения от ядра Linux за текущую загрузку journalctl --since «2015-01-10» --until "2015-01-11 03:00" - просмотр журнала за определенный период времени journalctl --since 09:00 --until «1 hour ago» - просмотр журнала за определенный период времени (с 9 утра и до момента, час назад) journalctl --since yesterday - просмотр журнала за определенный период времени (со вчерашнего дня) journalctl --disk-usage journalctl --vacuum-size=1G systemctl list-units --type=service - покажет названия сервисов journalctl -u NAME.service - просмотреть логи от NAME.service journalctl -u NetworkManager.service - просмотреть логи от NetworkManager.service !!! можно просмотреть лог приложения, указав его исполняемый файл journalctl /usr/sbin/nginx --since today - просмотреть все сообщения от nginx за сегодня |
Ограничение размера журнала / Удаление журналов
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Ограничение размера журнала: Если journald настроен что бы сохранять журналы после перезагрузки, то по умолчанию размер журнала ограничен 10% от объема файлового раздела и максимально может занять 4 Гб дискового пространства. Максимальный объем журнала можно скорректировать, раскомментировав и отредактировав следующий параметр в файле конфигурации journald: ---------------- SystemMaxUse=50M ---------------- Удаление журналов: Удалить файлы архивных журналов, можно вручную с помощью rm или использовав journalctl. journalctl --vacuum-size=100M - удалить журналы, оставив только последние 100 Мб journalctl --vacuum-time=7d - удалить журналы, оставив журналы только за последние 7 дней |
dmesg
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 |
gnome-system-log -в squeeze dmesg > dmesg.txt lspci -v > lspci.txt cp /var/log/Xorg.0.log ~ dmesg | more - все устройства dmesg | less - все устройства dmesg | grep -i pci - команда выводит список всех устройств PCI dmesg | grep -i isa - команда выводит список всех устройств ISA dmesg | grep -i memory - память dmesg | grep -i scsi - команда выводит список всех устройств scsi dmesg | grep -i usb - команда выводит список всех устройств usb dmesg | grep -i tty - консоль\терминал\ввод dmesg | grep -i cpu - процессор cat /var/lib/dhcp/dhcpd.leases - посмотреть какие адреса раздал dhcpd (DHCP сервер) cat /proc/net/dev - сеть какие пакеты передаются tail -f /var/log/messages - следим за логами системы tail -fn0 /var/log/messages - следим за /var/log/messages ( n0 - выведет при запуске 0 строк и увидим новые записи в файле ) tail -fn0 /var/log/auth.log - следим за изменениями в лог файле /var/log/auth.log tail -n 20 /var/log/messages - General message and system related stuff tail -n 20 /var/log/auth.log - Authenication logs tail -n 20 /var/log/kern.log - Kernel logs tail -n 20 /var/log/cron.log - Crond logs (cron job) tail -n 20 /var/log/maillog - Mail server logs tail -n 20 /var/log/qmail/ - Qmail log directory (more files inside this directory) tail -n 20 /var/log/apache2/access.log -Apache access and error logs directory tail -n 20 /var/log/apache2/error.log -Apache access and error logs directory tail -n 20 /var/log/apache2/other_vhosts_access.log -Apache access and error logs directory tail -n 20 /var/log/lighttpd -Lighttpd access and error logs directory tail -n 20 /var/log/boot.log -System boot log tail -n 20 /var/log/mysqld.log -MySQL database server log file tail -n 20 /var/log/secure -Authentication log tail -n 20 /var/log/yum.log -Yum log files tail -n 20 /var/log/utmp -Login records file tail -n 20 /var/log/wtmp -Login records file grep cron /var/log/syslog - история запуска по cron |
Boot log / Лог загрузки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Лог загрузки Debian Lenny Иногда необходимо внимательно почитать информацию которая выводиться при загрузке системы. Сделать это можно двумя простыми способами: 1. Во время загрузки нажмите комбинацию клавиш Ctrl + S вывод будет приостановлен для продолжения загрузки нажмите комбинацию Ctrl + Q 2. Активировать запись лога и читать его после загрузки Отредактируем файл bootlogd su sed -i 's/No/Yes/' /etc/default/bootlogd Разрешим пользователю читать логи, где MyUser ваш логин: usermod -aG adm MyUser reboot Читаем лог: more /var/log/boot less /var/log/boot |
чистим логи:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
редактируются обычным редактором /var/log/messages - что делал юзер /var/adm/messages - что делал юзер /var/log -демоны редактируются командами /var/log/wtmp - время сколько проработал юзер /var/run/utmp - время сколько проработал юзер вот такими командами echo -ne > /var/log/wtmp echo -ne > /var/run/utmp .bash_history находиться в домашнем каталоге юзера .mc/history находиться в домашнем каталоге юзера cat /dev/null > /var/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 27 28 |
grep francois myfile.txt - показывает строки, содержащие слово francois из файла myfile.txt grep 404 /var/log/httpd/access_log - показывает строки, содержащие число 404 из /var/log/httpd/access_log ps auwx | grep init - показывает строки init из выхода ps ps auwx | grep "\[*\]" - показывает команды, заключенные в скобки dmesg | grep "[ ]ata\|^ata" - показывает информацию об устройстве ядра ata grep -Rl Virtual Host /etc/httpd/conf* - показывает строки Virtual Host grep -v 200 /var/log/httpd/access_log* - отображает строки, не содержащие число 200 ps auwx | grep "[i]nit" - процесс grep показан не будет tail -n 15 myfile.txt - отображает последние 15 строк файла tail -15 myfile.txt - выводит последние 15 строк файла ps auwx | tail -n 15 - отображает последние 15 строк выхода команды ps tail -f /var/log/messages - просматривает системные сообщения в режиме реального времени tail -f /var/1og/maillog - просматривает сообщения почтового севера в режиме реального времени tail -f /var/1og/httpd/access_log - просматривает сообщения веб-сервера в режиме реального времени wc -позволяет подсчитывать количество полученных строк, слов, байт в файле grep 192.198.1.1 /var/log/httpd/access-log | wc -l - отображает количество записей конкретного IP-адреса в файле журнала Apache wc /var/log/dmesg - отображает счетчики для одного файла wc /var/log/*.log - отображает отдельные значения для каждого файла и общие для всех файлов Вы можите просматривать любой журнал логов вручную(cat, vi, nano, tail, less) Однако установив пакет logwatch, вы будете получать более существенную информацию из журнала файлов в почтовый ящик root(etc/cron.daily/0logwatch - настройки отправки) |
CentOS 7:
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 |
yum update - получить список обновлений yum upgrade - обновить пакеты yum -y install epel-release - добавить репозиторий epel yum provides "*bin/top" - найти пакет, который содержит файл ip addr show - показать ip адрес ps -uax - показать все процессы iptables -S - действующие правила ss -tuna - все о соединениях _________________________________________ sestatus - проверка включен ли selinux getsebool -a - показать все доступные правила /etc/selinux/config - конфиг selinux enforsing - принудительный режим permissive - режим предупреждения _________________________________________ Отключение Selinux: vi /etc/selinux/config #SELINUX=enforcing SELINUX=disabled _________________________________________ systemctl disable firewalld - выключаем авто запуск firewalld systemctl stop firewalld - выключаем firewalld systemctl - показать все демоны и их статус firewall-cmd --permanent --list-all - показать все правила firewall-cmd --permanent --zone=public --add-port=80/tcp - разрешить порт 80/tcp зона public firewall-cmd --permanent --zone=public --add-service=http - разрешить порт http зона public firewall-cmd --permanent --zone=public --add-service=https - разрешить порт https зона public firewall-cmd --permanent --zone=public --add-port=2234/tcp - разрешить порт 2234/tcp зона public firewall-cmd --zone=public --add-port=5059-5061/udp - разрешить диапазон портов 5059-5061/udp firewall-cmd --permanent --add-port=3128/tcp - разрешить порт 3128/tcp firewall-cmd --permanent --add-port=514/tcp - разрешить порт 514/tcp firewall-cmd --permanent --add-port=514/udp - разрешить порт 514/udp firewall-cmd --permanent --add-port=http/tcp - разрешить порт http/tcp firewall-cmd --permanent --add-port=https/tcp - разрешить порт https/tcp firewall-cmd --permanent --add-port=ssh/tcp - разрешить порт ssh/tcp firewall-cmd --reload - перезагрузить и применить изменения _________________________________________ systemctl status rsyslog - посмотреть статус rsyslog systemctl start httpd - запустить httpd systemctl enable httpd - включить автозагрузку httpd systemctl kill mysql - убить службу systemctl reload httpd - перезагружаем веб сервер _________________________________________ sysctl -a - показать текущие значения sysctl -p - принять изменения в sysctl.conf без перезагрузки sysctl -w net.ipv6.conf.all.disable_ipv6=1 - выключить ipv6 sysctl -w net.ipv6.conf.default.disable_ipv6=1 - выключить ipv6 _________________________________________ timedatectl set-timezone Europe/Moscow - установить временную зону Europe/Moscow _________________________________________ hostnamectl set-hostname Your-New-Host-Name-Here - задать имя пк |
LAMP:
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 |
yum -y install httpd - ставим вебсервер apache yum -y install httpd-tools - ставим тулзы для httpd systemctl enable httpd.service - включить автозагрузку httpd systemctl start httpd.service - запустить yum -y install php - ставим php yum -y install php-mysql php-common php-mbstring php-gd php-ldap php-odbc php-pear php-xml php-soap php-xmlrpc php-snmp php-mcrypt php-devel php-xml curl curl-devel - ставим модули для php yum -y install wget.x86_64 yum -y install mariadb-server mariadb mariadb-devel - установка mariadb.service systemctl enable mariadb.service - включить автозагрузку mariadb.service systemctl start mariadb.service - запустить mariadb.service _________________________________________ vi /etc/my.cnf -файл основных настроек [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid #add bind-address=127.0.0.1 character-set-server=utf8 _________________________________________ mysql_secure_installation - команда начальной настройки (пароль для рута) Set root password? [Y/n] y - ставим пароль Remove anonymous users? [Y/n] y - убрать анонимусов Disallow root login remotely? [Y/n] y - отключить вход рутом из сети Remove test database and access to it? [Y/n] y - удалить тест базу Reload privilege tables now? [Y/n] y - обновить привилегии systemctl reload mariadb.service - перезапустить mariadb.service _________________________________________ yum -y install phpmyadmin - установка phpMyAdmin nano /etc/httpd/conf.d/phpMyAdmin.conf -----------------------CUT---------------------------- <Directory /usr/share/phpMyAdmin/> AddDefaultCharset UTF-8 <IfModule mod_authz_core.c> # Apache 2.4 <RequireAny> Require ip 127.0.0.1 - разрешаем подключения с IP Require ip 10.0.0.0/24 - разрешаем подключения с IP </RequireAny> </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 - разрешаем подключения с IP Allow from 10.0.0.0/24 - разрешаем подключения с IP </IfModule> </Directory> <Directory /usr/share/phpMyAdmin/setup/> <IfModule mod_authz_core.c> # Apache 2.4 <RequireAny> Require ip 127.0.0.1 - разрешаем подключения с IP Require ip 10.0.0.0/24 - разрешаем подключения с IP </RequireAny> </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 - разрешаем подключения с IP Allow from 10.0.0.0/24 - разрешаем подключения с IP </IfModule> </Directory> -----------------------CUT---------------------------- _________________________________________ |
rsyslog:
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 |
!!! В centOS 7 rsyslog уже установлен и включен yum install -y rsyslog-mysql.x86_64 rsyslog-doc.x86_64 - дополнительные файлы systemctl status rsyslog - проверяем состояние rsyslog systemctl start rsyslog - запускаем rsyslog systemctl enable rsyslog - включаем автозагрузку для rsyslog mysql -u root -p < /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql - создадим базу _________________________________________ /etc/rsyslog.conf - файл настроек rsyslog # Provides UDP syslog reception $ModLoad imudp - найти и раскомментировать $UDPServerRun 514 - найти и раскомментировать # Provides TCP syslog reception $ModLoad imtcp - найти и раскомментировать $InputTCPServerRun 514 - найти и раскомментировать # Load the MeSQL Module module(load="ommysql") *.* :ommysql:127.0.0.1,Syslog,rsyslogdbadmin,пароль_PasswordHere - настраиваем выгрузку в базу Syslog _________________________________________ mysql -u root -p Syslog - подключаемся к базе Syslog GRANT ALL ON Syslog.* TO rsyslogdbadmin@localhost IDENTIFIED BY 'PasswordHere'; FLUSH PRIVILEGES; exit _________________________________________ mysql -u rsyslogdbadmin -p Syslog - проверим разрешения для пользователя rsyslogdbadmin _________________________________________ |
Создаем пустую базу loganalyzer:
1 2 3 4 |
mysql -u root -p - открываем консоль mysql CREATE DATABASE loganalyzer; - создать базу GRANT ALL PRIVILEGES ON loganalyzer.* TO 'loganalyzer'@'localhost' IDENTIFIED BY 'log_password'; - создать нового пользователя и дать ему доступ flush privileges; - применим привилегии |
loganalyzer:
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 |
http://loganalyzer.adiscon.com/tag/download/ - страница дистрибутива cd /var/www - переходим в каталог /var/www wget http://download.adiscon.com/loganalyzer/loganalyzer-4.1.5.tar.gz - скачиваем loganalyzer tar zxvf loganalyzer-4.1.5.tar.gz - распаковываем cd loganalyzer-4.1.5 - входим в только что распакованный каталог cp -r src/ /var/www/html/loganalyzer - копируем дистрибутив loganalyzer cp -r contrib/* /var/www/html/loganalyzer/ - копируем дистрибутив loganalyzer cd /var/www/html/loganalyzer/ - переходим в каталог /var/www/html/loganalyzer/ rm configure.sh secure.sh - удаляем выполнение файлов configure.sh secure.sh touch config.php - создаем файл конфигурации chmod 777 config.php - даем полные права на редактирование Входим веб клиентом на http://ip_server/loganalyzer и настраиваем: ------------------------------------------------------ 1. создаем базу для loganalyzer 2. очистим файл конфигурации /etc/loganalyzer/config.php 3. Теперь мы можем установить loganalyzer со своими настройками в браузере откроем http://server_name/loganalyzer/install.php Step 1 - жмем next Step 2 - жмем next Step 3 Basic configuration - заполняем (рекомендую создать свою базу loganalyzer) ------------------------------------------------------ database host - localhost database port - 3306 database name - loganalyzer databasr user - loganalyzer table prefix - пофиг database password - наш пароль Require user to be logged in - yes (позволит создать пароль для входа) ------------------------------------------------------ Step 4 Create tables - создать таблицы для loganalyzer Step 5 - тут нам напишут удалось или нет Step 6 Create The Main Useraccount - создаем пользователя для логина Step 7 Create the first source for syslog messages - Подключаем базу с логами cat /etc/rsyslog.conf - если требуется смотрим rsyslog параметры базы ------------------------------------------------------ source name - Любое source type - MYSQL Native select view - Syslog Fields table type - MonitorWare database host - localhost database port - 3306 database name - Syslog database tablename - SystemEvents databasr user - rsyslogdbadmin database password - наш пароль ------------------------------------------------------ Admin Center -> Preferences -> Default character encoding -> UTF8 _________________________________________ chmod 644 config.php - убираем права |
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 |
###zabbix22-server-mysql.x86_64 zabbix22-web-mysql.noarch - в репозитории CentOS7 версия 2.2 :) ее мы ставить не будем .... ###https://www.zabbix.com/download?zabbix=4.2&os_distribution=red_hat_enterprise_linux&os_version=7&db=mysql ________________________________________ rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-1.el7.centos.noarch.rpm - добавляем репозиторий yum install zabbix-server-mysql zabbix-web-mysql - ставим из добавленного репозитория 3.4 ________________________________________ Создаем базу и заполняем ее: mysql -u root -p - открываем консоль mysql create database zabbix character set utf8; - создаем базу и установим кодировку utf8 GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost' IDENTIFIED BY 'Пароль'; - создать нового пользователя и дать ему доступ flush privileges; - применим привилегии exit; - выходим из mysql ________________________________________ !!! Внимание каталог "/usr/share/doc/zabbix-server-mysql-3.?.?" может отличатся из за новой версии. zcat /usr/share/doc/zabbix-server-mysql-3.4.3/create.sql.gz | mysql -u root -p zabbix - заливаем базу ________________________________________ nano /etc/zabbix/zabbix_server.conf - конфиг файл для базы Изменяем строки: DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword= Пароль _______________________________________ nano /etc/httpd/conf.d/zabbix.conf - открываем и редактируем: php_value max_execution_time 300 php_value memory_limit 128M php_value post_max_size 16M php_value upload_max_filesize 2M php_value max_input_time 300 php_value date.timezone Europe/Moscow - раскоментить и установить правильную timezone _______________________________________ systemctl reload httpd - перезапуск веб сервера systemctl start zabbix-server systemctl enable zabbix-server ______________________________________ http://ip_or_dns_name/zabbix - админка и первоначальная настройка Пароль по умолчанию: Admin:zabbix ______________________________________ |
Установка агента zabbix на CentOS7:
1 2 3 |
yum install -y zabbix-agent - установка агента systemctl start zabbix-agent - запуск агента systemctl enable zabbix-agent - добавление в автозагрузку |
Установка агента zabbix на debian:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
apt update apt upgrade apt install zabbix-agent - установка агента systemctl start zabbix-agent - запуск агента systemctl enable zabbix-agent - добавление в автозагрузку nano /etc/zabbix/zabbix_agentd.conf - редактируем и исправляем строки ---------------------------------- Server=192.168.15.246 - ip нашего сервера zabbix #ServerActive=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; |
Установка evtsys(rsyslog) клиента для windows
1 2 3 4 5 6 7 8 |
0. Скачиваем: https://code.google.com/archive/p/eventlog-to-syslog/downloads 1. Устанавливаем: cmd copy evtsys.* %systemroot%\system32 %systemroot%\system32\evtsys.exe -i -h hostname_ip -s 240 net start evtsys |
Zabbix ссылки:
1 2 3 |
https://www.zabbix.com/integrations?cat=os - шаблоны https://www.zabbix.com/download - различные загрузки https://www.zabbix.com/manuals - документация |
Очистка в ручную
1 2 3 4 5 6 7 8 9 10 |
0. Перешли в каталог cd /var/www/html/loganalyzer/cron/ - переходим в каталог loganalyzer 1. выполнили очистку php ./maintenance.php cleandata 1 olderthan 86400 - удаляем старые записи старше 86400 сек (24 часа) P.s. 3600 - 1 час 86400 - 24 часа 864000 - 10дней 2592000 - 30 дней |
Скрипт очистки
1 2 3 |
#!/bin/sh cd /var/www/html/loganalyzer/cron/ - вот тут внимательней с расположением каталога_логаналайзера/cron php ./maintenance.php cleandata 1 olderthan 2592000 - удалять из хранилища "1" все что старше 30 дней |
В планировщик:
1 2 3 4 5 6 7 8 9 |
0. Запускаем редактирование crontab -e 1. Добавляем запись 0 2 * * * /root/maintenance1.sh 2. Возможно потребуется установить бит исполнения chmod u+x maintenance1.sh |
не решено
1 2 3 4 5 6 |
В админке loganalyzer при попытке очистить базу появляется ошибка: Could not delete data in the '1' source Решение не нашол. По крону и вручную чистит без проблем. |
Nagios — наблюдение за железом в реальном времени ping, snmp
Источники:
1 2 3 4 5 |
https://www.zabbix.com/documentation/2.2/manual/quickstart/host - сервер мониторинга на zabbix http://habrahabr.ru/post/88293/ - cвой сервер мониторинга с nagios и cacti https://habrahabr.ru/post/307832/ - скрипты http://www.2daygeek.com/how-to-reset-the-nagiosadmin-password/# - смена пароля https://support.kaspersky.ru/2811 - про установку и настройку snmp агента для windows (в картинках) |
Установка
1 2 3 4 5 6 7 |
apt-get update apt-get upgrade apt-get install apache2 phpmyadmin libapache2-mod-php5 php5 php5-mysql mysql-server mysql-client - ставим LAMP apt-get install nagios3 php5-fpm - минемальная установка apt-get install nagios3 - ставим nagios apt-get install cacti - ставим cacti apt-get install snmpd - ставим snmpd |
Настройка
1 2 3 4 5 6 |
nagios3 -v /etc/nagios3/nagios.cfg - проверка конфигов service nagios3 restart - перезапуск nagios http ://youre_server_ip/nagios3 - вход в nagios http ://youre_server_ip/cacti - вход в cucti Стандартный логин и пароль для доступа к cacti: admin/admin. htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin - смена пароля для nagios |
Смена пароля
1 |
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin |