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

发布时间:2026/6/6 13:40:39

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.ymlFilebeat 生产最佳实践2.6 日志检索 排障(Kibana 实战)三、Java 生产监控体系实战(指标监控)3.1 技术栈:Micrometer + Prometheus + Grafana3.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 运维规范八、极简部署拓扑图(文字版)结合线上落地经验,分日志体系、监控体系、告警联动、线上排障实战、最佳实践五大模块,覆盖技术选型、架构、配置、埋点、排障、避坑,全部面向生产环境。一、整体架构总览生产标准架构(主流云原生 / 传统服务器通用):应用层:Java 应用输出日志 → 本地文件采集层:Filebeat/Fluentd 采集日志、指标存储层:日志存Elasticsearch;指标存Prometheus可视化层:Kibana(日志)、Grafana(指标监控)告警层:AlertManager + 短信 / 钉钉 / 企业微信 / 邮件告警链路追踪: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.logging2.1.2 Maven 依赖(SpringBoot 环境)SpringBoot 已默认引入,排除冲突是生产重点:!-- SpringBoot 父工程自带 slf4j+logback,只需排除多余日志实现 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId !-- 排除默认 log4j、jul 冲突 -- exclusions exclusion groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-logging/artifactId /exclusion /exclusions /dependency !-- 标准日志 starter -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-logging/artifactId /dependency2.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 charsetUTF-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 天,避免磁盘打满 -- maxHistory15/maxHistory !-- 总日志上限,超出自动删除旧日志 -- totalSizeCap20GB/totalSizeCap /rollingPolicy encoder !-- JSON结构化日志:自动携带traceId、spanId、线程、类名、级别 -- includeMdcKeyNametraceId/includeMdcKeyName includeMdcKeyNamespanId/includeMdcKeyName includeMdcKeyNameuserId/includeMdcKeyName includeMdcKeyNamerequestUri/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"/ /configuration2.2.2 关键配置说明(生产踩坑点)scan="true":动态加载配置,无需重启应用改日志级别.log.gz压缩:线上日志量大,压缩可节省 70%+ 磁盘maxHistory:严禁永久保留,一般7~15天,防止磁盘溢出JSON 格式:传统纯文本日志无法快速检索,生产必须 JSON 结构化MDC 埋点:traceId/spanId/userId全链路追踪核心,下文详解2.3 日志级别规范(生产严格执行)级别使用场景生产环境配置ERROR系统异常、业务失败、接口报错、数据库异常必采集、必告警WARN非致命异常、参数不合法、重试触发、限流采集,高频则告警

相关新闻