温馨提示×

debian golang日志怎样接elk

小樊
35
2026-09-22 09:58:35
栏目: 编程语言

在 Debian 上把 Golang 应用的日志接入 ELK(Elasticsearch + Logstash + Kibana),常见、稳妥的做法有几种。下面按推荐程度给你一个完整方案。


一、推荐架构(生产常用)

Golang App
   ↓ (JSON 日志)
Filebeat(Debian 上)
   ↓
Logstash
   ↓
Elasticsearch
   ↓
Kibana

优点

  • 应用只管打日志
  • Filebeat 轻量、稳定
  • 易扩展、易维护

二、Golang 日志规范(关键)

✅ 1. 使用 JSON 日志(非常重要)

不要打纯文本日志,否则 ELK 解析很痛苦。

示例(使用 logrus):

import (
    "github.com/sirupsen/logrus"
)

func main() {
    logrus.SetFormatter(&logrus.JSONFormatter{})
    logrus.SetLevel(logrus.InfoLevel)

    logrus.WithFields(logrus.Fields{
        "service": "user-service",
        "user_id": 123,
    }).Info("user login success")
}

输出示例:

{
  "level": "info",
  "msg": "user login success",
  "service": "user-service",
  "user_id": 123,
  "time": "2026-01-15T10:00:00Z"
}

三、Debian 上安装 Filebeat

sudo apt update
sudo apt install filebeat -y

启用并启动:

sudo systemctl enable filebeat
sudo systemctl start filebeat

四、配置 Filebeat(核心)

编辑:

sudo vim /etc/filebeat/filebeat.yml

示例配置

filebeat.inputs:
  - type: log
    enabled: true
    paths:
      - /var/log/myapp/*.log
    json.keys_under_root: true
    json.add_error_key: true

output.logstash:
  hosts: ["logstash:5044"]

如果是容器日志(docker),路径通常是: /var/lib/docker/containers/*/*.log


五、Logstash 配置

1️⃣ 输入(5044)

input {
  beats {
    port => 5044
  }
}

2️⃣ 过滤(可选)

filter {
  if [service] {
    mutate {
      add_field => { "index_prefix" => "%{service}" }
    }
  }
}

3️⃣ 输出到 ES

output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "%{service}-logs-%{+YYYY.MM.dd}"
  }
}

六、Kibana 中查看

  1. 打开 Kibana
  2. Stack Management → Index Patterns
  3. 创建:user-service-logs-*
  4. Discover 中即可查看日志

七、更简单的替代方案(小项目)

✅ 方案 A:直接写 ES(不推荐大项目)

es := elasticsearch.NewClient(...)
es.Index("logs", json)

✅ 方案 B:Docker + ELK

services:
  app:
    logging:
      driver: json-file

Filebeat 读取 docker 日志即可。


八、常见问题

❓ 日志时间不对

  • Golang 用 UTC
  • Kibana 设置时区为本地

❓ 字段类型不对

  • 在 ES 中 mapping 或使用 mutate

九、总结(最佳实践)

Golang → JSON 日志
Debian → Filebeat
Logstash → ES → Kibana

如果你愿意,我可以:

  • 给你一个 完整 docker-compose ELK
  • 或针对 你的 Golang 框架(gin / echo / grpc) 给示例

直接说你的使用场景即可。

0