当前位置: 首页 > article >正文

日志体系详解

日志体系详解本章导读日志是系统运行的"黑匣子",承载着故障排查、性能分析、安全审计的关键数据。本章从日志规范制定到ELK Stack实战部署,全面讲解如何构建高效、可靠的日志体系,让每一次故障都能被快速定位和复盘。学习目标:目标1:掌握日志内容规范与结构化日志的最佳实践方法目标2:理解ELK Stack架构原理及各组件职责分工目标3:能够配置Logstash和Filebeat实现日志采集与处理管道目标4:熟练运用Kibana进行日志查询、聚合分析与可视化目标5:掌握敏感信息脱敏处理与日志安全规范前置知识:了解日志基本概念,熟悉Linux系统操作,具备基本的数据分析能力阅读时长:约 40 分钟一、知识概述日志是系统运行过程中产生的记录信息,是故障排查、性能分析、安全审计的重要数据来源。建立完善的日志体系,对于保障系统稳定运行至关重要。1.1 日志体系架构┌─────────────────────────────────────────────────────────────┐ │ 日志体系架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 数据采集层 │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 应用日志 │ 系统日志 │ 访问日志 │ 审计日志 │ │ │ └─────┬─────┴─────┬─────┴─────┬─────┴─────┬─────┘ │ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 数据收集层 │ │ │ │ Filebeat / Fluentd / Logstash / Fluent Bit │ │ │ └─────────────────────┬───────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 消息队列(可选) │ │ │ │ Kafka / Redis │ │ │ └─────────────────────┬───────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 数据处理层 │ │ │ │ Logstash / Fluentd / Vector │ │ │ └─────────────────────┬───────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 存储层 │ │ │ │ Elasticsearch / ClickHouse / Loki │ │ │ └─────────────────────┬───────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 分析展示层 │ │ │ │ Kibana / Grafana Loki / Elastic UI │ │ │ └─────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘1.2 日志类型与级别┌─────────────────────────────────────────────────────────────┐ │ 日志类型与级别 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 日志类型: │ │ ┌─────────────┬─────────────────────────────────────┐ │ │ │ 应用日志 │ 业务逻辑、异常、调试信息 │ │ │ ├─────────────┼─────────────────────────────────────┤ │ │ │ 访问日志 │ HTTP请求、响应时间、状态码 │ │ │ ├─────────────┼─────────────────────────────────────┤ │ │ │ 错误日志 │ 异常堆栈、错误详情 │ │ │ ├─────────────┼─────────────────────────────────────┤ │ │ │ 审计日志 │ 用户操作、权限变更、敏感数据访问 │ │ │ ├─────────────┼─────────────────────────────────────┤ │ │ │ 性能日志 │ 慢查询、接口耗时、资源使用 │ │ │ └─────────────┴─────────────────────────────────────┘ │ │ │ │ 日志级别: │ │ ┌─────────────┬─────────────────────────────────────┐ │ │ │ TRACE │ 最详细的调试信息,生产环境关闭 │ │ │ ├─────────────┼─────────────────────────────────────┤ │ │ │ DEBUG │ 调试信息,开发测试环境使用 │ │ │ ├─────────────┼─────────────────────────────────────┤ │ │ │ INFO │ 重要业务流程信息 │ │ │ ├─────────────┼─────────────────────────────────────┤ │ │ │ WARN │ 警告信息,不影响系统运行 │ │ │ ├─────────────┼─────────────────────────────────────┤ │ │ │ ERROR │ 错误信息,需要关注和处理 │ │ │ ├─────────────┼─────────────────────────────────────┤ │ │ │ FATAL │ 严重错误,可能导致系统崩溃 │ │ │ └─────────────┴─────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘1.3 ELK Stack架构┌─────────────────────────────────────────────────────────────┐ │ ELK Stack 架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Beat │────▶│ Logstash │────▶│ ES │ │ │ │ (采集) │ │ (处理) │ │ (存储) │ │ │ └──────────┘ └──────────┘ └────┬─────┘ │ │ Filebeat 解析、过滤 │ │ │ Metricbeat 数据转换 │ │ │ Heartbeat │ │ │ ▼ │ │ ┌──────────┐ │ │ │ Kibana │ │ │ │ (展示) │ │ │ └──────────┘ │ │ 可视化、查询 │ │ │ │ 扩展架构: │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Beat │────▶│ Kafka │────▶│ Logstash │ │ │ └──────────┘ └──────────┘ └────┬─────┘ │ │ 缓冲、削峰 │ │ │ ▼ │ │ ┌──────────┐ │ │ │ ES │ │ │ └──────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘二、日志规范2.1 日志内容规范// ============================================// 日志规范示例// ============================================@Slf4j@ServicepublicclassOrderService{// ============================================// 好的日志示例// ============================================publicOrdercreateOrder(OrderRequestrequest){// 1. 记录关键操作的开始log.info("[创建订单] 开始处理, userId={}, productId={}, amount={}",request.getUserId(),request.getProductId(),request.getAmount());try{// 业务逻辑Orderorder=processOrder(request);// 2. 记录关键操作的成功结果log.info("[创建订单] 处理成功, orderId={}, userId={}, status={}",order.getId(),order.getUserId(),order.getStatus());returnorder;}catch(InventoryExceptione){// 3. 记录业务异常(包含上下文)log.warn("[创建订单] 库存不足, productId={}, requested={}, available={}",request.getProductId(),request.getQuantity(),e.getAvailableQuantity());thrownewBusinessException("库存不足");}catch(Exceptione){// 4. 记录系统异常(包含堆栈)log.error("[创建订单] 系统异常, userId={}, productId={}, error={}",request.getUserId(),request.getProductId(),e.getMessage(),e);thrownewSystemException("系统异常",e);}}// ============================================// 不好的日志示例(避免)// ============================================publicvoidbadExample(){// ❌ 信息不足log.info("处理订单");// ❌ 使用字符串拼接(性能差)log.info("用户 "+userId+" 创建订单 "+orderId);// ❌ 包含敏感信息log.info("用户登录, username={}, password={}",username,password);// ❌ 异常信息丢失try{// ...}catch(Exceptione){log.error("发生错误");// 没有记录异常堆栈}// ❌ 无意义的日志log.debug("进入方法");log.debug("退出方法");}}2.2 结构化日志// ============================================// 结构化日志配置 - Logback + Logstash// ============================================// pom.xml/* dependency groupIdnet.logstash.logback/groupId artifactIdlogstash-logback-encoder/artifactId version7.4/version /dependency */// logback-spring.xml/* ?xml version="1.0" encoding="UTF-8"? configuration springProperty scope="context" source="spring.application.name"/ springProperty scope="context" source="spring.profiles.active"/ !-- 控制台输出 -- appender encoder pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/pattern /encoder /appender !-- JSON格式输出(用于ELK) -- appender filelogs/application.json/file rollingPolicy fileNamePatternlogs/application-%d{yyyy-MM-dd}.%i.json.gz/fileNamePattern maxFileSize100MB/maxFileSize maxHistory30/maxHistory totalSizeCap10GB/totalSizeCap /rollingPolicy encoder customFields{"app_name":"${appName}","env":"${environment}"}/customFields includeMdcKeyNametraceId/includeMdcKeyName includeMdcKeyNamespanId/includeMdcKeyName includeMdcKeyNameuserId/includeMdcKeyName fieldNames timestamptimestamp/timestamp levellevel/level loggerlogger/logger threadthread/thread messagemessage/message stackTracestack_trace/stackTrace /fieldNames /encoder /appender !-- 异步输出 -- appender queueSize10000/queueSize discardingThreshold0/discardingThreshold includeCallerDatafalse/includeCallerData appender-ref ref="JSON"/ /appender root level="INFO" appender-ref ref="CONSOLE"/ appender-ref ref="ASYNC_JSON"/ /root /configuration */// ============================================// 使用MDC添加上下文信息// ============================================@ComponentpublicclassLogContextFilterimplementsWebFilter{@OverridepublicMonoVoidfilter(ServerWebExchangeexchange,WebFilterChainchain){// 从请求头获取追踪IDStringtraceId=exchange.getRequest().getHeaders().getFirst("X-Trace-Id");if(traceId==null){traceId=UUID.randomUUID().toString().replace("-","");}StringuserId=exchange.getRequest().getHeaders(

