Решение ошибки в Zabbix «snmp_parse_oid(): cannot parse OID «MIB»»

Заметил однажды на новой системе после импорта Zabbix шаблонов что не все элементы данных успешно работают.

И отображается ошибка:

snmp_parse_oid(): cannot parse OID «MIB»

Как оказалось в элементах данных указаны MIB вместо OID, которых нет в системе.
Приведу пример, MIB для входящего трафика на первом интерфейсе будет ifInOctets.1, а OID 1.3.6.1.2.1.2.2.1.10.1
Тут более подробно можно увидеть примеры Список SNMP OID и MIB для интерфейсов
Поэтому вариантом решения данной ошибки будет либо редактирование всех элементов шаблона изменим MIB на OID, либо вариант проще — установить MIB которых нет в системе, если это стандартные MIB то их можно установить как я описывал в этой статье — Установка MIB в Ubuntu и решение ошибки «SNMP Cannot Find Module …»

В конце обязательно перезапустим snmpd и zabbix-server:

sudo service snmpd restart
sudo service zabbix-server restart

Все.

Мониторинг Bind9 в Zabbix

На примере опишу вариант мониторинга DNS сервера Bind9 в Zabbix.

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

sudo nano /etc/bind/named.conf

И добавим следующие строки (где первый IP и порт — интерфейс на котором будет видна статистика, а следующие — с которых разрешен к ней доступ):

statistics-channels {
     inet 192.168.10.1 port 8053 allow { 127.0.0.1; 192.168.10.1; 192.168.10.15;};
};

И перезапустим Bind чтобы применить изменения:

sudo /etc/init.d/bind9 restart

После этого в браузере набрав http://192.168.10.1:8053/ можно увидеть статистику Bind9.

Установим необходимые компоненты необходимые для получения статистики из терминала:

sudo apt-get install xml2 curl

Проверим отображается ли статистика:

curl http://192.168.10.1:8053/ 2>/dev/null | xml2 | grep -A1 queries

Теперь допишем к конфигурацию Zabbix агента /etc/zabbix/zabbix_agentd.conf параметры которые будем мониторить:

# Количество udp соединений к DNS:
UserParameter=bind.net.udp,netstat -nua | grep :53 | wc -l
# Количество tcp соединений к DNS:
UserParameter=bind.net.tcp,netstat -nta | grep :53 | wc -l
# Количество входящих и исходящих запросов:
UserParameter=bind.queries.in[*],curl http://192.168.10.1:8053/ 2>/dev/null | xml2 | grep -A1 "/isc/bind/statistics/server/queries-in/rdtype/name=$1$" | tail -1 | cut -d= -f2
UserParameter=bind.queries.out[*],curl http://192.168.10.1:8053/ 2>/dev/null | xml2 | grep -A1 "/isc/bind/statistics/views/view/rdtype/name=$1$" | tail -1 | cut -d= -f2

И перезапустим Zabbix агент чтобы применить изменения:

sudo /etc/init.d/zabbix-agent restart

Добавим элементы данных и графики нужному узлу сети или шаблону в Zabbix сервере (тип — Zabbix агент, примеры ключей ниже):

bind.queries.in[A]
bind.queries.out[A]
bind.queries.in[AAAA]
bind.queries.out[AAAA]
bind.queries.in[NS]
bind.queries.out[NS]
bind.queries.in[MX]
bind.queries.out[MX]
bind.queries.in[PTR]
bind.queries.out[PTR]
bind.queries.in[SOA]
bind.queries.out[SOA]
bind.queries.in[TXT]
bind.queries.out[TXT]
bind.queries.in[ANY]
bind.queries.out[ANY]
и т.д.

Почему Zabbix не всегда рисует графики

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

Опишу возможные причины перебоев и их решение:

1) Может быть плохая связь с узлом сети, необходимо проверить пинг с Zabbix сервера на узел сети.
Для примера, первая команда PING с большими пакетами из Windows, а вторая из Linux:

ping -t -l 1024 192.168.5.1
ping -i 0.2 -s 1024 192.168.5.1

2) Устройство медленно работает и перестает отвечать при большом количестве запросов, для решения этой проблемы необходимо в настройках узла сети Zabbix снять галочку «Использовать массовые запросы».

3) Для получения данных с узла сети используются 32-битные счетчики, и при загрузке интерфейсов устройства например выше 400 мегабит данные на графике могут не отображаться, для решения этой проблемы в элементах данных необходимо заменить их на 64-битные и очистить историю узла сети чтобы на графиках не было скачков.
Например, если трафик получается с первого сетевого интерфейса через MIB ifInOctets.1 (32-бит), то его нужно заменить на ifHCInOctets.1 (64-бит).

Установка и настройка Zabbix агента в CentOS/RHEL

Перед установкой посмотрим версию системы:

lsb_release -a

У меня версия CentOS 6.8 X64, удалено в этот момент находился Zabbix сервер версии 3.0.7, по этому я подобрал версию 3.0 на http://repo.zabbix.com/zabbix/ (там есть новее, например 3.1, 3.2 и т.д.).
Добавим источник:

