我们使用 Nagios 来监控相当多的服务器(约 130 台)。我们监控每台服务器上的 CPU、磁盘、RAM 和其他一些东西。我一直使用 SSH 来运行远程命令,纯粹是因为它几乎不需要在远程服务器上进行任何额外的配置,只需安装 nagios-plugins、创建 nagios 用户并添加 SSH 密钥,所有这些我都已自动放入 shell 脚本中。我从未真正考虑过使用 SSH 而不是 NRPE 的性能影响。
我不太担心 Nagios 服务器上的负载(它可能超出了其功能,CPU 从未超过 10%),但我们每 30 秒运行一次远程检查,每台服务器执行 5 次不同的检查。我假设 SSH 每次检查都需要更多资源,但差别很大吗?(即差别是否足以保证切换到 NRPE)。
如果有任何帮助,我们会监控物理服务器(通常有 8、12 或 16 个物理核心)和 Amazon EC2 中型/大型实例。
答案1
我一直相信 SSH 的管理优势(我使用推送检查) 比任何额外负载都重要。现代 CPU 非常快,加密少量字节的成本非常低,因此只需运行两个进程(SSH 和检查脚本)而不是一个进程(NRPE 触发的检查脚本)。
对于用解释型语言编写的检查脚本,我预计启动解释器(Perl、Python、Bash)的开销将超过启动 SSH 会话的 CPU 成本。鉴于现代 CPU,您的机器更可能受到磁盘或内存限制,而不是 CPU 限制。
假设您的 Nagios 机器能够应对——它必须每秒建立 20 个 SSH 连接——我会选择方便的方式。
这实际上不是对你问题的回答,更多的是说生命太短暂,无暇担心它 :)
答案2
NRPE 是一个 nagios 插件,安装起来很简单,它会在探测配置文件中管理检查请求。nrpe 只有一个缺点,你需要在你想要监控的每台服务器上安装它,在 Linux 操作系统上这很简单,只需 yum/apt-get install nrpe,但在 Windows 服务器上,你需要通过 .exe 安装它,有时你需要重新启动服务器。
我认为 SSH 不是使用 nagios 的最优化方式。NRPE 可能效率更高。
在 nagios 文档中有这样一句话:
“使用 SSH 比 NRPE 插件更安全,但它也会给监控和远程机器带来更大的(CPU)开销。当您开始监控数百或数千台机器时,这可能会成为一个问题。许多 Nagios 管理员选择使用 NRPE 插件,因为它带来的负载较低。”
对我来说,我使用 snmp 协议,它使用起来很简单,并且不需要在服务器上安装任何第三方。
答案3
除了其他答案中给出的建议之外,您是否考虑过ControlMaster
在 nagios 的 .ssh/config 文件中启用以充分利用ssh 多路复用?
换句话说,您的 SSH 连接将“保持开启”,因此建立连接的开销很小,因为这只会发生一次。这仍将通过加密保证隐私,并防止您在服务器上留下开放的 TCP 端口(尽管有防火墙)。此外,您可以通过以下方式限制用户通过 ssh 执行的操作限制其可以执行的命令
答案4
我在尝试在各种操作系统上编译 NRPE 时遇到了很多问题。SSH 运行顺畅高效,而且编写脚本更容易。