Nagios 服务器最佳实践?

Nagios 服务器最佳实践?

我运行一个中型 Nagios 服务器。它目前监控大约 40 台服务器和 180 个服务,并且数量还在日益增长。

我从旧的 Nagios 设置迁移过来,该设置以非常深奥的方式配置,迫使我从头开始重新配置一切。

现在服务器已经运行,并且可以满足我们大部分的需求需要我正在研究如何让它更具可扩展性;目前每个主机在 中都有自己的文件/etc/nagios/hosts/,并且每个主机的所有服务都在同一个文件中。这显然不是最佳选择,但将我的所有配置混淆到数百个不同的文件中也不是最佳选择。

所以我的问题是:对于任何有经验的 Nagios 管理员来说,利用主机组/服务组的最佳方法是什么没有配置过于复杂?

答案1

主机组和模板。

模板可让您为主机和服务定义类别,例如“正常服务”、“关键服务”、“低优先级主机”。如果您有多个团队负责不同的职责,模板也是划分职责的有效方法,因此您可以拥有一个“linux 主机”模板和一个“windows 主机”模板,每个模板都定义相应的联系信息。

您可以在单个资源上使用多个模板,这样就可以组合适当正交的模板。例如,您可以拥有

host foo {
    use windows-host,normal-priority-host
    ...
}

它将提取 Windows 团队的联系信息(和升级信息)以及“正常”主机的轮询率和阈值。

主机组可让您将针对主机子集的所有检查组合在一起。添加诸如“baseline-linux-hosts”之类的项目,用于检查负载、磁盘空间、ssh能力以及您监控的每个主机上应有的任何其他内容。添加诸如“https-servers”之类的组,用于检查 HTTP 连接、HTTPS 连接和 SSL 证书到期日期;添加“fileservers”之类的组,用于检查 NFS 和 SMB 可访问性以及可能更积极的磁盘检查;或添加“virtual-machines”之类的组,用于检查 VM 可访问性工具是否正常运行。

将每个主机和主机组放在各自的文件中。该文件应首先包含主机或主机组定义,然后包含适用于该主机或主机组的服务定义。

如果您cfg_dirnagios.cfg文件中使用指令,Nagios 将递归搜索该目录。利用这一点。对于的设置cfg_dir=/etc/nagios/conf.d,您可以拥有如下目录树:

  • /etc/nagios/conf.d/
    • 命令.d/
      • 配置文件
      • nrpe配置文件
      • smtp配置文件
      • ssh配置文件
    • 主机.d/
      • 主机1配置文件
      • 主机2.cfg
      • 主机3.cfg
    • 主机组.d/
      • 主机组1.cfg
      • 主机组2.cfg

我倾向于为每种资源类型(命令、联系人组、联系人、升级、主机组、主机、服务组、时间段)创建一个目录,服务除外,这些目录与使用它们的主机或主机组分组在一起。

确切的结构可能因组织需求而异。在过去的工作中,我hosts.d为每个不同的站点使用了子目录。在我目前的工作中,大多数 Nagios 主机定义都由 Puppet 管理,因此有一个目录用于 Puppet 管理的主机,还有一个单独的目录用于手动管理的主机。

请注意,上述命令还将命令分解为多个文件,通常是按协议分解的。因此,文件包含nrpe.cfg命令check_nrpecheck_nrpe_1arg,而可以http.cfg包含check_http、、、和。1check_http_portcheck_httpscheck_https_portcheck_https_cert

我通常不会有大量模板,因此通常只有一个hosts.d/templates.cfg文件和一个services.d/templates.cfg文件。如果您更频繁地使用它们,则可以将它们放入目录中适当命名的文件中templates.d

1我还喜欢有一个check_http_blindly命令,基本上是check_http -H $HOSTADDRESS$ -I $HOSTADDRESS$ -e HTTP/1.;即使它得到 403 响应代码,它也会返回 OK。

答案2

充分利用服务和主机组以及模板。创建主机组并将服务分配给主机组。使用服务组在 Web UI 中进行依赖关系、升级和逻辑分组。

如果您为所有内容都设置了组,则添加新主机只需 3 或 4 行:名称、地址、模板和(可选)主机组。所有内容都可以模板化。

请务必阅读以下文档遗产,以及省时技巧页面。多重继承可能会比较棘手,但如果使用得当,它可以节省大量时间。

答案3

我曾经以这种方式配置我的 nagios 服务器(在我切换到 Icinga 之前),并且至少在使用 512Mb 内存/1 CPU 的服务器达到 500 多个服务之前,性能并不差。主机组和服务组可以完全分开处理,我推荐这种方法,因为它允许每个服务器有一个文件(此文件中定义了此服务器的服务),然后每个主机组/服务组都有一个文件。这只是更容易理解/更清晰。

如果您遇到可扩展性问题,您可能需要查看 nagios-nrpe-server,它在客户端执行检查,而您的 nagios 服务器所做的只是请求结果;这节省了检查的资源。(Nagios 启动 check_nrpe,请求客户端,在本地执行检查并回复 nagios)。请记住,并非所有检查都以这种方式处理(例如 SNMP)。

最后,即使这似乎超出了您的问题的范围,我还是建议您改用 Icinga,因为它更具可扩展性,并且拥有更强大的社区,真正关心新功能的实现和用户支持。配置是相同的(相同的配置文件,相同的语法)。

答案4

您不能通过创建组来使配置复杂化。正如 asciiphil 所说,您可以创建一个文件,或者您可以在一些现有文件(如 hosts.cfg 或其他文件)中定义相同的组,然后创建此文件或告诉 nagios 此文件处于活动状态(这是如果您创建新文件,如果没有,则它已经处于活动状态),这是在 nagios.cfg 文件中,您将新创建文件的路径放在其中。“cfg_file=/usr/local/nagios/etc/objects/NEW_FILE.cfg”

另一件事是根据您的基础架构进行分组。例如,如果我有 Linux 和 Windows 服务器,我将创建两个不同的组,一个用于 Linux,另一个用于 Windows。服务也一样。根据您希望如何配置和查看监视器上的监视情况,您希望如何将它们视为组。

对于文件或部分如何创建组来说,这很简单。

    define hostgroup{
    hostgroup_name novell-servers
    alias Novell Servers
    members netware1,netware2,netware3,netware4
    }

在主机配置中/或者如果您使用模板或者如果您已经定义了主机模板或服务并使用,您可以自动告诉所有主机/ Windows 或 Linux 主机成为您创建的定义主机组的成员。

相关内容