# Zabbix

# Общая идея

Мониторинг критичен для любой компании.

**Prometheus**

База данных временных рядов.

<table border="1" id="bkmrk-zabbix-prometheus-%D0%A2%D0%B8" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 33.3333%;"></col><col style="width: 33.3333%;"></col><col style="width: 33.3333%;"></col></colgroup><thead><tr><td class="align-center">  
</td><td class="align-center">Zabbix</td><td class="align-center">Prometheus</td></tr></thead><tbody><tr><td>Тип данных</td><td>Любой</td><td>Только Время </td></tr><tr><td>Период хранения</td><td>Не ограничивается</td><td>Оперативный мониторинг</td></tr><tr><td>Скорость обработки данных</td><td>Падает с объемом</td><td>Слабо зависит от объема</td></tr></tbody></table>

Состав системы:

- Prometheus
- Exporter: инструмент для предобработки/получения метрик
- Alertmanager: уведомления

Модели получения данных: Pull (обращается к машине и забирает накопившиеся данные) и Push (машина отдает данные на pushgateway, откуда потом prometheus забирает данные).

Типы метрик:

<table border="1" id="bkmrk-%D0%A1%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA-%D0%9A%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%BE-%D1%8D" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 20.8929%;"></col><col style="width: 79.2263%;"></col></colgroup><tbody><tr><td>Счетчик</td><td>Количество элементов за определенный период (сколько раз падал сервер за месяц или сколько человек посетило сайт за день). Только положительный.</td></tr><tr><td>Измеритель</td><td>Положительный и отрицательный. Но только текущее значение.</td></tr><tr><td>Гистограмма</td><td>  
</td></tr><tr><td>Сводка</td><td>Улучшенная гистограмма</td></tr></tbody></table>

Alertmanager

Postmortem

