Zabbix
- Общая идея
- Установка с использованием docker compose
- Источник клиент (Zabbix trapper)
- Источник сервер (Zabbix agent + script)
- Панели
- Настройка агента на alt linux
Общая идея
Мониторинг критичен для любой компании.
Prometheus
База данных временных рядов.
| Zabbix | Prometheus | |
| Тип данных | Любой | Только Время |
| Период хранения | Не ограничивается | Оперативный мониторинг |
| Скорость обработки данных | Падает с объемом | Слабо зависит от объема |
Состав системы:
- Prometheus
- Exporter: инструмент для предобработки/получения метрик
- Alertmanager: уведомления
Модели получения данных: Pull (обращается к машине и забирает накопившиеся данные) и Push (машина отдает данные на pushgateway, откуда потом prometheus забирает данные).
Типы метрик:
| Счетчик | Количество элементов за определенный период (сколько раз падал сервер за месяц или сколько человек посетило сайт за день). Только положительный. |
| Измеритель | Положительный и отрицательный. Но только текущее значение. |
| Гистограмма | |
| Сводка | Улучшенная гистограмма |
Alertmanager
Postmortem
Установка с использованием docker compose
Первичная настройка сервера
Добавление пользователя
adduser sergey
usermod -aG sudo sergey
Установка Docker
Одного ядра для запуска все-таки мало. Тормозит.
Установка сервера
Клонируем репозиторий Zabbix
git clone https://github.com/zabbix/zabbix-docker.git
При необходимости переключаемся на нужную версию
git checkout 7.0
Запускаем нужный файл, например Alpine+Mysql:
docker compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up
Структура названий файлов: docker-compose_v3_<distr>_<db>_<тип сборки>
distr:
| alpine | Alpine Linux |
| ol | Oracle Linux |
| ubuntu | Ubuntu Linux |
db:
| mysql | MySQL |
| pgsql | PostgreSQL |
тип сборки:
| latest | Предсобранные образы |
| local | Локально собираемые образы |
По-умолчанию логин Admin, пароль zabbix
Для версии 7.0 на момент августа 2024 г. для использования оповещений с использованием curl (например, Telegram) необходимо в файл env_vars/.env_srv добавить строку.
ZBX_SOURCEIP=0.0.0.0
Планируется исправить в следующих релизах. Проблема в том, что для работы последней версии curl требуется данный параметр.
Для работы web мониторинга добавил
Сборка и запуск в фоновом режиме:
docker compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up -d
Источники:
Установка агента
Для Linux:
sudo apt-get install zabbix-agent
Изменяем настройки в файле /etc/zabbix/zabbix_agentd.conf
| Hostname= | Имя хоста, |
| Server= | |
| ServerActive= | |
| AllowKey=system.run[*] |
Источник клиент (Zabbix trapper)
Обновление данных по инициативе клиента
Создать элемент данных Zabbix trapper
При помощи утилиты zabbix_sender:
zabbix_sender -z <server IP address> -p 10051 -s "New host" -k trap -o "test value"
| -s | имя хоста, существующего в hosts на сервере zabbix и к которому привязан элемент данных, в кавычках |
| -k | ключ, без кавычек |
| -o | значение, в кавычках если тип данных строка и без кавычек если число |
При помощи python:
pip install zabbix_utils
Добавляем этот код в нужный скрипт и начинаем получать информацию о времени выполнения скрипта. Отличие от параметров утилиты - ключ нужно указывать в кавычках.
from zabbix_utils import Sender
import time
import datetime
sender = Sender(server='192.168.1.198', port=10051)
# Parameters: (host, key, value, clock)
d = datetime.datetime.now()
unix_time = int(time.mktime(d.timetuple()))
resp = sender.send_value('moodle', 'lastupdate', 0, unix_time)
if resp.failed == 0:
# Print a success message along with the response time
print(f"Value sent successfully in {resp.time}")
else:
# Print a failure message
print("Failed to send value")
print(resp.details)
Добавляем триггер, в условиях для анализа последних данных функция nodata
Вид условия, срабатывающего при отсутствии данных более 20 минут. Поддерживаются окончания s, m, h, d, w, m
Общий вид триггера:
В поле Event name можно указать текст, который будет выводиться в dashbord при оповещении. Этот текст будет отображаться при следующем срабатывании триггера, если триггер сейчас активен, то текст не изменится.
Также для связанных триггеров (например 1минута-3минуты-5минут) нужно зайти в Зависимости и указать следующий по уровню триггер, т е для указанного примера нужно в триггере 1минута указать зависимость от 3минуты, в триггере 3минуты - зависимость 5минут.
Пример для триггера 1минута.
Добавляем отображение на дашборде
Графики
Ссылка на скриншоты графиков
http://192.168.1.198/chart2.php?graphid=2845&from=now-3h&to=now
Источник сервер (Zabbix agent + script)
В этом случае создается источник данных Zabbix agent и устанавливается ключ system.run[размещение скрипта на клиенте].
Можно установить предобработку данных перед итоговым занесением в БД
Дальше - стандартно триггеры, ...
Панели
Отображение в виджете при больших периодах получения данных
При отображении часто используются данные "Последнее значение". Однако, оно по умолчанию использует максимальный период в 24 часа. Соответственно, если последние данные пришли позже этого периода, то считается, что последних данных нет. Поэтому отображаемые элементы будут глючить при большем периоде Для увеличения периода нужно перейти в Администрирование->Общие->Веб-интерфейс и изменить параметр "Максимальный период отображения истории"
Этот период также можно изменить через функцию агрегации для каждого виджета. Там появляется элемент "период...".
Настройка агента на alt linux
в