Observability:日志管理的最佳实践 - 利用日志更快地解决问题

作者:来自 Elastic Luca Wintergerst•David Hope•Bahubali Shetti

在当今快速发展的软件开发环境中,高效的日志管理对于维护系统可靠性和性能至关重要。随着基础架构和应用程序组件的不断扩展和复杂化,运营和开发团队的职责也不断增加且越来越复杂。这篇博文概述了有效日志管理的最佳实践,以应对数据量不断增长、基础架构复杂以及快速解决问题的需求等挑战。

了解日志及其重要性

日志是基础设施内发生的事件的记录,通常包括时间戳、详细说明事件的消息以及标识来源的元数据。它们对于诊断问题、提供早期警告和加快问题解决速度非常有用。日志通常是开发人员启用的主要信号,为调试、性能分析、安全性和合规性管理提供重要详细信息。

日志记录之旅

日志记录之旅涉及三个基本步骤:收集和提取、处理和丰富以及分析和合理化。让我们详细探讨每个步骤,并介绍每个部分的一些最佳实践。

1. 日志收集和提取

收集所有相关且可操作的信息

第一步是将所有日志收集到一个中心位置。这涉及识别所有应用程序和系统并收集其日志。全面的数据收集可确保不会遗漏任何关键信息,从而提供系统行为的完整画面。如果发生事故,将所有日志集中在一个地方可以大大缩短解决问题的时间。通常,收集比所需更多的数据会更好,因为你以后总是可以过滤掉不相关的信息,以及更快地删除不再需要的日志。

利用集成

Elastic 提供 300 多个集成,可简化数据导入。这些集成不仅可以收集数据,还附带仪表板、已保存的搜索和用于解析数据的管道。利用这些集成可以显著减少人工工作并确保数据一致性。

考虑提取容量和成本

日志收集的一个重要方面是确保你拥有足够的提取容量和可控的成本。在评估解决方案时,请谨慎选择那些对高基数(high cardinality)数据收费更高的解决方案,因为这可能会导致可观察性解决方案的成本出乎意料地高。我们将在本文后面详细讨论具有成本效益的日志管理。

将 Kafka 用于大型项目

对于较大的组织,实施 Kafka 可以改善日志数据管理。Kafka 充当缓冲区,使系统更可靠、更易于管理。它允许不同的团队将数据发送到集中位置,然后可以将其提取到 Elastic 中。

2. 处理和丰富

采用 Elastic Common Schema (ECS)

日志收集的一个关键方面是在所有应用程序和基础架构中进行最大程度的规范化。拥有通用的语义模式至关重要。Elastic 向 OpenTelemetry (OTel) 贡献了 Elastic Common Schema (ECS),帮助加速采用基于 OTel 的可观察性和安全性。这种朝着更规范化的方式定义和提取日志(包括指标和跟踪)的举措对行业有益。

使用 ECS 有助于标准化字段名称和数据结构,使数据分析和关联更容易。这种通用模式可确保你的数据以可预测的方式组织,从而促进更高效的查询和报告。在此处了解有关 ECS 的更多信息。

优化大容量数据的映射

对于高基数字段或很少使用的字段,请考虑优化或从索引中删除它们。这可以通过减少需要索引和搜索的数据量来提高性能。我们的文档中有部分内容可帮助你调整磁盘使用率、搜索速度和索引速度的设置。

管理结构化日志与非结构化日志

结构化日志通常更受欢迎,因为它们提供更多价值并且更易于使用。它们具有预定义的格式和字段,简化了信息提取和分析。对于没有预构建集成的自定义日志,你可能需要定义自己的解析规则。

对于非结构化日志,全文搜索功能可以帮助缓解限制。通过索引日志,全文搜索允许用户高效地搜索特定关键字或短语,即使在大量非结构化数据中也是如此。这是 Elastic 可观察性解决方案的主要区别之一。你可以简单地搜索任何关键字或短语并实时获得结果,而无需在查询时编写复杂的正则表达式或解析规则。

