麦瓣健康麦瓣健康
首页
  • APP产品开发方案
  • 商业调查报告
  • 后端技术架构
  • Docker Compose部署指南
  • 技师端-功能模块与微服务对应关系
  • 数据库设计
  • 分布式事务一致性
  • 日志管理与配置
  • Netdata监控系统
  • 系统总览
  • 文档导航
  • 代码审计智能体
  • 测试生成智能体
  • 运维诊断智能体
  • APP测试智能体
  • API自动化测试多智能体协作系统
  • 项目规划
  • 开发工作手册
  • 开发周期管理
  • 任务看板总览
  • Week 3任务看板
  • Week 3周例会
  • Week 4任务看板
  • Week 5任务看板
  • Week 6任务看板
  • APP测试设备采购清单
  • 用户端APP
  • 用户端APP功能脑图
  • 技师端APP
  • 技师端APP功能脑图
  • 后台管理
  • 大数据屏幕
  • 技师端-账户系统需求明细
原型图(Demo)
GitHub
首页
  • APP产品开发方案
  • 商业调查报告
  • 后端技术架构
  • Docker Compose部署指南
  • 技师端-功能模块与微服务对应关系
  • 数据库设计
  • 分布式事务一致性
  • 日志管理与配置
  • Netdata监控系统
  • 系统总览
  • 文档导航
  • 代码审计智能体
  • 测试生成智能体
  • 运维诊断智能体
  • APP测试智能体
  • API自动化测试多智能体协作系统
  • 项目规划
  • 开发工作手册
  • 开发周期管理
  • 任务看板总览
  • Week 3任务看板
  • Week 3周例会
  • Week 4任务看板
  • Week 5任务看板
  • Week 6任务看板
  • APP测试设备采购清单
  • 用户端APP
  • 用户端APP功能脑图
  • 技师端APP
  • 技师端APP功能脑图
  • 后台管理
  • 大数据屏幕
  • 技师端-账户系统需求明细
原型图(Demo)
GitHub
  • 技术架构

    • 麦瓣健康后端技术架构文档
    • /Docker部署指南.html
    • 技师端功能模块与微服务对应关系
    • 数据库设计文档
    • 麦瓣健康 - 微服务分布式事务一致性设计方案
    • 日志管理与配置说明
    • Netdata 监控系统技术文档

日志管理与配置说明

📋 概述

本文档详细说明麦瓣健康项目的日志管理策略、配置方法和运维最佳实践,包括应用日志、系统日志、Docker容器日志的完整管理方案。

🎯 日志管理目标

  • 空间控制:防止日志文件无限增长占满磁盘
  • 自动轮转:定期归档和清理旧日志
  • 便于排查:保留足够的历史日志用于问题定位
  • 性能优化:避免大日志文件影响系统性能

📁 日志文件分布

1. 应用服务日志

所有微服务的运行日志统一存放在 /var/log/ 目录:

/var/log/
├── maiban-admin.log           # 后台管理服务
├── maiban-auth.log            # 认证授权服务
├── maiban-gateway.log         # API网关服务
├── maiban-health-service.log  # 健康服务
├── maiban-im.log              # 即时通讯服务
├── maiban-mall.log            # 商城服务
├── maiban-marketing.log       # 营销服务
├── maiban-monitor.log         # 监控服务
├── maiban-nurse.log           # 护士端服务
├── maiban-order.log           # 订单服务
├── maiban-payment.log         # 支付服务
├── maiban-search.log          # 搜索服务
└── maiban-user.log            # 用户服务

2. 项目本地日志

各微服务项目目录下的日志:

/root/maiban/backend/
├── maiban-admin/logs/
├── maiban-auth/logs/
├── maiban-gateway/logs/
└── ... (其他服务)

3. Docker 容器日志

Docker 容器的日志通过 docker logs 命令查看:

docker logs maiban-es           # Elasticsearch日志
docker logs nacos-registry      # Nacos注册中心日志
docker logs mysql              # MySQL日志
docker logs redis              # Redis日志
docker logs rabbitmq           # RabbitMQ日志

⚙️ Logrotate 配置

配置文件位置

/etc/logrotate.d/maiban

配置内容

# Maiban 服务日志轮转配置
/var/log/maiban-*.log {
    su root root
    daily
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    copytruncate
    maxsize 100M
    create 0644 root root
}

