在 Debian 上分析 Golang 日志,通常可以从日志获取 → 查看/检索 → 结构化分析 → 可视化/告警几个层面来做。下面按实战方式给你一套常用方案。
sudo apt update
sudo apt install -y golang git curl jq less
如果是分析已有日志,不需要 Go 环境本身。
Golang 日志一般有几类:
log.Println / log.Fatalf(文本)zap、logrus、slog(可 JSON)/var/log/app.log)less /var/log/myapp.log
tail -f /var/log/myapp.log
grep -i error /var/log/myapp.log
grep -E "ERROR|FATAL" /var/log/myapp.log
awk '$1 >= "2026-01-20" && $1 <= "2026-01-21"' /var/log/myapp.log
很多 Golang 服务在 Debian 上用 systemd 跑:
journalctl -u myapp.service -f
journalctl -u myapp.service --since "2026-01-20 10:00"
导出日志:
journalctl -u myapp.service -o json > app.json
如果 Golang 用 zap / slog 输出 JSON:
cat app.log | jq 'select(.level=="error")'
统计错误数量:
cat app.log | jq -r '.level' | sort | uniq -c
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
f, _ := os.Open("/var/log/myapp.log")
defer f.Close()
scanner := bufio.NewScanner(f)
count := 0
for scanner.Scan() {
if strings.Contains(scanner.Text(), "ERROR") {
count++
}
}
fmt.Println("ERROR count:", count)
}
运行:
go run analyze.go
sudo apt install loki promtail grafana
适合:
适合:
{"time":"...","level":"error","msg":"db failed","trace_id":"..."}
$ 分隔)trace_id 方便关联| 场景 | 推荐方式 |
|---|---|
| 快速排查 | tail / grep |
| systemd 服务 | journalctl |
| JSON 日志 | jq |
| 生产环境 | Loki + Grafana |
| 自定义分析 | Go + JSON |
如果你愿意,我可以: