首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nagios如何重复检查服务更多时间不同的参数

nagios如何重复检查服务更多时间不同的参数
EN

Stack Overflow用户
提问于 2018-10-03 00:03:27
回答 1查看 211关注 0票数 0

我在nagios上有一个主机是这样定义的:

代码语言:javascript
复制
define host {
    host_name                       my-host
    address                         ip
    display_name                    my-host
    hostgroups                      windows,windows-process-count
    use                             windows-server
    _PROCESSNAME                    my-process1.exe
    _PROCESSCOUNT                   1

}

在此主机上,我只检查my-process1.exe是否已启动。但是我需要检查更多的进程(my-process1、my-process2等)。我想检查更多的流程,定义如下:

代码语言:javascript
复制
    define host {
    host_name                       my-host
    address                         ip
    display_name                    my-host
    hostgroups                      windows,windows-process-count
    use                             windows-server
    _PROCESSNAME                    my-process1.exe
    _PROCESSCOUNT                   1
    _PROCESSNAME2                   my-process2.exe
    _PROCESSCOUNT2                  1
    _PROCESSNAME2                   my-process3.exe
    _PROCESSCOUNT2                  4
    etc...... for x process that i must control on this server

}

但在这种情况下,我必须定义x个服务、x个主机组和x个命令。这非常不舒服,也不是很优雅。

获得此结果的最佳方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2018-10-04 05:30:15

不幸的是,我不认为有一种优雅的方式可以像你所希望的那样去做。我一直使用面向服务的方法使用Nagios,这意味着我为一个服务或进程定义监控,然后链接使用该进程并需要监控的所有主机或主机组,即使它是一台服务器。对我来说,我发现这是最可靠、整洁和可持续的方式。

如果你能负担得起任何服务失败时的通用警报,你可以准备一个自定义命令,在一个单独的脚本中检查所有这些服务,我不希望在我的仪表板中看到这样的情况。

我知道这是您想要避免的,但是,如果我是您,并且考虑到您只有一台服务器来监视这些进程,我会准备一个单独的服务文件,如下所示:

代码语言:javascript
复制
#!/bin/bash

srvCfg = "/etc/nagios3/conf.d/host1procs.cfg" # I am using Nagios over Debian
server="host1"
processes=("process1.exe" "process2.exe")
srvGroup="customservicegroup"

for proc in "${processes[@]}"; do
    echo "define service{" >> $srvCfg
    echo "  use             generic-service" >> $srvCfg
    echo "  host_name       $server" >> $srvCfg
    echo "  servicegroups       $srvGroup" >> $srvCfg
    echo "  service_description Process monitoring for $proc" >> $srvCfg
    echo "  check_command  check_nt!PROCSTATE!-d SHOWALL -l $proc" >> $srvCfg
    echo "}" >> $srvCfg
done

我假设您的示例只是一个示例,流程名称实际上不能迭代来生成列表。该脚本将生成如下所示的文件:

代码语言:javascript
复制
define service{
  use           generic-service
  host_name     host1
  servicegroups     customservicegroup
  service_description   Process monitoring for process1.exe
  check_command  check_nt!PROCSTATE!-d SHOWALL -l process1.exe
}
define service{
  use           generic-service
  host_name     host1
  servicegroups     customservicegroup
  service_description   Process monitoring for process2.exe
  check_command  check_nt!PROCSTATE!-d SHOWALL -l process2.exe
}

如果您希望所有服务都自动包含在其中,则必须定义servicegroup,否则请删除servicegroups行。

我知道这不是你想要的答案,但希望它能有所帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52612192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档