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 数据说明

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

  1. Items(监控项)Items 是 Zabbix 中最基本的监控单元,定义了要收集的具体数据。每个 Item 包含:
    • Name: 人类可读的名称,如 CPU utilization
    • Key: 标识数据采集方法的唯一键,如 system.cpu.util[all,user,avg1]
    • Type: 数据类型,如数值型、字符串、日志等
    • Host: 关联的主机
    • Applications: 所属的应用分组
    • Tags: 附加的标签信息
  2. Hosts(主机)代表被监控的设备或系统,可以是物理服务器、虚拟机或网络设备等。
  3. Templates(模板)预定义的监控配置集合,可以包含多个 Items、Triggers、Graphs 等。
  4. 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 文件变化
  3. 数据转换:
    • 将 Zabbix 的 item key 转换为规范化的指标名称
    • 将主机信息、参数、标签等转换为标签键值对
    • 将不同类型的值(整数、浮点数、字符串等)标准化处理
  4. 指标输出:生成符合 Prometheus 格式的时序数据点,发送到 Flashcat

最终效果

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

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

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