Zabbix数据实时导入到Flashcat

快猫技术 2025-04-30 08:55:04

zabbix-to-flashcat 很高兴与大家分享如何将 Zabbix 监控数据实时导入Flashcat。Flashcat 是快猫星云以开源夜莺为内核打造的一体化可观测平台,预置了行业领先的故障发现定位最佳实践,支持指标、日志、链路追踪数据的统一采集、存储、告警、可视化分析。云上、云下、Kubernetes,只需一个 Flashcat。通过 Categraf 的 Zabbix 插件,我们可以无缝地将 Zabbix 的监控数据转发到Flashcat, 实现监控数据的统一存储和查询。

需要注意的是,Zabbix 插件目前仅在企业版 Categraf v0.4.10 及以上版本支持,开源版不提供此功能。

快速部署zabbix

我们通过docker compose 快速部署一个zabbix环境。

$ git clone https://github.com/zabbix/zabbix-docker.git 
$ cd zabbix-docker 
$ docker compose up -d

我本机的IP是192.168.10.222, 浏览器访问 http://192.168.10.222 出现了熟悉的界面 zabbix-login 输入用户名Admin, 密码zabbix 就可以登录了。如果你想尝试二进制部署zabbix 可以参考这篇博客

采集

zabbix 数据

在配置数据采集前,我们先了解一下Zabbix中的几个关键数据概念:

  1. Items(监控项) Items 是 Zabbix 中最基本的监控单元,定义了要收集的具体数据。每个 Item 包含:
Name: 人类可读的名称,如"CPU utilization"
Key: 标识数据采集方法的唯一键,如 system.cpu.util[all,user,avg1]
Type: 数据类型,如数值型、字符串、日志等
Host: 关联的主机
Applications: 所属的应用分组
Tags: 附加的标签信息
  1. Hosts(主机) 代表被监控的设备或系统,可以是物理服务器、虚拟机或网络设备等。

  2. Templates(模板) 预定义的监控配置集合,可以包含多个 Items、Triggers、Graphs 等。

  3. History(历史数据) 收集的监控数据存储,包含时间戳、值、主机信息等。

zabbix数据导出配置一(HTTP方式)

设置连接器最大限制

zabbix-docker的目录下找到docker-compose_v3_alpine_mysql_latest.yaml这个文件, 30行 image: "${ZABBIX_SERVER_MYSQL_IMAGE}:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_IMAGE_TAG_POSTFIX}" 之后添加如下两行,这个环境变量表示导出数据的连接器最大为5个,可以根据实际需要进行设置。

  environment:
   - ZBX_STARTCONNECTORS=5

接着执行如下命令,重建容器

docker compose down 
docker compose up -d

创建api token

Zabbix 7.2的Token必须属于某个用户,且用户需要属于特定角色。配置步骤如下: 首先创建了一个monitor role, 主要权限(hosts和item) monitor-role 再创建monitor用户 monitor-user 创建api token,这里没有设置过期时间 monitor-api-token

配置连接器

进入Administration->General->Connectors配置界面,添加新的连接器

  • 类型选择itme values
  • URL填写部署categraf机器的地址http://192.168.10.222:9101/v1/zabbix/history
  • 注意路径/v1/zabbix/history是固定的。 monitor-connector

categraf的配置

在Flashcat的数据采集页面上新建Zabbix插件配置

[[instances]]
endpoint=":9101"

[instances.zabbix]
server="http://192.168.10.222"
version="7.2"
api_token="xxxxx"
##name_as_tag=true

关键配置说明:

  • endpoint: Categraf监听端口,用于接收Zabbix推送的数据
  • instances.zabbix.server: Zabbix服务器地址
  • instances.zabbix.version: Zabbix版本
  • instances.zabbix.api_token: 上面创建的API Token
  • instances.zabbix.name_as_tag: 是否将Item名称作为标签(调试时可启用)

我们选的是http方式的实时导出,这里我们就只需要配置endpoint部分,相当于是categraf的zabbix插件会启动一个9101端口,用于接收zabbix的数据推送。 这里这个端口要和zabbix connector的端口保持一致.

Categraf会通过Zabbix API获取Item详细信息,以便正确转换数据。推送的历史数据中,item的key_比name更适合直接作为指标名称,而item的单位、关联主机信息则用作标签,丰富指标的含义。

zabbix数据导出配置二(文件方式)

对于Zabbix 7.0以前的版本,只能通过文件方式导出数据。

zabbix配置

同样在docker-compose_v3_alpine_mysql_latest.yaml文件中,第30行后添加:

  environment:
   - ZBX_EXPORTDIR=/etc/zabbix/data/
   - ZBX_EXPORTFILESIZE=100M
   - ZBX_EXPORTTYPE=history
  volumes:
   - /etc/timezone:/etc/timezone:ro
   - /home/flashcat/zabbix-docker/data:/etc/zabbix/data

这些配置表示:

  • 导出数据到容器内的/etc/zabbix/data目录
  • 每个导出文件最大为100MB
  • 导出数据类型为历史数据
  • 将容器内目录挂载到宿主机的/home/flashcat/zabbix-docker/data

完成配置后,重建容器:

docker compose down 
docker compose up -d

categraf配置

针对文件方式的Categraf配置:

[[instances]]
data_dir="/home/flashcat/zabbix-docker/data"

[instances.zabbix]
server="http://192.168.10.222"
version="7.2"
api_token="xxxxx"
##name_as_tag=true

重要提示: 使用文件导出方式时,Categraf必须与Zabbix部署在同一台机器上,data_dir必须与Docker挂载的目录保持一致。

工作原理

Categraf的Zabbix插件主要完成以下工作:

  1. 元数据缓存:通过ItemCache组件,定期从Zabbix API获取所有监控项信息
  2. 数据处理:
  • HTTP方式:HTTP处理器接收NDJSON格式的历史数据
  • 文件方式:监控指定目录中的NDJSON文件变化
  1. 数据转换:
  • 将Zabbix的item key转换为规范化的指标名称
  • 将主机信息、参数、标签等转换为标签键值对
  • 将不同类型的值(整数、浮点数、字符串等)标准化处理
  1. 指标输出:生成符合Prometheus格式的时序数据点,发送到Flashcat

最终效果

利用zabbix自身指标做了一个简单的大盘来验证一下效果 zabbix-dashbaord

通过这种方式,我们实现了将 Zabbix 监控数据实时导入 Flashcat,方便统一数据串联分析。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat