Настройка низкоуровневого обнаружения в Zabbix

Низкоуровневое обнаружение позволяет автоматически создавать элементы данных, триггеры, графики.
Массово его лучше не использовать, так как на практике заметил что оно дает значительную нагрузку на систему.

Приведу пример настройки обнаружения для просмотра загрузки портов управляемого коммутатора.
Для начала открываем «Настройка» — «Шаблоны«, создаем новый шаблон или напротив готового нажимаем «Обнаружение«.
Нажимаем «Создать правило» и заполняем основные параметры:

Name: Interaces
Type: SNMPv2 agent
Key: snmp.discovery
SNMP OID: ifDescr
SNMP community: public
Port: 161

Вторым шагом будет создание прототипа элемента данных:

Name: ifInOctets.$1
Type: SNMPv2 agent
Key: ifInOctets.["{#SNMPINDEX}"]
SNMP OID: ifInOctets.{#SNMPINDEX}
SNMP community: public
Port: 161
Type of information: Numeric (float)
Units: B
Use custom multiplier: 8
Store value: Delta (speed per second)
New aplication: ifInOctets

Пример создания прототипа триггера:

Name: ifOperStatus.{#SNMPINDEX} on {HOST.HOST} was changed
Expression: {template name:ifOperStatus.["{#SNMPINDEX}"].diff()}=1

Вместо «ifInOctets» аналогично можно использовать например: ifOutOctets, ifInErrors, ifOutErrors, ifInDiscards, ifOutDiscards, ifOperStatus и т.д.

При создании графика в имени пишем например «Трафик. Порт {#SNMPINDEX}» и добавим в Item например два элемента данных, отвечающие за входящий (ifInOctets) и исходящий трафик (ifOutOctets).

Смотрите также:
Список SNMP OID и MIB для интерфейсов

Установка и настройка Zabbix агента в Windows

Для начала скачиваем архив с последней версией Zabbix агента под Windows с официального сайта https://www.zabbix.com/ru/download

Распаковываем архив например в директорию Windows. Заметил что если распаковать в директорию в имени которой есть пробелы, например «Program Files», то служба Zabbix агента может не запустится.

После распаковки открываем командную строку и переходим в директорию с Zabbix агентом:

cd C:\Windows\zabbix_agent_2.4.1\

И выполняем команду установки службы указав что конфигурационный файл находится в этой же директории:

"C:\Windows\zabbix_agent_2.4.1\zabbix_agentd.exe" --config "C:\Windows\zabbix_agent_2.4.1\zabbix_agentd.conf" --install

В конфигурационном файле zabbix_agentd.conf необходимо обязательно указать путь к log файлу, например в ту же директории что и Zabbix агент, а также адрес Zabbix сервера с которого будут приниматься запросы.

Приведу пример конфигурационного файла с основными параметрами который я использовал:

# Путь к файлу логов
LogFile=C:\Windows\zabbix_agent_2.4.1\zabbix_agentd.log
# Максимальный размер файла логов
LogFileSize=1
# Уровень ведения логов (0 - базовый, 1 - критические сообщения, 2 - ошибки, 3 предупреждения, 4 - максимальный для отладки)
DebugLevel=3
# Адрес Zabbix-сервера
Server=192.168.1.1
# Порт на котором будет запущен Zabbix-агент
ListenPort=10050
# Адрес Zabbix-сервера
ServerActive=192.168.1.1
# Имя хоста, обязательно должно совпадать с имененм компьютера
Hostname=Computer

Последним шагом будет запуск Zabbix агента:

zabbix_agentd.exe --start

Опишу некоторые возможные операции с программой:

Остановка:

zabbix_agentd.exe --stop

Удаление:

zabbix_agentd.exe --uninstall

Помощь: -h
Просмотр версии программы: -V
Просмотр поддерживаемых проверок (элементов данных): -p
Тестирование элемента данных: -t <ключ элемента данных>

Для Windows NT 4.0 используется библиотека PDH (Performance Data Helper), если она не установлена в системе, почитать информацию о ней и скачать можно с официальной страницы https://support.microsoft.com/en-us/help/284996/

Zabbix агент будет работать на порту TCP 10050, ожидая подключения с указанного в конфигурационном файле Zabbix сервера.

Решение проблемы Zabbix «icmp pinger processes more than 75% busy»

Сообщение «Zabbix icmp pinger processes more than 75% busy» означает что процесс или процессы выполняющие пинг хостов перегружены.
Для решения этой проблемы необходимо открыть конфигурационный файл zabbix сервера, например через редактор nano:

sudo nano /etc/zabbix/zabbix_server.conf

Далее найти в нем параметр StartPingers, если он равен 1 и закомментирован, то можно увеличить его например на 5 и раскомментировать (убрать перед ним символ #).
Этим мы увеличиваем количество процессов выполняющих ICMP Ping, соответственно нагрузка будет распределена и уменьшена.
Для сохранения изменений в редакторе nano используется комбинация клавиш Ctrl+O, потом Enter. Для выхода Ctrl+X.

После манипуляций необходимо выполнить перезагрузку Zabbix сервера командой:

service zabbix-server restart

Также нагрузку можно снизить увеличив «Интервал обновления» в параметрах шаблона. Для этого необходимо зайти в Web интерфейс Zabbix под администратором и нажать Настройка — Шаблоны, на необходимом шаблоне выбрать «Элементы данных», открыть элемент данных выполняющий пинг и найти «Интервал обновления (в сек)«. Значения 180 (это три минуты) или большего думаю вполне достаточно.

Решение ошибки с Detect operating system в Zabbix

Стандартно скрипт «Detect operating system» не работает в Zabbix, при попытке его выполнить появляется ошибка «sudo: no tty present and no askpass program specified» поэтому для его работы необходимо сделать несколько действий.

Первое — это установить nmap:

apt-get install sudo nmap

Второе — разрешить пользователю Zabbix запускать nmap, для этого откроем файл /etc/sudoers в любом редакторе, например nano:

sudo nano /etc/sudoers

и допишем в него следующую строку:

zabbix  ALL=(root) NOPASSWD: /usr/bin/nmap

либо можно не открывать в редакторе, а выполнить команду:

sudo echo "zabbix  ALL=(root) NOPASSWD: /usr/bin/nmap" >> /etc/sudoers

После данных манипуляций скрипт должен работать, определять операционную систему, показывать список открытых портов и т.д.

Мониторинг параметров MySQL в Zabbix

Создадим директорию для скриптов:
sudo mkdir /etc/zabbix/scripts/
sudo chown root:zabbix -R /etc/zabbix/scripts/
sudo chmod 750 /etc/zabbix/scripts/

Сам скрипт для мониторинга параметров MySQL:

#!/bin/bash
##### OPTIONS VERIFICATION #####
if [[ -z "$1" || -z "$2" ]]; then
  exit 1
fi
##### PARAMETERS #####
RESERVED="$1"
METRIC="$2"
USER="${3:-user}"
PASS="${4:-pass}"
#
MYSQLADMIN="/usr/bin/mysqladmin"
MYSQL="/usr/bin/mysql"
CACHE_TTL="55"
CACHE_FILE="/tmp/zabbix.mysql-stats.cache"
EXEC_TIMEOUT="1"
NOW_TIME=`date '+%s'`
##### RUN #####
if [ "${METRIC}" = "alive" ]; then
  ${MYSQLADMIN} -u${USER} -p${PASS} ping | grep alive | wc -l | head -n1
  exit 0
fi
if [ "${METRIC}" = "version" ]; then
  ${MYSQL} -V | sed -e 's/^.*\(ver.*\)$/\1/gI' | head -n1
  exit 0
fi
#
if [ -s "${CACHE_FILE}" ]; then
  CACHE_TIME=`stat -c"%Y" "${CACHE_FILE}"`
else
  CACHE_TIME=0
fi
DELTA_TIME=$((${NOW_TIME} - ${CACHE_TIME}))
#
if [ ${DELTA_TIME} -lt ${EXEC_TIMEOUT} ]; then
  sleep $((${EXEC_TIMEOUT} - ${DELTA_TIME}))
elif [ ${DELTA_TIME} -gt ${CACHE_TTL} ]; then
  echo "" >> "${CACHE_FILE}" # !!!
  DATACACHE=`${MYSQLADMIN} -u${USER} -p${PASS} extended-status 2>&1`
  echo "${DATACACHE}" > "${CACHE_FILE}" # !!!
  chmod 640 "${CACHE_FILE}"
fi
#
cat "${CACHE_FILE}" | grep -iw "$METRIC" | cut -d'|' -f3 | head -n1
#
exit 0

Установим скрипту владельца и права:
sudo chown root:zabbix /etc/zabbix/scripts/mysql-stats.sh
sudo chmod 550 /etc/zabbix/scripts/mysql-stats.sh

Проверка работы скрипта:
sudo -u zabbix /etc/zabbix/scripts/mysql-stats.sh none questions ИМЯ ПАРОЛЬ

Просмотр списка возможных параметров по которым можно просматривать статистику:
mysqladmin -uroot -p extended-status

Добавляем указанную ниже строку в конфигурационный файл zabbix-агента /etc/zabbix/zabbix_agentd.conf:

UserParameter=mysql-stats[*],/etc/zabbix/scripts/mysql-stats.sh "none" "$1" [USER] [PASSWORD]

Перезапуск zabbix агента чтобы изменения вступили в силу:

/etc/init.d/zabbix-agent restart

Проверка:

sudo zabbix_get -k 'mysql-stats[questions]' -s 127.0.0.1

Установка и настройка Zabbix Server в Linux Ubuntu

Zabbix — система мониторинга, отслеживания серверов и сетевого оборудования.

Ниже приведу пример установки Zabbix Server и Zabbix Agent из официального репозитория Ubuntu, если необходимо установить самую новую версию, то необходимо сначала установить репозитории Zabbix, например смотрите мою статью — Установка Zabbix Server 3.4 в Ubuntu 16.04

Устанавливаем сервер, веб-интерфейс и агента:

sudo apt-get install zabbix-server-mysql zabbix-frontend-php zabbix-agent traceroute fping

Если при установке не выполнялась настройка mysql параметров, то вручную создаем MySQL пользователя и полные права на базу данных:

mysql -uroot -p
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'PASSWORD';
exit

Импортируем таблицы в базу данных:

cd /usr/share/zabbix-server-mysql
sudo gunzip schema.sql.gz
sudo gunzip images.sql.gz
sudo gunzip data.sql.gz
mysql -uroot -p zabbix < schema.sql
mysql -uroot -p zabbix < images.sql
mysql -uroot -p zabbix < data.sql

Конфиги находятся по адресу /etc/zabbix/

Конфиг веб-интерфейса находится по адресу:
/etc/apache2/conf-available/zabbix
Если его нет, то можно скопировать шаблон и настроить:

sudo cp /etc/zabbix/apache.conf /etc/apache2/sites-enabled/zabbix.conf

Либо сделаем символическую ссылку в директорию веб сервера на файлы zabbix:

sudo ln -s /usr/share/zabbix/ /var/www/html/

Откроем конфигурационный файл PHP например в редакторе nano (CTRL+X для выхода, y/n для сохранения или отмены изменений):

sudo nano /etc/php5/apache2/php.ini

И изменим некоторые минимальные параметры:

date.timezone = Europe/Kiev
max_execution_time 300
memory_limit 128M
post_max_size 16M
upload_max_filesize 2M
max_input_time 300

Чтобы изменения вступили в силу, необходимо перезагрузить веб сервер:

sudo /etc/init.d/apache2 restart

Открываем веб интерфейс по адресу http://SERVER/zabbix/ и следуем подсказкам для дальнейшей установки.
По умолчанию имя пользователя для входа через веб-интерфейс — admin, пароль — zabbix.
При сохранении конфигурационного файла zabbix.conf.php будет сообщение что нет прав на запись, поэтому временно их разрешим:

sudo chmod 777 /etc/zabbix

Когда конфигурационный файл сохранится вернем обратно:

sudo chmod 755 /etc/zabbix

Также укажем во втором конфигурационном файле zabbix_server.conf логин и пароль подключения к MySQL базе данных (такой же как в zabbix.conf.php):

sudo nano /etc/zabbix/zabbix_server.conf

Если в веб интерфейсе отображается сообщение что zabbix сервер не запущен, то необходимо изменить параметр START=no на START=yes в файле /etc/default/zabbix-server и выполнить команду запуска:

sudo service zabbix-server start

После установки рекомендую сменить пароль пользователю admin и отключить гостевого пользователя.