读取时模式与写入时模式

处理日志数据有两种主要方法:

  1. 读取时模式(schema-on-read):一些可观察性仪表板功能可以执行运行时转换,以动态从未解析的源中提取字段。这在处理可能不以标准格式记录数据的旧系统或自定义应用程序时非常有用。但是,运行时解析可能非常耗时且耗资源,尤其是对于大量数据。
  2. 写入时模式(schema-on-write):这种方法提供更好的性能和对数据的更多控制。模式是预先定义的,数据在写入时进行结构化和验证。这允许更快地处理和分析数据,这对丰富数据大有裨益。

3. 分析和合理化

全文搜索

Elastic 的全文搜索功能由 Elasticsearch 提供支持,可让你快速找到相关日志。Kibana 查询语言 (Kibana Query Language - KQL) 可提高搜索效率,使你能够筛选和深入研究数据以快速识别问题。

以下是一些 KQL 查询示例:

// Filter documents where a field exists
http.request.method: *// Filter documents that match a specific value
http.request.method: GET// Search all fields for a specific value
Hello// Filter documents where a text field contains specific terms
http.request.body.content: "null pointer"// Filter documents within a range
http.response.bytes < 10000// Combine range queries
http.response.bytes > 10000 and http.response.bytes <= 20000// Use wildcards to match patterns
http.response.status_code: 4*// Negate a query
not http.request.method: GET// Combine multiple queries with AND/OR
http.request.method: GET and http.response.status_code: 400

机器学习集成

机器学习可以自动检测日志数据中的异常和模式。Elastic 提供日志速率分析等功能,可自动识别与正常行为的偏差。通过利用机器学习,你可以在潜在问题升级之前主动解决它们。

建议组织利用各种机器学习算法和技术来有效地发现日志文件中的未知因素。应采用无监督机器学习算法来对实时数据进行异常检测,并根据严重程度进行速率控制警报。

通过自动识别影响因素,用户可以获得有价值的背景信息,以进行自动根本原因分析 (root cause analysis - RCA)。日志模式分析为非结构化日志带来分类,而日志速率分析和变化点检测有助于识别日志数据激增的根本原因。

查看文档以开始使用 Elastic 中的机器学习。

仪表板和警报

构建仪表板和设置警报可帮助你实时监控日志。仪表板以可视化方式呈现你的日志,让你更轻松地识别模式和异常。警报可在特定事件发生时通知你,让你快速采取行动。

经济高效的日志管理

使用数据层

实施索引生命周期管理以在热层、温层、冷层和冻结层之间移动数据可以显著降低存储成本。这种方法可确保只有最常访问的数据才存储在昂贵的高性能存储中,而较旧的数据则移动到更具成本效益的存储解决方案中。

我们的文档解释了如何设置索引生命周期管理。

压缩和索引排序

应用最佳压缩设置并使用索引排序可以进一步减少数据占用空间。优化数据存储在磁盘上的方式可以大幅节省存储成本并提高检索性能。从 8.15 开始,Elasticsearch 提供了一种称为 “logsdb” 的索引模式。这是一种高度优化的存储日志数据的方式。这种新的索引数据方式比默认模式占用的磁盘空间少 2.5 倍。你可以在此处相关信息。此模式会自动应用压缩、索引排序和其他优化的最佳设置组合,而这些优化以前是用户无法访问的。

有关 logsdb 的更多说明,请阅读文章 “Elasticsearch 新的索引 mode: Logsdb 初体验”。

快照生命周期管理 (snapshot lifecycle management - SLM)

SLM 允许你备份数据并将其从主集群中删除,从而释放资源。如果需要,可以快速恢复数据进行分析,确保你能够调查历史事件,而无需承担高昂的存储成本。

在文档中了解有关 SLM 的更多信息。

处理大量日志数据

