我想知道您是否有关于如何大规模设置 nagios 的经验或想法。
以前我们使用nagios和nagiosql进行手动设置,对于一些服务器来说它相当舒服。
最近服务器数量发生了变化,使用 nagiosql 进行手动配置变得不方便。我们使用 chef 来启动新实例,我想知道是否有将 chef 和 nagios 一起使用的良好做法。作为一种选择,我们可以只使用 nagios,并在每次启动新实例时重写 nagios 的配置文件(基于服务器角色)。
例如,场景可能是这样的,启动新的mysql服务器后,有一个专门的配方用于重写nagios设置文件。配方可以从chef数据包中获取有关每个服务器的所有数据,并根据chef中的角色构建设置。
答案1
在过去 18 个月中,我使用 Chef 实施了三种略有不同的 Nagios 监控解决方案。它们都基于 Chef 的模板资源,用于使用 ERB 语法生成配置文件,并且效果非常好。您有一个 Ruby 数组或主机和服务的哈希值,并且会生成 Nagios 配置文件。测试和调试都非常简单。
- 完全基于数据包的配置。在这种情况下,有一个
nagios_hosts
和一个nagios_services
数据包,每个主机都有一个密钥,用于指示运行哪些服务检查,例如check_load
。check_disk
此设置可以快速启动并且运行良好,但如果删除主机或添加新主机,则必须有人在场更新数据包。实际上,很容易忘记这一点,事情可能会过时,从而导致麻烦。 - Chef 基于属性的配置。在这里,我使用 Chef REST API 查询一个或多个 Chef 服务器,以下拉节点列表并根据它们分配的角色为它们分配服务检查。依赖 Chef 意味着很难监控非 Chef 系统,例如设备、网络设备或因某种原因不运行 Chef 的节点。Chef 最终会通过网络为大量节点发送大量 JSON 数据,处理所有这些数据会在 Chef 服务器以及 Nagios 服务器生成配置文件时增加负载。
- Rails 应用程序生成 Nagios 配置文件。我最终通过将 Nagios 配置信息存储在数据库中并让 Rails 应用程序生成配置文件来打破 Chef 依赖关系。每个 Nagios 服务器都会发出 REST 请求并下载使用 ERB 和 MySQL 数据库生成的配置文件。要实现这一点需要做很多工作,但到目前为止,它在监控 Chef 和非 Chef 节点方面效果很好。
因此,在经历了所有这些之后,我可能会建议对小型(数十到数百)节点使用类似选项 2 的方法。不过我会尽量保持简单。我使用 Chef 的属性系统来定义和覆盖基于角色的服务检查阈值,虽然它可以工作,但它太复杂了,食谱最终变成了一团难以维护的混乱。
祝你好运!