标签 DataKit 下的文章

观测云更新

故障中心

“异常追踪”功能全面升级为“故障中心”

故障中心提供一体化的故障处理支持。当监控器发现异常时,会自动生成故障事件,合并重复告警,并按值班规则通知负责人。若超时未处理,将根据升级策略扩大通知范围。在故障详情页中,可一站式查看关联的监控指标、错误日志、调用链路等信息,支持状态流转与团队协作,所有操作均有完整记录。故障中心这一功能将进一步帮助团队规范故障处理流程,提升响应效率与过程透明度。

在故障中心的计费逻辑中:每命中一次升级策略,在发送通知时记录 100 次任务调用。

  • 创建监控器时,开启「关联故障」,自动生成故障事件

图片

  • 故障事件列表

图片

  • 故障事件详情页

图片

  • 值班规则配置

图片

错误

“错误中心”功能全新上线!可自动汇总 APM、RUM 和日志中的错误,并通过智能聚合将相同问题收敛为统一 Issue 进行跟踪。使用前需配置投递规则以设定监控范围,即可在列表中查看错误概况、处理状态与发生趋势,也可进入详情页分析完整堆栈、关联链路和用户会话。所有错误支持状态流转与团队协作,实现从发现到解决的全流程管理。

同步增加“错误条数”计费,统计每日新增的 Issue 数据条数,包含错误中心产生的 Issue 数据。

  • 错误中心列表,可自定义筛选查看不同来源的错误列表

图片

  • 错误详情页,基于错误来源展示对应的详情页,下图为用户访问监测错误详情页

图片

Open API

1、资源目录:新增支持创建、编辑、删除资源分组信息;

2、支持直接编辑账号状态(值班中、休假中)。

指标分析

1、新增 Top N 序列及最大返回点数选项,可以指定在每个查询中,返回排序后最大或最小的若干条(20/50/100/500)数据序列;

2、新增支持点击图表数据点,下拉选择查看相似趋势指标、下钻分析或其他关联查看。

图片

基础设施

1、主机:

  • 新增支持通过 df_mute 字段进行列表筛选;
  • 对于通过 Open API 或规则创建的主机全局静默,系统将在主机列表新增支持展示“静默”标识。

图片

2、资源目录:新增“服务清单”列表入口。

图片

场景

1、仪表板:新增关联监控器按钮,支持一键查看与该仪表板关联的监控器;

图片

2、图表:为所有图表别名配置新增统一序号标识和悬停联动直观化展示多查询行配置时的对应关系。

图片

APM

Profiling:若 Profile 文件体积超过 20MB,系统暂不支持在线解析,同时新增友好提示,您可使用专业分析工具进行查看。

LLM 监测

LLM 查看器【所有 Trace】列表中,“总 Tokens 数” 调整为统计整条 Trace 消耗的 Tokens 数;总 Tokens 列将同步显示输入、输出 Tokens 数量。

图片

日志

查看器:在显示项选择“重置为默认字段”后,message 字段显示逻辑优化

图片

管理

SSO 管理:优化 SSO 登录流程。用户需先通过邮箱选择身份提供商并完成认证,成功后才能在受保护状态下查看可访问的工作空间,避免权限信息外泄。

部署版

管理后台 > 全局配置:新增平台级系统公告管理配置

集成更新

  • 新增 RedPeaks SAP 集成;
  • 更新 AWS rds mysql 仪表盘;
  • 新增 kingbase 监控器;
  • 更新英文版本dashbord,主要处理中英文转换问题;
  • 更新腾讯 PGSQL 仪表板&监控器;
  • 更新资源目录 icon 以及分类目录。

DataKit 更新

新加功能

  • 新增主机变更检测功能,支持用户、crontab、服务及文件变更监控
  • flameshot 支持持续采集模式,增加默认定时采集和阈值触发持续采集功能
  • 新增 DataKit 自身日志采集配置功能

问题修复

  • 修复 Prometheus export 采集器 tags 优先级错误问题
  • 修复全局 host 标签设置 host=__datakit_ip 时无效的问题
  • 修复 eBPF 采集器导致 istio-init 容器不退出的问题
  • 修复容器日志采集使用默认 stdout 配置时存在无用操作的问题
  • 修复 WAL 锁文件使用 PID 导致退出后无法重用的问题
  • 修复 profile 采集器初始化时机问题,避免磁盘缓存未初始化导致的 panic
  • 修复 Statsd 指标采集,新增 event/service check 采集,这俩类数据目前以日志形式来采集

功能优化

  • 为选举模块增加更多日志和指标,便于检测选举频繁切换和采集器暂停失败问题
  • 更新 DataKit HTTP 客户端指标,增加 URL 路径标签和请求体传输汇总指标
  • SQLServer 采集器新增 sqlserver_host 标签,并将 instance 标签改为 counter_instance
  • bug report 新增 Git 配置文件收集功能
  • Windows 进程采集器新增 status 字段支持
  • DDTrace 采集新增更多 source_type 支持

背景

