在 Debian 上监控 Go 程序日志,常见做法分为 日志位置确认 → 采集方式选择 → 实时监控/集中管理。下面按实用场景给你一套清晰方案。
Go 程序日志一般有三种来源:
标准输出(stdout/stderr)
journalctl 里写入文件
log.SetOutput(os.OpenFile("/var/log/myapp/app.log", ...))
第三方日志库
zap、logrus、slog 等,通常也是文件或 stdouttail -f /var/log/myapp/app.log
带关键字监控:
tail -f /var/log/myapp/app.log | grep ERROR
如果 Go 程序用 systemd 启动:
journalctl -u myapp.service -f
只看错误:
journalctl -u myapp.service -p err -f
Go 自身不带 log rotate,Debian 推荐用 logrotate
/etc/logrotate.d/myapp/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
copytruncate对 Go 程序友好(不重启也能切日志)
适合中大型系统
sudo apt install filebeat
/etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
paths:
- /var/log/myapp/*.log
output.elasticsearch:
hosts: ["localhost:9200"]
特别适合 Go + Kubernetes / 云原生
sudo apt install promtail
Grafana 里直接搜:
{job="myapp"} |= "ERROR"
sudo apt install vector
log.Println("level=error msg=\"db timeout\"")
或用 slog:
logger.Error("db timeout", "db", "mysql")
grep 或 Loki 过滤tail -f /var/log/myapp/app.log | grep ERROR | while read line
do
echo "$line" | mail -s "Go App Error" admin@your.com
done
| 场景 | 推荐方案 |
|---|---|
| 本地开发 | tail -f |
| 单台服务器 | journalctl + logrotate |
| 多服务 | Loki + Grafana |
| 企业级 | ELK / OpenSearch |
如果你愿意,可以告诉我:
我可以直接给你一套 可复制的配置。