背景
在排查业务故障时,用户往往需要查看业务日志文件来定位问题。然而,当用户在使用SLS收集业务日志时,同一个Logstore中往往存放着不同的日志(例如同一台主机上不同目录下的文件,抑或是同一个K8S集群节点上不同容器内的文件或标准输出),直接在控制台上点击“查询/分析”按钮并不能直观地得到某一份日志文件的完整上下文内容。
为了解决这个问题,SLS提供了上下文查询和LiveTail功能,使得用户能够快速直观地浏览同一日志文件中的内容:
- 上下文查询:用户可在指定Logstore中的某条日志后,直接查询某条该条日志的上下文(即该条日志在所在文件中的前后若干条日志);
- Livetail:实时展示指定日志所在文件的最新日志,类似于对该文件执行tail -f。
然而,在Logtail 1.2.1版本之前,上述两个功能仅针对使用固定解析模式解析日志的场景(如极简模式、完整正则模式等),当额外使用Logtail插件来提升日志解析能力或采集容器的标准输出时,上述两个功能就不再起效。从Logtail 1.2.1版本起,当用户使用Logtail插件来处理日志或采集容器的标准输出时,可以通过配置日志上下文聚合插件来使用上述两个功能。
原理概览
Logtail采用批量发送日志数据的模式,即多条日志会被打包在同一个日志组中进行传送。在这种模式下,为了高效地获取某条日志的上下文或进行Livetail,Logtail在打包日志数据时采用以下策略:
- 同一个日志组中只存放同一来源的日志,并在日志组的Meta信息中记录代表日志来源的唯一标识符及序号,组内日志按时间顺序排列;
- 对于存放同一来源日志的日志组,日志组的序号按时间先后顺序依次递增。
在这种模式下,每一条日志都可用(日志组标识符+序号,组内序号)的二元组合进行唯一标识,SLS服务端据此对该二元组合建立索引,从而实现日志上下文的快速查找。
然而,受限于Logtail插件系统的设计,在1.2.1版本前,当用户使用插件系统处理数据或采集容器的标准输出时,Logtail无法执行上述策略。具体来说,由于插件系统的输入模块是以一条条日志的形式向后续模块传递信息,因此日志的来源信息从离开输入模块后便出现缺失,从而导致无法在日志打包阶段(即聚合模块)将同一来源的日志放入同一个日志组中,最终导致日志上下文查询及Livetail功能的失效。
为了解决上述问题,Logtail在现有各模块之间的数据交互上额外增加日志来源信息,同时新增了一个日志上下文聚合插件。由于日志的来源信息得以保留,该插件因此可以依照上文提到的日志打包策略对日志进行打包,从而实现日志的上下文查询及LiveTail。
采集配置设置
下面将介绍当用户使用Logtail插件来处理日志或采集容器的标准输出时,如何设置采集配置以使用上下文查询和Livetail功能。
采集文本日志且使用Logtail插件处理日志
在采集文本日志时,如果使用Logtail插件来解析日志,则需要在插件配置的中额外增加日志上下文插件aggregator_context:
{
"global": {...},
"processors": [...],
"aggregators": [
{
"type": "aggregator_context",
"detail": {}
}
]
}
- 示例:使用Logtail插件解析单行正则日志,则在控制台的插件配置框内填入以下内容:
{
"global": {
"DefaultLogQueueSize": 10
},
"processors": [
{
"type": "processor_split_log_string",
"detail": {
"SplitKey": "content",
"PreserveOthers": true
}
},
{
"type": "processor_regex",
"detail": {
"SourceKey": "content",
"Regex": "(\\S+)\\s-\\s(\\S+)",
"Keys": [
"remote_addr",
"remote_user"
]
}
}
],
"aggregators": [
{
"type": "aggregator_context",
"detail": {}
}
]
}
采集容器标准输出
当用户在采集容器标准输出时,也需要在插件配置的中额外增加日志上下文插件aggregator_context:
{
"inputs": [
{
"detail": {
"Stdout": true,
"Stderr": true
},
"type": "service_docker_stdout"
}
],
"aggregators": [
{
"type": "aggregator_context",
"detail": {}
}
]
}
功能使用
上下文查询
对于选定的日志,在该日志的左上角单击图标进入上下文查询页面:
此时可以使用鼠标在当前页面上下滚动查看指定日志的上下文信息。界面中的按钮功能如下:
- 单击更早,进行向上翻页浏览。
- 单击更新,进行向下翻页浏览。
- 在高亮显示文本框中设置需要高亮显示的字符串,可实现字符串标红显示。
- 在过滤条件文本框中设置过滤字符串,可实现日志列表中只显示包含过滤字符串的日志。
- 字段过滤下拉菜单中可选择需要展示的字段。
Livetail
对于选定的日志,在该日志的左上角单击图标进入Livetail页面:
此时该条日志所在文件的最新的日志数据将实时显示在页面底部。界面中的按钮功能如下:
- 在高亮显示文本框中设置需要高亮显示的字符串,可实现字符串标红显示。
- 在过滤条件文本框中设置过滤字符串,可实现日志列表中只显示包含过滤字符串的日志。
- 字段过滤下拉菜单中可选择需要展示的字段。
关于iLogtail
iLogtail作为阿里云SLS提供的可观测数据采集器,可以运行在服务器、容器、K8s、嵌入式等多种环境,支持采集数百种可观测数据(日志、监控、Trace、事件等),已经有千万级的安装量。目前,iLogtail已正式开源,欢迎使用及参与共建。
GitHub:https://github.com/alibaba/ilogtail
社区版文档:https://ilogtail.gitbook.io/ilogtail-docs/about/readme
企业版官网:https://help.aliyun.com/document_detail/65018.html