应用在运行过程中,开启性能分析(Profiling)通常是诊断性能瓶颈、内存泄漏和线程问题的关键手段。然而,持续开启 Profiling 会带来显著的性能开销(可能达 5%-20%),并可能生成大量数据,影响生产环境稳定性。动态开启 Profiling 允许开发或运维人员按需、实时地启动/停止数据收集,实现以下目标:

  1. 降低持续开销:仅在需要时启用,避免长期性能损耗;
  2. 精准问题定位:针对特定时段(如流量高峰或故障期间)进行分析;
  3. 在线诊断:无需重启应用即可获取生产环境实时性能快照;
  4. 灵活控制:可结合监控指标(如 CPU 飙升)自动触发,或在安全审计时手动开启。

通过动态控制,实现了观测能力与系统负载的平衡,保障了关键业务场景的效率和稳定性。

Flameshot

Flameshot 是一个基于 Sidecar 模式运行的轻量级自动性能剖析(Profiling)工具。它通过监控目标进程的资源使用情况(CPU/内存),在达到预设阈值时自动触发底层 Profiler(如 async-profiler ),从而实现无侵入的现场快照采集。

Flameshot 采用 Sidecar 容器 模式部署。它必须与业务主容器(Main Container)运行在同一个 Pod 中,并开启 PID 命名空间共享。

  1. 监控 (Monitor):Flameshot 持续轮询主容器内目标进程的资源水位。
  2. 触发 (Trigger):当满足阈值(如 CPU > 80%)或收到 HTTP API 请求时,触发采集任务。
  3. 执行 (Execute):根据配置的语言类型(目前支持 Java),调用对应的 Profiler 工具 attach 到目标进程。
  4. 收集 (Collect):生成的 Profile 文件(如 .jfr )存储于共享卷中,随后上传至数据观测中心。

观测云 datakit-operator1.7.0 版本开始支持工具 flameshots,实现动态开启应用 Profiling。

实践

当前在 K8S 环境上部署 JAVA 应用,当 CPU、内存使用率达到 20%(演示方便)则触发 Profiling 数据采集。

前提条件

  • 观测云帐号
  • K8S 环境

DataKit

DataKit 主要是用来采集数据并上报观测云。

1. 下载 & 安装

wget https://static.guance.com/datakit/datakit.yaml

2. 配置 datakit.yaml

配置 DataWay 数据网关地址

name: ENV_DATAWAY
value: https://openway.guance.com?token=tkn_xxxxx

DataKit 会默认开启主机相关采集器,这里需要追加 pyroscope

name: ENV_DEFAULT_ENABLED_INPUTS
value: cpu,disk,diskio,mem,swap,system,hostobject,net,host_processes,container,pyroscope

3. 启动

调整完配置后,启动 DataKit

root@root:~$ kubectl apply -f datakit.yaml
root@root:~$ kubectl get pods -n datakit
NAME                                READY   STATUS    RESTARTS   AGE
datakit-4zg7q                       1/1     Running   0          14h
datakit-wdtdq                       1/1     Running   0          14h

DataKit Operator

1. 下载

下载最新的 datakit-operator.yaml

wget https://static.guance.com/datakit-operator/datakit-operator.yaml

2. 配置 datakit-operator.yaml

主要调整 jsonconfig 下的 flameshots 内容,参考如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: datakit-operator-config
  namespace: datakit
data:
  jsonconfig: |-
    {
        "server_listen": "0.0.0.0:9543",
        "log_level":     "info",
        "admission_inject_v2": {
            ...
            "flameshots": [
                {
                    "namespace_selectors": ["default"],
                    "label_selectors":     [],
                    "image": "pubrepo.jiagouyun.com/datakit/flameshot:0.1.1",
                    "envs": {
                        "FLAMESHOT_DATAKIT_ADDR":     "http://datakit-service.datakit.svc:9529/profiling/v1/input",
                        "FLAMESHOT_MONITOR_INTERVAL": "1s",
                        "FLAMESHOT_PROFILING_PATH":   "/flameshot-data",
                        "FLAMESHOT_HTTP_LOCAL_IP":    "{fieldRef:status.podIP}",
                        "FLAMESHOT_HTTP_LOCAL_PORT":  "8089",
                        "FLAMESHOT_SERVICE":          "{fieldRef:metadata.labels['app']}",
                        "POD_NAME":                "{fieldRef:metadata.name}",
                        "POD_NAMESPACE":           "{fieldRef:metadata.namespace}",
                        "NODE_NAME":               "{fieldRef:spec.nodeName}",
                        "FLAMESHOT_TAGS":          "pod_name:$(POD_NAME),pod_namespace:$(POD_NAMESPACE),host:$(NODE_NAME)"
                        
                    },
                    "resources": {
                        "requests": {
                            "cpu":    "100m",
                            "memory": "128Mi"
                        },
                        "limits": {
                           "cpu":    "200m",
                           "memory": "256Mi"
                        }
                    },
                    "processes": "[{\"command\":\"java\",\"duration\":\"60s\",\"events\":\"--all\",\"language\":\"java\",\"jdk_version\":\"-\",\"tags\":[\"env:testing\",\"version:1.0.0\"],\"cpu_usage_percent\":20,\"mem_usage_percent\":20,\"mem_usage_mb\":1024}]"
                }
            ]
        },
        ...
    }

