Я хочу запросить существующий плагин 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
для завершения и передачи всех данных.