, последнее обновление:

Кастомные команды в 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. После опроса конфигурации метрика будет доступна.