在 CentOS 上监控 Golang 性能
一 方案总览
- 应用内分析:使用 pprof 做 CPU、内存、阻塞 等剖析,定位函数级瓶颈。
- 指标与可视化:集成 Prometheus 客户端 暴露 /metrics,用 Grafana 展示与告警。
- 分布式追踪:引入 OpenTelemetry 采集 trace/metric,串联请求链路。
- 系统层观测:用 top/htop、vmstat、sar、nmon、glances、Sysdig 等查看 CPU、内存、I/O、网络 等主机与容器资源。
- 第三方 APM:如 Datadog、New Relic,快速获得托管式监控与告警能力。
二 快速上手 pprof
- 在应用中启用:导入 net/http/pprof 并启动调试端口(示例为 6060)。
- 采集与分析:
- 实时查看:浏览器访问 http://localhost:6060/debug/pprof/。
- 命令行抓取:
- CPU:
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30
- 堆内存:
go tool pprof http://localhost:6060/debug/pprof/heap
- 阻塞:
go tool pprof http://localhost:6060/debug/pprof/block
- 交互界面:进入 pprof 后可用
top、list 函数名、web 生成调用图。
- 离线文件分析:运行程序时导出
cpu.prof、mem.prof,再用 go tool pprof cpu.prof 或 pprof -http=:8080 cpu.prof 可视化。
三 Prometheus Grafana 实时监控
- 安装与启动(示例路径与版本可按需调整):
- Prometheus:下载解压后执行
./prometheus --config.file=prometheus.yml
- Grafana:下载解压后执行
./bin/grafana-server
- 应用集成:引入 prometheus/client_golang,暴露 /metrics(示例端口 8080)。
- Prometheus 抓取配置示例:
- scrape_configs:
- job_name: ‘go_app’
static_configs:
- targets: [‘localhost:8080’]
- Grafana:添加 Prometheus 数据源,导入或创建 Go 应用 仪表盘,监控 请求速率、延迟、错误率、goroutine 数、堆内存 等。
四 分布式追踪与日志聚合
- OpenTelemetry:在 Go 应用中引入 go.opentelemetry.io/otel,初始化 Tracer/Meter/Provider,为关键路径创建 Span,并暴露 OTLP/gRPC 或 HTTP 端点供后端采集;结合 Jaeger/OTel Collector 与 Grafana Tempo 展示链路。
- 日志与可视化:使用 Zap 等结构化日志,配合 Loki 聚合与查询,在 Grafana 实现 日志-指标-追踪 联动排查。
五 系统级监控与进阶工具
- 常用命令与工具:
- 进程与资源:
top/htop、vmstat 1、sar -u/-r/-b 1、nmon、glances
- 系统调用与容器洞察:
sysdig
- 进阶:使用 eBPF 实现低开销、近实时的内核/用户态事件观测,辅助定位 网络、文件 I/O、系统调用 等瓶颈。