我正在为Icinga2编写一个自定义插件,从我们提供给客户的产品获取许可证信息。 它是一个非常简单的脚本,但有多行输出,我试图收集数据,并在特定主机的服务下格式化。
这里是数据的输出:
Users of product1, Total issued=10, Total used=0 Users of product2, Total issued=10, Total used=0 Users of product3, Total issued=10, Total used=0 Users of product4, Total issued=10, Total used=0 Users of product5, Total issued=50, Total used=11 Users of product6, Total issued=10, Total used=0 Users of product7, Total issued=771, Total used=0 Users of product8, Total issued=771, Total used=8 Users of product9, Total issued=771, Total used=0 Users of product10, Total issued=60, Total used=0
以下是我认为需要传递给Icinga2的信息:
COMSOL CHECK OK : Users of=product1, Total issued=10, Total used=0| UsersOf=product1;;;; TotalIssued=10;;;; TotalUsed=0;;;; COMSOL CHECK OK : Users of=product2, Total issued=10, Total used=0| UsersOf=product2;;;; TotalIssued=10;;;; TotalUsed=0;;;; COMSOL CHECK OK : Users of=product3, Total issued=10, Total used=0| UsersOf=product3;;;; TotalIssued=10;;;; TotalUsed=0;;;; COMSOL CHECK OK : Users of=product4, Total issued=10, Total used=0| UsersOf=product4;;;; TotalIssued=10;;;; TotalUsed=0;;;; COMSOL CHECK OK : Users of=product5, Total issued=50, Total used=11| UsersOf=product5;;;; TotalIssued=50;;;; TotalUsed=11;;;; COMSOL CHECK OK : Users of=product6, Total issued=10, Total used=0| UsersOf=product6;;;; TotalIssued=10;;;; TotalUsed=0;;;; COMSOL CHECK OK : Users of=product7, Total issued=771, Total used=0| UsersOf=product7;;;; TotalIssued=771;;;; TotalUsed=0;;;; COMSOL CHECK OK : Users of=product8, Total issued=771, Total used=8| UsersOf=product8;;;; TotalIssued=771;;;; TotalUsed=8;;;; COMSOL CHECK OK : Users of=product9, Total issued=771, Total used=0| UsersOf=product9;;;; TotalIssued=771;;;; TotalUsed=0;;;; COMSOL CHECK OK : Users of=product10, Total issued=60, Total used=0| UsersOf=product10;;;; TotalIssued=60;;;; TotalUsed=0;;;;
这是我的脚本:
#!/bin/bash license=$(/opt/licenses/comsol/lmstat -a |grep 'Users of' |sed 's/://g' |head -10| awk '{print "COMSOL CHECK OK : Users of="$3", Total issued="$6", Total used="$11 "| UsersOf="$3";;;; TotalIssued="$6";;;; TotalUsed="$11";;;;" }') printf "${license}\n"
正如你可以看到它真的很简单,但我在Icinga这个configuration中得到以下错误…
Plugin Output sed: couldn't write 85 items to stdout: Broken pipe grep: write error: Broken pipe COMSOL CHECK OK : Users of=product1, Total issued=10, Total used=0 COMSOL CHECK OK : Users of=product2, Total issued=10, Total used=0 COMSOL CHECK OK : Users of=product3, Total issued=10, Total used=0 COMSOL CHECK OK : Users of=product4, Total issued=10, Total used=0 COMSOL CHECK OK : Users of=product5, Total issued=50, Total used=10 COMSOL CHECK OK : Users of=product6, Total issued=10, Total used=0 COMSOL CHECK OK : Users of=product7, Total issued=771, Total used=0 COMSOL CHECK OK : Users of=product8, Total issued=771, Total used=8 COMSOL CHECK OK : Users of=product9, Total issued=771, Total used=0 COMSOL CHECK OK : Users of=product10, Total issued=60, Total used=0
我甚至试图把它全部传递到一行,所以输出是这样的:
COMSOL CHECK OK : Users of=product1, Total issued=10, Total used=0| UsersOf=product1;;;; TotalIssued=10;;;; TotalUsed=0;;;; Users of=product2, Total issued=10, Total used=0| UsersOf=product2;;;; TotalIssued=10;;;; TotalUsed=0;;;; Users of=product3, Total issued=10, Total used=0| UsersOf=product3;;;; TotalIssued=10;;;; TotalUsed=0;;;; Users of=product4, Total issued=10, Total used=0| UsersOf=product4;;;; TotalIssued=10;;;; TotalUsed=0;;;; Users of=product5, Total issued=50, Total used=10| UsersOf=product5;;;; TotalIssued=50;;;; TotalUsed=10;;;; Users of=product6, Total issued=10, Total used=0| UsersOf=product6;;;; TotalIssued=10;;;; TotalUsed=0;;;; Users of=product7, Total issued=771, Total used=0| UsersOf=product7;;;; TotalIssued=771;;;; TotalUsed=0;;;; Users of=product8, Total issued=771, Total used=8| UsersOf=product8;;;; TotalIssued=771;;;; TotalUsed=8;;;; Users of=product9, Total issued=771, Total used=0| UsersOf=product9;;;; TotalIssued=771;;;; TotalUsed=0;;;; Users of=product10, Total issued=60, Total used=0| UsersOf=product10;;;; TotalIssued=60;;;; TotalUsed=0;;;;
任何想法如何得到这个工作…将它的工作?
谢谢! 乔