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 数据说明
在配置数据采集前,我们先了解一下 Zabbix 中的几个关键概念:
- Items(监控项)Items 是 Zabbix 中最基本的监控单元,定义了要收集的具体数据。每个 Item 包含:
- Name: 人类可读的名称,如
CPU utilization
- Key: 标识数据采集方法的唯一键,如
system.cpu.util[all,user,avg1]
- Type: 数据类型,如数值型、字符串、日志等
- Host: 关联的主机
- Applications: 所属的应用分组
- Tags: 附加的标签信息
- Name: 人类可读的名称,如
- 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,方便统一数据串联分析。