# Maiban 项目日志
/root/maiban/backend/*/logs/*.log {
    su root root
    daily
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    copytruncate
    maxsize 50M
    create 0644 root root
}

配置参数说明

参数说明
su root root指定轮转时使用的用户和组
daily每天执行日志轮转
rotate 7保留最近7天的日志文件
missingok如果日志文件不存在,不报错继续
notifempty日志文件为空时不轮转
compress对旧日志进行 gzip 压缩
delaycompress延迟压缩,保留最近一次的日志不压缩
copytruncate复制日志内容后清空原文件(不中断服务)
maxsize 100M单个文件超过100MB立即轮转
create 0644 root root创建新日志文件的权限和所有者

🔧 日志轮转验证

测试配置

# 测试配置文件语法
logrotate -d /etc/logrotate.d/maiban

# 强制执行日志轮转(测试用)
logrotate -f /etc/logrotate.d/maiban

查看轮转状态

# 查看 logrotate 状态
cat /var/lib/logrotate/status | grep maiban

# 查看轮转后的日志文件
ls -lh /var/log/maiban-*.log*

🗂️ 日志清理脚本

手动清理脚本

创建 /root/scripts/clean-logs.sh:

#!/bin/bash
# 麦瓣健康日志清理脚本

echo "开始清理日志..."

# 清理应用日志(保留最后500行)
for log in /var/log/maiban-*.log; do
    if [ -f "$log" ]; then
        tail -500 "$log" > "$log.tmp" && mv "$log.tmp" "$log"
        echo "已清理: $log"
    fi
done

# 清理项目日志
find /root/maiban/backend -name "*.log" -type f -size +10M -exec sh -c '
    tail -500 "$1" > "$1.tmp" && mv "$1.tmp" "$1"
    echo "已清理: $1"
' _ {} \;

# 清理系统日志
journalctl --vacuum-time=3d

# 清理 Docker 日志和未使用的资源
docker system prune -f --volumes

echo "日志清理完成!"
df -h /

执行清理

chmod +x /root/scripts/clean-logs.sh
/root/scripts/clean-logs.sh

📊 日志监控与告警

磁盘空间监控

# 检查磁盘使用率
df -h /

# 查看最大的日志文件
du -sh /var/log/maiban-*.log | sort -hr | head -10

# 统计所有日志文件总大小
du -sh /var/log/maiban-*.log | awk '{sum+=$1} END {print sum, "KB"}'

设置磁盘空间告警

创建监控脚本 /root/scripts/disk-alert.sh:

#!/bin/bash
# 磁盘空间告警脚本

THRESHOLD=85
CURRENT=$(df -h / | grep -v Filesystem | awk '{print $5}' | sed 's/%//')

if [ $CURRENT -gt $THRESHOLD ]; then
    echo "⚠️ 警告:磁盘使用率 ${CURRENT}% 超过阈值 ${THRESHOLD}%"
    echo "最大的日志文件:"
    du -sh /var/log/maiban-*.log | sort -hr | head -5
fi

添加到 Crontab

# 每小时检查一次磁盘空间
0 * * * * /root/scripts/disk-alert.sh

🔍 应用层日志配置

Spring Boot Logback 配置

在各微服务的 logback-spring.xml 中配置日志轮转:

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/var/log/maiban-${spring.application.name}.log</file>
        
        <!-- 滚动策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 日志文件名模式 -->
            <fileNamePattern>/var/log/maiban-${spring.application.name}-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <!-- 单个文件最大大小 -->
            <maxFileSize>100MB</maxFileSize>
            <!-- 保留天数 -->
            <maxHistory>7</maxHistory>
            <!-- 总大小限制 -->
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>
</configuration>

推荐配置参数

参数开发环境生产环境说明
maxFileSize50MB100MB单个日志文件最大大小
maxHistory3天7-30天保留历史日志天数
totalSizeCap500MB1-5GB所有日志文件总大小限制
levelDEBUGINFO日志级别

🐳 Docker 日志管理

配置 Docker 日志驱动

在 docker-compose-env.yml 中配置:

services:
  elasticsearch:
    logging:
      driver: "json-file"
      options:
        max-size: "10m"      # 单个日志文件最大10MB
        max-file: "3"        # 最多保留3个日志文件

全局 Docker 日志配置

编辑 /etc/docker/daemon.json:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

重启 Docker 服务:

systemctl restart docker

清理 Docker 日志

# 查看 Docker 日志占用
du -sh /var/lib/docker/containers/*/*-json.log

