今天你绿了吗?ZABBIX图标显示详解

2022-12-12 09:18:20 浏览数 (1)

张世宏(当代张思德) | Zabbix开源社区签约专家

  • 2016-2021年Zabbix中国峰会演讲嘉宾
  • 2020年Zabbix全球峰会演讲嘉宾
  • 自主研发开源组件Zabbix报表系统ZbxTable,在社区大获好评

ZABBIX图标显示概述

在Zabbix中主机监控状态有四种类型:Zabbix(Zabbix agent) SNMP/JMX/IPMI,通过对应图标的颜色,即可直观 判断主机数据采集是否正常。使用Zabbix Agent作为采集协议,有时会出现灰色的情况,对于初学者是一个较为困惑的点,本次主要阐述不同Zabbix版本中对ZBX标识的状态显示。

主被动模式

Zabbix Agent的采集分为二种模式,主动模式(Active checks)和被动模式(Passive checks)。可简单理解为拉取(被动模式),推送(主动模式),详细介绍可查看之前的二篇文章

Zabbix Agent主动模式配置

Zabbix Agent被动模式配置

默认情况下Zabbix Agent会同时配置主动和被动模式,关联被动监控指标后ZBX图标会显示绿色。如果Zabbix 被动模式连接出现问题,Zabbix图标会变成红色,鼠标停留在图标上面会显示具体的错误信息,可根据此信息进行排错。Zabbix图标显示状态必须关联对应类型的监控指标项,否则图标一直为灰色状态。对于Zabbix 6.2以下版本,ZBX图标显示情况如下。

项目

被动模式(Passive checks)

主动模式(Active checks)

监控正常

绿色

灰色

监控异常

红色

灰色

可以看到在Zabbix低版本中,ZBX图标状态会跟随被动模式状态变化而变化,如果主动模式出现故障,则无法通过Zabbix图标体现。

新版本变化

为了解决以上问题,从Zabbix6.2版本开始,官方增加了主动模式下的心跳检测函数send_heartbeat_msg.详见源码 zabbixsrczabbix_agentactive.c

代码语言:javascript复制
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,则禁用主动模式心跳检测。

代码语言:javascript复制
### 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=

在Zabbix6.2版本开始,主动和被动二种监控状态都可分显示:

如监控状态异常也会显示对应的错误信息,状态则为绿色和灰色二种:

状态

被动模式(Passive checks)

主动模式(Active checks)

监控正常

绿色

绿色

监控异常

红色

红色

如果一个主机同时配置了主动和被动模式,并且同时关联了这二种类型的监控指标,ZBX图标则会按照下列规则进行显示:

  • 如果被动模式正常,主动模式正常,那么Zabbix图标会是绿色:
  • 如果被动模式正常,主动模式异常,那么Zabbix图标会是黄色:
  • 如果被动模式正常,主动模式未知,那么Zabbix图标会显示灰色:

如果你的Zabbix Server为6.2版本而Zabbix Agent 是低于6.2的版本,由于低版本Zabbix Agent无主动模式心跳检测,因此无法获取。主动模式状态会显示为Unknown,Zabbix图标会显示灰色。这就是有些同学最近反应新版本中ZBX图标配置主动模式后图标也为灰色的原因。

结语

Zabbix版本更新较快,新版本会带来很多新特性和功能,在使用新版本之前一定要先查看版本的What's new内容,并查看相关版本的在线文档,避免使用经验来套新系统。对于版本选择,生产环境强烈建议选择LTS版本。

0 人点赞