万宁市网站建设_网站建设公司_GitHub_seo优化
2026/1/22 4:00:05 网站建设 项目流程

Zabbix 介绍

Zabbix 是一个开源的企业级监控解决方案,它可以监控各种网络参数,服务器健康状态,应用程序性能等,并提供灵活的告警机制和丰富的报表功能。

1、Zabbix Server

  • 核心组件,负责接收和处理所有监控数据,生成报警和报表。
  • 需要一个数据库来存储所有配置和监控数据。

2、Zabbix Agent

  • 部署在被监控的设备上,负责收集本地资源和应用数据,并发送给 Zabbix Server。
  • 支持多种操作系统,包括 Linux、Windows 和 Unix。
  • 其中 Agent 分为 Zabbix Agent 和 Zabbix Agent 2,后者是增强版 Agent,支持插件,适合大规模监控。

3、Zabbix Proxy

  • 用于分担 Zabbix Server 的负载,尤其适用于大规模分布式监控。
  • 可以在远程网络中收集数据并转发给 Zabbix Server。

4、Zabbix Web Interface

  • 基于 PHP 的 Web 界面,用于配置、管理和查看监控数据。
  • 提供用户管理、权限控制、仪表盘和报表等功能。

5、数据库

  • 存储所有的配置、监控数据、历史记录等。
  • 支持多种数据库,如 MySQL、PostgreSQL、Oracle、SQLite。

观测云

观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。

部署 DataKit

DataKit 是一个开源的、跨平台的数据收集和监控工具,由观测云开发并维护。它旨在帮助用户收集、处理和分析各种数据源,如日志、指标和事件,以便进行有效的监控和故障排查。DataKit 支持多种数据输入和输出格式,可以轻松集成到现有的监控系统中。(注意,请安装完整版 DataKit,Lite 版本 DataKit 没有 Zabbix 相关采集器。)

登录观测云控制台,在「集成」 - 「DataKit」选择对应安装方式。这里使用主机方式安装。

复制一键安装命令,登陆到目标服务器执行该命令即可实现一键安装。

执行datakit monitor命令查看 DataKit 运行状态。

指标数据采集

Zabbix API 方式(zabbix >= 5.0)

DataKit 方式

1、配置 pythond 配置文件

进入 DataKit 的配置文件目录conf.d,进入 pythond 目录,复制pythond.conf.samplepythond.conf, 修改如下配置:

[[inputs.pythond]] # Python input name name = 'zabbix_collect' # required # System environments to run Python #envs = ['LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH',] envs = ['ZABBIX_HOST=http://127.0.0.1/zabbix', 'ZABBIX_USER=Admin', 'ZABBIX_PASSWD=zabbix', 'ZABBIX_VERSION=7.0', 'COLLECT_TYPE=api'] # Python path(recomment abstract Python path) cmd = "python3" # required. python3 is recommended. # Python scripts relative path dirs = ["zabbix"]

其中ZABBIX_HOSTZABBIX_USERZABBIX_PASSWDZABBIX_VERSION填写实际 Zabbix 的地址用户名密码和版本。

保存并退出。

2、复制脚本

进入 DataKit 目录,进入python.d目录,创建 zabbix 目录,点击下方链接下载脚本到 zabbix 目录下:

https://static.guance.com/integrations/zabbix/zabbix-collector.py

3、重启 DataKit

datakit service -R

4、检查采集任务,出现 zabbix_collect 任务则说明采集任务开启成功

datakit monitor

Func 方式

1、安装采集脚本

登录 Func,点击「脚本市场」,选择预装脚本市场,点击管理按钮,进入预装脚本市场的脚本列表页。在过滤搜索框中输入 ,过滤出 zabbix 采集脚本。

点击安装按钮,并在弹出的确认框点击确认按钮。点击确认后,在弹出的部署对话框中输入 zabbix 的地址,用户名,密码,以及版本号。确认信息无误后,点击部署启动脚本,即可完成脚本的部署以及采集任务的创建。

2、查看采集结果

登录观测云,点击「指标」 - 「指标管理」,查找 zabbix 指标,看是否采集到。

Streaming 方式(zabbix >= 6.4)

该方式类似于 Prometheus 的 Remote Write,由 zabbix server 主动将数据打给 DataKit,有较高的时效性。

HTTP Server
DataKit 方式

1、配置 pythond 配置文件

进入 DataKit 的配置文件目录conf.d,进入python.d目录,复制pythond.conf.samplepythond.conf,修改如下配置:

