温馨提示×

golang日志在debian怎样备份

小樊
44
2026-09-28 08:53:52
栏目: 编程语言

在 Debian 上备份 Go(Golang)应用产生的日志,通常和“普通文件备份”类似,关键看你日志写在哪里、怎么滚分。下面按常见场景给你一套可落地的做法。


一、先确认 Golang 日志在哪

常见位置:

  • 项目目录:/opt/myapp/logs/
  • 系统日志:/var/log/myapp/
  • 用 journald(systemd 启动):journalctl
  • 容器里:docker / k8s 日志

先确认:

ls -lh /var/log/myapp

二、最常用:直接文件备份(推荐)

1️⃣ 手动备份

cp -a /var/log/myapp /backup/myapp_logs_$(date +%F)

2️⃣ 压缩备份

tar czf /backup/myapp_logs_$(date +%F).tar.gz /var/log/myapp

三、用 logrotate(强烈推荐)

如果 Golang 日志是自己写文件(没用 journald),一定要配 logrotate。

示例配置

sudo vim /etc/logrotate.d/myapp

内容:

/var/log/myapp/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    copytruncate
}

copytruncate 对 Golang 很重要,避免重启进程

手动测试:

sudo logrotate -d /etc/logrotate.d/myapp
sudo logrotate -f /etc/logrotate.d/myapp

四、如果 Golang 用 systemd + journald

查看日志

journalctl -u myapp.service

备份 journal 日志

journalctl -u myapp.service > /backup/myapp_$(date +%F).log

限制 journal 大小(防止爆盘)

sudo vim /etc/systemd/journald.conf
SystemMaxUse=500M
MaxRetentionSec=30day
sudo systemctl restart systemd-journald

五、定时自动备份(crontab)

crontab -e

每天凌晨 2 点:

0 2 * * * tar czf /backup/myapp_logs_$(date +\%F).tar.gz /var/log/myapp

六、进阶方案(生产推荐)

  • ✅ 日志送到 rsyslog / fluentd / loki
  • ✅ 对象存储备份(S3 / MinIO)
  • ✅ 用 filebeat + ELK
  • ✅ 容器环境用 kubectl logs + sidecar

七、常见坑提醒

⚠️ Golang 不自动切割日志
⚠️ 不要直接 rm 正在写的日志
⚠️ 用 copytruncate 而不是 create
⚠️ 备份前确认磁盘空间


如果你愿意,可以告诉我:

  • Golang 是怎么写日志的(文件 / systemd / docker)
  • Debian 版本
  • 是否生产环境

我可以直接帮你写 完整备份脚本 + logrotate 配置。

0 踩