参数说明:

  • namespace_selectors: 空间选择,即哪些空间需要开启 flameshots
  • env: 配置环境变量信息
  • processes: 执行命令,如果为空,则 flameshots 不生效

processes 通用字段说明:

  • service (String): 选填,上报到观测中心的服务名称。
  • language (String): 目标进程语言。目前支持 java。
  • command (String): 匹配进程命令行的正则表达式。
  • duration (String): 单次采集时长(例如 30s1m)。注意:受限于执行超时,建议不超过 5 分钟。
  • tags (List): 自定义标签列表,建议包含 envversion 等元信息。
  • cpu_usage_percent (Int): CPU 触发阈值 (0-N)。多核环境下数值可能超过 100。
  • mem_usage_percent (Int): 内存使用率触发阈值 (0-100)。
  • mem_usage_mb (Int): 内存使用量绝对值触发阈值 (MB)。

当前配置 processes 可以实现所有 JAVA 服务,为了实践方便,当 cpu 使用率达到 20% 或内存使用率达到 20% 或内存使用值达到 1024m,则会触发执行 Profiling 操作。

"processes": "[{\"command\":\"java\",\"duration\":\"60s\",\"events\":\"--all\",\"language\":\"java\",\"jdk_version\":\"-\",\"tags\":[\"env:testing\",\"version:1.0.0\"],\"cpu_usage_percent\":20,\"mem_usage_percent\":20,\"mem_usage_mb\":1024}]"

3. 启动

root@root:~$ kubectl apply -f datakit-operator.yaml
root@root:~$ kubectl get pods -n datakit
NAME                                READY   STATUS    RESTARTS   AGE
datakit-4zg7q                       1/1     Running   0          15h
datakit-operator-849f868b78-zbcd9   1/1     Running   0          58s
datakit-wdtdq                       1/1     Running   0          15h

JAVA 应用

1. Yaml 配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: springboot-server
spec:
  selector:
    matchLabels:
      app: springboot-server
  replicas: 1
  template:
    metadata:
      labels:
        app: springboot-server
    spec:
      containers:
        - image: registry.cn-shenzhen.aliyuncs.com/lr_715377484/springboot-server:flameshots
          name: springboot-server
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort:  8080
              protocol: TCP

          securityContext:
            seccompProfile:
              type: Unconfined

2. 启动应用

root@root:~$  kubectl apply -f springboot-server.yaml
root@root:~$ kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
springboot-server-d55fc79dd-48c95   2/2     Running   0          3s

3. 查看 flameshot 执行日志

需要指定 containerName 为 -c datakit-flameshot

root@root:~$ kubectl logs -f springboot-server-d55fc79dd-48c95 -c datakit-flameshot
2026-01-15T03:55:58.090Z        ERROR        flameshot        flameshot/config.go:243        read config file failed, err:open /flameshot/flameshot.conf: no such file or directory
2026-01-15T03:55:58.092Z        INFO        flameshot        flameshot/monitor.go:78        start monitor, interval: 1s
2026-01-15T03:55:58.092Z        INFO        flameshot        flameshot/http.go:77        start http server on 10.187.217.101:8089
2026-01-15T03:55:58.092Z        INFO        flameshot        flameshot/http.go:78        profile start at /v1/profile
2026-01-15T03:55:58.092Z        INFO        flameshot        flameshot/http.go:79        prom http start at /metrics
2026-01-15T03:56:58.093Z        INFO        flameshot        flameshot/monitor.go:102        match: PID=7, name=java or cmd=java -jar app.jar

从启动日志上分析,已经找到了 java 服务,且 PID 为 7,等待触发事件

4. 触发阈值

访问应用

root@root:~$ kubectl exec -it springboot-server-d55fc79dd-48c95  -- /bin/bash 
Defaulted container "springboot-server" out of: springboot-server, datakit-flameshot
springboot-server-d55fc79dd-48c95:/home/app#
springboot-server-d55fc79dd-48c95:/home/app# curl http://localhost:8080/profiling/generator
write success!springboot-server-d55fc79dd-48c95:/home/app# 

再来看看 flameshot 执行日志,已触发了阈值 cpu_avg:36.60 且正常上报数据。

图片

之后恢复了正常,正常之后则不会再产生 Profiling 数据,除非再次触发了阈值。

观测云平台

登录观测云平台,访问「应用性能检测」-「Profling」可以查看到刚刚上报的 Profling 信息

图片

点击列表可以查看 Profling 详细信息,如 CPU 耗时、内存分配情况等,可以更深度的剖析应用代码性能损耗。

图片

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-collecto...

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-collecto...

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间网络转发无压缩,对网络压力较大。无法灵活进行指标治理和映射。

总结

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