如何在Datadog中通过错误消息文本筛选错误追踪数据?
问题场景
负责的应用多个端点常返回500错误,错误消息如下:
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) connection to server at "pgbouncer.internal.equipmentshare.com" (10.0.4.193), port 6432 failed: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
需要统计这类错误占总错误的比例、查看时间分布,但使用Datadog内置查询构建器添加过滤器时,因错误消息是多行文本且含特殊字符,过滤器无法识别,甚至过滤掉所有结果;尝试转义、通配符组合无效,添加错误维度列后对应内容为空。
解决方法
用特征片段做模糊匹配
放弃完整多行文本,提取最独特的片段(比如server closed the connection unexpectedly或sqlalchemy.exc.OperationalError: (psycopg2.OperationalError)),在追踪搜索框中使用:@error.message:*server closed the connection unexpectedly*若用查询构建器,选择
error.message维度,操作符选contains,输入特征片段即可,无需转义空格或普通标点。确认错误字段的正确映射
先找到一条目标错误的追踪详情,在「Attributes」面板里核对错误消息对应的字段名——部分框架可能把错误内容上报到error.msg、custom.error.detail等自定义字段,而非默认的error.message,需用正确字段名构建过滤器。通过日志关联追踪(日志已集成时)
若应用日志已接入Datadog,先在日志中用错误片段筛选(比如"server closed the connection unexpectedly"),再通过日志中的trace_id关联到对应追踪;也可直接用日志查询统计这类错误的出现频率,对比总错误数得到占比。自定义错误标签(长期稳定方案)
在应用代码中捕获这类特定的OperationalError,给对应的Span添加自定义标签(比如error.type:pgbouncer_connection_failure),之后在Datadog中直接用:@error.type:pgbouncer_connection_failure筛选,这种方式不受错误消息格式变化影响,查询效率更高。
内容的提问来源于stack exchange,提问作者elethan