管理大量日志数据可能具有挑战性。以下是一些优化日志管理的策略:

  1. 制定日志删除策略。评估要收集哪些数据以及何时删除这些数据。
  2. 考虑尽早丢弃 DEBUG 日志甚至 INFO 日志,并尽早删除开发和暂存环境日志。
  3. 聚合相同日志行的短窗口,这对于 TCP 安全事件日志记录特别有用。
  4. 对于你控制的应用程序和代码,请考虑将一些日志移入跟踪以减少日志量,同时保留详细信息。

集中式与分散式日志存储

数据局部性是管理日志数据时的一个重要考虑因素。输入和输出大量日志数据的成本可能高得令人望而却步,尤其是在与云提供商打交道时。

在没有区域冗余要求的情况下,你的组织可能不需要将所有日志数据发送到中央位置。考虑将日志数据保存在生成​​它的数据中心本地,以减少输入和输出成本。

跨集群搜索功能使用户能够同时搜索多个日志集群,从而减少需要通过网络传输的数据量。

跨集群复制对于在发生灾难时保持业务连续性非常有用,即使在一个数据中心发生中断时也能确保数据可用性。

监控和性能

监控你的日志管理系统

使用专用监控集群可以帮助你跟踪 Elastic 部署的性能。堆栈监控提供有关搜索和索引活动的指标,帮助你识别和解决性能瓶颈。

调整批量大小和刷新间隔

优化这些设置可以平衡性能和资源使用情况。增加批量大小和刷新间隔可以提高索引效率,尤其是对于高吞吐量环境。

日志记录最佳实践

调整日志级别

确保为所有应用程序适当设置日志级别。自定义日志格式以方便提取和分析。正确配置的日志级别可以减少噪音,并更容易识别关键问题。

使用现代日志记录框架

实施支持结构化日志记录的日志记录框架。向日志添加元数据可增强其分析的实用性。结构化日志记录格式(例如 JSON)允许轻松解析和查询日志,从而提高日志分析的效率。如果你完全控制应用程序并且已经在使用结构化日志记录,请考虑使用这些库的 Elastic 版本,它可以自动将日志解析为 ECS 字段。

利用 APM 和指标

对于定制应用程序,应用程序性能监控 ( Application Performance Monitoring - APM) 可提供对应用程序性能的更深入了解,补充传统日志记录。APM 跟踪跨服务的事务,帮助你了解依赖关系并识别性能瓶颈。

考虑在收集日志的同时收集指标。指标可以洞察系统的性能,例如 CPU 使用率、内存使用率和网络流量。如果你已经从系统中收集日志,添加指标收集通常是一个快速的过程。

跟踪可以深入了解特定事务或请求路径,尤其是在云原生环境中。它们提供更多上下文信息,并且擅长跟踪跨服务的依赖关系。但是,只有你拥有的应用程序才能实现跟踪,而且并非所有开发人员都完全接受了它。

建议采用组合日志记录和跟踪策略,其中跟踪为较新的已检测应用程序提供覆盖,而日志记录支持你不拥有其源代码的旧版应用程序和系统。

结论

有效的日志管理对于在当今复杂的软件环境中保持系统可靠性和性能至关重要。通过遵循这些最佳实践,你可以优化日志管理流程、降低成本并缩短问题解决时间。

关键要点包括:

  • 确保全面收集日志,重点关注规范化和通用模式。
  • 使用适当的处理和丰富技术,在结构化和非结构化日志之间取得平衡。
  • 利用全文搜索和机器学习进行高效的日志分析。
  • 实施经济高效的存储策略和智能数据保留策略。
  • 使用 APM、指标和跟踪增强你的日志记录策略,以获得完整的可观察性解决方案。

不断评估和调整你的策略以跟上日志数据不断增长的数量和复杂性,这样你就可以确保应用程序和基础设施的可靠性、性能和安全性。