[12.4 Постмортем пример.pdf](http://bobrobotirk.ru/attachments/22)

# Установка с использованием docker compose

**Первичная настройка сервера**

Добавление пользователя

```
adduser sergey
usermod -aG sudo sergey
```

Установка Docker

Одного ядра для запуска все-таки мало. Тормозит.

**Установка сервера**

Клонируем репозиторий Zabbix

```bash
git clone https://github.com/zabbix/zabbix-docker.git
```

При необходимости переключаемся на нужную версию

```bash
git checkout 7.0
```

Запускаем нужный файл, например Alpine+Mysql:

```bash
docker compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up
```

Структура названий файлов: docker-compose\_v3\_&lt;distr&gt;\_&lt;db&gt;\_&lt;тип сборки&gt;

distr:

<table border="1" id="bkmrk-alpine-alpine-linux-" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>alpine</td><td>Alpine Linux</td></tr><tr><td>ol</td><td>Oracle Linux</td></tr><tr><td>ubuntu</td><td>Ubuntu Linux</td></tr></tbody></table>

db:

<table border="1" id="bkmrk-mysql-mysql-pgsql-po" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>mysql</td><td>MySQL</td></tr><tr><td>pgsql</td><td>PostgreSQL</td></tr></tbody></table>

тип сборки:

<table border="1" id="bkmrk-latest-%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D0%BE%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>latest</td><td>Предсобранные образы</td></tr><tr><td>local</td><td>Локально собираемые образы</td></tr></tbody></table>

По-умолчанию логин Admin, пароль zabbix

<span style="color: rgb(224, 62, 45);">Для версии 7.0 на момент августа 2024 г. для использования оповещений с использованием curl (например, Telegram) необходимо в файл env\_vars/.env\_srv добавить строку. </span>

```
ZBX_SOURCEIP=0.0.0.0
```

<span style="color: rgb(224, 62, 45);">Планируется исправить в следующих релизах. Проблема в том, что для работы последней версии curl требуется данный параметр.</span>

Для работы web мониторинга добавил

Сборка и запуск в фоновом режиме:

```bash
docker compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up -d
```

Источники:

[Официальная документация](https://www.zabbix.com/documentation/current/en/manual/installation/containers)

**Установка агента**

Для Linux:

```bash
sudo apt-get install zabbix-agent
```

Изменяем настройки в файле /etc/zabbix/zabbix\_agentd.conf

<table border="1" id="bkmrk-hostname%3D-%D0%98%D0%BC%D1%8F-%D1%85%D0%BE%D1%81%D1%82%D0%B0%2C" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>Hostname=</td><td>Имя хоста, </td></tr><tr><td>Server=</td><td>  
</td></tr><tr><td>ServerActive=</td><td>  
</td></tr><tr><td>AllowKey=system.run\[\*\]</td><td>  
</td></tr></tbody></table>

# Источник клиент (Zabbix trapper)

**Обновление данных по инициативе клиента**

Создать элемент данных Zabbix trapper

[![item_for_input_data.jpg](http://bobrobotirk.ru/uploads/images/gallery/2024-08/scaled-1680-/item-for-input-data.jpg)](http://bobrobotirk.ru/uploads/images/gallery/2024-08/item-for-input-data.jpg)

[документация](https://www.zabbix.com/documentation/current/en/manual/config/items/itemtypes/trapper)

 При помощи утилиты zabbix\_sender:

```bash
zabbix_sender -z <server IP address> -p 10051 -s "New host" -k trap -o "test value"
```

<table border="1" id="bkmrk--s-%D0%B8%D0%BC%D1%8F-%D1%85%D0%BE%D1%81%D1%82%D0%B0%2C-%D1%81%D1%83%D1%89%D0%B5%D1%81%D1%82" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 18.631%;"></col><col style="width: 81.4882%;"></col></colgroup><tbody><tr><td>-s</td><td>имя хоста, существующего в hosts на сервере zabbix и к которому привязан элемент данных, в кавычках</td></tr><tr><td>-k</td><td>ключ, без кавычек</td></tr><tr><td>-o</td><td>значение, в кавычках если тип данных строка и без кавычек если число</td></tr></tbody></table>

При помощи python:

[Документация](https://blog.zabbix.com/ru/python-zabbix_utils/27032/)

```bash
pip install zabbix_utils
```

Добавляем этот код в нужный скрипт и начинаем получать информацию о времени выполнения скрипта. Отличие от параметров утилиты - ключ нужно указывать в кавычках.

```python
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

[![item_for_input_data2.jpg](http://bobrobotirk.ru/uploads/images/gallery/2024-08/scaled-1680-/item-for-input-data2.jpg)](http://bobrobotirk.ru/uploads/images/gallery/2024-08/item-for-input-data2.jpg)

Вид условия, срабатывающего при отсутствии данных более 20 минут. Поддерживаются окончания s, m, h, d, w, m

[![item_for_input_data3.jpg](http://bobrobotirk.ru/uploads/images/gallery/2024-08/scaled-1680-/item-for-input-data3.jpg)](http://bobrobotirk.ru/uploads/images/gallery/2024-08/item-for-input-data3.jpg)

Общий вид триггера:

В поле Event name можно указать текст, который будет выводиться в dashbord при оповещении. Этот текст будет отображаться при следующем срабатывании триггера, если триггер сейчас активен, то текст не изменится.

[![item_for_input_data4.jpg](http://bobrobotirk.ru/uploads/images/gallery/2024-08/scaled-1680-/item-for-input-data4.jpg)](http://bobrobotirk.ru/uploads/images/gallery/2024-08/item-for-input-data4.jpg)

Также для связанных триггеров (например 1минута-3минуты-5минут) нужно зайти в Зависимости и указать следующий по уровню триггер, т е для указанного примера нужно в триггере 1минута указать зависимость от 3минуты, в триггере 3минуты - зависимость 5минут.

Пример для триггера 1минута.

[![item_for_input_data6.jpg](http://bobrobotirk.ru/uploads/images/gallery/2024-08/scaled-1680-/item-for-input-data6.jpg)](http://bobrobotirk.ru/uploads/images/gallery/2024-08/item-for-input-data6.jpg)

Добавляем отображение на дашборде

[![item_for_input_data5.jpg](http://bobrobotirk.ru/uploads/images/gallery/2024-08/scaled-1680-/item-for-input-data5.jpg)](http://bobrobotirk.ru/uploads/images/gallery/2024-08/item-for-input-data5.jpg)

Графики

Ссылка на скриншоты графиков

```html
http://192.168.1.198/chart2.php?graphid=2845&from=now-3h&to=now
```

# Источник сервер (Zabbix agent + script)

В этом случае создается источник данных Zabbix agent и устанавливается ключ system.run\[размещение скрипта на клиенте\].

[![data_agent_1.JPG](http://bobrobotirk.ru/uploads/images/gallery/2024-08/scaled-1680-/data-agent-1.JPG)](http://bobrobotirk.ru/uploads/images/gallery/2024-08/data-agent-1.JPG)

Можно установить предобработку данных перед итоговым занесением в БД

[![data_agent_2.JPG](http://bobrobotirk.ru/uploads/images/gallery/2024-08/scaled-1680-/data-agent-2.JPG)](http://bobrobotirk.ru/uploads/images/gallery/2024-08/data-agent-2.JPG)

Дальше - стандартно триггеры, ...

# Панели

**Отображение в виджете при больших периодах получения данных**

При отображении часто используются данные "Последнее значение". Однако, оно по умолчанию использует максимальный период в 24 часа. Соответственно, если последние данные пришли позже этого периода, то считается, что последних данных нет. Поэтому отображаемые элементы будут глючить при большем периоде Для увеличения периода нужно перейти в Администрирование-&gt;Общие-&gt;Веб-интерфейс и изменить параметр "Максимальный период отображения истории"

[![zbx_gui_time.jpg](http://bobrobotirk.ru/uploads/images/gallery/2024-08/scaled-1680-/zbx-gui-time.jpg)](http://bobrobotirk.ru/uploads/images/gallery/2024-08/zbx-gui-time.jpg)

Этот период также можно изменить через функцию агрегации для каждого виджета. Там появляется элемент "период...".

# Настройка агента на alt linux

в