我们经营 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 支持的吗?我考虑过可能对主机或密钥使用命名约定,但感觉好像我做错了什么。
正如您提到的,Zabbix 是为主机/服务器和密钥设计的,因此作为层次结构建模的第一步,您可以为每个虚拟机创建主机,然后根据数据中心或机架的需要使用主机组。
Zabbix 没有对集群或漫游应用程序的内置支持。为了监控那些我通常创建“元主机”,基本上没有任何代理的空主机条目。然后我使用一些监控脚本将 zabbix trapper 项发送到该主机。
例如:使用三个虚拟机 app1、app2、app3 进行正常的系统监控(CPU、内存),另外还有一个带有我的应用程序模板的“元主机”服务 1。
zabbix_sender -z zabbixserver -s service1 -k service.some.stat -o 42
然后让我的漫游应用程序使用(或编程语言的等效库调用)发送监视数据。因此,我将拥有所有 VM 的系统统计信息和连续的应用程序统计信息,而不是分布在三个 VM 上的间歇性应用程序统计信息。