Nagios 有两种对象:
- 主机,代表具有不同 IP 地址的系统
- 与主机关联的服务
每个主机都被视为服务的集合;例如,我们可以监控某台计算机上的 SSH 服务、CPU 使用率、可用磁盘空间,在这种情况下,这台计算机被视为“主机”,这三项都被视为“服务”。
我不明白为什么 Nagios 有独特的主机检查和服务检查。阅读这两页已经表明这些概念非常相似,背后的逻辑几乎相同。为什么它们都存在?可以将主机视为一起运行的纯服务集合,并将其网络可达性和其他状态属性定义为某些服务的属性,并对该服务执行“服务检查”。因此,“主机检查”似乎是多余的。而且,事实上,Zabbix(另一种网络监控解决方案)没有“主机检查”的概念。
或者是否存在一些微妙但重要的区别而我仍然不明白?
答案1
与大多数其他事物一样,当尝试了解 Nagios 时,您需要记住初始版本是在 2002 年,但其前身(NetSaint)于 1999 年发布。它已有 20 多年的历史,并且从软件基本架构的设计方式中可以看出。
你所谓的“设计缺陷”只不过是你对当时的环境缺乏了解。世纪之交的系统管理员很可能有一堆他们必须监控的物理服务器,每个物理服务器都运行一个或多个应用程序。对于许多服务器或路由器等其他设备来说,ping 就足够了。
基于此,主机上的“主机检查”(几乎总是 ping)和“服务检查”的层次结构是有意义的,因为环境非常静态。当然,如果你运用今天的思维,这是一个很好的例子:
将主机视为一组一起运行的服务的纯粹集合
...当然,有些设计决策是没有意义的:但在 1999 年没人这么想,他们为什么会这么想呢?容器和虚拟化无论是出于任何实际目的都不存在,或者它们只是一种学术练习,或者只限于业余爱好者环境,那么为什么有人会认为主机是“简单”的服务集合这种抽象的东西呢?恰恰相反,它是一个你可以触摸的物理实体,你甚至可能参与了在机架上安装这个物理实体。很多时候,你与它有着实际的关系。在现实世界中,系统管理员与物理服务器搏斗,这些服务器通常都有非常具体的用途。这是“宠物,而不是牛”的世界。
整个问题的基调都需要一定程度的谦逊,也许为了争论的目的,你应该问相反的问题:为什么 Nagios 尽管有这些明显过时的设计决策,却能存活二十年并且至今仍被广泛用于监控基础设施?
答案是,即使 Nagios 中存在的某些对象没有与时俱进,它仍然简单、可靠,并且如果您正确配置它,它的工作效果会非常好。它基于退出代码设计,这是 UNIX 系统的一个基本特性,20 年来从未改变,并且在未来 20 年内不太可能改变:如果您可以在脚本中检查要检查的内容,那么就可以让 Nagios 运行该检查。它是模块化的,它很简单(但并不容易),并且经过了实战检验。
回答你标题中的问题,没有区别。Nagios 中的对象,就像任何编程语言一样,都是虚构的。它们的存在只是为了使配置更容易、更明显。主机和服务是抽象的,就像联系人和命令一样。
归根结底,Nagios 是cron
有花哨功能的东西,而这些花哨功能解决了现实世界的问题:但是以 2022 年的视角批评 1999 年软件的设计决策,就有点像问为什么 1998 年保养完美的沃尔沃 960 尽管是豪华车型,却不支持 Apple Carplay。
答案2
看起来你已经明白了区别,但你正在寻找原因:
想象一下主机崩溃并且无法再访问。如果没有此设置,您的主机将触发对其的任何检查。您可能需要进行 20 次甚至更多的检查才能意识到发生了什么。
通过这种设置,它只会显示您的主机已关闭,并且您可以立即知道您所处的位置。
当您必须设置多个主机并进行相同的检查时,也存在组织方面的原因。轻松复制粘贴,任何服务检查都会自动进行。
我想,与较新的解决方案相比,这种方法更加老式且更具层次性。