实时监控 Golang 日志通常有几种常见方案,取决于你的日志输出方式、部署环境和监控需求。下面按常见场景给你一个系统性说明。
Golang 程序通常把日志输出到 stdout:
log.Println("hello")
运行:
go run main.go | tee app.log
实时监控:
tail -f app.log
✅ 适合:本地开发、简单服务
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("server started",
zap.String("host", "127.0.0.1"),
zap.Int("port", 8080),
)
输出 JSON 日志,方便后续采集。
实时查看:
tail -f /var/log/app.log
✅ 适合:生产环境前期
架构:
Golang日志文件
↓
Filebeat
↓
Elasticsearch
↓
Kibana(实时搜索/告警)
优点
适合
Golang → 日志文件
↓
Promtail
↓
Loki
↓
Grafana
✅ 比 ELK 更轻 ✅ 适合 Kubernetes
kubectl logs -f pod-name
func logStream(w http.ResponseWriter, r *http.Request) {
flusher := w.(http.Flusher)
for {
fmt.Fprintf(w, "log at %v\n", time.Now())
flusher.Flush()
time.Sleep(time.Second)
}
}
✅ 适合:内部调试 ❌ 不适合:高并发生产
| 场景 | 推荐方案 |
|---|---|
| 本地开发 | tail -f |
| 单机服务 | zap + 文件 + tail |
| 生产服务 | zap + Filebeat + ES |
| K8s | zap + Promtail + Loki |
| 微服务 | ELK / Loki |
如果你愿意,可以告诉我:
我可以直接给你一套可落地的配置示例。