10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

日志监控实践 - 监控 Agent 集成 Lua 引擎实现多维度日志采集

  • 2019-09-11
  • 本文字数:2151 字

    阅读完需:约 7 分钟

日志监控实践 - 监控Agent集成Lua引擎实现多维度日志采集

对于互联网行业来说,最有价值的数据往往蕴含在服务的日志之中。从日志中,我们不仅仅可以获取到服务的使用量、服务效果、问题定位信息等,还可以通过监控系统及时地识别出服务的”健康”状态,规避风险,推动服务优化升级。


在监控系统中,日志处理就是采集服务运行时生成的原始日志,根据用户配置的解析规则,从中提取可用数据,形成监控指标的过程,这个过程一般由监控系统的日志采集 Agent 完成。


通用的日志采集 Agent 一般会提供多种日志解析方法,常用的有分隔符、K:V、正则表达式等。为了适配某些常用的系统或组件(例如:Nginx、Syslog 等),有些日志采集 Agent 还会提供一些预制的日志解析配置,以期达到开箱即用的效果。


百度的业务场景十分复杂,涉及搜索服务、社区服务、金融服务、AI 服务等,这些业务的程序所生产的日志格式存在较大差异,如何统一处理这些不同格式的日志成为一个重要的问题。今天,我们会从百度 Noah 监控平台的角度,讨论如何解决这一问题。

典型日志处理示例

1K:V 日志


如上图所示,这是一个典型的 K:V 形式组成的日志。


我们可以通过简单的分隔符将日志分隔开,并根据 K:V 的式样从日志中提取出 uri、c_time、idc 等监控项。

2 多行日志


这是一个 C++程序的 Stack 信息。需要将多行日志作为一个 Trace 信息进行完整提取,并且将每一行里面的函数名、文件名、行号单独提取,统一推送,用于批量实例的故障定位。


这个例子需要具备两个能力,多行日志处理和单行日志内提取字符串。

3 混合日志


在这个例子中,每行日志混合了服务名、代码位置、用户自定义数据等信息。需要分别用分隔符、K:V 和 JSON 解析的方式进行提取。


针对这些场景,一些开源方案(例如 Logstash,Collectd)通过在配置文件中支持此类语义或插件的方式实现了此类功能。我们参考了这些开源实现,结合百度业务的场景,在监控采集 Agent 上通过日志插件功能实现日志处理需求。


实现插件时,需要重点考虑以下几方面:


  1. 通用性和易用性:需要尽可能满足用户定制化需求, 并且开发简单。

  2. 性能:典型的日志采集场景中,需要每秒处理数 MB 甚至数十 MB 的日志文件,并完成字段切分、正则匹配、数据格式转换等操作,需要处理引擎有较强的性能。

  3. 可用性和安全性:Agent 运行在线上生产服务器上,对稳定和安全有相当高的要求。

Agent 日志插件实现


如何实现定制化的日志解析逻辑很简单。我们封装了 Log 解析类,包含获取单行日志和返回监控项解析结果的接口,供用户自定义日志解析脚本来调用。用户需要在日志解析脚本中实现 Callback 函数,在解析每行日志时,被 Agent 调用。


所有的日志处理逻辑完全在脚本中实现,例如,用户可以在脚本中维护全局 Context,通过 Context 中保存的进度信息,完成多行日志的处理。


这里还封装了通用的日志处理工具库,以 Lua 内置类的形式提供,包含 JSON、Debug 等工具。

可用性和安全

Agent 在所有服务器上运行,可用性和安全性是最重要的考量因素。


可用性方面,主要是避免自定义脚本本身的 Bug 或插件引擎 Bug 导致采集功能异常。除此之外,需要规避资源占用超限导致服务器上其它业务受影响。


对用户代码,需要严格规范资源占用量。执行插件的任务,作为一个单独的进程,使用 Cgroup 和 Ulimit 等机制限制资源占用,同时也作为执行隔离的手段,规避单个脚本或插件引擎的 Bug 影响所有采集任务正常执行。


另外,在任务执行时间上,也由 Agent 加以控制,避免任务超时运行。


安全性方面,自定义日志解析脚本需要配置中心统一托管,避免被篡改。


Lua 本身提供的一些功能也做了屏蔽,例如 io.open/io.popen/os.execute/os.remove 等高危操作接口,避免从脚本调用外部程序,或做出删除系统文件等操作。

增强模式

经过一段时间的线上运行,在某些场景下,日志处理的性能无法满足需求。


对于通用日志采集场景,通过将 Lua 替换成 Luajit,日志解析吞吐量获得约 4 倍的提升,可以覆盖我们几乎所有的通用日志采集场景。替换过程中需要关注兼容问题处理,例如 Regexp 语意和标准的 Lua 并不完全相同,lua_ctx 最大数量限制等等。


