, последнее обновление:
Кастомные команды в NetXMS
В этом гайде расскажу как добавлять кастомные команды в NetXMS на примере скрипта, который получает для каждого процесса (или группы процессов, например, для всех PHP интерпретаторов) количество прочитанных и записанных байт.
Скрипт
Сохраняем где удобно:
#!/usr/bin/env bash
ACTION=$1
WHATTOGREP=$2
if [ "${WHATTOGREP}" == "" ]; then
echo "Pass grep-able string as second parameter."
exit 1
fi
PIDS=$(ps aux | grep ${WHATTOGREP} | awk {' print $2 '})
if [ ! -z $DEBUG ]; then
echo "PIDS: ${PIDS}"
fi
TOTALREAD=0
TOTALWRITE=0
for pid in ${PIDS}; do
r=$(cat /proc/${pid}/io 2>/dev/null | grep read_bytes | awk {' print $2 '})
w=$(cat /proc/${pid}/io 2>/dev/null | grep write_bytes | grep -v "cancel" | awk {' print $2 '})
if [ ! -z $DEBUG ]; then
echo "PID: ${pid} - read ${r}, write ${w}"
fi
if [ "${r}" == "" ]; then
r=0
fi
if [ "${w}" == "" ]; then
w=0
fi
TOTALREAD=$[ ${TOTALREAD} + ${r} ]
TOTALWRITE=$[ ${TOTALWRITE} + ${w} ]
done
if [ "${ACTION}" == "read" ]; then
echo $TOTALREAD
elif [ "${ACTION}" == "write" ]; then
echo $TOTALWRITE
else
echo "Invalid action parameter. Pass 'read' or 'write' as first parameter."
exit 1
fi
Добавляем нужное в конфигурацию агента
В файл /etc/nxagentd
(в FreeBSD - /usr/local/etc/nxagentd
) добавляем следующее:
ExternalParameterShellExec=Process.DiskRead(*):/opt/bin/check_io.sh read $1
ExternalParameterShellExec=Process.DiskWrite(*):/opt/bin/check_io.sh write $1
Не забываем перезапустить агента.
Сервер NetXMSd
Чтобы метрика отобразилась в списке доступных, необходимо выполнить ПКМ на сервере → Poll → Configuration. После опроса конфигурации метрика будет доступна.