====== Zabbix ======
Документация:
* Параметры агента https://www.zabbix.com/documentation/current/ru/manual/config/items/itemtypes/zabbix_agent
===== Описание =====
Система мониторинга, состоит из нескольких частей, которые можно разнести, в случае большой нагрузки.\\
* **сервер мониторинга**, который выполняет периодическое получение данных, обработку, анализ и запуск скриптов оповещения
* **база данных**, реляционная (MySQL, postgres, sqlite, oracle)
* **веб интерфейс**
* **агенты**, службы работающие на отслеживаемых объектах, отправляющие данные серверу. Так же может использоваться трафик SNMP, внешние скрипты, выдающие данные, и несколько видов встроенных проверок, типа ping/http/ssh..
* **прокси**, может применяться для распределения нагрузки на основной сервер
**Кроме агентов**, есть целый ряд доп возможностей для сбора информации:
* **Simple check** - простые операции в т.ч. пинг
* **Zabbix trapper** - Траппер элементы данных принимают входящие данные вместо запроса этих данных. Это полезно для любых данных, которые вы возможно захотите "запихнуть" в Zabbix
* **Zabbix aggregate** - сбор совокупной информации из БД
* **SSH agent** - подключение по SSH, используя указанные команды
* **Calculate** - проверки, сопоставляя имеющиеся данные, + можно нивелировать погрешность пинга между агентом и основным сервером, разместив прокси рядом с агентами
Основная логическая единица это **Узлы сети** (host), наблюдаемые машины. У каждого есть описание и адрес (dns/ip). Узлы объединяются в **группы**.\\
Каждый узел имеет несколько **элементов данных** (items)- параметров, за которыми ведется мониторинг, для каждого можно указать период обновления, способ хранения, множитель, интервал сбора и т.д.\\
Так же, можно создавать **узлы-шаблоны**, они так же содержат элементы данных, но не мониторятся, а используются только для сбора в себе и назначения предопределенных (групп) пар-ов.\\
==== Триггеры ====
Логические выражения со значениями **False**, **True**, **Unknown**, используемые для обработки данных.\\
У каждого существует уровень серьезности угрозы:
* **Без классификации** - серый
* **Информация** - светло-синий
* **Предупреждение** - желтый
* **Средняя** - оранжевый
* **Высокая** - светло-красный
* **Чрезвычайная** - красный
Функции триггеров:
* **abschange, change** - разница между последним-предпоследним значениями
* **avg** - среднее за определенный интервал
* **count, sum** - кол-во отчетов по критерию
* **date, dayofweek, now, time** - дата/время
* **last, prev, max\min ** - определенные значения
==== Действия ====
Заданная реакция на событие, авто/созданная в ручную\\
* **Event source** - может служить: **авторегистрация**, **обнаружение** или **триггер**
* **Enable escalations, Period** - разрешение на эскалацию, период времени шага эскалации
* **Default subject, Default message** - извещенец по умолчанию, стандартный текст сообщения
* **Recovery subject/message** - тоже самое, только после устранения
* **Status** - вкл/выкл видимо
==== Операции ====
Операции/группы операций, указываются для событий\\
* **Operation type** - д-я на определенном шаге
* **Event source** - источник события
* **Send message to** - отдельное/групповое сообщение
* **Subject/Default message/Message** - оповещенец, текст сообщения
* **Remote command** - команда для удаленного управления
==== Низкоуровневое обнаружение ====
Авто-создание элементов и триггеров, для отслеживания систем, наблюдаемого сервера.\\
**Позволяет обнаружить**: OID SNMP, сетевые интерфейсы, процессоры и ядра, файловые системы, службы windows, ODBC\\
Так же, можно задать собственные типы обнаружения, с применением JSON, типы проверок типа: ssh, ldap, smtp, ftp, http и т.д.\\
===== Установка =====
Основные ресурсы: [[https://www.dmosk.ru/miniinstruktions.php?mini=zabbix-server-ubuntu#zabbix]]\\
[[https://www.zabbix.com/download|Официальная инструкция на все платформы]] \\
==== Подготовка сервера ====
**Автосинхронизация серверного времени**\\
Текущий часовой пояс:
# timedatectl set-timezone Asia/Omsk
Сервис синхронизации времени:
# apt install chrony && systemctl {enable,start} chrony
**Брандмауэр**: нужны порты 80/443 и 10050/10051- агенты/трапперы\\
Установка версии 6.0, alma/postgres/apache\\
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-4.el8.noarch.rpm
dnf clean all
dnf install zabbix-server-pgsql zabbix-web-pgsql zabbix-apache-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent
dnf install postgresql-server
service postgresql initdb либо /usr/pgsql-11/bin/postgresql-11-setup initdb
chkconfig postgresql on
systemctl enable postgresql
systemctl start postgresql
sudo -u postgres createuser --pwprompt zabbix
sudo -u postgres createdb -O zabbix zabbix
zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix
"DBPassword=password" >> /etc/zabbix/zabbix_server.conf
systemctl restart zabbix-server zabbix-agent httpd php-fpm
systemctl enable zabbix-server zabbix-agent httpd php-fpm
# Post
set "host all all 127.0.0.1/32 password" in /var/lib/pgsql/data/pg_hba.conf
sudo su - postgres & psql
\c zabbix
update users set passwd=md5('ddd') where username='Admin';
# Так же в параметрах возможно нужно указать схему public
:!: **Установка 11ой версии postgresql**
sudo dnf -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo dnf module disable postgresql
sudo dnf clean all
sudo dnf -y install postgresql11-server postgresql11
:!: **Перенос расположения postgresql**
При установке директории создаются в **/usr/pgsql-11**, там бинарники и **/var/lib/pgsql**, там данные и папка БД по дефолту\\
Сама структура создается командой **initdb**. Путь есть в конфиге службы, **/usr/lib/systemd/system/postgresql11.service**, так же есть в файле **/var/lib/pgsql/.bash_profile**
:!: Подробное описание
** База данных **\\
** MariaDB **\\
[[linux:mysql|Установка MariaDB]]
Cоздаем базу и пользователя:
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;
Разворачиваем схему базы:
# zcat /usr/share/doc/zabbix-sql-scripts/mysql/create.sql.gz | mysql -uzabbix -p zabbix
** Postgresql **\\
# apt install postgresql postgresql-contrib
Настройка базы
sudo -u postgres createuser --pwprompt zabbix
sudo -u postgres createdb -O zabbix -E Unicode -T template0 zabbix
zcat /usr/share/zabbix-server-pgsql/schema.sql.gz | sudo -u zabbix psql zabbix
zcat /usr/share/zabbix-server-pgsql/images.sql.gz | sudo -u zabbix psql zabbix
zcat /usr/share/zabbix-server-pgsql/data.sql.gz | sudo -u zabbix psql zabbix
** Web-сервер **\\
** Nginx **\\
[[linux:nginx|Установка Nginx]] (можно просто поставить, без всего лишнего)\\
**PHP, PHP-FPM**\\
# apt install php php-fpm php-mysql php-pear php-cgi php-common php-ldap php-mbstring php-snmp php-gd php-xml php-gettext php-bcmath
Редактируем конфиг: **/etc/php/7.3/fpm/php.ini**
date.timezone = "Asia/Omsk"
...
max_execution_time = 300
...
post_max_size = 16M
...
max_input_time = 300
...
max_input_vars = 10000
# systemctl {enable,start} php7.3-fpm
**Nginx+ php**\\
**/etc/nginx/sitex-enabled/default**\\
# В 'Location /' добавляем 'index.php'
...
location ~ \.php$ {
set $root_path /var/www/html;
fastcgi_buffer_size 32k;
fastcgi_buffers 4 32k;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
}
Проверяем настройки и ребутим
# nginx -t && systemctl restart nginx
** Apache **\\
# apt install apache2 apache2-utils
# Отключите информацию о сервере, изменив следующие параметры в /etc/apache2/conf-enabled/security.conf
ServerTokens Prod
ServerSignature Off
# Включите файл конфигурации Zabbix в Apache:
cp /etc/apache2/conf-available/zabbix-frontend-php.conf /etc/apache2/conf-enabled/zabbix.conf
# Установите часовой пояс для Zabbix в формате /etc/apache2/conf-enabled/zabbix.conf.
** Сервер zabbix **\\
Ставим сам zabbix (тут скачивается файл для настройки репозиториев, сам дистр ставится из репы)
$ wget https://repo.zabbix.com/zabbix/5.4/debian/pool/main/z/zabbix-release/zabbix-release_5.4-1+debian10_all.deb
$ dpkg -i zabbix-release_5.4-1+debian10_all.deb
$ apt update && apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
Либо, если база postgres:
# apt install zabbix-server-pgsql zabbix-frontend-php
Так же, правим конфиг (все данные от БД): **/etc/zabbix/zabbix_server.conf**
DBHost=
DBName=zabbix
DBUser=zabbix
DBPassword=
Создаем пару папок (иногда не создаются автоматом) и ребут "zabbix-server"
mkdir /etc/zabbix/zabbix_server.conf.d
mkdir /var/log/zabbix-server
chown zabbix:zabbix /var/log/zabbix-server
==== Настройка ====
Открываем web-форму (http://ip-addr/zabbix/setup.php) и завершаем ее настройку\\
После установки пользователь был "Admin" оО\\
Список пользователей хранится в созданной БД забикса, таблица "user", там же можно сбрасывать пароли:
update users set passwd=md5('new_pass') where alias='test_admin';
:!: Для авто-конвертации данных итема нужно указать ед. измерения. В условии триггера значение (для сравнения) указывается в байтах (по крайней мере из коробки так)
:!: Опер данные в триггере - {ITEM.LASTVALUE1}
:!: Зависимости указываются сверху вниз т.е. дочернему триггеру ставится зависимость базового, тогда при срабатывании обоих будет показан только базовый. У трех (и более) последовательных зависимостей не обязательно ставить единого предка, если они логически "в цепочке"
==== zabbix агент ====
Для использования "JMX" нужен софт "zabbix-java-gateway", ставится отдельно\\