我运行一个中型的Nagios服务器。 它目前监视着大约40个有180个服务的服务器,并且只在一天中增长。
我从一个古老的Nagios设置中迁移出来,这个设置以非常深奥的方式进行configuration,迫使我从零开始重新configuration所有的东西。
现在,服务器正在运行,并为我们所需要的大部分工作,我正在考虑使其更具可扩展性; 当前每台主机都是/ etc / nagios / hosts /中的自己的文件,并且每台主机都在同一个文件中包含所有的服务。 这显然不是最优的,但是也不是将我的所有configuration混淆成数百个不同的文件。
所以我的问题是这个。 对任何经验丰富的Nagiospipe理员来说,使用主机组/服务组的最佳方式是什么, 而不会使configuration过于复杂?
主机组和模板
使用模板可以为主机和服务定义类,例如“正常服务”,“关键服务”,“低优先级主机”。 如果你有多个不同职责的团队,他们也可以作为一种有效的方式来分配责任,所以你可以有一个“linux主机”模板和一个“windows主机”模板,每个模板定义相应的联系信息。
您可以在单个资源上使用多个模板,以便编写相应的正交模板。 例如,你可以拥有
host foo { use windows-host,normal-priority-host ... }
这将拉入Windows团队的联系信息(和升级)以及“正常”主机的轮询速率和阈值。
主机组让您可以将所有主机的一部分检查组合在一起。 有像“baseline-linux-hosts”这样的东西来检查负载,磁盘空间, ssh能力,以及其他东西应该在你监视的每个主机上。 添加“https-servers”等组,检查HTTP连接,HTTPS连接和SSL证书过期date; “文件服务器”,检查NFS和SMB的可访问性,也许更积极的磁盘检查; 或“虚拟机”,检查VM辅助工具是否正常运行。
把每个主机和主机组放在它自己的文件中。 该文件应该首先包含主机或主机组定义,然后是适用于该文件的服务的定义。
如果您在nagios.cfg文件中使用cfg_dir指令,则Nagios将通过该目录recursionsearch。 利用这一点。 对于cfg_dir=/etc/nagios/conf.d ,可以使用如下所示的目录树:
我倾向于为每种资源types(命令,联系人组,联系人,升级,主机组,主机,服务组,时间段)创build一个目录,除了与使用它们的主机或主机组分组的服务之外。
确切的结构可以根据您的组织需求而有所不同。 在过去的工作中,我在每个不同的站点使用hosts.d下的子目录。 在我目前的工作中,大部分的Nagios主机定义都是由Puppetpipe理的,所以Puppetpipe理的主机有一个目录,手动pipe理的主机有一个独立的目录。
请注意,上面也将命令分解成多个文件,通常是通过协议。 因此, 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。
广泛使用服务和主机组,以及模板。 创build主机组,并将服务分配给主机组。 在Web UI中使用servicegroups进行依赖关系,升级和逻辑分组。
如果您拥有所有的组,则添加一个新的主机只需要3到4行:名称,地址,模板和(可选)主机组。 一切都可以模板化。
请务必阅读有关inheritance的文档,以及省时的技巧页面。 多重inheritance可能会变得棘手,但是如果使用正确,这将是一个非常节省时间的过程。
我曾经用这种方式来configuration我的nagios服务器(在我切换到Icinga之前),并且在达到超过500个服务(至less512Mb内存/ 1个CPU服务器)之前不缺乏性能。 hostgroups和servicegroups可以完全分开处理,我会推荐这种方法,因为它允许每个服务器有一个文件(在这个文件中定义了这个服务器的服务),然后是每个hostgroup / servicegroups的文件。 这只是更容易理解/清楚。
如果遇到可扩展性问题,您可能需要查看在客户端执行检查的nagios-nrpe-server,并且所有的nagios服务器都只是要求结果; 这节省了支票的资源。 (Nagios启动check_nrpe,请求客户端,在本地执行检查并回复给nagios)。 请记住,所有检查都不能这样处理(例如SNMP)。
为了完成,即使看起来超出了你的问题的范围,我也会build议切换到Icinga,这是一种更具可扩展性的方式,由一个更强大的社区持有,真正关注新特性实现和用户支持。 configuration是相同的(相同的configuration文件,相同的语法)。
我正在使用这个scheme:
每个实体都有自己的文件。 除了模板之外,您始终可以使您的configuration更清晰可读。 例如,您可能在每个主机上都加载平均值,磁盘空间和内存。 所以创build一个通用模板并使用它是非常简单和方便的。
您不能通过创build组来使configuration复杂化。 asciiphil说,你创build一个文件,或者你可以在一些现有文件中定义相同的组,比如(hosts.cfg或者什么),并且你创build这个文件,或者你对nagios说这个文件是活动的(这是if你创build新场,如果不是,它已经是活动的),这是在nagios.cfg文件,你把新创build的文件的path。 “cfg_file =的/ usr /本地/ Nagios的的/ etc /对象/ NEW_FILE.cfg”
另一件事就是根据你的基础设施进行分组。 如果例如我有Linux和Windows服务器,我会做两个不同的组,一个为Linux和其他窗口。 这与服务是一样的。 根据您希望如何configuration,以及在监视器上进行监视时的情况,您将如何将其视为组。
而对于文件或部分如何做一个组是很简单的。
define hostgroup{ hostgroup_name novell-servers alias Novell Servers members netware1,netware2,netware3,netware4 }
在主机configuration上/或者如果您使用模板或者已经定义了主机模板或服务并且正在使用,您可以自动告诉所有主机/窗口或Linux主机成为您创build的已定义主机组的成员。