定义:什么是日志管理
日志管理是指处理由所有软件应用程序及其运行基础设施生成的日志事件的过程。它包括日志的收集、聚合、解析、存储、分析、搜索、归档和处置,最终目标是利用这些数据进行故障排查并获取业务洞察,同时确保应用程序和基础设施的合规性与安全性。
日志通常记录在一个或多个日志文件中。日志管理允许你将这些数据集中到一个地方,并将其视为一个整体,而不是分散的独立实体。因此,你可以分析所收集的日志数据,识别问题和模式,从而清晰、直观地描绘出你的所有系统在任意时刻的运行状况。
日志记录已成为任何 DevOps 团队不可或缺的一部分。日志管理解决方案的使用方式多种多样,从在自有基础设施上部署流行的开源 ELK 堆栈,到使用完全托管的日志管理解决方案。
日志管理基础:什么是日志文件?
日志文件是一个文本文件,应用程序(包括操作系统)会将事件写入其中。日志可以告诉你幕后发生了什么以及何时发生,这样当你的系统出现问题时,你就能获得异常发生前所有操作的详细记录。
因此,日志文件使开发人员、DevOps 工程师、系统管理员(SysAdmins)或安全运维(SecOps)更容易获取洞察并识别应用程序和基础设施问题的根本原因。
即使系统运行正常,日志也非常有用。你可以了解应用程序的反应和性能表现,从而对其进行改进。
日志来源和日志类型多种多样。以下是我们今天看到的一些主要日志来源,从技术栈底层开始:
网络设备
当我们与移动应用、Web 应用、网站等交互时,会产生大量网络流量。网络设备(如路由器、交换机等)可以生成有关此流量的日志。与倾向于使用更现代格式(且日益结构化)的服务器和应用程序日志不同,网络设备仍使用各种 Syslog 格式。
服务器和应用程序日志
传统的日志事件来源是服务器及其上运行的应用程序。内核会发出日志消息,例如加载了哪些驱动程序、是否触发了 OOM killer(内存不足杀手)等。此外还有系统服务日志,比如用户何时登录。这些信息有助于诊断稳定性、安全问题以及系统级性能瓶颈。例如,内核是否正在发送 SYN cookies?这可能是攻击行为,也可能是网络过载。
至于应用程序,你可能会有 Nginx 日志、运行在 Apache Tomcat 中的 Java Web 应用,或运行在 Apache Web 服务器中的 PHP 应用。它们会发出各种信息性、错误性或调试性日志事件。
其中一些日志使用标准化格式(如通用日志格式 Common Log Format),而其他则使用各种自定义格式,包括键值对(key=value)甚至 JSON 等结构化日志格式。
如果你自己编写应用程序,我们强烈建议采用结构化日志格式。这样在后续处理管道中解析起来要容易得多。
容器日志
如今,越来越多的应用程序以容器形式部署。因此,容器及其内部运行的应用程序成为另一个重要的日志来源。与传统应用和服务器(当然也包括网络设备)不同,容器非常“短暂”。像 Kubernetes 这样的容器编排框架会根据需求和资源可用性将容器从一台主机迁移到另一台主机。平均而言,一个容器的生命周期比萤火虫或蜜蜂还要短。
此外,在云原生世界中,“ssh 登录进去,四处查看,用 tail 和 grep 查看日志”这种做法被视为不良实践。因此,Docker 监控和日志管理面临诸多挑战,需要新的方法和专用的 Docker 日志管理工具。
移动设备和应用日志
移动应用和设备无处不在。你可能不会把它们视为日志来源,因为你无法(轻易地)访问 iOS 或 Android 设备上的系统或应用日志。有限的磁盘空间和不可靠的网络意味着你无法在本地记录冗长的日志消息,也无法假定能实时将日志发送到中央位置。
尽管存在这些挑战,了解移动应用是否崩溃以及崩溃原因仍然至关重要。除此之外,还需了解应用的行为和性能表现。通常的做法是在本地缓冲最多 N 条消息,然后将其发送到集中式日志服务。
传感器、物联网(IoT)与工业物联网(IIoT)
在消费领域,我们有汽车中的传感器、智能恒温器、联网冰箱以及其他智能家居设备;在更大范围内,还有智慧城市。
工业物联网(IIoT)则连接交通运输、发电、制造和医疗等行业的机器与设备。
通常,我们更关注这些设备生成的指标数据。例如,我们会收集空气污染水平(PM2.5、PM10)并将其发送到 Cloud。但这些设备发出的日志同样重要:该传感器是否正确启动?是否需要重新校准?过去六个月中传感器失败了多少次?基于这些信息,哪家制造商最可靠?这些都是可以从物联网日志中提取的元数据示例。
为什么日志管理很重要:关键优势与使用场景
日志管理为你的系统和应用程序的健康状况及合规性提供洞察。

