阿里云ECS日志管理与监控

星期二, 6月 23, 2026 | 2分钟阅读 | 更新于 星期二, 6月 23, 2026

@

部署自动化之后,更重要的是出问题时能快速定位。本文记录 ECS 服务器上日志管理和监控的实践经验。

一、日志查看

后端日志(systemd 服务)

前几篇文章用 systemd 管理了 Spring Boot 服务,systemd 自带日志管理:

# 实时查看日志
journalctl -u myapp -f

# 查看最近 100 行
journalctl -u myapp -n 100

# 查看今天的日志
journalctl -u myapp --since today

# 查看最近 1 小时
journalctl -u myapp --since "1 hour ago"

# 按关键字过滤
journalctl -u myapp | grep ERROR

Nginx 日志

Nginx 默认日志位置:

日志路径内容
访问日志/var/log/nginx/access.log每个 HTTP 请求
错误日志/var/log/nginx/error.log启动/运行错误
# 实时查看访问日志
tail -f /var/log/nginx/access.log

# 查看最近 50 条错误
tail -50 /var/log/nginx/error.log

二、日志轮转(防止磁盘写满)

日志不管理会越来越大,需要配置 logrotate。Nginx 通常已自带 /etc/logrotate.d/nginx

# 检查 Nginx 日志轮转配置
cat /etc/logrotate.d/nginx

为应用日志配置轮转

创建 /etc/logrotate.d/myapp

/opt/app/app.log {
    daily              # 每天轮转
    rotate 7           # 保留 7 天
    compress           # 压缩旧日志
    delaycompress      # 延迟一天压缩
    missingok          # 日志不存在不报错
    notifempty         # 日志为空不轮转
    copytruncate       # 复制后清空,不中断写入
}

三、应用日志最佳实践

Spring Boot 默认输出到控制台,systemd 会自动收集。但生产环境建议输出到文件:

# application-prod.yml
logging:
  file:
    path: /opt/app/logs
    name: /opt/app/logs/myapp.log
  level:
    root: WARN
    com.yourcompany: INFO  # 自己的包用 INFO

SLF4J 日志规范:

// 关键位置打日志
log.info("用户 {} 登录成功, IP: {}", username, ip);
log.warn("数据库连接池使用率: {}%", usage);
log.error("订单创建失败, 订单号: {}, 错误: ", orderId, e);  // 异常对象放最后一个参数

四、阿里云云监控(免费)

阿里云自带免费的基础监控,不需要额外安装 Agent:

ECS 控制台监控

进入 ECS 控制台 → 实例 → 监控,可查看:

指标说明
CPU 使用率持续超过 80% 需要扩容
内存使用率Java 应用的 OOM 隐患
磁盘使用率超过 80% 时扩容/清理
网络流入/流出带宽是否打满
磁盘 IOPS数据库所在盘的性能

设置告警规则

在云监控控制台 → 报警服务 → 创建报警规则:

监控项阈值说明
CPU 使用率> 80% 持续 5 分钟可能有死循环或需要扩容
内存使用率> 85% 持续 3 分钟Java OOM 前兆
磁盘使用率> 85%日志或数据写满磁盘

告警通知方式:短信、邮件、钉钉机器人。

五、磁盘空间监控

# 查看磁盘使用
df -h

# 查看目录大小
du -sh /opt/app/*

# 找出大文件
find / -type f -size +100M 2>/dev/null

写一个简单的磁盘检查脚本 /opt/scripts/check-disk.sh

#!/bin/bash
THRESHOLD=85
USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')

if [ "$USAGE" -gt "$THRESHOLD" ]; then
    echo "磁盘使用率: ${USAGE}%, 超过阈值 ${THRESHOLD}%" >&2
    # 可以在这里调用钉钉/企业微信 webhook 通知
fi

crontab 定期检查:

0 */2 * * * /opt/scripts/check-disk.sh  # 每两小时检查一次

六、进程与端口监控

# 检查进程是否存活
systemctl is-active myapp    # 返回 active 或 inactive

# 检查端口是否监听
ss -tlnp | grep 8080

# 检查内存使用
ps aux | grep java

# 综合检查脚本
#!/bin/bash
if ! systemctl is-active --quiet myapp; then
    echo "后端服务已停止,尝试重启..."
    systemctl restart myapp
fi

七、错误快速排查流程

出问题时按以下顺序排查:

1. 服务是否在运行?    → systemctl status myapp
2. 端口是否在监听?    → ss -tlnp | grep 8080
3. 日志有什么错误?    → journalctl -u myapp -n 50 | grep ERROR
4. 磁盘满了吗?       → df -h
5. 内存够吗?         → free -h
6. CPU 正常吗?       → top
7. 外网能通吗?       → curl http://localhost:8080/

总结

日志管理的核心:systemd 日志 + 应用文件日志 + logrotate 轮转

监控的核心:云监控告警 + 磁盘检查 + 服务存活检查

日志让你知道出了什么问题,监控让你在用户发现之前就动手。

© 2026 My Blog

🌱 Powered by Hugo with theme Dream.