Почему 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

Для автозапуска в Centos7/RHEL7 выполним:

systemctl enable zabbix-agent.service

В Centos6/RHEL6

chkconfig zabbix-agent on

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

Настройка 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}'

Смотрите также:
Подключение к SSH с использованием ключей

Настройка 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
Отправлять на: почта на которую должны приходить оповещения
Когда активен: время когда разрешено приходить оповещениям
Использовать, если важность: какой важности оповещения присылать
Состояние: Активировано

Вот и все.

Установка Zabbix в Ubuntu из пакетов дистрибутивов

На тесте установил Zabbix 3.4 в Ubuntu 14.04 LTS, Ubuntu 16.04 LTS, Ubuntu 18.04 LTS.
Ссылки на другие версии Zabbix можно найти на официальном сайте www.zabbix.com или тут http://repo.zabbix.com/zabbix/.
Например Zabbix 3.4 для Ubuntu находится тут http://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/.

После установки Zabbix, перенес в него данные со старого сервера Zabbix 2.2, просто экспортировав сначала шаблоны, потом узлы сети, карты сеты и комплексные экраны.

Приступим к установке, добавим в систему официальный источник пакетов (пример для Ubuntu 14.04 LTS (trusty)):

wget http://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+trusty_all.deb
sudo dpkg -i zabbix-release_3.4-1+trusty_all.deb
sudo apt update

Для Ubuntu 16.04 LTS (xenial):

wget http://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+xenial_all.deb
sudo dpkg -i zabbix-release_3.4-1+xenial_all.deb
sudo apt update

Для Ubuntu 18.04 (Bionic Beaver):

wget http://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+bionic_all.deb
sudo dpkg -i zabbix-release_3.4-1+bionic_all.deb
sudo apt-get update

Выполним установку Zabbix:

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

Подключимся к MySQL серверу и создадим базу данных:

mysql -uroot -p
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'ПАРОЛЬ';
quit;

Импортируем в созданную базу стандартные данные:

cd /usr/share/doc/zabbix-server-mysql
zcat create.sql.gz | mysql -uroot -p zabbix

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

sudo nano /etc/zabbix/zabbix_server.conf

Укажем имя MySQL базы, имя пользователя и пароль:

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=ПАРОЛЬ

Запустим процесс Zabbix сервера:

sudo service zabbix-server start

Нужно поправить конфигурацию PHP для Zabbix. Файл конфигурации Apache для веб-интерфейса Zabbix размещается в /etc/apache2/conf.d/zabbix или /etc/apache2/conf-enabled/zabbix.conf. Некоторые минимальные параметры конфигурации PHP там уже заданы:

php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
php_value date.timezone Europe/Kiev

Перезапустим веб-сервер чтобы применить изменения:

sudo service apache2 restart
sudo service zabbix-server restart

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

sudo systemctl is-enabled zabbix-agent.service
sudo systemctl is-enabled zabbix-server.service
sudo systemctl enable zabbix-agent.service
sudo systemctl enable zabbix-server.service

Веб-интерфейс Zabbix доступен через браузер по адресу http://ХОСТ/zabbix.
По умолчанию имя пользователя для входа через веб-интерфейс — admin или Admin, пароль — zabbix

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

Решение ошибки Unknown Object Identifier (Index out of range: XXX (ifIndex))

Однажды делал шаблон Zabbix для рисования графиков трафика с портов GPON плат на Huawei SmartAX MA5683T.

Из Linux посмотрел индексы интерфейсов командой:

snmpwalk -v2c -c public 192.168.0.101 ifDesc

Получил ответ что-то в виде (где 4194336768 индекс нулевого порта GPON платы):

IF-MIB::ifDescr.4194336768 = STRING: Huawei-MA5600-V800R008-GPON_UNI

Соответственно по этому индексу должен считываться и трафик, поэтому выполнил команду:

snmpwalk -v2c -c public 192.168.0.101 ifInOctets.4194336768

Но в итоге получил ответ:

.1.3.6.1.2.1.2.2.1.13.4194336768: Unknown Object Identifier (Index out of range: 4194336768 (ifIndex))