rpm -Uvh http://repo.zabbix.com/zabbix/3.0/rhel/6/x86_64/zabbix-release-3.0-1.el6.noarch.rpm

Для CentOS/RHEL 7 другая ссылка:

rpm -Uvh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm

Для CentOS/RHEL 5:

rpm -Uvh http://repo.zabbix.com/zabbix/3.0/rhel/5/x86_64/zabbix-release-3.0-1.el5.noarch.rpm

Теперь выполним команду установки Zabbix агента:

yum install zabbix zabbix-agent

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

nano /etc/zabbix/zabbix_agentd.conf

А именно укажем:
Server=192.168.1.11 (ip адрес удаленного Zabbix сервера)
ServerActive=192.168.1.11 (ip адрес удаленного Zabbix сервера)
Hostname=имя такое же как у системы, можно посмотреть командой hostname

После редактирования применим изменения перезапустив Zabbix агент:

/etc/init.d/zabbix-agent restart

Остановить/запустить его можно командами:

/etc/init.d/zabbix-agent stop
/etc/init.d/zabbix-agent start

Смотрите также:
Установка и настройка Zabbix агента в Ubuntu

Мониторинг Asterisk в Zabbix

Наблюдать за Asterisk будем через Zabbix агент, для этого установим его на той же машине что и Asterisk.
Как устанавливать Zabbix агент я описывал в этих статьях:
Установка и настройка Zabbix агента в Ubuntu
Установка и настройка Zabbix агента в Windows

Можно также обойтись и без установки Zabbix агента, а получать информацию по SSH, для этого на удаленном Zabbix сервере нужно будет создать шаблон и добавлять в него SSH проверки с указанными ниже командами. Смотрите также мою статью — Настройка SSH проверок в Zabbix. Мне же проще использовать Zabbix агент.

Следующий код добавим в файл конфигурации Zabbix агента /etc/zabbix/, на той же машине что и Asterisk:

# total number of asterisk extensions
UserParameter=asterisk.extensions_total,asterisk -rx "database show" | grep DEVICE | grep dial | wc -l
# number of registered extensions
UserParameter=asterisk.extensions_online,asterisk -rx "database show" | grep Registry | wc -l
# number of offline extensions
UserParameter=asterisk.extensions_offline,asterisk -rx "sip show peers" | grep -v trunk | grep -v --text -i "sip peers" | grep -v Forceport | grep UNKNOW | wc -l
# total number of trunks
UserParameter=asterisk.trunks_total,asterisk -rx "sip show registry" | grep -v "registrations" | grep -v "Reg.Time" | wc -l
# number of registered trunks
UserParameter=asterisk.trunks_online,asterisk -rx "sip show registry" | grep -v "registrations" | grep -v "Reg.Time" | grep Registered | wc -l
# number of offline trunks
UserParameter=asterisk.trunks_offline,asterisk -rx "sip show registry" | grep -v "registrations" | grep -v "Reg.Time" | grep -v Registered | wc -l
# number of active calls
UserParameter=asterisk.active_calls,asterisk -rvvvvvx 'core show channels'| grep --text -i 'active call'| cut -c1
# number of seconds since last asterisk start
UserParameter=asterisk.uptime,asterisk -rx "core show uptime seconds" | grep --text -i "System uptime:" | gawk '{print $3}'
# number of asterisk processes
UserParameter=asterisk.asterisk_running,ps cax | grep asterisk | wc -l
# number of fail2ban processes
UserParameter=asterisk.fail2ban_running,ps cax | grep fail2ban | wc -l
# number of fail2ban active chains
UserParameter=asterisk.fail2ban_active,iptables -nL | grep Chain | grep -E 'f2b|fail2ban' | wc -l

Если будете делать по SSH, то сами команды в коде выше можно увидеть после запятой, например на второй строке команда:

asterisk -rx "database show" | grep DEVICE | grep dial | wc -l

И т.д., так как для некоторых команд нужны привилегии root, то разрешим выполнение от его имени указав параметр AllowRoot=1 в конфигурации Zabbix агента.
И перезапустим Zabbix агент чтобы применить изменения, в Ubuntu это так:

sudo /etc/init.d/zabbix-agent restart

Теперь осталось создать шаблон на Zabbix сервере и добавить в него элементы данных, триггеры и графики.
Можете также скачать и импортировать в Zabbix мой шаблон Template_App_Asterisk_Service (это еще не готовый вариант, так как постоянно его дописываю).

Смотрите также:
Частые сообщения «Remote UNIX connection» в Asterisk

Настройка SSH проверок в Zabbix

Понадобилось как-то для некоторых Linux серверов настроить SSH проверки, чтобы не устанавливать на них Zabbix-agent.
Сам Zabbix-server у меня установлен на Ubuntu Server.

Ниже по порядку опишу как настроить SSH проверки в Zabbix.

Авторизацию по SSH настроим по ключу вместо пароля, для этого остановим zabbix-agent и zabbix-server:

sudo service zabbix-agent stop
sudo service zabbix-server stop

