玩转 Pipelines 之修正链路错误状态码

Pipelines 是一种运行在 DataKit 上的轻量级脚本语言,用于对采集到的数据进行自定义解析和修改。通过定义解析规则,它们能够将不同种类的数据细粒度地切割并转换为结构化的格式,以满足具体的数据管理需求。例如,用户可以通过 Pipelines 提取日志中的时间戳、状态和其他关键字段,并将这些信息作为标签使用。

DataKit 利用 Pipelines 的强大功能,使得用户能够在工作空间页面上直接编写和调试 Pipeline 脚本,从而实现对数据的更细粒度的结构化处理。这种处理不仅提高了数据的可管理性,而且通过 Pipeline 提供的丰富函数库,支持对常见数据进行标准化操作,如解析时间字符串和补全 IP 地址的地理信息等。

场景分析

用户在上报应用性能监测数据的时候,如果在业务侧做了一些自定义状态码,比如自定义 4xx,但这种在业务上属于正常的心跳监控,不需要在观测云上归类为错误请求。这时候怎么在观测云上进行修正状态码,从而减少错误分析,以及误告警。

实施方案

如下链路原文带有 status=error 的标签,实际用户在 "error_type"="com.xxx.cloud.os.service.exceptions.OsServiceException" 的错误类型下,都属于正常的业务请求,需要从源头把这类型的报错修正为正常的状态。

python 复制代码
{
  "time": 1761533611771,
  "__docid": "T_1761533611771_d3vdtb2c600s73e27rpg",
  "__namespace": "tracing",
  "__source": "user-xxx-eks",
  "cluster_name_k8s": "eks-prod",
  "create_time": 1761533612872,
  "date": 1761533611771,
  "date_ns": 1761533611771449300,
  "dd_version": "1.0.0",
  "dk_fingerprint": "ip-xxx-16-xx-229.us-west-2.xxx.internal",
  "duration": 19712,
  "env": "prod",
  "host": "ip-172xxx-220.us-west-2.xxx.internal",
  "host_ip": "172.16.12.xxx",
  "message": "{"service":"user-xxx-eks","name":"spring.handler","resource":"PointRightPublicController.listGiftCardRight","start":1761533611771449259,"duration":19712571,"error":0,"meta":{"_dd.p.tid":"68fedeab00000000","thread.name":"http-nio-9602-exec-11","language":"jvm","trace_128_bit_id":"68fedeab000000003d47a83b00ad5ef0","component":"spring-web-controller"},"metrics":{"_dd.measured":1,"thread.id":207},"type":"web"}",
  "operation": "spring.handler",
  "parent_id": "6497552948601585817",
  "pod_name": "user-service-xxx-xxx",
  "pod_namespace": "xxx-prod",
  "region": "us-xxx-2",
  "remote_ip": "172.16.xx.xxx",
  "resource": "PointRightPublicController.listGiftCardRight",
  "service": "user-xxx-eks",
  "source": "ddtrace",
  "source_type": "web",
  "span_id": "744311550763894067",
  "span_kind": "server",
  "span_type": "local",
  "start": 1761533611771449,
  "status": "error",
  "time_us": 1761533611771449.2,
  "trace_id": "68fedeab000000003d47a83b00ad5ef0",
  "version": "1.0.0",
  "zone_id": "usw2-xxx",
  "error_type": "com.xxx.cloud.os.service.exceptions.OsServiceException"
}

新建 Pipelines

选择应用性能监控-->服务选择-->一键获取样本

判断如果是 error_type 等于com.xxxxx.cloud.os.service.exceptions.OsServiceException 则为业务自定义错误,这个可以归类为正常请求,无需到错误追踪,把 status 修正为 ok 即可

完整的 Pipelines 规则

lua 复制代码
# 1. 提取 JSON 原始数据中的 "status" 字段(原文为 JSON,用 _ 表示原始输入)
# 语法:json(输入源, JSON路径, 提取后字段名),此处字段名与路径一致(均为 status)
json(_, status, status)

# 2. 判断 status 字段是否等于 "ok"(字符串比较需带双引号)
if status == "error" {
    # 满足条件时,添加新字段 kind,值为 1(整数类型)
  json(_, error_type, error_type)
  if error_type == "com.xxxxx.cloud.os.service.exceptions.OsServiceException" {
  #set_tag(status,"ok")
  add_key(status,"ok")
  }

}

处理结果:

如上演示可看到,误报到错误追踪的链路, 已经修正处理完成,正常在链路列表展示了。

相关推荐
sheji341621 分钟前
【开题答辩全过程】以 基于spring boot的停车管理系统为例,包含答辩的问题和答案
java·spring boot·后端
源代码•宸26 分钟前
Leetcode—1266. 访问所有点的最小时间【简单】
开发语言·后端·算法·leetcode·职场和发展·golang
中年程序员一枚1 小时前
多数据源的springboot进行动态连接方案
java·spring boot·后端
w***76551 小时前
SpringBoot集成MQTT客户端
java·spring boot·后端
HABuo1 小时前
【Linux进程(五)】进程地址空间深入剖析-->虚拟地址、物理地址、逻辑地址的区分
linux·运维·服务器·c语言·c++·后端·centos
IT_陈寒1 小时前
SpringBoot 3.x实战:5个高效开发技巧让我减少了40%重复代码
前端·人工智能·后端
悟空码字2 小时前
三步搞定短信验证码!SpringBoot集成阿里云短信实战
java·spring boot·后端
嘉然今天吃粑粑柑2 小时前
Kafka vs RabbitMQ:从消费模型到使用场景的一次讲清
后端
肥肥今天也好看2 小时前
Java 日期格式化陷阱:YYYY vs yyyy 导致的生产事故分析
后端
用户948357016512 小时前
可观测性落地:如何在 Java 项目中统一埋点 Trace ID?(一)
后端