我们经营 SAAS 业务,并且拥有数百个可以在服务器之间漫游的进程。它们是 .net 进程,可以在一组机器中的任何一台上创建(启动),运行一段时间(通常是几周),然后迁移到另一台机器。
这些流程有许多不同的时间序列输出(使用 RabbitMQ 广播),并且我们有自己的定制系统来监控应用程序流程。
我们有各种监控工具(例如 LogicMonitor),但我们开始使用 Zabbix 进行服务器监控。
对我来说,将来自所有来源(交换机、服务器、主机、虚拟机、应用程序)的所有时间序列数据放到一个地方是有意义的,因为这样我们就可以比较服务器范围的数据(例如 CPU 负载、内存负载)。
我正在考虑为此使用 Zabbix。
我可以看到 Zabbix 支持使用https://www.zabbix.com/documentation/3.0/manual/concepts/sender。所以我知道我可以将数据放入其中。
鉴于 Zabbix 是以服务器为中心的,每个时间序列数据都有密钥,因此我很难理解如何为此设置 Zabbix。但是,我预计这是一个常见的情况,但我对 Zabbix 还不熟悉。
我设想的层次结构如下:
DataCenter (1 of n)
-> Rack (1 of n)
keys (eg power used)
-> Physical Machine (1 of n) "The hosts"
keys (eg CPU, Memory, Network Bandwidth)
-> VM (1 of n)
keys (eg CPU, Memory, Network Bandwidth)
-> Application
keys (eg CPU, Memory, Network Bandwidth, Jobs per second etc)
Zabbix 支持这个吗?我考虑过使用主机或密钥的命名约定,但感觉我做错了什么。
答案1
正如您所提到的,Zabbix 是为主机/服务器和密钥设计的,因此作为对层次结构进行建模的第一步,您可以为每个 VM 创建主机,然后根据数据中心或机架的需要使用主机组。
Zabbix 没有内置对集群或漫游应用程序的支持。为了监控这些,我通常会创建“元主机”,基本上是没有任何代理的空主机条目。然后我使用一些监控脚本将 zabbix trapper 项目发送到该主机。
例如:使用三个虚拟机 app1、app2、app3,并进行常规系统监控(CPU、内存),此外还有一个“元主机”service1,其中包含我的应用程序模板。然后让我的漫游应用程序发送监控数据zabbix_sender -z zabbixserver -s service1 -k service.some.stat -o 42
(或编程语言的等效库调用)。
因此,我将拥有所有虚拟机的系统统计信息和连续的应用程序统计信息,而不是分布在三个虚拟机上的间歇的应用程序统计信息。