玩转 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")
  }

}

处理结果:

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

相关推荐
努力的小郑5 小时前
Canal 不难,难的是用好:从接入到治理
后端·mysql·性能优化
Victor3566 小时前
MongoDB(87)如何使用GridFS?
后端
Victor3566 小时前
MongoDB(88)如何进行数据迁移?
后端
小红的布丁6 小时前
单线程 Redis 的高性能之道
redis·后端
GetcharZp6 小时前
Go 语言只能写后端?这款 2D 游戏引擎刷新你的认知!
后端
宁瑶琴7 小时前
COBOL语言的云计算
开发语言·后端·golang
普通网友8 小时前
阿里云国际版服务器,真的是学生党的性价比之选吗?
后端·python·阿里云·flask·云计算
IT_陈寒8 小时前
Vue的这个响应式问题,坑了我整整两小时
前端·人工智能·后端
Soofjan9 小时前
Go 内存回收-GC 源码1-触发与阶段
后端
shining9 小时前
[Golang]Eino探索之旅-初窥门径
后端