在这里,我尝试使用插件检查服务是否正在运行,如果有任何警告或需要任何关键操作,同时性能参数。
我们使用下面的插件来检查服务器是否存活并读取它的性能数据JSON https://github.com/drewkerrigan/nagios-http-json
我正在尝试阅读http://localhost:8080/sample.json
上托管的JSON文件该插件在命令行上完美运行,它向我显示所有可用的度量标准。
$:/usr/lib/nagios/plugins$ ./check_http_json.py -H localhost:8080 -p sample.json -m metrics.etp_count metrics.atc_count
OK: Status OK.|'metrics.etp_count'=101 'metrics.atc_count'=0
但是当我在Icinga2配置中尝试相同时,它并没有向我显示这个性能指标,虽然它没有给出任何错误,但同时它没有显示任何值。
按如下方式找到JSON,Command.conf和Service.conf。
{
"metrics": {
"etp_count": "0",
"atc_count": "101",
"mean_time": -1.0,
}
}
以下是我的commands.conf和services.conf
commands.conf
/* Json Read Command */
object CheckCommand "json_check"{
import "plugin-check-command"
command = [PluginDir + "/check_http_json.py"]
arguments = {
"-H" = "$server_port$"
"-p" = "$json_path$"
"-w" = "$warning_value$"
"-c" = "$critical_value$"
"-m" = "$Metrics1$,$Metrics2$"
}
}
services.conf
apply Service "json"{
import "generic-service"
check_command = "json_check"
vars.server_port="localhost:8080"
vars.json_path="sample.json"
vars.warning_value="metrics.etp_count,1:100"
vars.critical_value="metrics.etp_count,101:1000"
vars.Metrics1="metrics.etp_count"
vars.Metrics2="metrics.atc_count"
assign where host.name == NodeName
}
有没有人知道我们如何在Command.conf和Service.conf中传递多个值?
答案 0 :(得分:0)
我已经解决了这个问题。
我不得不更改插件文件" check_http_json.py"以下代码
def checkMetrics(self):
"""Return a Nagios specific performance metrics string given keys and parameter definitions"""
metrics = ''
warning = ''
critical = ''
if self.rules.metric_list != None:
for metric in self.rules.metric_list:
替换为
def checkMetrics(self):
"""Return a Nagios specific performance metrics string given keys and parameter definitions"""
metrics = ''
warning = ''
critical = ''
if self.rules.metric_list != None:
for metric in self.rules.metric_list[0].split():
实际上问题是列表处理不当,因此无法遍历列表中的项目,因为services.config文件将其视为单个字符串。
必须进一步拆分以获取Metrics字符串中的项目。