当应用出现业务异常问题时,您可以通过分析业务日志,精准定位业务异常。日志分析功能支持分析日志服务SLS或直接采集的日志,本文介绍如何开通日志分析功能并分析直接采集的日志。
前提条件
ARMS Agent版本为v2.7.1.4或以上。登录ARMS控制台,在 页面的Java版本发布说明页签获取2.7.1.4版本的Agent安装包。
日志源说明
日志分析功能支持分析的日志源包括:日志服务SLS的日志、直接采集的日志。本文仅介绍如何查询并分析直接采集的日志,日志服务SLS的日志分析详情,请参见日志分析(日志服务SLS)。
日志分析(直接采集):通过ARMS探针采集日志框架的输出并直接推送到ARMS的日志分析中心,通过一键开启后无需其他操作即可在ARMS控制台查询分析应用日志。
说明日志分析(直接采集)功能需要将探针升级到v2.7.1.4及以上版本。
日志分析(日志服务SLS):
您需要将应用的日志采集到日志服务SLS,并在ARMS应用配置中配置相应的Project和Logstore,ARMS会内嵌日志服务的页面方便您进行日志分析。
功能开通说明
开通日志采集功能
- 登录ARMS控制台,在左侧导航栏选择 。
- 在应用列表页面顶部选择目标地域,然后单击目标应用名称。说明 语言列显示图标的应用为接入应用监控的应用,显示-图标的应用为接入可观测链路 OpenTelemetry 版的应用。
在左侧导航栏单击应用设置,并在右侧单击自定义配置页签。
在自定义配置页签的应用日志关联配置区域,选择日志源为默认日志,打开日志框架自动采集开关,选择需要采集的日志级别,并设置单条日志显示的最大长度和日志上报限制。
说明日志分析功能不会采集日志级别低于应用中配置的日志输出级别的日志。例如应用中配置的日志输出级别为Warn,即使在ARMS控制台配置采集了Debug级别的日志,也不会生效。如果想不重启应用修改应用日志输出级别,您可以使用ARMS的Arthas诊断中的Arthas Shell功能动态修改日志框架的日志输出级别,更多信息,请参见Arthas Shell。
在自定义配置页签左下角单击保存。
在左侧导航栏选择 。
日志采集原理
通过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的日志输出数量变化。