为 Nagios 监控的每个主机配置不同的 SSH 端口

dan*_*gie 4 linux monitoring remote-connection nagios

我已经在三台服务器上完成了 Nagios 的安装和设置,以便服务器A上的实例也为服务器BC(通过 NRPE)提供报告。

SSHD 有意侦听每个主机上的不同端口,因此我编辑了每个主机上的 /etc/nagios3/conf.d/services_nagios2.cfg 文件以测试适当的端口。服务器BC上 Nagios 的本机 HTTP 实例确认 SSH 正在运行,但服务器A上的报告显示BC上的 SSH 出现严重故障。

我的印象是 NRPE 服务旨在在远程主机上运行本地检查,将其余部分转发回监控主机,然后将数据整理成一份报告,供所有机器使用。

查看配置网页的服务部分(在服务器A 上),Nagios 正在所有三台服务器上测试相同的 SSH 端口,而不是BC上的不同端口。谁能解释为什么?

我可以纠正这个(迄今为止)的唯一方法是为服务器A上的 conf.d/services_nagios2.cfg 文件中的每个远程主机创建一个不同的主机 group_name 和 check_command 。

这不能是唯一的方法吗?

每次远程监控的服务器需要不同的服务配置时,文件的长度肯定会成倍增加!

dan*_*gie 6

好的,我一直在浏览 Nagios3 文档并回答了我问题的端口配置部分......

答案在于 Nagios 配置文件中存在的对象继承模型。基本上,我在每个主机定义中创建了一个自定义变量,用于指定该机器上唯一的 ssh 端口:

define host {
    use              generic-host
    host_name        serverB
    address          10.0.1.3
    _sshport         67382
}
Run Code Online (Sandbox Code Playgroud)

主机在 hostgroups_nagios2.cfg 文件中组合在一起:

# A list of your ssh-accessible servers
define hostgroup {
    hostgroup_name  ssh-servers
    alias           SSH servers
    members         localhost,serverB,serverC
}
Run Code Online (Sandbox Code Playgroud)

该组在 services_nagios2.cfg 中由检查 SSH 的块引用:

# check that ssh services are running
define service {
    hostgroup_name                  ssh-servers
    service_description             SSH
    check_command                   check_ssh_port!$_HOSTSSHPORT
    use                             generic-service
    notification_interval           0 ; set > 0 if you want to be renotified
}
Run Code Online (Sandbox Code Playgroud)

在 check_ssh_port 命令的末尾,您可以看到我添加了 sshport 变量$_HOSTSSHPORT,该变量是在运行检查时从 ssh-servers 主机组中的每个主机继承的。

现在,当添加新服务器时,我只需要使用新主机的详细信息修改我的 hosts_nagios2.cfg 文件。

为了实现向后兼容性,我还修改了我的 generic-host_nagios2.cfg 文件,添加了这一行,_sshport 22这样如果出于某种原因我需要监视在默认端口上运行 SSH 的某些系统,端口配置将已经从通用主机模板继承。

我希望这可以帮助其他陷入同样困境的人。我仍在尝试了解为什么远程检查不使用远程服务器上的自定义配置文件。