Zabbix状态图标灯显示
一、概览
Zabbix主机监控状态有四种类型:Zabbix(Zabbix agent) SNMP/JMX/IPMI,可通过对应图标的颜色直观判断主机数据采集是否正常。使用Zabbix Agent作为采集协议,有时会出现灰色的情况,对于初学者是一个较为困惑的点,本次主要阐述不同Zabbix版本中对ZBX标识的状态显示。
二、主被动模式
Zabbix Agent的采集分为二种模式,主动模式(Active checks)和被动模式(Passive checks)。可简单理解Zabbix主动拉取监控数据(被动模式),Agent主动往Server/Proxy推送监控数据(主动模式)。主动模式状态灯显示灰色。
一般默认情况下Zabbix Agent会同时配置主动和被动模式,被动监控指标Zabbix图标会显示绿色,如果Zabbix 被动模式连接出现问题,Zabbix图标会变成红色,鼠标停留在图标上面会显示具体的错误信息,可根据此错误信息进行问题排查。Zabbix图标显示状态必须具有对应类型的监控指标,否则图标图标一直显示灰色状态,对Zabbix6.2以下版本,图标显示情况如下:
被动模式(Passive checks) 主动模式(Active checks) 监控正常绿色、灰色、监控异常 红色,可以看到在Zabbix低版本中图标状态会跟随被动模式状态变化而变化,如果主动模式出现故障,则无法通过Zabbix图标显示。
三、新版本特性
为解决上述问题,从Zabbix6.2版本开始Zabbix官方增加了主动模式下的心跳检测函数send_heartbeat_msg,源码见: 解压目录/src/zabbix_agent/active.c
static void send_heartbeat_msg(zbx_vector_ptr_t *addrs)
static ZBX_THREAD_LOCAL int last_ret = SUCCEED;
int ret, level;
zbx_socket_t s;
struct zbx_json json;
zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __func__);
zbx_json_init(&json, ZBX_JSON_STAT_BUF_LEN);
zbx_json_addstring(&json, ZBX_PROTO_TAG_REQUEST, ZBX_PROTO_VALUE_ACTIVE_CHECK_HEARTBEAT, ZBX_JSON_TYPE_STRING);
zbx_json_addstring(&json, ZBX_PROTO_TAG_HOST, CONFIG_HOSTNAME, ZBX_JSON_TYPE_STRING);
zbx_json_addint64(&json, ZBX_PROTO_TAG_HEARTBEAT_FREQ, CONFIG_HEARTBEAT_FREQUENCY);
level = SUCCEED != last_ret ? LOG_LEVEL_DEBUG : LOG_LEVEL_WARNING;
if (SUCCEED == (ret = zbx_connect_to_server(&s, CONFIG_SOURCE_IP, addrs, CONFIG_TIMEOUT, CONFIG_TIMEOUT,
configured_tls_connect_mode, 0, level)))
{
zabbix_log(LOG_LEVEL_DEBUG, "sending [%s]", json.buffer);
if (SUCCEED == (ret = zbx_tcp_send(&s, json.buffer)))
{
(void)zbx_tcp_recv(&s); /* allow Zabbix server or Zabbix proxy to close connection */
if (last_ret == FAIL)
{
zabbix_log(LOG_LEVEL_WARNING, "Successfully sent heartbeat message to [%s]:%d",
((zbx_addr_t *)addrs->values[0])->ip,
((zbx_addr_t *)addrs->values[0])->port);
}
}
}
if (SUCCEED != ret)
{
zabbix_log(level, "Unable to send heartbeat message to [%s]:%d [%s]",
((zbx_addr_t *)addrs->values[0])->ip, ((zbx_addr_t *)addrs->values[0])->port,
zbx_socket_strerror());
}
zbx_tcp_close(&s);
last_ret = ret;
zabbix_log(LOG_LEVEL_DEBUG, "Out %s()", __func__);
}
并且在6.2及以上版本Agent配置文件中增加了HeartbeatFrequency参数配置,可自行配置主动模式心跳检测时间,默认60秒发送一次心跳检测,当设置为0时,表示禁用主动模式心跳检测。
### Option: HeartbeatFrequency
# Frequency of heartbeat messages in seconds.
# Used for monitoring availability of active checks.
# 0 - heartbeat messages disabled.
# Mandatory: no
# Range: 0-3600
# Default: 60
# HeartbeatFrequency=
被动模式(Passive checks) 主动模式(Active checks) 监控正常、绿色、绿色、监控异常 红色、红色,当一个主机同时配置了主动和被动模式,并且同时使用主被动类型的监控指标,Zabbix图标则会按照以下规则显示:
1.被动模式正常,主动模式正常,Zabbix状态图标显示绿色:
2.被动模式正常,主动模式异常, Zabbix状态图标显示黄色:
3.被动模式正常,主动模式未知,Zabbix状态图标显示灰色:
如果Zabbix Server版本为6.2及以上版本,Zabbix Agent 低于Zabbix Server版本为6.2以下,此时由于低版本Zabbix Agent并无主动模式心跳检测功能及参数,因此无法获取状态显示Unknown,状态图标将显示为灰色。
四、总结
Zabbix版本更新迭代快,每个大的新版本将会对应增加很多新特性和功能,在使用新版本前一定要了解版本新特性,避免一些新的特性和功能导致部分实际场景功能失效。
欢迎一起交流探讨,解决你的技术难题!V:king_songax