Решение ошибки 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

Либо можно написать скрипт:

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]

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

Установим необходимые компоненты:

sudo apt-get install curl

Активируем модуль информации об apache2 (обычно он активирован изначально):

sudo a2enmod info

Откроем файл конфигурации модуля и укажем IP-адрес zabbix сервера чтобы разрешить ему просмотр информации об apache2 (если apache2 на локальной машине, то доступ обычно разрешен, указанием local или 127.0.0.1):

sudo nano /etc/apache2/mods-enabled/status.conf

В редакторе nano CTRL+X используются для выхода и y/n для сохранения или отмены изменений. Пример указания IP:

<Location /server-status>
    SetHandler server-status
    Require local
    Require ip 192.168.1.5
</Location>

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

sudo service apache2 restart

Теперь информация об apache2 доступна через браузер по ссылке http://HOST/server-status

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

mkdir /etc/zabbix/scripts/
chown root:zabbix -R /etc/zabbix/scripts/
chmod 750 /etc/zabbix/scripts/

В файле конфигурации zabbix сервера укажем путь к этой папке:

sudo nano /etc/zabbix/zabbix_server.conf
ExternalScripts=ПУТЬ

Теперь приведу содержимое самого скрипта:

#!/bin/bash
if [[ -z "$1" || -z "$2" || -z "$3" ]]; then
  exit 1
fi
##### PARAMETERS #####
RESERVED="$1"
METRIC="$2"
URL="$3"
STATSURL="${URL}?auto"
#
CACHE_TTL="55"
CACHE_FILE="/tmp/zabbix.apache2.`echo ${URL} | md5sum | cut -d" " -f1`.cache"
EXEC_TIMEOUT="2"
NOW_TIME=`date '+%s'`
##### RUN #####
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=`curl -sS --insecure --max-time ${EXEC_TIMEOUT} "${STATSURL}" 2>&1`
  echo "${DATACACHE}" > "${CACHE_FILE}" # !!!
  echo "URL=${URL}"  >> "${CACHE_FILE}" # !!!
  chmod 640 "${CACHE_FILE}"
fi
#
if [ "${METRIC}" = "accesses" ]; then
  cat "${CACHE_FILE}" | grep -i "accesses" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "kbytes" ]; then
  cat "${CACHE_FILE}" | grep -i "kbytes" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "cpuload" ]; then
  cat "${CACHE_FILE}" | grep -i "cpuload" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "uptime" ]; then
  cat "${CACHE_FILE}" | grep -i "uptime" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "avgreq" ]; then
  cat "${CACHE_FILE}" | grep -i "ReqPerSec" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "avgreqbytes" ]; then
  cat "${CACHE_FILE}" | grep -i "BytesPerReq" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "avgbytes" ]; then
  cat "${CACHE_FILE}" | grep -i "BytesPerSec" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "busyworkers" ]; then
  cat "${CACHE_FILE}" | grep -i "BusyWorkers" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "idleworkers" ]; then
  cat "${CACHE_FILE}" | grep -i "idleworkers" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "totalslots" ]; then
  cat "${CACHE_FILE}" | grep -i "Scoreboard" | cut -d':' -f2 | sed -e 's/ //g' | wc -c | awk '{print $1-1}'
fi
#
exit 0

Сделаем файл скрипта исполняемым:

chown root:zabbix /etc/zabbix/scripts/apache2-status.sh
chmod 550 /etc/zabbix/scripts/apache2-status.sh

Пример проверки скрипта:

sudo -u zabbix /etc/zabbix/scripts/apache2-status.sh none accesses http://HOST/server-status

Откроем файл конфигурации zabbix агента в редакторе:

sudo nano /etc/zabbix/zabbix_agentd.conf

И укажем следующие параметры:

UserParameter=apache2[*],/etc/zabbix/scripts/apache2-status.sh "none" "$1" "$2"

Некоторыми командами можно посмотреть количество процессов apache2 и соединений на 80 порт, для этого не нужен скрипт, например можно еще указать:

UserParameter=apache2.count_processes,ps aux | grep apache | wc -l
UserParameter=connections_on_80_port,netstat -na | grep :80 | wc -l

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

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