查看我们的其他博客:

  • 根据日志和指标构建更好的服务级别目标 (service level objectives - SLO)
  • 使用 Elastic 中的 GenAI 进行 AWS VPC Flow 日志分析
  • 将 10 亿条日志行从 OpenSearch 迁移到 Elasticsearch
  • 使用 Elastic 修剪传入日志量

准备好开始了吗?使用 Elastic Cloud 上的 Elastic Observability — 包含所有最新功能的托管 Elasticsearch 服务。

本文中描述的任何特性或功能的发布和时间均由 Elastic 自行决定。任何当前不可用的特性或功能可能无法按时交付或根本无法交付。

原文:Best Practices for Log Management: Leveraging Logs for Faster Problem Resolution — Elastic Observability Labs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1537273.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

yolov8区域入侵检测警报系统-pyside6可视化界面

yolov8区域入侵检测警报系统&#xff0c;是微智启软件工作室基于yolov8目标追踪和pyside6开发&#xff0c;在window的pycharm或者vscode里运行&#xff0c;可以应用于多个领域&#xff0c;检测统计物体个数以及入侵语音警报。 功能介绍 可以应用于 江河流域危险区域禁止游泳警…

利用AI技术提升ISP处理:图像质量的四大关键模块

随着智能手机和数码相机的飞速发展&#xff0c;图像质量成为了影响用户体验的关键因素之一。图像信号处理&#xff08;ISP&#xff0c;Image Signal Processing&#xff09;管道是将图像传感器捕捉到的原始数据转化为高质量输出的核心技术。然而&#xff0c;传统的ISP处理方法在…

螺丝、螺母、垫片等紧固件常用类型详细介绍

螺钉、螺母、垫片等紧固件介绍 螺钉 杯头内六角 首先介绍一下杯头内六角&#xff0c;杯头内六角是我们用的最常见的一种螺钉&#xff0c;如果你对选择螺钉没有什么想法&#xff0c;可以直接无脑选杯头内六角去使用。 比如说我们有一个零件加工了通孔&#xff0c;另一个零件加…

vmware,centos8(虚拟机) 的安装

安装vmware 点击下方网址 虚拟机安装地址https://www1.msc23.cn/vm/?bd_vid8829610582362807097选择VMware17 打开文件所在地&#xff0c;双击安装 同意条款 选择安装位置 不将VMware配置到环境变量path 不检查更新,不加入客户体验 创建桌面快捷方式 开始安装 安装完成…

CSP-J/S 考试介绍

CSP-J/S是由中国计算机学会&#xff08;CCF&#xff09;主办的非专业级别的软件能力认证考试。 CSP-J/S全称为CCF CSP-J/S&#xff0c;是CCF计算机软件能力认证&#xff08;简称CCFCSP认证&#xff09;中的一个部分&#xff0c;重点考察软件开发者实际编程能力。该项认证由CCF…

MTC完成右臂抓取放置任务\\放置姿态设置

#include "mtc_tutorial/mtc_glass_bottle.hpp" static const rclcpp::Logger LOGGER rclcpp::get_logger("mtc_glass_right"); // 获取节点基础接口的实现 rclcpp::node_interfaces::NodeBaseInterface::SharedPtr MTCTaskNode_Right::getNodeBaseInterf…

棋盘格角点检测-libcbdetect

libcbdetect libcbdetect 是一个用于自动子像素级别的棋盘格&#xff08;checkerboard&#xff09;、棋盘&#xff08;chessboard&#xff09;以及 Deltille 图案检测的库。它主要由 C 编写&#xff0c;旨在提供高精度、高鲁棒性的角点检测和图案组合功能&#xff0c;是一种基…

使用HTML和CSS制作网页的全面指南

目录 引言 一、理解HTML 1. 什么是HTML&#xff1f; 2. HTML文档的基本结构 3. 常用的HTML标签 4. 示例&#xff1a;创建一个简单的HTML页面 二、理解CSS 1. 什么是CSS&#xff1f; 2. CSS的使用方式 3. CSS选择器和属性 4. 常用的CSS属性 三、创建网页的步骤 1. 规…