如果没有日志管理,你将如同在黑暗中摸索,试图定位性能问题、漏洞、异常行为等问题的根源。你将被迫手动检查多个日志文件以排查生产环境问题。这种方式痛苦缓慢、容易出错、成本高昂且不可扩展。
对于云原生应用而言,日志管理尤为重要,因为它们具有动态、分布式和短暂的特性。与传统应用程序不同,云原生应用通常运行在容器中,并将日志输出到标准输出(stdout),而非写入日志文件。这意味着你无法依赖“手动 grep 日志”这一默认选项。通常,你需要捕获这些日志并将其发送到集中式日志管理解决方案。
简而言之,日志管理使应用程序和基础设施的操作人员(开发人员、DevOps、系统管理员等)能够快速排查问题,同时也让业务利益相关者(产品经理、市场人员、业务运营等)能够从日志事件中提取数据洞察。日志也是安全分析的关键数据源之一——包括威胁检测、入侵检测、合规性、网络安全等,统称为 SIEM(安全信息与事件管理)。
为了全面理解日志管理的重要性,我们汇总了以下主要优势:
监控与故障排查
最常见的核心日志管理用例是软件应用程序和基础设施的故障排查。日志事件与应用程序监控和服务器监控相辅相成。开发人员、DevOps、系统管理员和 SecOps 同时利用指标和日志,以便及时收到应用程序和基础设施性能与健康问题的警报,并找出这些问题的根本原因。拥有良好的日志管理工具有助于缩短 MTTR(平均恢复时间),从而提升用户体验。长时间停机或性能不佳的应用程序和基础设施也可能导致利润损失。因此,日志管理软件在降低 MTTR 方面起着关键作用。
不过,日志的价值不仅限于故障排查。如果你的日志是结构化的(无论是源头生成还是在处理管道中解析),你就可以提取有趣的元数据。例如,在 Solr 或 Elasticsearch 咨询过程中,我们经常查看慢查询日志。这样我们就能回答许多问题:哪些类型的查询更频繁?哪些查询较慢?按客户端划分的分布情况如何?是否存在“吵闹”的客户端?所有这些都有助于我们优化整个系统,从架构到查询语句。如果一切顺利,我们将获得一个更稳定、更快、更具成本效益的系统,同时也能让自己的生产支持工作变得更轻松!
一个不太“技术性”的日志来源可能是销售渠道。如果我们记录客户在每个步骤的行为(连同客户元数据),就可以进行优化。例如,创建账户的用户中有多少最终成功登录?他们能否顺利使用我们的服务,还是我们需要改进引导流程?是否有特定类别的客户(例如来自世界某个地区)似乎遇到困难?如果我们集中管理日志,就能得出这些洞察。
日志管理 vs. APM(应用性能监控)
尽管日志记录和监控存在重叠,但需要注意的是,它们并非同一过程的不同说法。虽然两者对于理解系统故障都至关重要,但各自目的不同。日志记录侧重于管理日志中的数据,使其始终可读且可用;而监控(即应用性能监控 APM)则利用这些数据进行分析,描绘系统行为图景,并帮助你追踪问题根源。
你可以为每项功能使用单独的工具,也可以选择一体化解决方案,它集成了高效执行日志记录和监控所需的功能。
改进运营
随着应用程序和系统变得越来越复杂,你的运维规模和难度也随之增加。SecOps、系统管理员和 DevOps 很难再“手动”监控一切,这将耗费更多时间和财务资源。
通过日志记录,你可以识别整个公司基础设施中的趋势,从而提前适应并制定预防性解决方案,避免“救火”而是主动“防火”。
优化资源使用
在系统性能问题方面,系统过载始终如一片乌云笼罩。然而,你需要记住,问题并不总是出在你的软件上,而可能是服务器接收到的请求过多或过于复杂,导致系统难以应对。
在这种情况下,日志管理的作用就是帮助跟踪资源使用情况。你可以看到系统何时接近过载,从而更好地分配资源。
性能监控可以让你知道是否存在性能问题,例如第 90 百分位的查询变慢。它还可能揭示瓶颈。继续以该例子说明,你可能会发现当查询变慢时,IO 负载过高。但要获得更具操作性的洞察(例如高开销查询的具体内容、这些查询涉及多少数据、有多少并行运行),你就需要查询日志。与指标不同,日志提供了更多可用于过滤和可视化的元数据。
用户体验
正如前面的例子所示,用户报告应用程序最大的痛点之一就是查询响应时间过长,甚至完全无响应。日志管理允许你在任何层级(API、数据库等)监控请求,并识别哪些环节表现不佳。这使你能够及时介入并理解问题成因,从而掌控用户体验。
理解网站访客行为
日志管理结合真实用户监控(RUM)可以帮助你跟踪用户在网站或平台上的旅程,从而洞察其行为并改善体验。在此,日志管理和 RUM 互为补充。
RUM 工具提供用户视角的数据,例如网站访客数量、用户在哪些页面停留时间最长、访客数量是否有变化等。
而日志则提供更贴近业务逻辑的元数据:有多少用户最终完成支付?后端请求是什么样子?通过关联这两类数据,你可以发现机会点,例如何时推出新产品、何时关闭网站进行维护,或何时提供折扣。
增强安全性
在 IT 安全领域,永远不嫌防护过度。日志分析是任何 SIEM 解决方案的核心:从网络日志、系统日志、审计日志到应用日志。这里的异常可能预示着攻击行为。日志通过提供实时日志事件流,帮助安全管理员实时诊断异常。
因此,无论有人试图从内部还是外部突破你的防线,你都能更清楚地了解实际发生了什么。你甚至可以在异常发生前收到警报,从而在问题升级前做出反应。
安全审计与日志策略
确保符合安全和审计要求的最佳方式是制定日志记录和监控策略。
日志管理策略为审计日志设定安全标准,包括系统日志、网络访问日志、身份验证日志,以及任何能将网络或系统事件与用户活动关联起来的数据。更具体地说,它提供了关于应记录哪些内容、日志存储位置、保留时长、审查频率、是否需要加密或归档以供审计等方面的指导方针。这类策略使团队更容易获取准确且有意义的洞察,从而检测并应对对信息系统或数据的可疑访问或使用行为。
确保符合法规要求
鉴于虚拟攻击越来越难以检测和解决,确保公司符合安全政策、审计、法规和取证的合规要求至关重要。
其中最重要的一些法规包括 HIPAA(健康保险可携性和责任法案)、PCI DSS(支付卡行业数据安全标准)和 GDPR(通用数据保护条例)。此外,日益增多的法规要求你收集日志数据、妥善存储并加以保护,同时确保在审计时可随时调取。否则,一旦发生数据泄露,公司可能面临利润损失以及因未能遵守各类组织制定的多项法规而招致的巨额罚款。
日志管理将帮助你在发现任何涉及用户数据的可疑活动时,及时通知相关人员。
日志管理生命周期:它是如何工作的?
日志管理包含 5 个关键功能,若能遵循,将确保你的日志记录和监控顺利进行。让我们逐一回顾这 5 个要素:
日志收集(Log Collection)
如前所述,你的所有系统和应用程序在任意时刻都会生成日志文件,这些文件可能存储在软件栈、操作系统、容器、云基础设施和网络设备的各个位置。
所谓日志收集,指的是从源(例如日志文件)拉取数据,或接收源主动发送的数据(通过 UNIX 套接字或网络套接字),然后将其转发到处理管道中的下一环节。
日志收集器(或日志转发器)至少应具备某种形式的数据缓冲能力,以防无法与目标通信。有时,在靠近数据源的位置进行一些解析和丰富处理也是个好主意。我们将在下一节“日志聚合”中进一步讨论这些内容。
日志聚合至集中式日志存储
日志管理的下一个关键环节是日志聚合。
典型的日志聚合管道应具备以下能力:
- 从所需来源收集日志(如上所述)。
- 在出现网络或吞吐量问题时缓冲日志。
- 解析日志,将其转换为可被索引的格式。例如,Elasticsearch 消费 JSON,因此你需要将日志转换为 JSON 格式。
- (可选)使用各种元数据对其进行丰富。例如,通过源 IP 地址,你可以标记该主机所属的公司部门或其地理位置。
你可能希望也可能不希望将这些角色分离。以下是几种架构示例:
- 在源端完成所有操作:这种方式会随源数量自动扩展,但如果资源有限(如网络或移动设备),可能会出现问题。例如,你可以在每个生成日志的主机上安装轻量级日志转发器,如 rsyslog 或 Logagent。
- 使用专用服务器进行缓冲、解析和丰富处理:最好按此顺序执行,以便在处理开销过大时仍能缓冲数据。例如,由轻量级日志转发器(如 Filebeat)向集中式 Logstash 发送数据。
- 使用专用缓冲层(通常是 Kafka 集群):轻量级日志转发器将数据推送到 Kafka,另一端由消费者(如 Logstash 或 Logagent)负责解析、丰富并将数据发送到最终存储。
最终存储可以是本地部署的(如你自己的 Elasticsearch 或 Solr),也可以是托管服务。托管服务可能会为你处理管道的部分环节。例如,你可以直接从设备向 Cloud 发送 syslog,后者会自动完成缓冲、解析和索引,甚至可自动备份到你的 AWS S3 存储桶中,用于归档或合规目的。
关于日志管理流程的这一步骤,我们在专门的《日志聚合指南》中有更详细的介绍。
日志搜索与分析
经过存储和索引后,你的聚合日志文件即可被搜索。通常通过结构化语言(如 Lucene 查询语法)进行搜索,这使你更容易深入进行根因分析。
日志分析不仅仅是搜索。即使在故障排查过程中,能够可视化数据分解也常常很有用:整体日志量是否在某个时间点激增?流量是否突增?每台主机的错误数量如何?如果你的日志在索引时已是结构化的,你就能获取所有这些信息乃至更多。
如果你对日志管理流程的这一阶段感兴趣,请参阅我们的《日志分析教程》。
日志监控与告警
日志管理能让你始终保持警觉,持续提供有关系统和应用程序性能的数据。它还能让你了解基础设施是否正常运行,或是否存在活动异常或安全漏洞。
此过程的关键部分在于,它允许你设置规则和告警,以便在用户受到影响之前,实时通知相关团队或人员采取措施。
例如,一条规则可以是:当登录失败次数达到一定数量时,立即通知安全团队;或者当购物车放弃率过高时,通知销售团队。
日志可视化与报告
所有团队成员(以及其他跨职能团队成员)都应能访问相同的信息,以确保所有人保持同步。报告和可视化使幕后发生的一切对所有人(包括 IT 部门以外的人员)都清晰可见。
在为业务利益相关者构建报告时,你可以展示时间序列折线图中的数据趋势、对数据进行分组并绘制精美的饼图。更不用说,图表、趋势的可视化表示和仪表盘对决策者具有更强的冲击力(例如看到巨大峰值时)。
清晰地了解大量数据随时间的表现,有助于更容易地发现行为趋势或异常。然后,你可以直接跳转到导致峰值的那条日志记录。