相关文章:

日志体系详解

日志体系详解 本章导读 日志是系统运行的"黑匣子",承载着故障排查、性能分析、安全审计的关键数据。本章从日志规范制定到ELK Stack实战部署,全面讲解如何构建高效、可靠的日志体系,让每一次故障都能被快速定位和复盘。 学习目标: 目标1:掌握日志内容规范与结构…...

应用监控详解

应用监控详解 本章导读 没有监控的系统就像在黑暗中摸索——你永远不知道问题何时发生、发生在哪里。本章深入讲解APM工具、链路追踪、指标采集三大监控支柱,帮助读者构建全方位的系统可观测性,实现从被动救火到主动预防的转变。 学习目标: 目标1:理解可观测性三大支柱(Me…...

Unity基础:UI组件详解:Slider滑动条的用法与值获取

Unity基础:UI组件详解:Slider滑动条的用法与值获取📚 本章学习目标:深入理解UI组件详解的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《Unity工程师成长之路教程》Unity入门…...

2026年4月21日60秒读懂世界:阅读与手机时间、汽车价格战、脑机接口临床提速,今天最值得关注的6个信号

🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...

Blender 3MF插件终极指南:如何免费实现3D打印文件格式无缝转换

Blender 3MF插件终极指南:如何免费实现3D打印文件格式无缝转换 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat Blender3mfFormat是一款功能完整的开源Blender…...

Qwen3-0.6B-FP8基础教程:理解Safetensors权重格式与FP8_E4M3特性

Qwen3-0.6B-FP8基础教程:理解Safetensors权重格式与FP8_E4M3特性 1. 引言:为什么你需要了解权重格式和量化 如果你刚开始接触大模型部署,可能会被各种技术术语搞得一头雾水。权重格式、量化、FP8、Safetensors……这些词听起来很专业&#…...

Phi-3.5-Mini-Instruct本地化优势:规避API限流/配额/隐私泄露风险

Phi-3.5-Mini-Instruct本地化优势:规避API限流/配额/隐私泄露风险 1. 为什么选择本地化部署 在当今AI应用蓬勃发展的时代,越来越多的开发者面临云端API服务的三大痛点:限流政策、配额限制和隐私安全风险。Phi-3.5-Mini-Instruct的本地化部署…...

(84页PPT)公司整套管理流程图(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 (84页PPT)公司整套管理流程图.pptx_PPT大模型实践案例资源-CSDN下载 资料解读:《公司整套管理流程图》 详细资料请看本解读文章的最后内容。 作为一套系统性…...

(82页PPT)APQP初级先期产品质量策划和控制计划(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 (82页PPT)APQP初级先期产品质量策划和控制计划.pptx_火灾应急处理措施资源-CSDN下载 资料解读:(82 页 PPT)APQP 初级先期产品质量策划和…...

终极指南:如何在Windows上高效管理安卓应用的完整解决方案

终极指南:如何在Windows上高效管理安卓应用的完整解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 对于需要在Windows系统上处理安卓应用的用户来说…...

AI 应用软件的开发技术

开发现代 AI 应用软件的技术栈早已超越了简单的“前端后端”模式。在 2026 年,一个完整的 AI 原生(AI-Native)应用通常由以下四大技术层级驱动。1. 模型与算力层这是应用的底层核心,负责推理与生成。大模型引擎: 开发者…...

老照片模糊发黄?别让珍贵回忆蒙尘,三步教你“复活”旧时光

在每个家庭的抽屉深处,或许都珍藏着一本厚重的相册。翻开它,泛黄的相纸、模糊的笑脸,瞬间将我们拉回到那个没有智能手机、没有高清摄像的年代。这些照片承载着父母的青春、我们的童年,是无可替代的宝贵记忆。然而,时光…...

视频合并软件哪个好用?UP主私藏的5款剪辑神器,让你的视频无缝衔接

你是不是也经常遇到这样的情况:出去旅游拍了一堆零散的Vlog片段,宝宝成长的可爱瞬间被记录在几十个短视频里,或者为了工作项目收集了多个视频素材……想把它们整合成一个完整的视频,却不知道从何下手?很多人因此在网上…...

电脑截图快捷键大全:别再用QQ和微信了,这才是高手的截图方式

在日常工作和学习中,截图是一项使用频率极高的操作。然而,很多人至今仍在依赖QQ、微信等社交软件的截图功能,不仅步骤繁琐,而且在没有网络或不想登录时就束手无策。其实,你的电脑系统(无论是Windows还是mac…...

4月21日发布!OPPO Pad Mini 要给小平板正名了

4月21日19:00,OPPO将召开新品发布会,除了Find X9s Pro等旗舰手机,最让我期待的就是OPPO Pad Mini这款小平板。说实话,这几年我一直觉得小平板是“鸡肋”——手机屏幕越做越大,折叠屏又能兼顾大屏,8.8英寸的…...

AngularJS 控制器

AngularJS 控制器 (Controller) 学习笔记 控制器是 AngularJS 应用的核心组件之一,负责初始化应用状态、定义行为逻辑,并作为视图(HTML)和模型(Scope)之间的桥梁。 一、控制器的基本概念 1. 什么是控制器…...

从单体到微服务:如何用Spring Cloud构建高可用医院信息系统HIS

从单体到微服务:如何用Spring Cloud构建高可用医院信息系统HIS 【免费下载链接】HIS HIS英文全称 hospital information system(医疗信息就诊系统),系统主要功能按照数据流量、流向及处理过程分为临床诊疗、药品管理、财务管理、患…...

生产环境mysql如何实现高可用_配置主从复制与自动故障切换

主从复制SHOW SLAVE STATUS显示Connecting的常见原因是网络通但权限或配置未对齐:主库需开启binlog且server_id全局唯一;从库CHANGE MASTER TO中MASTER_HOST不能为localhost或127.0.0.1,须填真实IP或域名。主从复制配不起来,SHOW …...

从混乱到有序:NSC_BUILDER 让你的 Switch 游戏库焕然一新

从混乱到有序:NSC_BUILDER 让你的 Switch 游戏库焕然一新 【免费下载链接】NSC_BUILDER Nintendo Switch Cleaner and Builder. A batchfile, python and html script based in hacbuild and Nuts python libraries. Designed initially to erase titlerights encry…...

da da wda d

da w d w...

c++怎么读取大端序设备的固件bin文件_字节反转与位移操作【详解】

...

暗黑破坏神2重生记:用d2dx让20年老游戏焕发现代光彩

暗黑破坏神2重生记:用d2dx让20年老游戏焕发现代光彩 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 还在为经典《…...

KMS激活终极指南:5分钟搞定Windows和Office永久激活难题

KMS激活终极指南:5分钟搞定Windows和Office永久激活难题 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾因Windows系统未激活而烦恼?是否因为Office办公软件弹出…...

计算机毕业设计:Python农业粮食产量与气候预测平台 Django框架 数据分析 可视化 机器学习 深度学习 大数据 大模型(建议收藏)✅

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与…...

NCMconverter完整指南:3步解锁加密音乐文件的终极播放方案

NCMconverter完整指南:3步解锁加密音乐文件的终极播放方案 【免费下载链接】NCMconverter NCMconverter将ncm文件转换为mp3或者flac文件 项目地址: https://gitcode.com/gh_mirrors/nc/NCMconverter 你是否曾经遇到过这样的情况:从音乐平台下载了…...

渗透基础知识ctfshow——Web应用安全与防护(第六 七章)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录混合型XSSXSS 练习(反射型)**绕过方法**新增知识:平台外带xss编码绕过XSS过滤绕过方法请求伪造漏洞_CSRF绕过方法最简单的SSRFSSR…...

如何简化多表关联SQL逻辑_利用视图封装复杂JOIN操作

PHP队列消费进程卡住需先检查pcntl_fork是否被禁用;AI请求须设硬超时;Redis队列应使用BRPOPLPUSH防消息丢失;systemd需调大MemoryLimit和RestartSec。PHP队列消费进程卡住不动?先查pcntl_fork是否被禁用很多线上环境(尤…...

部署本地AI大模型--ollma

下载链接: 1.官网:在Windows上下载《Ollama 2.github:Release v0.21.0 ollama/ollama 前言:为什么选择 Ollama Ollama 是一款专为本地运行大模型打造的开源工具,它把复杂的环境配置、依赖管理和模型量化过程都封装…...

3步完成微信聊天记录备份:WeChatExporter终极免费教程

3步完成微信聊天记录备份:WeChatExporter终极免费教程 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter WeChatExporter是一款免费开源的微信聊天记录导出工具&…...

终极网盘直链下载助手完整指南:如何一键获取八大网盘真实下载地址

终极网盘直链下载助手完整指南:如何一键获取八大网盘真实下载地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动…...