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

Java 生产环境日志 + 监控实战全方案

目录

一、整体架构总览

二、Java 生产日志实战(核心)

2.1 日志框架选型 & 规范

2.1.1 框架选择(生产强制统一)

2.1.2 Maven 依赖(SpringBoot 环境)

2.2 Logback 生产级配置(logback-spring.xml)

2.2.1 完整生产配置

2.2.2 关键配置说明(生产踩坑点)

2.3 日志级别规范(生产严格执行)

2.4 全链路日志 MDC + TraceId(线上排障核心)

2.4.1 实现方案(SkyWalking 自动注入,零代码)

2.4.2 手动 MDC 实现(无链路组件场景)

2.5 日志采集:Filebeat 生产配置

Filebeat 核心配置 filebeat.yml

Filebeat 生产最佳实践

2.6 日志检索 & 排障(Kibana 实战)

三、Java 生产监控体系实战(指标监控)

3.1 技术栈:Micrometer + Prometheus + Grafana

3.2 应用接入监控(零侵入)

3.2.1 依赖引入

3.2.2 配置 application.yml(生产)

3.3 核心监控指标(生产必配)

3.3.1 JVM 基础指标(必监控)

3.3.2 应用业务指标

3.3.3 自定义业务指标(实战)

3.4 Prometheus + Grafana 部署 & 面板

生产面板必备视图

四、告警体系(生产最后一道防线)

4.1 告警架构

4.2 分级告警规则(生产标准)

一级告警(紧急,立即处理)

二级告警(一般,工作时段处理)

三级告警(观察类)

4.3 告警避坑(生产重大问题)

五、全链路追踪:SkyWalking 实战(日志 + 监控 + 调用链三合一)

5.1 接入方式(Java Agent,无代码侵入)

5.2 生产价值

六、线上排障实战流程(日志 + 监控联动)

场景 1:接口响应慢

场景 2:大量 500 错误

场景 3:服务 OOM

七、生产环境红线 & 最佳实践总结

7.1 日志红线

7.2 监控红线

7.3 架构红线

7.4 运维规范

八、极简部署拓扑图(文字版)


结合线上落地经验,分日志体系监控体系告警联动线上排障实战最佳实践五大模块,覆盖技术选型、架构、配置、埋点、排障、避坑,全部面向生产环境。

一、整体架构总览

生产标准架构(主流云原生 / 传统服务器通用):

  1. 应用层:Java 应用输出日志 → 本地文件
  2. 采集层:Filebeat/Fluentd 采集日志、指标
  3. 存储层:日志存Elasticsearch;指标存Prometheus
  4. 可视化层:Kibana(日志)、Grafana(指标监控)
  5. 告警层:AlertManager + 短信 / 钉钉 / 企业微信 / 邮件告警
  6. 链路追踪:SkyWalking / Pinpoint / Jaeger(串联日志 + 调用链)

技术栈主流组合:

SpringBoot + SLF4J+Logback + Filebeat + ES + Kibana + Prometheus + Grafana + SkyWalking


二、Java 生产日志实战(核心)

2.1 日志框架选型 & 规范

2.1.1 框架选择(生产强制统一)

  • 门面:SLF4J(统一日志 API,解耦实现)
  • 实现:Logback(SpringBoot 默认,性能优于 Log4j1,比 Log4j2 配置简单、稳定性高)
  • 禁止混用:System.out/err、原生java.util.logging

2.1.2 Maven 依赖(SpringBoot 环境)

SpringBoot 已默认引入,排除冲突是生产重点:

<!-- SpringBoot 父工程自带 slf4j+logback,只需排除多余日志实现 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 排除默认 log4j、jul 冲突 --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- 标准日志 starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency>

2.2 Logback 生产级配置(logback-spring.xml)

生产三大硬性要求:按大小 / 时间滚动压缩归档分环境日志级别输出结构化 JSON 日志保留历史文件

2.2.1 完整生产配置