[[inputs.pythond]] # Python input name name = 'zabbix_collect' # required # System environments to run Python #envs = ['LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH',] envs = ['ZABBIX_HOST=http://127.0.0.1/zabbix', 'ZABBIX_USER=Admin', 'ZABBIX_PASSWD=zabbix', 'ZABBIX_VERSION=7.0', 'COLLECT_TYPE=stream', 'STREAM_LISTENER_PORT=8000'] # Python path(recomment abstract Python path) cmd = "python3" # required. python3 is recommended. # Python scripts relative path dirs = ["zabbix"]

其中ZABBIX_HOSTZABBIX_USERZABBIX_PASSWDZABBIX_VERSION填写实际 Zabbix 的地址用户名密码和版本。

注意,COLLECT_TYPE 必须为 stream, 可根据需要调整 STREAM_LISTENER_PORT 的值。

保存并退出。

2、复制脚本

进入 DataKit 目录,进入 pythond 目录,创建 zabbix 目录,点击下方链接下载脚本到 zabbix 目录下:

https://static.guance.com/integrations/zabbix/zabbix-collector.py

3、重启 DataKit

datakit service -R

4、检查采集任务,出现 zabbix_collect 任务则说明采集任务开启成功

datakit monitor

5、创建 Zabbix 连接器

登录 Zabbix,点击管理 -> 常规 -> 连接器,点击创建连接器,URL处输入 DataKit 的地址以及zabbix stream的监听端口(默认8000),信息类型选择数字和浮点数,点击添加。

6、修改zabbix_server.conf,修改StartConnectors为10,保存并重启zabbix-server服务

7、验证指标采集结果

Func 方式

1、安装采集脚本

登录 Func,点击「脚本市场」,选择预装脚本市场,点击管理按钮,进入预装脚本市场的脚本列表页。在过滤搜索框中输入zabbix Stream ,过滤出zabbix Stream采集脚本。点击安装即可。

2、创建URL

登录 Func,点击「管理」 - 「同步 API」(建议使用异步API)- 「新建」, 执行一栏选择刚导入脚本中的Zabbix Receiver方法,在参数指定中配置采集任务相关的配置,需要指定zabbix_hostzabbix_userzabbix_passwdzabbix_version为实际的值,base64为 Zabbix 入参,此处填INPUT_BY_CALLER,点击保存,并复制 url。

3、创建 Zabbix 连接器

登录 Zabbix, 点击管理 -> 常规 -> 连接器,点击创建连接器,URL 处输入上一步创建的 url,信息类型选择数字和浮点数,点击添加。

4、修改zabbix_server.conf,修改StartConnectors为10,保存并重启zabbix-server服务

5、验证指标采集结果

Kafka

该方式原理同 HTTP 方式消费指标数据,区别在于该方法引入了 Kafka 组件,需部署一个 HTTP 服务用于接收 Zabbix 的 stream 输出并将消息发送到 Kafka 中,详见https://git.zabbix.com/projects/ZT/repos/kafka-connector/browse,再由消费者订阅 Kafka,进行数据消费。

指标治理

Zabbix 指标数据结构

Zabbix 以主机为维度统计指标和告警。所以所有的指标必然包含主机信息。主机往往绑定一个或多个接口。

Zabbix 的指标(item key) 的形式为key[param1,param2,param3]。其中params分为静态值和变量两种。