特殊的业务需求场景,需要针对性地进行优化。例如,某些业务日志的采集过程中,需要进行 UNIX 时间戳到 RFC 格式的转换、IP 地址到机房信息的转换等操作,在 Lua 脚本中通过查表或进行转换来实现需求的效率非常低。对于这些场景我们使用 C++等语言封装了可以在 Lua 中直接调用的类,有效提升此类操作性能超过一个数量级。这种集成方式也可以用于支持一些定制功能,例如 Protobuf 和 BaiduRPC 变量等信息的采集。


性能方面仍有提升的空间。当前的日志处理是单进程单线程中运行日志处理引擎解决需求,扩展成为多线程,利用并发方式可以有效提升吞吐量。

总结

以上是百度智能运维(Noah)在使用 Lua 实现定制日志采集方面的工程实践经验。工程实现并不复杂,但细节较多,需要严谨的功能设计,编码和充分的测试,保障日志处理过程满足需求、资源合理利用,并提供良好的用户操作接口,逐步积累抽象出更多的通用性插件,降低用户使用成本。


作者介绍:


董涵,百度资深研发工程师,负责百度智能运维(Noah)服务管理和分布式监控架构研发工作,在分布式系统和大规模数据处理、可用性工程方向有广泛的实践经验。


本文转载自公众号 AIOps 智能运维(ID:AI_Ops)。


原文链接:


https://mp.weixin.qq.com/s/yUQYeMYakmKz9pHe9sblwA


2019-09-11 22:361803

评论

发布
暂无评论
发现更多内容

选择香港云主机,让您的网站在全球范围内高速运行

一只扑棱蛾子

香港云主机

技术领先、结合AI,数智平台成为企业数字化转型的基石

用友BIP

数智平台

用友BIP全球司库连续中标三大银行总行合作项目,共同推动企业数智转型

用友BIP

银行 全球司库

为什么说 ICMP 协议是网络最强辅助?

互联网工科生

ICMP

什么是低代码开发,为什么要使用低代码,选择低代码要注意什么?

优秀

低代码 低代码开发

接口测试|postman的介绍和安装

霍格沃兹测试开发学社

为了快一点,所以我慢一点

树上有只程序猿

多端低代码开发平台魔笔:教你1小时搭建代办事项管理平台

移动研发平台EMAS

低代码开发 多端开发 降本增效 阿里云魔笔

支持目标打卡,活力三环让运动更有趣

HarmonyOS SDK

华为云河图KooMap 共筑数字孪生底座 共建产业标杆

华为云开发者联盟

华为云 华为云开发者联盟 企业号 7 月 PK 榜

App自动化测试|adb版本过低的报错提示

霍格沃兹测试开发学社

直播预告 | 博睿学院:深入解析nacos基础原理

博睿数据

云原生 nacos 智能运维 博睿数据 博睿学院

数仓性能调优:大宽表关联MERGE性能优化

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

《面向分布式云的直播及点播云技术创新方案》获中国信通院“分布式云技术创新先锋案例”

阿里云CloudImagine

云计算 视频云 信通院

最强优化指令大全 | 【Linux技术专题】「系统性能调优实战」终极关注应用系统性能调优及原理剖析(下册)

码界西柚

Java Linux 性能优化 JVM GC

人工智能促进知识的公平获取

澳鹏Appen

人工智能 翻译 nlp 数据标注 小语种

详解共识算法的Raft算法模拟数

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 7 月 PK 榜

使用Flutter开发微信小程序:构建简单的天气预报小程序

Onegun

flutter 小程序容器

软件测试/测试开发丨Python自动化测试学习笔记

测试人

Python 程序员 软件测试 自动化测试

接口测试|Fiddler设置过滤

霍格沃兹测试开发学社

接口测试|Charles的界面介绍

霍格沃兹测试开发学社

IDC&用友联合发布《建设数字中国升级数智底座-企业数智化底座白皮书》

用友BIP

白皮书 数智底座

基于Surprise协同过滤实现短视频推荐

北桥苏

推荐系统 协同过滤 Surprise

和鲸 × 于峻川丨以遥感领域为例,浅谈 AI for Science 科研范式改革

ModelWhale

人工智能 算力 遥感 AI for Science 协同科研

接口测试|Fiddler设置断点

霍格沃兹测试开发学社

聊聊照片类数据中的显水印和隐水印

冯骐

隐私保护 数据安全 数据服务 水印

软件测试/测试开发丨面向对象编程学习笔记分享

测试人

Python 面向对象 软件测试

大型企业数智化的中国力量:用友BIP助力国产替代

用友BIP

国产替代

日志监控实践 - 监控Agent集成Lua引擎实现多维度日志采集_文化 & 方法_董涵_InfoQ精选文章