<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- 定义日志存储路径,区分环境 --> <springProperty scope="context" source="logging.file.path" defaultValue="/data/logs/java-app"/> <springProperty scope="context" source="spring.application.name" defaultValue="java-service"/> <!-- 日志格式:结构化JSON(Filebeat直接解析,生产首选) --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <include resource="org/springframework/boot/logging/logback/console-appender.xml"/> <!-- 1. 控制台输出(仅测试/运维排查,生产可关闭) --> <appender> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <!-- 2. 文件输出:滚动日志(生产核心) --> <appender> <file>${LOG_PATH}/${APP_NAME}.log</file> <!-- 滚动策略:按时间+大小双滚动 --> <rollingPolicy> <!-- 归档文件名:按天分割 + 压缩 --> <fileNamePattern>${LOG_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log.gz</fileNamePattern> <!-- 保留日志天数:生产统一 7~15 天,避免磁盘打满 --> <maxHistory>15</maxHistory> <!-- 总日志上限,超出自动删除旧日志 --> <totalSizeCap>20GB</totalSizeCap> </rollingPolicy> <encoder> <!-- JSON结构化日志:自动携带traceId、spanId、线程、类名、级别 --> <includeMdcKeyName>traceId</includeMdcKeyName> <includeMdcKeyName>spanId</includeMdcKeyName> <includeMdcKeyName>userId</includeMdcKeyName> <includeMdcKeyName>requestUri</includeMdcKeyName> </encoder> </appender> <!-- 环境区分:开发/测试/生产 日志级别不同 --> <springProperty scope="context" source="logging.level.root" defaultValue="INFO"/> <!-- 根日志级别 --> <root level="${LOG_LEVEL}"> <appender-ref ref="FILE"/> <appender-ref ref="CONSOLE"/> </root> <!-- 单独包日志级别:精细化控制(生产必备) --> <!-- 框架日志设为WARN,减少无用日志 --> <logger level="WARN" additivity="false"/> <logger level="WARN" additivity="false"/> <logger level="WARN" additivity="false"/> <!-- 业务代码默认INFO --> <logger level="INFO" additivity="true"/> </configuration>

2.2.2 关键配置说明(生产踩坑点)

  1. scan="true":动态加载配置,无需重启应用改日志级别
  2. .log.gz压缩:线上日志量大,压缩可节省 70%+ 磁盘
  3. maxHistory:严禁永久保留,一般7~15天,防止磁盘溢出
  4. JSON 格式:传统纯文本日志无法快速检索,生产必须 JSON 结构化
  5. MDC 埋点traceId/spanId/userId全链路追踪核心,下文详解

2.3 日志级别规范(生产严格执行)

级别使用场景生产环境配置
ERROR系统异常、业务失败、接口报错、数据库异常必采集、必告警
WARN非致命异常、参数不合法、重试触发、限流采集,高频则告警<
http://www.zskr.cn/news/1473641.html

相关文章:

  • Verilog for循环综合原理与硬件设计实践指南
  • CSDN AI数字营销素材导入实测报告(含17份真实素材样本+响应日志):哪些能改?哪些被静默过滤?哪些触发审核延迟?
  • 【毕业设计】基于微信小程序的咖啡店点餐系统基于springboot+微信小程序的咖啡店点餐系统(源码+文档+远程调试,全bao定制等)
  • 新手如何读懂代码?快马AI带你从零构建可视化代码关系图
  • Matlab中M序列循环移位实现与自相关验证
  • 别再写if(bFlag==TRUE)了!盘点C语言中那些新手容易踩的布尔判断坑
  • 51单片机刹车发电仿真工程:PID调速+电机测速+电压电流采样+12864实时数据显示
  • Repaintless.css高级技巧:自定义动画时长、循环与偏移量全攻略
  • CSDN AI数字营销闭环首次披露(含后台响应日志截图):从Ctrl+V到阅读量破万,平均耗时11.6分钟
  • 简单视频下载助手终极教程:如何轻松获取网页视频资源
  • UE5数字人开发深度解析:Metahuman集成与AI驱动交互架构设计
  • 别再让老旧JBoss服务器裸奔了!手把手教你复现并修复JMX控制台未授权访问漏洞
  • 用ECharts + 自定义GeoJSON打造个性化中国地图:告别china.js的另一种思路
  • 深入理解AudioPlaybackConnector工作原理:A2DP Sink连接实现详解
  • Trousseau vs 传统密码管理器:为什么这款加密密钥存储工具更适合开发者
  • Anomaly-Transformer快速上手:从环境配置到运行SOTA模型的完整指南
  • 电子工程师成长心路:从学生到工程师的实践与思考
  • 双ai协作:在快马平台中对claude code桌面版生成的数据可视化代码进行智能优化
  • RISC-V平台鸿蒙LiteOS-M内核移植实战:从CH32V307硬件适配到任务调度
  • 基于Vue+Node.js的WebRTC视频会议完整实现(含信令服务、聊天室与Docker部署)
  • 肖特基二极管原理、选型与应用实战指南
  • 毕业论文神器!盘点2026年人气爆表的的降AIGC网站
  • 如何通过Betaflight黑匣子功能彻底改变你的无人机飞行调试体验:7个实战技巧解密
  • 沙尘天气下图像自动去黄偏色与对比度恢复MATLAB工具集(含实拍样本与效果评估)
  • 3步救活二维码:QRazyBox让数据重生不再是技术难题
  • BGA芯片手工拆装全流程实战:从原理到维修的精密操作指南
  • 缺失值不是Bug是信号:AI建模前必须掌握的7层识别与7类处理
  • Windows 11 LTSC 24H2 终极指南:一键安装微软商店完整解决方案
  • ThinkPad双风扇控制神器:TPFanCtrl2让你的笔记本告别噪音与高温
  • 从0到1:用AudioPlaybackConnector打造无缝蓝牙音频播放环境