温馨提示×

怎样用debian分析golang日志

小樊
37
2026-09-22 09:49:37
栏目: 编程语言

在 Debian 上分析 Golang 日志,通常可以从日志获取 → 查看/检索 → 结构化分析 → 可视化/告警几个层面来做。下面按实战方式给你一套常用方案。


一、准备环境(Debian)

1. 安装基础工具

sudo apt update
sudo apt install -y golang git curl jq less

如果是分析已有日志,不需要 Go 环境本身。


二、Golang 日志的常见形式

Golang 日志一般有几类:

  • log.Println / log.Fatalf(文本)
  • zap、logrus、slog(可 JSON)
  • 输出到:
    • stdout / stderr
    • 文件(如 /var/log/app.log)
    • systemd journal

三、基础日志查看(命令行)

1. 直接查看

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

2. 过滤错误

grep -i error /var/log/myapp.log
grep -E "ERROR|FATAL" /var/log/myapp.log

3. 时间段过滤

awk '$1 >= "2026-01-20" && $1 <= "2026-01-21"' /var/log/myapp.log

四、如果是 systemd 服务(推荐)

很多 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

五、结构化日志分析(JSON 日志)

如果 Golang 用 zap / slog 输出 JSON:

1. 使用 jq

cat app.log | jq 'select(.level=="error")'

统计错误数量:

cat app.log | jq -r '.level' | sort | uniq -c

六、用 Go 自己分析日志(进阶)

示例:统计 ERROR 日志

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

七、大型日志分析方案(生产推荐)

方案 1:Loki + Grafana(轻量)

sudo apt install loki promtail grafana

适合:

  • 多服务
  • 按标签查询
  • 可视化

方案 2:ELK / OpenSearch

适合:

  • 海量日志
  • 全文检索

八、Golang 日志最佳实践(分析友好)

  • 使用 JSON 日志
  • 固定字段:
    {"time":"...","level":"error","msg":"db failed","trace_id":"..."}
    
  • 避免多行日志(或用 $ 分隔)
  • 带 trace_id 方便关联

九、总结推荐组合

场景 推荐方式
快速排查 tail / grep
systemd 服务 journalctl
JSON 日志 jq
生产环境 Loki + Grafana
自定义分析 Go + JSON

如果你愿意,我可以:

  • 给你一个 zap/slog 日志示例
  • 写一个 完整 Debian + systemd + 日志分析示例
  • 或针对你现有的日志格式给具体分析命令

0 踩