munin-node-win32: não pode usar um arquivo de lote como plugin

1

Estou tendo problemas para obter um plugin definido que é um arquivo em lote para ser executado com o Munin-node-win32 (1.6.1).

De acordo com o readme , ele é capaz de integrar plugins externos definidos no [ExternalPlugin] seção:

* 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:
        .

Eu defini o plugin da seguinte forma:

[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"

E o arquivo em lote aparentemente está retornando a saída conforme exigido pelos documentos:

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>

Mas o nó Munin não está listando "rdsessions" como um plugin disponível na consulta:

$ 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

Até agora, encontrei um relatório de erros para o Munin-node-win32 sobre .cmd s como plug-ins externos com respostas sugerindo que os pontos de finalização eram cruciais para a funcionalidade do plug-in e revelando que várias pessoas tiveram problemas com a integração de plug-ins externos.

Com base nisso, configurei o arquivo em lote para gravar a saída em um arquivo temporário antes de gravá-lo no stdout, para poder verificar caracteres não imprimíveis, espaços em branco e novas linhas. Mas tudo parecia como provavelmente deveria. Eu também tentei remover novas linhas para a última linha na saída usando o set / p hack , sem sucesso - o plugin nunca apareceu na lista. Eu reiniciei o serviço Munin toda vez que fiz alterações no arquivo em lote.

Então, o que há de errado com o Munin-node-win32 de que ele não gosta do meu lote?

Lista de lotes:

@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
    
por the-wabbit 01.06.2015 / 15:16

1 resposta

1

Acontece que munin-node-win32 é extremamente prudente sobre espaços em branco no final da saída "name". Então uma linha parecida com essa

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

faria com que o munin-node-win32 simplesmente engolisse a definição do plugin. O espaço em branco no final da chamada echo precisa ser removido para que funcione:

if "%1" == "name" (echo rdsessions&&goto end)
    
por 01.06.2015 / 15:16

Tags