Поступила задача мониторить очереди сообщений в Linux. Стандартными средствами сделать можно только через system.run(), однако, она по умолчанию отключена и использовать её небезопасно. Будем делать с помощью пользовательских переменных.
Нас интересует последний столбик, который выдаёт команда:
ipcs -q
Требуется поднимать панику, если какая-либо очередь более 4. По сути, нужно выводить в заббикс максимальное значение из всех очередей.
На сервере
На сервере с zabbix-агентом создаём папку /etc/zabbix/scripts. В ней файлик ipsc.sh с правами на выполнение.
Вставляем код. В коде убираем всё лишнее из команды, пихаем в массив, выбираем максимальное значение:
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
a=(`ipcs -q | grep -v "msqid" | awk -F" " '{ print $6}' `)
m=-1
for i in ${!a[@]}; do
if [[ ${a[$i]} -gt $m ]]; then
m=${a[$i]}
fi
done
echo "$m"
В папке /etc/zabbix/zabbix_agentd.d создаём файл userparameter_ipcs.conf содержимым:
UserParameter=ipcs.q,/etc/zabbix/scripts/ipcs.sh
Убеждаемся что в файле /etc/zabbix/zabbix_agentd.conf есть раскоментированная строка:
Include=/etc/zabbix/zabbix_agentd.d/
Перезапускаем сервис заббикс агента:
service zabbix-agent restart
В заббиксе
Переходим к заббиксу. Создаём item.
Type: "Zabbix agent".
Key: ipcs.q - название ключа мы задавали в файле userparameter_ipcs.conf.
Type of information: Numeric (unsigned).
Навешиваем триггер.
Expression:
{ваш_шаблон:ipcs.q.last()}>4
Теперь мы получим уведомление, если максимальная очередь сообщений превысит 4.