0

假设给定主机FooHost正在运行 Apache2。Icinga2 通过 ssh 命令运行检查并发现 Apache2 未运行,这会触发严重警报。

是否可以让 Icinga2 对此事件执行脚本?在这个例子中,我想编写一个脚本来执行 SSH 远程执行systemctl restart apache2

或者,我们可以编写一个可以部署在所有服务器上的看门狗脚本,但是将它写在 Icinga2 盒子上更有意义,并使用 ssh 远程执行,因为这允许集中控制。

我认为没有理由让工程师登录来解决这个问题,除非重新启动也失败了。

4

2 回答 2

1

您可以使用事件命令(如 Icinga 1.x / Nagios 中的事件处理程序)来实现此目的。

文档显示了以下示例,该示例使用自定义shell脚本执行重新启动操作:

object EventCommand "restart_service" {
  command = [ PluginDir + "/restart_service" ]

  arguments = {
    "-s" = "$service.state$"
    "-t" = "$service.state_type$"
    "-a" = "$service.check_attempt$"
    "-S" = "$restart_service$"
  }

  vars.restart_service = "$procs_command$"
}

object Service "Process httpd" {
  check_command = "procs"
  event_command = "restart_service"
  max_check_attempts = 4

  host_name = "icinga2-client1.localdomain"
  command_endpoint = "icinga2-client1.localdomain"

  vars.procs_command = "httpd"
  vars.procs_warning = "1:10"
  vars.procs_critical = "1:"
}
于 2019-02-07T08:02:58.187 回答
0

据我所知,这是不可能的,但您可以使用nagios nrpe 命令cronjob,它是这样的执行命令

pgrep apache2 || /bin/systemctl restart apache2 > /dev/null 2>&1

或者

/bin/systemctl status apache2 || /bin/systemctl restart apache2

这意味着如果 apache2 服务未运行,它将重新启动。

于 2018-11-12T12:20:37.720 回答