Давайте рассмотрим вопрос о авто обнаружении в Zabbix не предусмотренных разработчиками, но очень нужные для решения ряда задач.

Система мониторинга Zabbix обладает возможностью авто обнаружения различных объектов, например из коробки система умеет обнаруживать файловые системы: vfs.fs.get или сетевые интерфейсы: net.if.discovery.
Но что делать если нужно обнаруживать те объекты для которых разработчик не заложил инструмента?
Рассмотрим задачу.
Требуется наладить мониторинг потребляемых ресурсов памяти и процессора каждым пользователем системы Linux в отдельности.
Мониторить по отдельно взятому пользователю не сложно, - разработчик Zabbix дает нам инструмент для взятия метрики по процессору:
proc.cpu.util[,USER]
Так ж по памяти:
proc.mem[,USER]
Но в ручном режиме постоянно брать пользователей и создавать отдельную метрику, как водится лениво.
Перейдем к самому обнаружению пользователей LLD (Low Level Discovery)
Примем за данность что список пользователей содержится в файле:
/etc/passwd
Но там текст совсем не подходящий для Zabbix LLD. Для начала выведем только пользователей:
awk -F: '{print $1}' /etc/passwd
И получим просто список пользователей.
Для работы Zabbix LLD необходимо подать данные в JSON формате. Для обертки простого списка в JSON используем следующее:
echo "["|tr -d '\r\n'; awk -F: ' {print "{\"{#USER}\":" "\""$1"\"}," }' /etc/passwd | tr -d '\r\n'| sed 's/.$//'; echo "]" "]"
Если нам потребуется взять пользователей только определенной группы, например номер 1005 то скрипт придется немного изменить:
echo "["|tr -d '\r\n'; awk -F: ' /1005/ {print "{\"{#USER}\":" "\""$1"\"}," }' /etc/passwd | tr -d '\r\n'| sed 's/.$//'; echo "]" "]"
В обнаружение остается добавить нужные прототипы метрик, графиков основываясь на макросе {#USER}.
Пользуйтесь :-)
Подводя итог отмечу, что такой подход можно применить для Zabbix LLD практически любой сущности в Linux вселенной.