当应用出现业务异常问题时,您可以通过分析业务日志,精准定位业务异常。日志分析功能支持分析日志服务SLS或直接采集的日志,本文介绍如何开通日志分析功能并分析直接采集的日志。
日志源说明
日志分析功能支持分析的日志源包括:日志服务SLS的日志、直接采集的日志。本文仅介绍如何查询并分析直接采集的日志,日志服务SLS的日志分析详情,请参见日志分析(日志服务SLS)。
- 日志分析(直接采集):通过ARMS探针采集日志框架的输出并直接推送到ARMS的日志分析中心,通过一键开启后无需其他操作即可在ARMS控制台查询分析应用日志。
说明 日志分析(直接采集)功能需要将探针升级到v2.7.1.4及以上版本。
- 日志分析(日志服务SLS):
您需要将应用的日志采集到日志服务SLS,并在ARMS应用配置中配置相应的Project和Logstore,ARMS会内嵌日志服务的页面方便您进行日志分析。
功能开通说明
开通日志采集功能
日志采集原理
- 通过ARMS探针拦截日志框架的日志打印方法,获取日志内容。
- 为日志增加部分上下文(例如traceId、spanName、threadName)。
- 将日志推送至ARMS日志分析中心存储。
- 在ARMS控制台的日志分析页面,查询该条日志。
说明 整个日志采集链路时延大约为10s。
功能额外开销
- CPU额外开销:0.01核
- 内存额外开销:20 M以内
- 带宽额外开销:最大为每秒配置的日志上报条数上限×配置最长日志字符数(个)
单条日志结构
一条日志包含日志附带的Label以及日志自身解析出的字段。
字段 | 说明 |
---|---|
majorVersion | 探针主版本号。 |
minorVersion | 探针子版本号。 |
serverIp | 探针所在主机IP。 |
userId | 应用所属用户ID。 |
appId | 应用ID。 |
job | 日志来源,固定为arms-agent。 |
logType | 日志类型,固定为userLog。 |
字段 | 说明 |
---|---|
level | 日志级别。 |
log | 包括格式化时间和日志原文。时间和日志中间使用短划线(-)连接。 |
loggerName | Logger名称。 |
parentAppId | 本条日志关联的调用链中上游应用ID。 |
spanName | 本条日志关联的SpanName。 |
parentSpanName | 本条日志关联的上游SpanName。 |
threadName | 线程名称。 |
traceId | 关联的TraceID。 |
ts | 日志上报时间。 |
常用查询语句示例
下面以appId为a2n80plglh@89f2dd21b561bdc的应用为例说明。
关键字查询
例如搜索包含关键字error的日志,查询语句为:
{job="arms-agent", appId="a2n80plglh@89f2dd21b561bdc"} |= "error"
例如搜索traceId为eaac105afb16540713955671006d0009的日志,查询语句为:
{job="arms-agent", appId="a2n80plglh@89f2dd21b561bdc"} |= "eaac105afb16540713955671006d0009"
多条件查询
例如搜索同时包含关键字error和Exception的日志,查询语句为:
{job="arms-agent", appId="a2n80plglh@89f2dd21b561bdc"} |= "error" |= "Exception"
分析日志
例如想要分析不同spanName error日志输出的数量变化趋势,查询语句为:
sum(count_over_time({job="arms-agent", appId="a2n80plglh@89f2dd21b561bdc"} | json [1m])) by (spanName)
查询结果如下:

同理可以查询不同loggerName、threadName、level的日志输出数量变化。