现代 IT 环境中的日志管理挑战
随着应用程序从单体架构转向微服务架构,你会在基础架构之上不断增加更复杂的层次。这反过来使得对整个技术栈的可见性越来越难获得。虽然云计算和近乎“无限”的存储解决了部分传统日志管理挑战,但现代应用程序带来了额外且不同的挑战:
- 分布式系统生成海量数据,存储成本高昂且难以查询。
- 日志收集、传输、监控和告警都必须实时完成,以便团队能立即投入故障排查。
- 基于云的架构需要高效的日志记录、告警、自动化、分析工具、主动监控和报告功能,而这些是传统日志管理所不支持的。
- 日志格式五花八门,需要得到全面支持。
幸运的是,现代日志管理系统凭借其五大功能——日志收集、聚合、搜索与分析、监控与告警、可视化与报告——可以帮助克服这些日志挑战。然而,这些功能必须建立在云原生原则之上,如高可用性、可扩展性、弹性与自动化。此外,多年的经验和试错也揭示了一些技巧和窍门,即使在如此复杂的环境中,也能实现高效日志记录。接下来,我们就来看看这些内容。
日志管理策略
日志管理策略提供了关于需要记录哪些类型操作的指导方针,以便追踪潜在的欺诈、不当使用等行为。更具体地说,它规定了应记录什么、日志存储位置及保留时长、日志审查频率、是否需要加密或归档以供审计等。实施企业级日志策略可确保运维得当,使故障排查更轻松、更快速、更高效。
同时,它也有助于降低成本。在保持最低成本的同时获得适当的可见性可能颇具挑战。你收集的日志越多,分配给监控需求的预算就越高。因此,基于日志策略收集日志,能确保你为用例获取丰富且恰当的信息。
通常,某些认证标准要求制定日志策略。但即使你不受法规或认证约束,了解应监控哪些日志仍然很重要,因为它使你能够调查欺诈行为,且用户的隐私也与此息息相关。
实施日志管理策略是一个三步过程:制定策略、在全公司范围内传达,然后付诸实施。但你必须注意的是,审计要求和安全要求需要不同的策略。
为何要使用日志管理工具
如前所述,你可以自行完成日志管理的所有步骤。然而,除非使用日志管理工具,否则你将需要投入大量时间和精力。
日志管理解决方案可以处理整个日志管理流程,同时允许你根据自身需求个性化每个步骤。此外,它们还支持日志的可视化和丰富处理,使其更易于搜索,既可用于故障排查,也可用于业务分析。更不用说,集中式日志解决方案具备实时异常检测和告警功能,使你能在问题影响终端用户之前就精准定位。
如何选择日志管理软件:基本功能与要求
有许多供应商为 DevOps 提供日志管理即服务(LMaaS),包括免费、开源和付费方案。
这些工具有何共同之处?在寻找日志管理软件时,你应该关注以下基本要求:
- 易于上手,并能与现有系统集成
- 支持传输中数据的 SSL 加密和基于角色的访问控制
- 符合相关法规要求
- 用户体验直观
- 搜索和过滤功能快速且直观
- 支持高级分析功能,如机器学习和异常检测,以应对大数据挑战
- 可扩展且灵活,能随数据量增长而扩展,且不会显著增加成本
- 支持实时告警和通知