Linux Golang日志监控系统如何搭建
导读:Linux Golang日志监控系统搭建指南 一 架构选型与总体方案 日志采集与输出 应用侧使用结构化日志库(如 logrus、zap)输出 JSON,优先写入 stdout/stderr,便于容器与采集器统一处理。 物理机/虚拟机可将...
Linux Golang日志监控系统搭建指南
一 架构选型与总体方案
- 日志采集与输出
- 应用侧使用结构化日志库(如 logrus、zap)输出 JSON,优先写入 stdout/stderr,便于容器与采集器统一处理。
- 物理机/虚拟机可将日志写入文件,配合 logrotate 做按日轮转与压缩,避免磁盘被占满。
- 采集与传输
- 主机直采:使用 Fluent Bit、Filebeat、或 rsyslog/syslog-ng 采集文件或系统日志并转发到后端。
- 容器/K8s:节点部署 Fluent Bit DaemonSet 采集容器标准输出,统一送往后端存储。
- 存储与检索
- 检索型:Elasticsearch + Logstash/Kibana(ELK/EFK),适合复杂查询与全文分析。
- 轻量云原生:Loki + Grafana,与 Prometheus 指标生态深度集成,成本低、上手快。
- 可视化与告警
- Kibana/Grafana 做可视化与仪表盘;在 Loki 侧用 LogQL 配置错误率等告警规则,实现“指标→日志”的联动排查闭环。
二 快速落地方案一 主机直采到 Loki Grafana
- 步骤1 应用侧输出结构化日志
- 使用 zap 输出 JSON 到 stdout(容器推荐),示例:
- logger, _ := zap.NewProduction(); defer logger.Sync()
- logger.Info(“HTTP request handled”, zap.String(“method”,“GET”), zap.String(“path”,“/api”), zap.Int(“status”,200), zap.Duration(“duration”,120*time.Millisecond))
- 使用 zap 输出 JSON 到 stdout(容器推荐),示例:
- 步骤2 部署采集器 Fluent Bit 并写入 Loki
- 安装 Fluent Bit 后配置(示例要点):
- [INPUT] Name tail,Path /var/log/myapp/*.log,Parser json,Tag goapp
- [OUTPUT] Name loki,Match goapp,Host loki,Port 3100
- 安装 Fluent Bit 后配置(示例要点):
- 步骤3 Grafana 配置与查询
- 添加 Loki 数据源(URL:http://loki:3100),创建仪表盘;
- 示例 LogQL:{ job=“goapp”} |= “error” | json | level=“error”。
三 快速落地方案二 主机直采到 ELK Elasticsearch Kibana
- 步骤1 应用侧输出结构化日志
- 使用 logrus 输出 JSON 到 stdout 或文件,示例:
- logrus.SetFormatter(& logrus.JSONFormatter{ } );logrus.Info(“started”)
- 使用 logrus 输出 JSON 到 stdout 或文件,示例:
- 步骤2 部署采集器 Fluentd 或 Logstash
- Fluentd 示例(/etc/fluent/fluent.conf):
- @type tail,path /var/log/myapp/*.log,pos_file /var/log/fluentd-myapp.log.pos,tag myapp,@type json
- @type elasticsearch,host localhost,port 9200,logstash_format true,flush_interval 10s
- 启动 Fluentd:systemctl start fluentd & & systemctl enable fluentd
- Fluentd 示例(/etc/fluent/fluent.conf):
- 步骤3 Kibana 配置与检索
- 访问 http://:5601,创建索引模式(如 myapp-*),在 Discover 中检索与可视化。
四 关键配置与运维要点
- 日志轮转与保留
- 为应用日志配置 logrotate(/etc/logrotate.d/myapp):
- /var/log/myapp.log { daily; rotate 7; compress; missingok; notifempty; create 640 root adm }
- 为应用日志配置 logrotate(/etc/logrotate.d/myapp):
- systemd 与 journalctl
- 将 Go 应用托管为 systemd 服务,日志写入 journald,便于集中查看与追踪:
- journalctl -u your-service.service -f
- 将 Go 应用托管为 systemd 服务,日志写入 journald,便于集中查看与追踪:
- 容器与 K8s 最佳实践
- 容器环境日志写入 stdout/stderr,节点以 Fluent Bit 采集并发送到 Loki/Elasticsearch,避免写本地文件。
- 实时查看与排查
- 快速定位问题可用 tail -f、less + F、multitail、journalctl -f 等工具进行实时跟踪与多文件监控。
五 告警与可观测性闭环
- 基于日志的告警
- 在 Loki 配置 LogQL 告警规则,例如检测 5 分钟内错误日志激增:
-
- alert: HighErrorRate expr: sum(rate({ job=“go-service”} |= “level=error” [5m])) by (pod) > 10 for: 5m labels: severity: critical annotations: summary: “Service { { $labels.pod } } has high error rate”
-
- 在 Loki 配置 LogQL 告警规则,例如检测 5 分钟内错误日志激增:
- 指标与日志联动
- 在 Golang 中暴露 /metrics(Prometheus client_golang),用 Prometheus 抓取指标并在 Grafana 与 Loki 日志联动排查,形成“指标触发告警 → 查看相关日志”的闭环。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Golang日志监控系统如何搭建
本文地址: https://pptw.com/jishu/756135.html
