日志服务SLS的事件配置功能可以关联日志与调用链的TraceID,在应用出现问题时,即可通过业务日志中写入的traceId快速关联到调用链,及时定位分析、解决问题。本文介绍如何在日志服务SLS中关联调用链的TraceID。
前提条件
应用已接入可观测链路 OpenTelemetry 版。具体操作,请参见接入指南。
应用日志已接入日志服务SLS,并且日志中已写入traceId(或spanId)。具体操作,请参见使用LoongCollector采集并分析ECS文本日志和如何将traceId自动写入日志。
业务自定义字段(如 trans-id)需由应用层通过 SDK 或日志框架写入日志,日志服务 SLS 不会自动生成此类字段。如需作为独立字段使用,可通过 Logtail 正则解析插件从日志内容中提取。自定义字段只能写入 message 中,thread 等系统字段不可修改。
步骤一:提取traceId字段
如果您上报的日志中的traceId已经是单独的字段,请跳过当前步骤。
如果采集的日志中,traceId是某个字段(例如content字段)的一部分,则需要从该字段(content字段)中提取出traceId作为单独的字段。
登录日志服务控制台。
选择应用日志所在的Project和Logstore。
使用Logtail正则解析插件,提取日志中的traceId作为单独的字段。
选择,然后单击管理Logtail配置。
单击编辑进入编辑模式,在数据处理设置项中新增类型为提取字段(正则模式)的处理插件。
假设Logstore中某个日志的content字段内容如下,要从content字段中提取traceId(或spanId)。
2024-05-06 12:12:49.685 [http-nio-9190-exec-3] DEBUG io.lettuce.core.protocol.DefaultEndpoint - traceId:ea1a00002d17150191696858089d0007 - [channel=0x5d069239, /10.0.0.45:49614 -> redis/192.168.216.80:6379, epid=0x1] write() done将基础配置中的原始字段设置为content,正则表达式可以设置为
traceId:([a-zA-Z0-9]+),在结果字段名中添加traceId(或spanId)。更多信息请参见原生插件:正则解析。配置完成后,成功提取traceId的日志内容如下。
__tag__:_cluster_id_: xxx __tag__:_node_ip_: xxx.xxx.xxx.7 __tag__:_node_name_: cn-hangzhou.xxx.xxx.7 _container_ip_: xxx.xxx.xxx 40 _container_name_: adservice _image_name_: ghcr.io/open-telemetry/demo:1.4.0-adservice _namespace_: otel-demo _pod_name_: opentelemetry-demo-adservice-xxx _pod_uid_: xxx _source_: stdout _time_: 2024-05-07T10:36:48.078285414+08:00 content: 2024-05-07 02:36:48 - oteldemo.AdService - Targeted ad request received for [accessories] trace_id=xxx span_id=xxx trace_flags=01 span_id: xxx traceId: xxx
步骤二:配置跳转事件
单击某条日志中traceId(或spanId)的值,然后在弹出的窗口中单击前往配置。
在弹出的高级事件配置窗口中,为traceId(或spanId)字段添加事件,然后单击确认。
配置名称:自定义名称,例如
打开调用链分析。事件行为:选择自定义HTTP链接。
协议:选择自定义,并设置为
https。链接地址:
如果要用traceId过滤调用链,链接地址格式为
trace.console.alibabacloud.com/#/${regionId}/tracing-explorer?source=XTRACE&filters=traceId="${traceId}",需要将${regionId}修改为您的应用接入可观测链路 OpenTelemetry 版的地域。例如应用接入到杭州区域,需要将
${regionId}替换为cn-hangzhou。完整链接地址为trace.console.alibabacloud.com/#/cn-hangzhou/tracing-explorer?source=XTRACE&filters=traceId="${traceId}"。如果要用spanId过滤调用链,需要将spanId提取为单独的字段,并将链接中的
${traceId}替换为${spanId}。如果您希望同时对traceId和spanId进行过滤,完整链接地址为trace.console.alibabacloud.com/#/cn-hangzhou/tracing-explorer?source=XTRACE&filters=traceId="${traceId}" AND spanId="${spanId}"。如果您希望使用自定义的属性(Attributes和Resources)过滤调用链,链接地址格式为
trace.console.alibabacloud.com/#/cn-hangzhou/tracing-explorer?source=XTRACE&filters=${调用链中自定义属性的名称}="${SLS日志中的字段名}"。例如当您希望过滤某个命名空间的调用链时,SLS日志中有一个表示命名空间的
namespace字段,并且调用链的Resources中包含k8s.namespace.name属性,那么完整链接地址为trace.console.alibabacloud.com/#/cn-hangzhou/tracing-explorer?source=XTRACE&filters=resources.k8s.namespace.name="${namespace}"。
跳转事件配置完成后,再次单击traceId(或spanId)字段值,在弹出的窗口单击打开调用链分析,跳转至可观测链路 OpenTelemetry 版的调用链分析页面。
在调用链分析页面,您可以查询traceId对应的调用链。更多信息,请参见调用链分析。
在调用链分析页面,可通过左侧快捷筛选区域按状态、耗时、应用名称、接口名称、主机地址等维度筛选调用链。右侧上方展示调用次数、HTTP 错误数、耗时百分位等统计图表,下方列表展示每条 Trace 记录的 TraceId、接口名称、应用名称、耗时、状态、开始时间、主机地址等信息。