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

Как запросить плагин munin через netcat?

Я хочу запросить существующий плагин Munin от Nagios. Поскольку я хотел бы выполнить некоторые вычисления и агрегаты (плагин сообщает данные за определенный период времени), а не просто смотреть на последние значения, доступные плагины запрашивают данные Munin, такие как check_munin кажутся неподходящими. Итак, моя идея заключалась в том, чтобы получить все fetch вывести и проанализировать его. Однако это кажется проблемой по непонятной причине.

Если я войду fetch my-plugin вручную после выдачи nc my-munin-node 4949, Я получаю ожидаемые данные. Если я попытаюсь написать сценарий, это не сработает, как ожидалось:

echo "fetch my-plugin" | nc my-munin-node 4949

просто ничего не возвращает пока

(sleep 1 && echo "fetch my-plugin") | nc my-munin-node 4949

возвращает только баннер munin-node

# munin node at my-munin-node

без каких-либо конечных данных. Выполнение сетевой трассировки показывает, что удаленный узел Munin действительно начинает отправлять данные, но получает TCP RST со стороны запрашивающего немедленно.

Netcat закроет соединение, если EOF поступает через дескриптор входного файла. Как echo "string" | nc синтаксис отправляет "строка" сразу за которым следует EOF, netcat мгновенно разрывает соединение, не принимая никаких данных с удаленного конца.

Более подходящий синтаксис будет примерно таким:

(echo "fetch my-plugin" && sleep 5) | nc my-munin-node 4949

Сюда, EOF не будет отправлен, если sleep возвращается - в этом примере это займет 5 секунд. Временной интервал следует выбирать достаточно большим, чтобы fetch my-plugin для завершения и передачи всех данных.