Проверим:

zabbix_get -s 127.0.0.1 -k "apache2[accesses,http://HOST/server-status]"

Теперь создадим шаблон и добавим элементы данных, пример создаваемых элементов данных:

apache2[КЛЮЧ,http://HOST/server-status]

Экспортировал готовый шаблон — apache2-status

К наблюдаемому хосту также обязательно добавим макрос:

Макрос: {$APACHE_STATS_URL}
Значение: http://HOST/server-status

Готово.

Количество процессов apache2 можно получать от Zabbix-агента создав на Zabbix-сервере элемент данных с ключом:

proc.num[apache2]

Настройка jabber оповещений в Zabbix

Для настройки jabber оповещений в Zabbix необходимо в веб-интерфейсе открыть «Администрирование» — «Способы оповещений«, создать способ оповещения jabber (либо выбрать существующий).

В способе оповещения указать следующие параметры:
Описание: любое
Тип: Jabber
Идентификатор Jabber: идентификатор (логин)
Пароль: пароль Jabber
Поставить галочку «Активно» и нажать «Сохранить«.

Теперь когда способ оповещения создан, откроем «Администрирование» — «Пользователи«, выберем пользователя, перейдем на вкладку «Оповещения» и добавим:
Тип: Jabber
Отправлять на: логин Jabber
Когда активно: Здесь можно ограничить время приема сообщений, например в рабочие дни 1-5,09:00-18:00
Использовать если важность: Важность триггеров для которых получать сообщения
Состояние: Активировано
Жмем «Добавить» и «Сохранить«.

Сервер Jabber обязательно должен быть настроен на этой же машине что и Zabbix сервер, иначе чтобы настроить отправку через внешний Jabber сервер необходимо писать скрипт и добавить его в «Способы оповещений».

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

Настройка Zabbix SNMP Traps

Предположим что мы настроили snmp по моей инструкции:
Настройка SNMP Traps в Ubuntu
Теперь изменим конфигурационный файл /etc/snmp/snmptt.conf.

Читать далее «Настройка Zabbix SNMP Traps»

Создание внешней проверки Zabbix для SQL запроса SELECT

Когда-то добавил график, который рисует сумму платежей из MySQL базы биллинга с другого сервера.

Читать далее «Создание внешней проверки Zabbix для SQL запроса SELECT»

Настройка Template App MySQL в Zabbix

Буду настраивать на Zabbix 2.2 и Ubuntu 14 LTS.

Для начала подключимся к mysql серверу:

mysql -u root -p

И выполним команды чтобы добавить пользователя от имени которого будем получать информацию:

GRANT USAGE ON *.* TO 'mysqlmonitor'@'localhost' IDENTIFIED BY 'ПАРОЛЬ';
FLUSH PRIVILEGES;
exit

Проверить пользователя можно выполнив команду:
mysql -umysqlmonitor -pПАРОЛЬ -e»status»

Создадим файл с настройками подключения к mysql серверу:
/etc/zabbix/.my.cnf
Добавим в него содержимое:

[mysql]
user=mysqlmonitor
password=ПАРОЛЬ
[mysqladmin]
user=mysqlmonitor
password=ПАРОЛЬ

Скопируем нужный файл userparameter_mysql.conf:

sudo cp /usr/share/doc/zabbix-agent/examples/userparameter_mysql.conf /etc/zabbix/zabbix_agentd.conf.d/userparameter_mysql.conf

Отредактируем его, изменив путь в переменной HOME на путь где находится файл .my.cnf, в нашем случае это HOME=/etc/zabbix.

Хочу заметить что в главном конфигурационном файле /etc/zabbix/zabbix_agentd.conf должна быть прописана строка Include=/etc/zabbix/zabbix_agentd.conf.d/ благодаря которой будут подгружаться все конфигурационные файлы в этой директории.

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

sudo service zabbix-agent restart

Все, теперь в административной панели zabbix сервера можно добавить к хосту шаблон «Template App MySQL» и любоваться графиками.

Резервное копирование Zabbix

Придумал и набросал пару строк для резервного копирования mysql базы данных и директории с http файлами.

Читать далее «Резервное копирование Zabbix»