【问题标题】:icinga, how to pass attribute to check Commandicinga,如何传递属性来检查命令
【发布时间】:2015-11-25 10:43:14
【问题描述】:

我在 Icinga 中有一个条件规则来执行检查 cas 身份验证的脚本。 该脚本使用 URL 并在返回的页面中 grep 字符串。 URL 和字符串被赋予脚本的属性。

这是主机的定义:

 object Host "m" {
  address = "1xx.xx7.25"
  import "linux-server"
  display_name = "m"    
  vars.curl_casURL = "http://xxx.html"
  vars.curl_casGREP = "Returned String"
}

这是服务的代码,它仅在主机中定义了 curl_casURL 和 curl_casGREP 2 个变量时执行:

apply Service "cas"  {
  import "generic-service"
  check_command = "cas"
  assign  where (host.vars.curl_casURL && host.vars.curl_casGREP)
}

在web界面,没关系,我看到脚本是为服务器“m”执行的。

命令如下:

object CheckCommand "cas" {
  import "plugin-check-command"
  command = [ PluginDir + "/icinga-curl_cas.sh" ]
  command +=[  vars.curl_casURL + vars.curl_casGREP ]
}

但由于脚本的第一行,脚本从不接收参数并回显临界状态:

if [ ! $1  ]
 then
  echo "GIVE ME AN  URL, PLEASE!"
  exit $STATE_CRITICAL
fi

我没有在文档中找到答案。谁能帮助我? 谢谢!!

【问题讨论】:

    标签: service attributes conditional icinga


    【解决方案1】:

    在您的示例中将自定义属性作为运行时宏访问是错误的:

    object CheckCommand "cas" {
      import "plugin-check-command"
      command = [ PluginDir + "/icinga-curl_cas.sh" ]
      command +=[  vars.curl_casURL + vars.curl_casGREP ]
    }
    

    使用您的 CheckCommand 询问如何将自定义属性作为命令属性访问需要对运行时宏及其值,当然还有命令参数语法了解甚少。

    由于您使用的是没有任何键的有序参数列表,所以我只会以丑陋的方式将自定义属性值作为运行时宏字符串添加到数组中。

    object CheckCommand "cas" {
      import "plugin-check-command"
      command = [ PluginDir + "/icinga-curl_cas.sh", "$curl_casURL$", "$curl_casGREP$" ]
    }
    

    宏解析器会自动查找所需的值,无论它们是在 CheckCommand、Host 对象还是使用 CheckCommand 的服务上定义为默认值。

    虽然我建议您将 GetOpts 与您的脚本的参数和值一起使用(更好的可读性和值的位置在以后的更改中并不重要)。

    while getopts "u:g:" opt; do
      case $opt in
        u)
          URL=$OPTARG
          ;;
        g)
          GREP=$OPTARG
          ;;
        [....]
        \?)
          echo "Invalid option: -$OPTARG" >&2
          exit 1
          ;;
        :)
          echo "Option -$OPTARG requires an argument." >&2
          exit 1
          ;;
      esac
    done
    

    那么使用命令参数非常简单。它还允许您添加一个参数描述,这在以后会有所帮助(并通过 2.4 中的 API 检索)。

    object CheckCommand "cas" {
      import "plugin-check-command"
      command = [ PluginDir + "/icinga-curl_cas.sh" ]
    
      arguments = {
        "-u" = {
          value = "$curl_casURL$"
          description = "URL for curl"
        }
        "-g" = {
          value = "$curl_casGREP$"
          description = "GREP for curl"
        }
      }
    }
    

    【讨论】:

    • 谢谢。你节省了我的时间!我将使用第二种方式。我查看了 icinga 文档并没有找到丑陋方式的正确语法!
    • 在这种情况下,while getopts 的良好语法是:while getopts "u:g:" opt; do
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 2017-11-08
    • 2020-11-12
    • 1970-01-01
    • 2021-02-14
    相关资源
    最近更新 更多