【Java数据结构】二叉树

目录 树树的特征树的概念 二叉树两种特殊的二叉树二叉树的性质二叉树的基本操作4 种遍历二叉树的方式判断一棵树是不是完全二叉树获取二叉树总共的节点个数获取叶子节点的个数获取第 k 层的节点个数获取二叉树的高度检测值为 value 的元素是否存在 二叉树基本操作完整代码 树 …

VS code 安装使用配置 Continue

Continue 插件介绍 Continue 是一款高效的 VS Code 插件&#xff0c;提供类似 GitHub Copilot 的功能&#xff0c;旨在提升开发者的编程效率。其配置简单&#xff0c;使用体验流畅&#xff0c;深受开发者喜爱。 主要功能特点 智能代码补全 Continue 能够基于当前代码上下文生…

年化60.7%,最大回撤-16.5%,RSRS标准分择时效果差不多

原创内容第653篇&#xff0c;专注量化投资、个人成长与财富自由。 中秋节&#xff0c;祝大家中秋快乐&#xff01; 人有悲欢离合&#xff0c;月有阴晴圆缺&#xff0c;此事古难全。但愿人长久&#xff0c;千里共婵娟。 今天引入RSRS来择时&#xff0c;看下策略效果。 年化60.7…

Python编码系列—Python代理模式:为对象赋予超能力的魔法

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

C++掉血迷宫

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #include <iostream> #include <string> #include <cstring> using namespace std; enum RBYG {R 1,B 2,Y 4,G 7, }; struct heal {int ix…

【例题】lanqiao549 扫雷

输入 3 4 0 1 0 0 1 0 1 0 0 0 1 0输出 2 9 2 1 9 4 9 2 1 3 9 2解题思路 分类讨论&#xff1a; 如果原来的方格整数为1&#xff0c;输出9如果原来的方格整数为0&#xff0c;输出周围8个&#xff08;最多八个&#xff09;的地雷数量和 代码 如何遍历一个方格mp[i][j]周围…

c++中引用是通过指针的方式实现

其实在汇编层面上&#xff0c;引用的代码和指针的代码是一致的。 先看指针情况下的代码分析&#xff0c;如下所示&#xff1a; #include <iostream>using namespace std;void fuzhi(int *x)//引用传参 {*x 10; }int main(int argc, char** argv) {int a 0;int b;a …

架构设计——概念和基础

&#x1f3e0;1 架构基础 想要搞清楚架构到底指什么&#xff0c;架构与框架的区别&#xff0c;就需要了解梳理系统、子系统、模块、组件、框架和架构 1.1系统与子系统 1.1.1系统 wiki:系统泛指由一群有关联的个体组成&#xff0c;根据某种规则运作&#xff0c;能完成个别元…

Python编码系列—Python外观模式:简化复杂系统的快捷方式

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

QT安装时出现错误(镜像)

QT下载网站 下载网址 QT安装时出现错误 解决方法 按“win+R”键弹出“运行”窗口,输入"cmd",点击确定; 打开如下图运行框,将Qt文件拖到窗口里->空一格输入“–mirror https://mirrors.aliyun.com/qt”->按enter键进入,即可成功安装 正式安

gazebo遇到的阶段性问题汇总

目录 1 gazebo中碰撞模型崩坏或者飞的问题2 编译报错解决方法 3 控制器无法正常启动解决方法 4 xacro:macro 定义函数5 xacro:property 定义变量的值报错截图解决方法 6 gazebo 模型视觉穿模&#xff08;已设置碰撞体积&#xff09;解决方法穿模截图 1 gazebo中碰撞模型崩坏或者…

王道408考研数据结构-绪论

1.1 数据结构的基本概念 数据结构 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。在任何问题中&#xff0c;数据元素 都不是孤立存在的&#xff0c;它们之间存在某种关系&#xff0c;这种数据元素相互之间的关系称为结构(Structure)。 数据结构包括三方面的内…