# 清理所有容器日志
truncate -s 0 /var/lib/docker/containers/*/*-json.log

# 清理未使用的 Docker 资源
docker system prune -af --volumes

📈 日志分析工具

1. 实时查看日志

# 实时查看应用日志
tail -f /var/log/maiban-admin.log

# 过滤错误日志
tail -f /var/log/maiban-admin.log | grep ERROR

# 多个日志文件同时查看
tail -f /var/log/maiban-*.log

2. 日志统计分析

# 统计错误日志数量
grep -c ERROR /var/log/maiban-admin.log

# 统计最近1小时的错误
grep ERROR /var/log/maiban-admin.log | grep "$(date -d '1 hour ago' '+%Y-%m-%d %H')"

# 按时间段分析日志
awk '/2025-10-23 10:/ && /ERROR/' /var/log/maiban-admin.log

3. 日志搜索

# 搜索特定关键词
grep -rn "Connection refused" /var/log/maiban-*.log

# 搜索最近的异常堆栈
grep -A 20 "Exception" /var/log/maiban-admin.log | tail -30

# 搜索并高亮显示
grep --color=auto "ERROR" /var/log/maiban-admin.log

🚨 常见问题处理

1. 磁盘空间不足

现象:磁盘使用率超过 90%

排查:

# 查找大文件
find /var/log -type f -size +100M

# 查看日志总大小
du -sh /var/log/maiban-*.log

解决:

# 立即清理日志
/root/scripts/clean-logs.sh

# 或手动清理
for log in /var/log/maiban-*.log; do
    tail -500 "$log" > "$log.tmp" && mv "$log.tmp" "$log"
done

2. 日志轮转未生效

排查:

# 检查 logrotate 配置
logrotate -d /etc/logrotate.d/maiban

# 查看 logrotate 日志
cat /var/lib/logrotate/status

解决:

# 修复权限问题
chmod 644 /etc/logrotate.d/maiban

# 手动执行轮转
logrotate -f /etc/logrotate.d/maiban

3. 日志写入权限问题

现象:应用无法写入日志

解决:

# 检查日志文件权限
ls -l /var/log/maiban-*.log

# 修复权限
chmod 644 /var/log/maiban-*.log
chown root:root /var/log/maiban-*.log

# 检查目录权限
chmod 755 /var/log

📝 最佳实践

1. 日志级别使用建议

级别使用场景示例
ERROR系统错误、异常数据库连接失败、接口调用异常
WARN警告信息配置参数缺失、性能阈值告警
INFO关键业务流程订单创建、支付成功、用户登录
DEBUG调试信息方法入参、SQL语句、接口请求
TRACE详细追踪详细的方法调用栈

2. 日志内容规范

好的日志示例:

2025-10-23 10:30:45.123 [http-nio-8080-exec-1] INFO  OrderService - 创建订单成功, orderId=20251023001, userId=1001, amount=199.00

不好的日志示例:

订单创建了

3. 敏感信息处理

❌ 不要记录:

  • 用户密码
  • 身份证号码
  • 银行卡号
  • 手机号完整信息

✅ 脱敏处理:

// 手机号脱敏
String phone = "138****5678";

// 身份证脱敏  
String idCard = "320***********1234";

4. 定期维护计划

频率维护项目
每天自动日志轮转(logrotate)
每周检查磁盘空间使用率
每月分析日志统计数据,优化配置
每季度清理超期的归档日志

🔗 相关文档

  • 麦瓣健康-后端技术架构文档
  • 数据库设计文档-完整版
  • 微服务分布式事务一致性设计方案

📞 运维支持

如遇到日志相关问题,请按以下步骤排查:

  1. 检查磁盘空间:df -h /
  2. 检查日志大小:du -sh /var/log/maiban-*.log
  3. 查看最新日志:tail -100 /var/log/maiban-服务名.log
  4. 检查轮转配置:cat /etc/logrotate.d/maiban

文档版本:v1.0
最后更新:2025-10-23
维护人员:麦瓣健康技术运维团队

在 GitHub 上编辑此页
最后更新: 2025/11/10 10:53
贡献者: David, Claude, Claude Code
Prev
麦瓣健康 - 微服务分布式事务一致性设计方案
Next
Netdata 监控系统技术文档