在 Debian 上运行的 Golang 程序,想“远程看日志”,常见有几种思路和落地方式。下面按从简单到专业给你梳理一下。
如果你的 Golang 程序是把日志写到文件(如 /var/log/app.log):
# 在本地机器
ssh user@debian-server
tail -f /var/log/app.log
或者:
ssh user@debian-server "tail -f /var/log/app.log"
✅ 适合:
❌ 缺点:
在 Debian 上用 systemd 管理 Golang 服务时:
# /etc/systemd/system/myapp.service
[Service]
ExecStart=/usr/local/bin/myapp
StandardOutput=journal
StandardError=journal
然后远程看:
ssh user@debian-server
journalctl -u myapp -f
✅ 优点:
journalctl 很方便Debian 端(客户端)
apt install rsyslog
Golang 用 log/syslog:
import "log/syslog"
logger, _ := syslog.New(syslog.LOG_INFO, "myapp")
logger.Info("hello remote log")
配置 /etc/rsyslog.conf:
*.* @log-server:514
日志服务器
module(load="imudp")
input(type="imudp" port="514")
✅ 适合传统运维体系
架构:
Golang → 日志文件 → Filebeat → Logstash → Elasticsearch → Kibana
Filebeat 配置示例:
filebeat.inputs:
- type: log
paths:
- /var/log/myapp/*.log
output.elasticsearch:
hosts: ["http://es-server:9200"]
✅ 适合:
Golang → 日志文件 → Promtail → Loki → Grafana
scrape_configs:
- job_name: myapp
static_configs:
- targets: [localhost]
labels:
job: myapp
__path__: /var/log/myapp/*.log
✅ 优点:
你可以:
zerolog / zap 输出 JSON示例(简化):
http.HandleFunc("/logs", func(w http.ResponseWriter, r *http.Request) {
// 实时推送日志
})
✅ 适合:
| 场景 | 推荐 |
|---|---|
| 单机 | systemd + journalctl |
| 少量服务器 | rsyslog / Loki |
| 生产集群 | Filebeat + Elasticsearch 或 Loki |
| 云平台 | 云厂商日志服务 |
如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置。