Zabbix
- Установка с использованием docker compose
- Источник клиент (Zabbix trapper)
- Источник сервер (Zabbix agent + script)
- Панели
Установка с использованием docker compose
Установка сервера
Клонируем репозиторий 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 требуется данный параметр.
Сборка и запуск в фоновом режиме:
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 часа. Соответственно, если последние данные пришли позже этого периода, то считается, что последних данных нет. Поэтому отображаемые элементы будут глючить при большем периоде Для увеличения периода нужно перейти в Администрирование->Общие->Веб-интерфейс и изменить параметр "Максимальный период отображения истории"
Этот период также можно изменить через функцию агрегации для каждого виджета. Там появляется элемент "период...".