Назад | Перейти на главную страницу

munin-node-win32: нельзя использовать командный файл в качестве плагина

У меня возникли проблемы с определением подключаемого модуля, который представляет собой пакетный файл для запуска с помощью Munin-node-win32 (1.6.1).

Согласно Прочти меня, он может интегрировать внешние плагины, определенные в [ExternalPlugin] раздел:

* External Plugin:

    * A plugin that supports external plugins in the style of munin-node.

    * Configuration in [ExternalPlugin] section. Just add an entry with the 
      path to the program to run, It doesn't matter what the name of the 
      name=value pair is.

    * The output of the external program should be similar to the following,

    * Note: add quotes (") around the value if it has spaces! ::

        >disk_free.py name
        drive_free

        >disk_free.py
        drive_free_c.value 40.3635149113
        .

        >disk_free.py config
        graph_title Filesystem free (in %)
        graph_category disk
        graph_info This graph shows the amount of free space on each disk.
        graph_args --upper-limit 100 -l 0
        graph_vlabel %
        drive_free_c.label C:
        .

Я определил плагин следующим образом:

[ExternalPlugin]
; For External Plugins just add an entry with the path to the program to run
; It doesn't matter what the name of the name=value pair is
rdsessions="C:\Program Files\Monitoring-Scripts\munin-rdsessions.bat"

И командный файл, похоже, возвращает результат в соответствии с требованиями документации:

C:\Program Files\Monitoring-Scripts>.\munin-rdsessions.bat name
rdsessions

C:\Program Files\Monitoring-Scripts>.\munin-rdsessions.bat
total.value "6.000000"
active.value "1.000000"
.

C:\Program Files\Monitoring-Scripts>.\munin-rdsessions.bat config
graph_title Remote Desktop Sessions
graph_category system
graph_args --upper-limit 15 -l 0 -r
graph_vlabel Sessions
graph_order total active
total.label Total sessions
active.label Active sessions
.

C:\Program Files\Monitoring-Scripts>

Но узел Munin не перечисляет "rdsessions" как доступный плагин по запросу:

$ telnet rdsh-02.example.com 4949
Trying 192.168.21.85...
Connected to rdsh-02.example.com.
Escape character is '^]'.
# munin node at rdsh-02
list
df memory processes network cpu hdd

Пока что я нашел отчет об ошибке для Munin-node-win32 что касается .cmds как внешние плагины с ответами, намекающими на то, что завершающие точки имеют решающее значение для функциональности плагина, и показывают, что у ряда людей были проблемы с интеграцией внешних плагинов.

Исходя из этого, я настроил командный файл для записи вывода во временный файл перед записью его в стандартный вывод, чтобы я мог проверять непечатаемые символы, пробелы и символы новой строки. Но все выглядело так, как должно быть. Я также попытался удалить завершающие символы новой строки для последней строки вывода, используя set / p взломать, безрезультатно - плагин никогда не появлялся в списке. Я перезапускал службу Munin каждый раз, когда вносил изменения в командный файл.

Так что же не так с Munin-node-win32, что ему не нравится моя партия?

Список партий:

@echo off
set OUTFILE=%TEMP%\munin-rdsessions.output

if "%1" == "config" goto config
if "%1" == "name" (echo rdsessions && goto end)

for /F "usebackq delims=, tokens=2,3,4" %%a IN (`typeperf -sc 1 "Terminaldienste\Sitzungen insgesamt" "Terminaldienste\Aktive Sitzungen" ^| find /V "(PDH-CSV"`) do (
echo total.value %%a>%OUTFILE%
echo active.value %%b>>%OUTFILE%
echo .>>%OUTFILE%
)
type %OUTFILE%
goto end

:config
type "%~dpn0.conf"
goto end

:end

Оказывается, munin-node-win32 очень осторожно относится к пробелам в конце вывода «name». Итак, линия выглядит так

if "%1" == "name" (echo rdsessions && goto end)

приведет к тому, что munin-node-win32 просто проглотит определение плагина. Пробел в конце echo вызов должен быть удален, чтобы он работал:

if "%1" == "name" (echo rdsessions&&goto end)