温馨提示×

golang日志在debian如何监控

小樊
32
2026-09-28 08:46:51
栏目: 编程语言

在 Debian 上监控 Go 程序日志,常见做法分为 日志位置确认 → 采集方式选择 → 实时监控/集中管理。下面按实用场景给你一套清晰方案。


一、先确认 Go 日志在哪

Go 程序日志一般有三种来源:

  1. 标准输出(stdout/stderr)

    • 直接运行:终端可见
    • systemd 管理:在 journalctl 里
  2. 写入文件

    log.SetOutput(os.OpenFile("/var/log/myapp/app.log", ...))
    
  3. 第三方日志库

    • zap、logrus、slog 等,通常也是文件或 stdout

二、最基础:实时查看日志(单台机器)

1. 查看文件日志

tail -f /var/log/myapp/app.log

带关键字监控:

tail -f /var/log/myapp/app.log | grep ERROR

2. systemd 管理的 Go 服务

如果 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 程序友好(不重启也能切日志)


四、集中监控(推荐生产环境)

方案 1:Filebeat + ELK / Elasticsearch

适合中大型系统

sudo apt install filebeat

/etc/filebeat/filebeat.yml

filebeat.inputs:
- type: log
  paths:
    - /var/log/myapp/*.log

output.elasticsearch:
  hosts: ["localhost:9200"]

方案 2:Promtail + Loki + Grafana(轻量好用)

特别适合 Go + Kubernetes / 云原生

sudo apt install promtail

Grafana 里直接搜:

{job="myapp"} |= "ERROR"

方案 3:向量化采集 Vector(现代方案)

sudo apt install vector

五、Go 程序侧建议(很重要)

1. 用结构化日志(方便监控)

log.Println("level=error msg=\"db timeout\"")

或用 slog:

logger.Error("db timeout", "db", "mysql")

2. 日志级别统一

  • DEBUG / INFO / WARN / ERROR
  • 方便 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

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

  • Go 是怎么跑的(直接运行 / systemd / Docker)
  • 日志是文件还是 stdout
  • 单机能接受还是要多机集中

我可以直接给你一套 可复制的配置。

0 踩