简介: 日志上下文浏览是排查业务故障时常用的方式,但受限于Logtail插件系统的设计,在Logtail 1.2.1版本前,如果用户使用Logtail插件来处理日志或采集容器的标准输出,那么用户将无法使用上下文浏览及Livetail功能。为了解决这一问题,本文将重点介绍如何使用日志上下文聚合插件来使能上下文查询和Livetail功能。

背景

在排查业务故障时,用户往往需要查看业务日志文件来定位问题。然而,当用户在使用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

本文为阿里云原创内容,未经允许不得转载。

使用日志上下文聚合插件使能上下文查询及Livetail的更多相关文章

  1. 【Logback+Spring-Aop】实现全面生态化的全链路日志追踪系统服务插件「Logback-MDC篇」

    日志追踪 日志追踪对于功能问题的排查和数据流转的路径分析时非常重要的,有了全链路日志追踪体系机制可以非常有效且快速的定位问题,但在多线程环境中,若没有相关成熟的框架的支持,想要实现日志追踪,就需要手动 ...

  2. .NET:线程本地存储、调用上下文、逻辑调用上下文

    .NET:线程本地存储.调用上下文.逻辑调用上下文 目录 背景线程本地存储调用上下文逻辑调用上下文备注 背景返回目录 在多线程环境,如果需要将实例的生命周期控制在某个操作的执行期间,该如何设计?经典的 ...

  3. 利用kibana插件对Elasticsearch查询

    利用kibana插件对Elasticsearch查询 Elasticsearch是功能非常强大的搜索引擎,使用它的目的就是为了快速的查询到需要的数据. 查询分类: 基本查询:使用Elasticsear ...

  4. MySQL 笔记整理(2) --日志系统,一条SQL查询语句如何执行

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> 2) --日志系统,一条SQL查询语句如何执行 MySQL可以恢复到半个月内任意一秒的状态,它的实现和日志系统有关.上一篇中记录了一 ...

  5. CLR 无法从 COM 上下文 0x208f68 转换为 COM 上下文 0x2090d8,这种状态已持续 60 秒

    问题: CLR 无法从 COM 上下文 0x208f68 转换为 COM 上下文 0x2090d8,这种状态已持续 60 秒.拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Wind ...

  6. flask上下文全局变量,程序上下文、请求上下文、上下文钩子

    Flask上下文 Flask中有两种上下文,程序上下文(application context)和请求上下文(request context) 当客户端发来请求时,请求上下文就登场了.请求上下文里包含 ...

  7. python-day71--django多表双下划线查询及分组聚合及F/Q查询

    #====================================双下划线的跨表查询===============# 前提 此时 related_name=bookList 属性查询: # 查 ...

  8. springboot结合mybatis使用pageHelper插件进行分页查询

    1.pom相关依赖引入 <dependencies> <dependency> <groupId>org.springframework.boot</grou ...

  9. 1--面试总结-js深入理解,对象,原型链,构造函数,执行上下文堆栈,执行上下文,变量对象,活动对象,作用域链,闭包,This

    参考一手资料:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/中文翻译版本:https://zhuanlan.zhihu.com/p ...

  10. 自定义Mybatis-plus插件(限制最大查询数量)

    自定义Mybatis-plus插件(限制最大查询数量) 需求背景 ​ 一次查询如果结果返回太多(1万或更多),往往会导致系统性能下降,有时更会内存不足,影响系统稳定性,故需要做限制. 解决思路 1.经 ...

随机推荐

  1. Hamming(汉明)窗的原理介绍及实例解析

    概念   在数字信号处理过程中,每次FFT变换只能对有限长度的时域数据进行变换,因此,需要对时域信号进行信号截断.即使是周期信号,如果截断的时间长度不是周期的整数倍(周期截断),那么,截取后的信号将会 ...

  2. Winform DataGridView 添加复选框列

    1.编辑DataGridView的属性: 2.定义列的类型为chekcBox: 3.点击添加: 4.效果: 5.编辑:

  3. 告别繁琐!1分钟带你构建RabbitMQ消息应用

    支持.Net/.Net Core/.Net Framework,可以部署在Docker, Windows, Linux, Mac. RabbitMQ作为一款主流的消息队列工具早已广受欢迎.相比于其它的 ...

  4. 05_QT_Mac开发环境搭建

    在不同的Mac环境下,实践出来的效果可能跟本教程会有所差异.我的Mac环境是:Intel CPU.macOS Moterey(12.4). FFmpeg 安装 在Mac环境中,直接使用Homebrew ...

  5. 为什么说HTTPS比HTTP安全? HTTPS是如何保证安全的?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.安全特性 在上篇文章中,我们了解到HTTP在通信过程中,存在以下问题: 通信使用明文(不加密),内容可能被窃听 不验证通信方的身份,因 ...

  6. GPT-SoVITS教程,接入酒馆AI,SillyTavern-1.11.5,让AI女友声若幽兰

    本次分享一下如何将GPT-SoVITS接入SillyTavern-1.11.5项目,让让AI女友声若幽兰,首先明确一下,SillyTavern-1.11.5只是一个前端项目,它没有任何大模型文本生成能 ...

  7. KingbaseES V8R3集群运维案例之---主库数据库服务down后failover切换详解

    案例说明: 对KingbaseES V8R3集群,主库数据库服务down后,failover切换进行分析,详解其执行切换的过程,本案例可用于对KingbaseES V8R3集群failover故障的分 ...

  8. 慢查询SQL排查

    转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/c56bd0c5.html 你好,我是测试蔡坨坨. 在往期文章中,我们聊过数据库基础知识,可参考「数据库基础,看完这篇就够了! ...

  9. .net和java串口通讯压力测试对比

    最近由于工作要求,需要对一个串口通讯设备进行压力测试,要求连续持续对串口设备发送指令,无间隔,测试设备是否会死机. 要求做到毫秒级,测试第三方的工具,基本上都无法达到毫秒级,最少的也是10毫秒. 于是 ...

  10. Jenkins设置定时触发器执行任务

    1. 选中任务,选择配置/构建触发器,选择定时构建 2. 填写定时器参数,格式说明如下,共五个参数,参数之间空格隔开,不需要填的直接*号即可.  此处d定时任务的格式遵循 cron 的语法(可以与 c ...