Json 如何在services.conf或comands.conf中为单个参数提供多个值

Json 如何在services.conf或comands.conf中为单个参数提供多个值,json,plugins,icinga,Json,Plugins,Icinga,在这里,我尝试使用一个插件来检查服务是否正在运行,如果需要任何警告或任何关键操作,同时检查性能参数 我们使用下面的插件来检查服务器是否处于活动状态,并读取其性能数据 我正在尝试读取一个JSON文件,如下所示,它位于 该插件在命令行上运行良好,它向我显示了所有可用的指标 $:/usr/lib/nagios/plugins$ ./check_http_json.py -H localhost:8080 -p sample.json -m metrics.etp_count metrics.atc_

在这里,我尝试使用一个插件来检查服务是否正在运行,如果需要任何警告或任何关键操作,同时检查性能参数

我们使用下面的插件来检查服务器是否处于活动状态,并读取其性能数据

我正在尝试读取一个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$"
}
}
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
}
services.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$"
}
}
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中传递多个值吗

我已经解决了这个问题

我不得不为下面的代码更改插件文件“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文件的原因,它将其视为单个字符串


必须进一步进行拆分才能获得度量字符串中的项目。

我已经解决了这个问题

我不得不为下面的代码更改插件文件“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文件的原因,它将其视为单个字符串

为了得到度量字符串中的项目,必须进一步进行拆分