У меня возникли проблемы с определением подключаемого модуля, который представляет собой пакетный файл для запуска с помощью 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 что касается .cmd
s как внешние плагины с ответами, намекающими на то, что завершающие точки имеют решающее значение для функциональности плагина, и показывают, что у ряда людей были проблемы с интеграцией внешних плагинов.
Исходя из этого, я настроил командный файл для записи вывода во временный файл перед записью его в стандартный вывод, чтобы я мог проверять непечатаемые символы, пробелы и символы новой строки. Но все выглядело так, как должно быть. Я также попытался удалить завершающие символы новой строки для последней строки вывода, используя 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)