我运行一个中型 Nagios 服务器。它目前监控大约 40 台服务器,提供 180 项服务,并且每天都在增长。
我从以非常深奥的方式配置的旧 Nagios 设置迁移,迫使我从头开始重新配置所有内容。
现在服务器正在运行并可以满足我们的大部分需求,我正在考虑使其更具可扩展性;目前每个主机都是它自己的文件/etc/nagios/hosts/
,并且每个主机在同一个文件中都有它的所有服务。这显然不是最优的,但也不是将我的所有配置混淆成数百个不同的文件。
所以我的问题是:对于任何有经验的 Nagios 管理员,在不过度复杂配置的情况下使用主机组/服务组的最佳方法是什么?
主机组和模板。
模板让您可以为您的主机和服务定义类,例如“普通服务”、“关键服务”、“低优先级主机”。如果您有多个具有不同职责的团队,它们还可以作为一种有用的方式来划分职责,因此您可以拥有一个“linux host”模板和一个“windows host”模板,每个模板都定义了适当的联系信息。
您可以在单个资源上使用多个模板,因此您可以组合适当的正交模板。例如,您可以拥有
这将提取 Windows 团队的联系信息(和升级)以及“正常”主机的轮询率和阈值。
主机组允许您将针对主机子集的所有检查组合在一起。拥有诸如“baseline-linux-hosts”之类的东西来检查负载、磁盘空间、
ssh
能力,以及你监控的每台主机上应该有的任何其他东西。添加“https-servers”等组,检查 HTTP 连接、HTTPS 连接和 SSL 证书到期日期;“文件服务器”检查 NFS 和 SMB 可访问性以及可能更积极的磁盘检查;或“虚拟机”,检查 VM 辅助工具是否正常运行。将每个主机和主机组放在自己的文件中。该文件应首先包含主机或主机组定义,然后是适用于它的服务的定义。
如果您
cfg_dir
在文件中使用该指令nagios.cfg
,Nagios 将递归搜索该目录。好好利用它。对于 的设置cfg_dir=/etc/nagios/conf.d
,您可以拥有如下目录树:我倾向于为每种资源类型(命令、联系人组、联系人、升级、主机组、主机、服务组、时间段)创建一个目录,但服务除外,这些服务与使用它们的主机或主机组分组。
精确的结构可以根据您的组织需求而有所不同。在过去的工作中,我
hosts.d
为每个不同的站点使用了子目录。在我目前的工作中,大多数 Nagios 主机定义都是由 Puppet 管理的,因此 Puppet 管理的主机有一个目录,手动管理的主机有一个单独的目录。请注意,上面还将命令分解为多个文件,通常是通过协议。因此,该
nrpe.cfg
文件将具有命令check_nrpe
和check_nrpe_1arg
,而http.cfg
可能具有check_http
、check_http_port
、check_https
、check_https_port
和check_https_cert
. 1我通常没有大量的模板,所以我通常只有一个
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。广泛使用服务和主机组以及模板。创建主机组,并将服务分配给主机组。将服务组用于 Web UI 中的依赖关系、升级和逻辑分组。
如果您有所有内容的组,则添加新主机只需 3 或 4 行:名称、地址、模板和(可选)主机组。一切都可以模板化。
请务必阅读有关继承的文档,以及节省时间的技巧页面。多重继承可能会变得棘手,但如果使用得当,它可以节省大量时间。
我曾经以这种方式配置我的 nagios 服务器(在我切换到 Icinga 之前),并且在使用 512Mb 内存 / 1 CPU 服务器至少达到 500 多个服务之前,性能并不缺乏。主机组和服务组可以完全分开处理,我会推荐这种方法,因为它允许每个服务器有一个文件(在这个文件中定义了这个服务器的服务),然后每个主机组/服务组都有一个文件。这只会更容易理解/清楚。
如果您遇到可伸缩性问题,您可能想看看 nagios-nrpe-server,它在客户端执行检查,而您的 nagios 服务器所做的只是询问结果;从而节省了支票的资源。(Nagios 启动 check_nrpe,请求客户端,在本地执行检查并回复 nagios)。请记住,不能以这种方式处理所有检查(例如 SNMP)。
最后,即使它似乎超出了您的问题的范围,我建议切换到 Icinga,它的可扩展性更高,由一个真正关心新功能实现和用户支持的更强大的社区持有。配置相同(相同的配置文件,相同的语法)。
我正在使用这个方案:
每个实体都有自己的文件。除了使用模板之外,您始终可以使您的配置更清晰,更具可读性。例如,您可能在每台主机上都有平均负载、磁盘空间、内存。所以创建一个通用模板并使用它是非常容易和方便的。
您不能通过创建组来使配置复杂化。正如 asciiphil 所说,您创建一个文件,或者您可以在某些现有文件中定义相同的组,例如(hosts.cfg 或其他文件),然后您创建这个文件,或者您对 nagios 说这个文件是活动的(如果您创建新字段,如果不是,它已经处于活动状态),这是在 nagios.cfg 文件中放置新创建文件的路径的位置。“cfg_file=/usr/local/nagios/etc/objects/NEW_FILE.cfg”
另一件事就是根据您的基础设施进行分组。例如,如果我有 linux 和 windows 服务器,我将创建两个不同的组,一个用于 linux,另一个用于 windows。服务也是如此。取决于您希望如何配置和查看何时在监视器上进行监控,您希望如何将它们视为组。
对于文件或部分,如何创建一个组很简单。
在主机配置上/或者如果您使用模板,或者如果您已经定义了主机模板或服务并使用使用,您可以自动告诉所有主机/windows 或 linux 主机成为您创建的已定义主机组的成员。