vfs.fs.size[{#FSNAME},pused]。其中keyvfs.fs.size{#FSNAME}是动态参数,指实际文件系统名,pused为静态参数,指使用量。

上述采集方式中zabbix apiStreamingZabbix Agent 2三种采集方式均默认使用该规则进行指标映射。

建议的指标治理规则

由于 Zabbix 的数据结构跟观测云存在较大差异,为方便指标的使用与管理,结合实际企业用户的部署经验,对于 API 和 Streaming 的采集方式,我们建议 Zabbix 指标数据上传到观测云时按如下规则进行转换:

  • measurement (指标集):zabbix key第一个 '.' 前的内容。
  • fields (指标):zabbix key+ 所有静态参数。如vfs.fs.size[{#FSNAME},pused],就会变成vfs.fs.size.pusedsystem.cpu.load[all,avg1],就会变成system.cpu.load.all.avg1
  • tags (标签):zabbix item key中的所有动态参数小写。同时会添加hostip以及itemtags。如:vfs.fs.size[{#FSNAME},pused]tagfsname

Example:

Zabbix item keymeasurementFieldtags
vfs.dev.queue_size[{#DEVNAME}]vfsvfs.dev.queue_sizedevname
vfs.dev.read.await[{#DEVNAME}]vfsvfs.dev.read.awaitdevname
vfs.dev.read.rate[{#DEVNAME}]vfsvfs.dev.read.ratedevname
vfs.file.contents[/sys/block/{#DEVNAME}/stat]vfsvfs.file.contents._sys_blck__statdevname
vfs.file.contents["/sys/class/net/{#IFNAME}/type"]vfsvfs.file.contents._sys_class_net__typeifname
vfs.fs.inode[{#FSNAME},pfree]vfsvfs.fs.inode.pfreefsname
vfs.fs.size[{#FSNAME},pused]vfsvfs.fs.size.pusedfsname
net.if.in["{#IFNAME}",dropped]vfsnet.if.in.droppedifname
net.if.in["{#IFNAME}"]vfsnet.if.inifname
使用 Pipeline 的 reference table 实现自定义 Tag

场景:对于已有 CMDB 的客户,希望将主机的一些字段富足到指标 Tag 中。如应用、负责人信息等。

方式:使用 Pipeline 的 refertable 功能。

具体步骤:

1、使用 Func 创建一个脚本用于组装 reference table 数据,并发布。数据结构类似于:

{ "table_name": "zabbix-refer-table", "column_name": ["itemid", "host", "ip", "itemkey"], "column_type": ["string", "string", "string", "string"], "row_data": [["1001", "host-1", "10.0.0.1", "vfs.fs.size"], ["1002", "host-2", "10.0.0.2", "vfs.fs.size.pused"], ["1003", "host-3", "10.0.0.3", "vfs.fs.size.pfree"]] }

更多 reference table 用法,可参考:https://docs.guance.com/datakit/datakit-refer-table/

2、创建同步 API

登录 Func,点击「管理」 - 「同步 API」,点击 新建,在添加同步 API 对话框执行一栏中选择 zabbix-reference-table 获取脚本,点击确定保存脚本,并点击示例,获取请求 API。

3、编辑 DataKit 的配置文件

登录 DataKit 所在服务器(容器部署DataKit 参考官方文档),进入 DataKit 配置目录/user/local/datakit/conf.d,编辑datakit.conf文件,修改[pipeline]选项下的refer_table_url的值为上一步复制的 Func 接口地址。DataKit 会将 refertable 数据预先加载到本地的 sqllite 中,可以根据 refer table 大小灵活选择是否使用内存模式的 sqllite。保存后重启 DataKit 生效。

4、编辑 Pipeline

登录观测云,点击「管理」 - 「Pipelines」- 「新建 Pipeline」,这里给到一个参考 Pipeline,可根据实际业务情况和 refertable 数据结构灵活调整。

5、查看指标 Tag

超大数据量采集优化策略

  • 对于 Export Directory 方式,可以增加独立的高速 SSD 磁盘,增加单独的 zabbix server 用于数据导出(由于需要访问 zabbix API 和数据库,DataKit 采集 ExportDirectory 会比较占用 zabbix 资源)。调低 ExportFileSize 大小。
  • API 采集方式,可以通过分页查询,减少查询关联表,多线程查询等方式。
  • HTTP stream 方式,可以引入队列进行异步消费或使用异步方法。支持采样收集等方式。
  • 指标治理应先将映射关系生成后存入缓存或内存中,方便快速匹配。为减少 redis 读写压力可以考虑分片缓存或缓存压缩等方法。

各采集方式对比

采集方式采集原理优势劣势
Zabbix APIfunc/datakit使用python代码通过zabbix api获取指标数据。进行指标治理和映射后上传到观测云。可分布式采集,采集过程高可用便于灵活调整采集所需资源。便于指标的灵活治理和映射时效性不高,最大时延可达1minzabbix到func区间数据无法压缩,对该区间网路压力较大。通常需要在func维护采集代码,对采集代码质量要求较高,否则在进行大数据量采集时速度较慢导致时效变差或丢失数据,严重时会影响zabbix性能。
Streaming与zabbix建立网络长连接(HTTP server/Kafka)消费zabbix产生的history和event数据时效性高可分布式采集,采集过程高可用便于灵活调整采集所需资源。便于指标的灵活治理和映射zabbix到func区间数据无法压缩,对该区间网路压力较大。
Zabbix 转 Prometheus部署独立服务通过调用zabbix api将zabbix指标数据暴露成Prometheus metric接口供datakit采集集成简单,可以使用datakit现有能力。需要维护独立的转换服务。转换服务与zabbix间网络转发无压缩,对网络压力较大。无法灵活进行指标治理和映射。

总结

监控数据的集成是一个复杂的综合性工作,本文所展示方案所适用场景需相关运维工程师根据实际情况进行调整。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询