Решить проблему помогло добавления ключа -Ir в команду:

snmpwalk -v2c -Ir -c public 192.168.0.101 ifInOctets.4194336768

В ответ получил то что нужно:

IF-MIB::ifInOctets.4194336768 = Counter32: 2686914701

Ошибку можно решить добавив в файл конфигурации /etc/snmp/snmp.conf:

noRangeCheck yes

Либо, так как в Zabbix негде указать дополнительные опции к SNMP запросам, то можно написать скрипт:

snmpwalk -v2c -Ir -c public 192.168.0.101 ifInOctets.4194336768 | sed -e 's/.*Counter32: //g'

В конце команды редактором SED я отрезал лишний текст чтобы в результате была только цифра.
В Zabbix потом изменим элемент данных, где:

Тип: Внешняя проверка
Ключ: ИмяСкрипта.sh
Тип информации: Числовой (с плавающей точкой)
Хранение значения: Дельта (скорость в секунду)

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

Решение предупреждения «Lack of Free Swap Space on Zabbix Server»

Поставил как-то на новый Linux сервер Zabbix и сразу начало отображаться следующее предупреждение:

Lack of Free Swap Space on Zabbix Server

Предупреждение сообщает что нет места в разделе Swap, посмотрев увидел что Swap раздела то нет вообще, странно что при установке Ubuntu 14.04 LTS с указанием опции использовать весь диск он не создался автоматически, оперативной памяти на сервере было 6 Гб всего-то.

По этому решением проблемы в моём случае было создание Swap раздела, после чего предупреждение исчезло.
Смотрите другую мою статью по этому поводу — Как создать SWAP в Linux

Ну а если оперативной памяти очень много, и она свободна в основном, то Swap может и смысла нету создавать, по этому можно просто отключить для этого сервера триггер создающий уведомление. Для этого откроем панель Zabbix, перейдем во вкладку «Настройка» — «Узлы сети», напротив данного сервера нажмём «Триггеры» и деактивируем триггер создающий это предупреждение.

Все.

Мониторинг DNS из Zabbix

Для мониторинга самой службы DNS на порту можно использовать следующий ключ в элементах данных (где СЕРВЕР, это IP-адрес или домен DNS сервера):

net.tcp.dns[СЕРВЕР]

Чтобы не создавать с нуля шаблон, можно клонировать например стандартный «Template App SSH Service» изменив в нём название и указав новый ключ, триггер изменится автоматически. А также в «Тип» выберем «Zabbix агент» вместо простой проверки.

Следующей командой можно выполнить проверку из командной строки Linux:

zabbix_get -s127.0.0.1 -k'net.tcp.dns[СЕРВЕР]'

Естественно если ответом будет 1, то служба DNS запущена, 0 — нет.

Если на узле установлен Zabbix-agent, то в поле ключ лучше указать:

proc.num[nemed]

Смотрите также мою статью:
Мониторинг Bind9 в Zabbix

Изменение порта при проверках SSH, HTTP и т.д. в Zabbix

Допустим SSH работает на нестандартном порту, в Zabbix же, шаблон «Template App SSH Service» проверяет его по стандартному порту и по этому будет выдавать сообщение «SSH service is down on …».

Для указания по какому порту проверять SSH, сделаем полное клонирования шаблона «Template App SSH Service», чтобы не изменять его и в новом клонированном шаблоне уже изменим в элементе данных ключ:

net.tcp.service[ssh]

на (где 500 — номер порта SSH):

net.tcp.service[ssh,,500]

И укажем этот новый шаблон вместо стандартного нужному узлу, после чего SSH будет проверяться по указанному порту.
Настройка шаблонов выполняется в меню «Настройка» -> «Шаблоны» -> Группа «Templates».

Аналогичным образом изменяется порт для других сервисов.

Из командной строки это можно проверить следующими командами:

zabbix_get -s127.0.0.1 -k'net.tcp.service[ssh]'
zabbix_get -s127.0.0.1 -k'net.tcp.service[ssh,,500]'

Если на узле установлен Zabbix-agent, то в поле ключ лучше указать:

proc.num[sshd]