温馨提示×

debian golang日志怎样告警

小樊
38
2026-10-24 18:41:16
栏目: 编程语言

在 Debian 上运行 Golang 服务时,“日志告警”通常分三层来做:

  1. 应用层:Golang 代码里主动发告警(邮件 / 钉钉 / 企业微信 / Webhook)
  2. 系统层:用 journald / rsyslog / logrotate + 监控工具发现异常日志
  3. 采集层:用 Prometheus + Loki / ELK 做日志告警

下面按常见实用方案给你讲。


一、Golang 应用内直接告警(最推荐)

1. 日志级别 + 告警触发

例如 error 级别日志直接发告警:

log.Println("normal log")

if err != nil {
    log.Printf("ERROR: %v", err)
    sendAlert("服务异常", err.Error())
}

2. 告警方式示例

钉钉

func sendDingding(msg string) {
    url := "https://oapi.dingtalk.com/robot/send?access_token=xxx"
    body := map[string]interface{}{
        "msgtype": "text",
        "text": map[string]string{
            "content": msg,
        },
    }
    jsonBody, _ := json.Marshal(body)
    http.Post(url, "application/json", bytes.NewReader(jsonBody))
}

企业微信

func sendWechat(msg string) {
    url := "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx"
    body := map[string]interface{}{
        "msgtype": "text",
        "text": map[string]string{
            "content": msg,
        },
    }
    jsonBody, _ := json.Marshal(body)
    http.Post(url, "application/json", bytes.NewReader(jsonBody))
}

二、Debian 系统日志告警(不改动代码)

1. 使用 systemd + journald

Golang 程序用 systemd 管理:

# /etc/systemd/system/myapp.service
[Unit]
Description=My Golang App

[Service]
ExecStart=/opt/myapp/myapp
Restart=always
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

查看错误日志:

journalctl -u myapp -p err

2. 关键词告警(简单脚本)

journalctl -u myapp -f | grep --line-buffered "ERROR" | while read line
do
    curl -X POST https://xxx -d "$line"
done

三、日志采集 + 告警(生产推荐)

方案 1:Promtail + Loki + Grafana

适合 Kubernetes / 服务器集群

  • Promtail 采集 Debian 日志
  • Loki 存储
  • Grafana 配置日志告警规则

示例告警:

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

方案 2:Filebeat + Elasticsearch + Kibana

  • Filebeat 收集 /var/log/myapp.log
  • ES 存储
  • Kibana 配置 Watcher 告警

四、日志轮转(避免爆盘)

# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

五、推荐组合(实用)

  • 小项目:Golang error → 钉钉/企微
  • 中项目:systemd + journald + 关键词脚本
  • 大项目:Promtail + Loki + Grafana

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

  • 是 systemd 还是裸跑
  • 用 钉钉 / 企微 / 邮件
  • 是否已有 Prometheus / ELK

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

0 踩