我想从Nagios中查询一个现在的Munin插件。 因为我想做一些计算和聚合(插件报告一段时间内的数据),而不只是看最后的值,可用的插件查询Munin的数据,如check_munin似乎不合适。 所以我的想法是获取整个fetch输出并parsing它。 这似乎是一个我不明白的理由。
如果在发出nc my-munin-node 4949后手动inputfetch my-plugin ,我会得到预期的数据输出。 如果我尝试编写脚本,它不会按预期工作:
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
没有任何尾随数据。 运行networking跟踪表明,远程的Munin节点确实开始发送数据,但是立即从请求者那里获得一个TCP RST 。
如果通过input文件描述符接收到EOF, Netcat将closures连接。 作为echo "string" | nc echo "string" | nc语法正在发送紧跟EOF的“string” , netcat立即断开连接,而不接收来自远端的任何数据。
一个更合适的语法将是类似的
(echo "fetch my-plugin" && sleep 5) | nc my-munin-node 4949
这样, EOF将不会被发送,除非sleep返回 – 在这个例子中将需要5秒。 时间间隔应该select足够长的时间来fetch my-plugin来完成并获取所有的数据传输。