beego本身不提供监控埋点能力,需通过beego/v2的addmetrics()启用/metrics端点暴露prometheus格式指标;grafana不能直连beego,必须经prometheus抓取后作为数据源接入,流程为beego→prometheus→grafana。

Beego 本身不提供监控埋点或指标导出能力,也无法直接“整合”Grafana——Grafana 是一个独立的数据可视化前端,它只消费数据源(如 Prometheus、InfluxDB、Zabbix 等),不与 Web 框架耦合。想让 Beego 应用的运行指标出现在 Grafana 里,关键不是“整合面板”,而是**把 Beego 的指标暴露成 Grafana 能读的格式**。
Beego 怎么暴露 Prometheus 格式的指标
Beego v2.x(基于 beego/v2)支持通过 metrics 模块启用 Prometheus 指标端点,但需手动注册并启用中间件:
- 确保使用
beego/v2(v1.x 不支持原生 metrics) - 在
main.go初始化后调用bee.App.AddMetrics()(注意:不是所有版本都叫这个名字;实际是beego.BeeApp.AddMetrics()或需显式引入github.com/beego/beego/v2/server/web/metrics) - 默认指标路径为
/metrics,返回的是标准的 Prometheus 文本格式(Content-Type: text/plain; version=0.0.4) - 若要自定义指标(如请求耗时分布、活跃连接数),需用
prometheus.NewHistogramVec等原始 client_golang 接口注册,再在 filter 或 controller 中.Observe()或.Inc()
常见错误:直接访问 /metrics 返回 404 —— 检查是否漏掉 AddMetrics() 调用,或路由被其他 InsertFilter 拦截(比如 JWT 验证未放行该路径)。
Grafana 怎么连上 Beego 的 /metrics
Grafana 本身不能直接抓取 /metrics,必须经由 Prometheus 作为中间采集器。流程固定为:Beego → Prometheus scrape → Prometheus storage → Grafana query:
-
Prometheus的scrape_configs中需添加 job,target 指向 Beego 服务地址(如http://beego-app:8080/metrics) - 确认 Beego 服务监听在可被 Prometheus 访问的网络(Docker 网络内互通,非 localhost)
- Grafana 添加数据源时选
Prometheus,URL 填 Prometheus 的 API 地址(如http://prometheus:9090),不是 Beego 地址 - 仪表板中写 PromQL 查询,例如
http_request_duration_seconds_sum{job="beego-app"} / http_request_duration_seconds_count{job="beego-app"}
容易踩的坑:Prometheus 抓不到指标,先 curl http://beego-app:8080/metrics 看能否返回文本;返回空或 500,说明 Beego metrics 未生效;返回 403/401,说明中间件拦截了,需单独放行 /metrics 路径。
Beego 日志怎么进 Grafana(配合 Loki)
如果目标是把 Beego 的 logs(比如 beego.BeeLogger 输出)展示在 Grafana,得走日志管道:Beego → Loki → Grafana:
- Beego 默认输出到 stdout/stderr,容器化部署时可直接被
docker logs捕获 - Loki 通过
promtail采集容器日志,需配置scrape_configs匹配 Beego 容器名或标签 - Grafana 添加 Loki 数据源,URL 填
http://loki:3100,然后用 LogQL 查询,如{job="beego-app"} |~ "error" - 注意 Beego 日志格式:默认是文本,Loki 能解析;若启用了 JSON 格式(
SetLogFuncCall(true)可能干扰结构化),建议关闭或统一用json输出模式
别试图让 Beego 直接写入 Loki HTTP API——太重,也违背日志采集分层原则。promtail 是标准方案,稳定且低侵入。
为什么不用 Beego 自带的 admin 页面代替 Grafana
Beego 提供 /admin 路由(需开启 EnableAdmin),但它只是简单运行时信息看板(goroutine 数、内存占用等),和 Grafana 完全不在一个量级:
-
/admin无持久化、无历史趋势、不支持告警、不可共享、无权限控制 - 它的指标粒度粗(只有全局统计),没法按 handler、path、status code 拆解
- 无法关联其他系统(如数据库慢查询、主机负载),而 Grafana + Prometheus 可以跨数据源建关联视图
- 生产环境几乎没人用
/admin做监控,它更适合本地调试
真正需要的是可观测性闭环:指标 + 日志 + 链路追踪。Beego 只负责产生原始信号,Grafana 是最后那块拼图——但拼图底座(Prometheus/Loki/Tempo)必须先搭好。











