Zabbix数据实时导入到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
出现了熟悉的界面
输入用户名Admin, 密码zabbix 就可以登录了。如果你想尝试二进制部署zabbix 可以参考这篇博客
采集
zabbix 数据
在配置数据采集前,我们先了解一下Zabbix中的几个关键数据概念:
- Items(监控项) Items 是 Zabbix 中最基本的监控单元,定义了要收集的具体数据。每个 Item 包含:
Name: 人类可读的名称,如"CPU utilization"
Key: 标识数据采集方法的唯一键,如 system.cpu.util[all,user,avg1]
Type: 数据类型,如数值型、字符串、日志等
Host: 关联的主机
Applications: 所属的应用分组
Tags: 附加的标签信息
-
Hosts(主机) 代表被监控的设备或系统,可以是物理服务器、虚拟机或网络设备等。
-
Templates(模板) 预定义的监控配置集合,可以包含多个 Items、Triggers、Graphs 等。
-
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用户
创建api token,这里没有设置过期时间
配置连接器
进入Administration->General->Connectors
配置界面,添加新的连接器
- 类型选择itme values
- URL填写部署categraf机器的地址
http://192.168.10.222:9101/v1/zabbix/history
- 注意路径
/v1/zabbix/history
是固定的。
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 Tokeninstances.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插件主要完成以下工作:
- 元数据缓存:通过ItemCache组件,定期从Zabbix API获取所有监控项信息
- 数据处理:
- HTTP方式:HTTP处理器接收NDJSON格式的历史数据
- 文件方式:监控指定目录中的NDJSON文件变化
- 数据转换:
- 将Zabbix的item key转换为规范化的指标名称
- 将主机信息、参数、标签等转换为标签键值对
- 将不同类型的值(整数、浮点数、字符串等)标准化处理
- 指标输出:生成符合Prometheus格式的时序数据点,发送到Flashcat
最终效果
利用zabbix自身指标做了一个简单的大盘来验证一下效果
通过这种方式,我们实现了将 Zabbix 监控数据实时导入 Flashcat,方便统一数据串联分析。