Nagios服务器最佳做法?


10

我运行中型Nagios服务器。它目前监视着约40台具有180种服务的服务器,并且每天都在增长。

我从旧的Nagios设置迁移而来,该设置以非常深奥的方式配置,迫使我从头开始重新配置所有内容。

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

所以我的问题是:对于任何经验丰富的Nagios管理员而言,在使配置过于复杂的情况下利用主机组/服务组的最佳方法是什么?

Answers:


13

主机组和模板。

模板使您可以定义主机和服务的类,例如“正常服务”,“关键服务”,“低优先级主机”。如果您有多个具有不同职责的团队,它们也可以用作一种划分职责的有用方法,因此您可以拥有一个“ Linux主机”模板和一个“ Windows主机”模板,每个模板定义相应的联系信息。

您可以在单个资源上使用多个模板,因此可以组成适当的正交模板。例如,您可以

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

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

主机组使您可以将主机子集的所有检查分组在一起。具有诸如“ baseline-linux-hosts”之类的功能,可以检查负载,磁盘空间,ssh功能以及所监视的每个主机上应包含的其他任何内容。添加诸如“ https服务器”之类的组,以检查HTTP连接,HTTPS连接和SSL证书的到期日期;“文件服务器”,用于检查NFS和SMB的可访问性,以及可能更积极的磁盘检查;或“虚拟机”,以检查VM可访问性工具是否正常运行。

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

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

  • /etc/nagios/conf.d/
    • 命令。d /
      • http.cfg
      • nrpe.cfg
      • smtp.cfg
      • ssh.cfg
    • hosts.d /
      • host1.cfg
      • host2.cfg
      • host3.cfg
    • hostgroups.d /
      • hostgroup1.cfg
      • hostgroup2.cfg

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

确切的结构可以根据您的组织需求而变化。在过去的工作中,我hosts.d为每个不同的站点使用子目录。在我目前的工作中,大多数Nagios主机定义都是由Puppet管理的,因此,有一个目录用于Puppet管理的主机,另外一个目录用于手工管理的主机。

请注意,以上内容也通常按协议将命令分成多个文件。因此,该nrpe.cfg文件将有命令check_nrpecheck_nrpe_1arg,虽然http.cfg可能有check_httpcheck_http_portcheck_httpscheck_https_port,和check_https_cert1个

我通常没有大量的模板,因此我通常只有一个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。


6

广泛使用服务和主机组以及模板。创建主机组,并将服务分配给主机组。将服务组用于Web UI中的依赖项,升级和逻辑分组。

如果您有所有组,则添加新主机只需3或4行:名称,地址,模板和(可选)主机组。一切都可以模板化。

请务必阅读有关继承的文档以及省时的技巧页面。多重继承可能会很棘手,但是正确使用它会节省大量时间。


我想在配置上找到平衡点;当另一个管理员不得不接管服务器时,太多的继承会变得很棘手(我是实习生,所以我将不再运行它更长的时间)。
Michael Pobega 2014年

1
然后,可能要远离多重继承。如果要保持简单,只需使用级联模板。
基思

1

我习惯于以这种方式配置我的nagios服务器(在切换到Icinga之前),直到使用512Mb内存/ 1个CPU服务器至少可以提供500多个服务之前,性能才不乏不足。主机组和服务组可以完全分开对待,我建议使用这种方法,因为它允许每个服务器有一个文件(此文件中定义了该服务器的服务),然后每个主机组/服务组有一个文件。这只是更容易理解/清楚。

如果遇到可伸缩性问题,则可能需要看一下nagios-nrpe-server,它在客户端执行检查,而nagios服务器所做的只是索要结果。这样可以节省支票的资源。(Nagios启动check_nrpe,请求客户端,在本地执行检查并回复给nagios)。请记住,不能以这种方式处理所有检查(例如SNMP)。

最后,即使您的问题似乎不在讨论范围之内,我还是建议改用Icinga,它具有更大的可扩展性,由一个更在意新功能实现和用户支持的更强大社区所支持。配置是相同的(相同的配置文件,相同的语法)。


可扩展性实际上是指配置,而不是可扩展性问题。我不担心达到这个极限。您对主机组/服务组的确切含义是什么?我不明白你的解释。
Michael Pobega 2014年

1

我正在使用此方案:

  • 主机,
  • 主机组
  • 远程服务,
  • 当地服务。

每个实体都有其自己的文件。除了模板之外,您还可以始终使配置文件更清晰易读。例如,您可能在每个主机上都有平均负载,磁盘空间和内存。因此,创建通用模板并使用它非常容易和方便。


1

您不能使创建组复杂化配置。正如asciiphil所说,您可以制作一个文件,也可以在某些现有文件中定义相同的组,例如(hosts.cfg或其他内容),然后制作此文件,或者对nagios说此文件处于活动状态(这是您将创建新的文件,如果尚未创建,则该文件已处于活动状态),这位于nagios.cfg文件中,您在其中放置了新创建文件的路径。“ cfg_file = / usr / local / nagios / etc / objects / NEW_FILE.cfg”

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

对于文件或零件如何进行分组很简单。

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.