温馨提示×

centos怎样采集golang日志

小樊
34
2026-09-30 06:25:24
栏目: 编程语言

在 CentOS 上采集 Golang 应用日志,常见做法有几种,取决于你的日志输出方式(stdout/stderr、文件)和采集工具(rsyslog、filebeat、fluentd、loki 等)。下面按常见场景给你一套实用方案。


一、Golang 日志常见输出方式

  1. 输出到 stdout / stderr
    • 容器化部署(Docker / K8s)最常见
  2. 输出到本地日志文件
    • 如 /var/log/myapp/app.log
  3. 直接写到 systemd journal
    • 使用 systemd 管理 Golang 服务

二、方式一:Golang 输出到 stdout(推荐)

1. Golang 代码示例

package main

import (
    "log"
)

func main() {
    log.SetFlags(log.LstdFlags | log.Lshortfile)
    log.Println("hello centos log")
}

2. 用 systemd 管理(CentOS 7/8)

vim /etc/systemd/system/myapp.service
[Unit]
Description=My Golang App
After=network.target

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

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start myapp
journalctl -u myapp -f

✅ 优点:日志自动被 journald 收集


三、方式二:Golang 写日志文件(传统方式)

1. Golang 写文件

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

2. 用 rsyslog 采集(CentOS 自带)

vim /etc/rsyslog.d/myapp.conf
module(load="imfile")

input(type="imfile"
      File="/var/log/myapp/app.log"
      Tag="myapp"
      Facility="local0")
systemctl restart rsyslog

查看:

tail -f /var/log/messages

四、方式三:使用 Filebeat 采集(ELK / 日志平台)

1. 安装 Filebeat

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
vim /etc/yum.repos.d/filebeat.repo
[filebeat]
name=Filebeat
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
enabled=1
yum install filebeat -y

2. 配置 Filebeat

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

output.elasticsearch:
  hosts: ["http://localhost:9200"]
systemctl enable --now filebeat

五、方式四:Docker + 日志采集(CentOS + Docker)

Golang 只输出 stdout

FROM golang:1.21
COPY . .
CMD ["./myapp"]

Docker 日志

docker logs -f myapp

配合 Filebeat / Loki

  • Docker 日志 → /var/lib/docker/containers/*
  • Filebeat 可直接采集

六、推荐组合(生产建议)

场景 推荐方案
容器 stdout + Loki / ELK
物理机 systemd journal + Filebeat
传统系统 日志文件 + rsyslog / Filebeat

七、常见问题

1. 日志乱码?

  • 确保 UTF-8
  • journalctl 加 -o short-iso

2. 日志太大?

  • logrotate
/var/log/myapp/*.log {
    daily
    rotate 7
    compress
}

如果你能告诉我:

  • ✅ Golang 是否用 Docker
  • ✅ 日志是文件还是 stdout
  • ✅ 最终要采集到哪里(ES / Loki / Kafka)

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

0 踩