温馨提示×

怎样采集debian golang日志

小樊
35
2026-09-19 07:50:43
栏目: 编程语言

在 Debian 系统上采集 Golang 应用的日志,常见做法分为 应用内日志输出方式、系统级采集方式 以及 集中式日志方案。下面按实用场景逐步说明。


一、Golang 应用日志输出规范(前提)

无论用什么方式采集,第一步是让日志可被系统捕获。

1. 输出到 stdout / stderr(推荐)

log.Println("hello")
fmt.Println("info")

systemd / docker 都能直接采集。

2. 输出到文件

log.SetOutput(os.OpenFile("/var/log/myapp/app.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644))

二、使用 systemd 采集(Debian 默认)

Debian 通常使用 systemd。

1. 编写 service 文件

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

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

[Install]
WantedBy=multi-user.target

2. 启动并查看日志

sudo systemctl daemon-reload
sudo systemctl enable --now myapp
journalctl -u myapp -f

3. 导出日志文件(可选)

journalctl -u myapp --since "2024-01-01" > myapp.log

三、直接采集日志文件

如果你把日志写到文件:

1. 日志路径示例

/var/log/myapp/app.log

2. 使用 logrotate 防止膨胀

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

四、使用 Filebeat / Vector 采集(推荐生产)

Filebeat 示例

filebeat.inputs:
- type: log
  paths:
    - /var/log/myapp/*.log

output.elasticsearch:
  hosts: ["http://localhost:9200"]

安装:

sudo apt install filebeat

五、Docker 部署时的日志采集

Docker 默认

docker logs -f myapp

配合 journald

docker run --log-driver=journald myapp

六、结构化日志(推荐)

使用 zerolog / zap:

logger := zerolog.New(os.Stdout).With().Timestamp().Logger()
logger.Info().Str("module", "http").Msg("request received")

便于 ELK / Loki 解析。


七、总结建议

场景 推荐方式
简单服务 systemd + journalctl
文件日志 logrotate + Filebeat
容器 stdout + docker logs
生产环境 结构化日志 + 集中采集

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

  • 是否是 systemd / docker
  • 日志是文件还是 stdout
  • 是否要接入 ELK / Loki / 云日志

我可以直接给你一套完整配置。

0 踩