Создадим домашнюю директорию пользователя Zabbix (для хранения ssh ключей):

sudo usermod -m -d /home/zabbix zabbix
sudo chown zabbix:zabbix /home/zabbix
sudo chmod 700 /home/zabbix

Запустим обратно zabbix-agent и zabbix-server:

sudo service zabbix-agent start
sudo service zabbix-server start

Откроем конфигурационный файл /etc/zabbix/zabbix_server.conf (в редакторе nano комбинация клавиш Ctrl+O и Enter означает сохранение, Ctrl+X выход):

sudo nano /etc/zabbix/zabbix_server.conf

Раскомментируем строку SSHKeyLocation и укажем путь к директории с ключами:

SSHKeyLocation=/home/zabbix/.ssh

Перезапустим zabbix-server:

sudo service zabbix-server restart

Генерируем ssh ключ:

sudo -u zabbix ssh-keygen -t rsa
Нажмем Enter если предлагается путь /home/zabbix/.ssh/id_rsa
На предложение зашифровать файл ключа нажмем Enter чтобы не шифровать его или введем два раза любой пароль (им будет зашифрован файл ключа и при подключении его придется указывать)

Скопируем сгенерированый ключ на сервер за которым будем наблюдать:

sudo -u zabbix ssh-copy-id -i /home/zabbix/.ssh/id_rsa.pub -p 22 root@192.168.0.55

Если возникает ошибка при копировании ключа, то можно вручную скопировать строку из id_rsa.pub на удаленный сервер в файл authorized_keys.

И попробуем подключится к удаленному серверу без ввода пароля командой:

sudo -u zabbix ssh -p 22 root@192.168.0.55

Теперь в Zabbix добавим элемент данных к шаблону или хосту:
Имя: любое
Тип: SSH агент
Ключ: ssh.run[описание,ip,порт,кодировка] (например ssh.run[cpu,192.168.0.55,22,utf8]
Метод аутентификации: Публичный ключ
Имя пользователя (на удаленном хосте): root
Файл публичного ключа: id_rsa.pub
Файл приватного ключа: id_rsa
Фраза-пароль ключа: оставим пустым если не шифровали ключ паролем
Выполняемый скрипт: команда выполняемая на удаленном сервер, примеры ниже

Приведу ниже пример команд для Linux которые можно выполнить и получить различную информацию.
Загрузка процессора за 1мин/5мин/15мин:

cat /proc/loadavg |cut -d " " -f1
cat /proc/loadavg |cut -d " " -f2
cat /proc/loadavg |cut -d " " -f3

Количество текущих запущенных процессов указанной программы:

pgrep apache2|wc -l
pgrep -c sshd

Свободное пространство в точке монтирования «/» (в мегабайтах):

df -m|grep "/$"|awk '{print $4}'

Занятое пространство в точке монтирования «/» (в процентах):

df|grep "/$"|awk '{print $5}'|tr -d "%"

Получено байт на сетевой интерфейс eth0:

cat /proc/net/dev|grep eth0|awk '{print $2}'

Отправлено байт на сетевой интерфейс eth0:

cat /proc/net/dev|grep eth0|awk '{print $10}'

Количество свободной оперативной памяти:

free |grep "Память:"|awk '{print $4}'
free |grep "Mem:"|awk '{print $4}'

Настройка email оповещений в Zabbix через iRedMail

На тесте буду использовать Zabbix 3.0.3 и iRedMail 0.9.4 установленные в Ubuntu Server 14.04.4 LTS.

Сначала в панели Zabbix активируем действие открыв вкладку «Настройка» — «Действия» и активируем «Report problems to Zabbix administrators«. В нем я также, чтобы видеть имена хостов, изменил обе темы письма с:

{TRIGGER.STATUS}: {TRIGGER.NAME}

на

{TRIGGER.STATUS}: {HOST.NAME1} {TRIGGER.NAME}

В Zabbix изначально добавлен способ оповещения через Email, но в зависимости от настроек почтового сервера он может работать либо не работать. Найти его можно зайдя в Zabbix под администратором и открыв вкладку «Администрирование» — «Способы оповещений» — «Email«.

При настройке с iRedMail я указывал следующие параметры:

Имя: Email
Тип: Email
SMTP сервер: mail.example.com
Порт SMTP сервера: 25
SMTP helo: example.com
SMTP email: user@example.com
Безопасность подключения: STARTTLS
Галочки на «Проверка SSL узла» и «Проверка SSL хоста» не ставил
Аутентификация: Обычный пароль
Имя пользователя: user@example.com
Пароль: ПАРОЛЬ_К_ПОЧТЕ
галочка на «Активировано»

Если почтовый сервер находится в одной системе с Zabbix сервером, то можно попробовать настроить как выше, но где «Безопасность подключения» и «Аутентификация» выбрать «Нет».

Также в профиле пользователя, во вкладке «Оповещения» нужно добавить:

Тип: Email
Отправлять на: почта на которую должны приходить оповещения
Когда активен: время когда разрешено приходить оповещениям
Использовать, если важность: какой важности оповещения присылать
Состояние: Активировано

Вот и все.