编程语言应用

首页 » 常识 » 诊断 » 百度工程师浅谈分布式日志
TUhjnbcbe - 2024/9/30 9:32:00

作者

文库基础架构

导读

我们做软件开发时,或多或少的会记录日志。由于日志不是系统的核心功能,常常被忽视,定位问题的时候才想起它。本文由浅入深的探讨不起眼的日志是否重要,以及分布式架构下的日志运维工具应该具备哪些能力,希望感兴趣的读者能从本文获得一些启发,有所帮助。

全文字,预计阅读时间23分钟。

01什么是日志

日志是一种按照时间顺序存储记录的数据,它记录了什么时间发生了什么事情,提供精确的系统记录,根据日志信息可以定位到错误详情和根源。按照APM概念的定义,日志的特点是描述一些离散的(不连续的)事件。

日志是按照错误级别分级的,常见的错误级别有FATAL/WARNING/NOTICE/DEBUG/TRACE5种类型。通常我们会在项目里面定义一个日志打印级别,高于这个级别的错误日志会数据落盘。

02什么时候记录日志系统初始化:系统或服务初始化的启动参数,加载配置项是否成功;编程语言提示异常:各种语言的异常捕捉机制;业务流程预期不符:研发记录日志,如外部传参不正确,传入数据不在合理范围之内等等。03日志的价值

在大型网站系统架构里面,日志是其中的重要功能组成部分。它可以记录下系统所产生的所有行为,并按照某种规范表达出来。我们可以使用日志系统所记录的信息为系统进行排错,优化性能。通过统计用户行为日志,帮助产品运营同学做业务决策。在安全领域,日志可以反应出很多的安全攻击行为,比如登录错误,异常访问等。日志能告诉你很多关于网络中所发生事件的信息,包括性能信息、故障检测和入侵检测。还可以为审计进行审计跟踪,日志的价值是显而易见的。

04分布式架构的日志运维4.1为什么要有运维工具

微服务发展迅猛的今天,松耦合的设计层出不穷,为简化服务服务带来了极大的便利。业务方向分工明确,研发同学只需要关心自己模块的版本迭代上线就好。随着整个业务架构的扩大,服务实例的数量迎来了爆炸性的增长,往往带来以下问题:

由不同团队开发,使用不同的编程语言,日志格式不规范统一;

微服务迭代速度快,日志漏记、级别使用错误、难以提取有效信息;

容器实例分布在成千上万台服务器上,横跨多个数据中心,异构部署,难以串联请求链路。

没有工具的情况下,需要登录服务实例,查看原始日志,在日志文件中通过grep、awk方式获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大不易归档、文本搜索太慢、不方便多维度查询。这时候需要更加高效的运维工具来代替人工访问日志。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

4.2运维工具建设

我们希望通过原始日志可以理解系统行为,这需要建设具备性能分析,问题定位的能力的工具平台。它能够支持:

在故障发生前,分析风险和系统瓶颈;

在故障发生时,及时通知,快速定位解决问题;

在故障发生后,有历史数据迅速复盘。

通过建设具备日志即时收集、分析、存储等能力的工具平台。用户可以快速高效地进行问题诊断、系统运维、流量稳定性监控、业务数据分析等操作。比如搭建链路追踪系统,能追踪并记录请求在系统中的调用顺序,调用时间等一系列关键信息,从而帮助我们定位异常服务和发现性能瓶颈,提升了系统的『可观测性』。前面提到日志在APM标准的定义下日志的特点是描述一些离散的(不连续的)事件。这里说下APM是什么,方便更好的构建监控方面的知识体系。

05APM和可观测性

APM是ApplicationPerformanceManagment的缩写,即:“应用性能管理”。可以把它理解成一种对分布式架构进行观测分析优化的理念和方法论。监控系统(包括告警)作为SLA体系的一个重要组成部分,不仅在业务和系统中充当保镖发现问题、排查问题的作用。

随着系统不断演进完善,我们可以获得越多帮助于了解业务和系统的数据和信息,这些信息可以更进一步的帮助我们进行系统上的优化,由于可以梳理请求链路得出用户的浏览偏好,甚至可以影响业务上的关键决策。

整体来说,整个APM体系就是将大三类数据(logs、metrics、trace)应用到四大模块中(收集、加工、存储、展示),并在四个难点(程序异构,组件多样,链路完整,时效采样)上不断优化。

可观测性是APM的一大特征,主要由以下三大支柱构成,分别是Logging(日志),Metrics(指标),以及Tracing(应用跟踪)。

Logging:自动埋点/手动埋点,展现的是应用运行而产生的事件或者程序在执行的过程中间产生的一些日志,可以详细解释系统的运行状态,但是存储和查询需要消耗大量的资源。

Metrics:服务、端点、实例的各项指标,是一种聚合数值,存储空间很小,可以观察系统的状态和趋势,对于问题定位缺乏细节展示,最节省存储资源。

Tracing:同一TraceId的调用序列,面向的是请求,可以轻松分析出请求中异常点,资源可能消耗较大,不过依据具体功能实现相对可控。

5.1Metrics和Prometheus

Metrics:指标。

Ithinkthatthedefiningcharacteristicofmetricsisthattheyareaggregatable:theyaretheatomsthat

1
查看完整版本: 百度工程师浅谈分布式日志