新闻中心

Golang如何实现Prometheus自定义指标采集

2025-11-08
浏览次数:
返回列表
答案是通过引入Prometheus client_golang库,在Go项目中定义、注册并更新自定义指标,再通过HTTP暴露/metrics端点供Prometheus抓取。具体步骤包括:1. 安装client_golang库;2. 使用Counter、Gauge等类型定义业务指标;3. 在init函数中注册指标;4. 于业务逻辑中更新指标值;5. 通过promhttp.Handler()暴露metrics接口;6. 配置Prometheus目标抓取该端点,最终实现监控数据采集与查询。

golang如何实现prometheus自定义指标采集

在Go项目中接入Prometheus自定义指标采集,核心是使用官方提供的 client_golang 库暴露业务相关的监控数据。整个过程包括定义指标、注册、更新数值,并通过HTTP服务暴露给Prometheus抓取。

1. 引入Prometheus客户端库

安装Go的Prometheus客户端:

go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promhttp

这两个包分别用于定义指标和提供HTTP处理器来暴露指标。

2. 定义自定义指标

Prometheus支持多种指标类型:Counter(计数器)、Gauge(当前值)、Histogram(直方图)、Summary(摘要)。根据业务场景选择合适类型。

例如,定义一个请求计数器和一个处理耗时的直方图:

var (
  httpRequestsTotal = prometheus.NewCounterVec(
    prometheus.CounterOpts{
      Name: "http_requests_total",
      Help: "Total number of HTTP requests made.",
    },
    []string{"method", "endpoint", "status"},
  )

  requestDuration = prometheus.NewHistogramVec(
    prometheus.HistogramOpts{
      Name: "http_request_duration_seconds",
      Help: "HTTP request latency in seconds.",
      Buckets: prometheus.DefBuckets,
    },
    []string{"method", "endpoint"},
  )
)

3. 注册指标

定义后的指标需要注册到默认的Registry中,才能被暴露出来:

func init() {
  prometheus.MustRegister(httpRequestsTotal)
  prometheus.MustRegister(requestDuration)
}

也可以创建自定义Registry,但通常使用默认即可。

易标AI 易标AI

告别低效手工,迎接AI标书新时代!3分钟智能生成,行业唯一具备查重功能,自动避雷废标项

易标AI 135 查看详情 易标AI

4. 在业务代码中更新指标

在处理HTTP请求的地方记录数据:

func handler(w http.ResponseWriter, r http.Request) {
  start := time.Now()

  // 模拟业务逻辑
  time.Sleep(100
time.Millisecond)

  // 更新计数器
  httpRequestsTotal.WithLabelValues(r.Method, r.URL.Path, "200").Inc()

  // 更新耗时
  requestDuration.WithLabelValues(r.Method, r.URL.Path).Observe(time.Since(start).Seconds())

  w.Write([]byte("OK"))
}

5. 暴露/metrics端点

启动一个HTTP服务,将指标通过 /metrics 接口暴露:

func main() {
  http.Handle("/metrics", promhttp.Handler())
  http.HandleFunc("/", handler)

  log.Println("Server starting on :8080")
  log.Fatal(http.ListenAndServe(":8080", nil))
}

启动后访问 http://localhost:8080/metrics 可看到类似如下内容:

# HELP http_requests_total Total number of HTTP requests made.
# TYPE http_requests_total counter
http_requests_total{endpoint="/",method="GET",status="200"} 5

6. 配置Prometheus抓取

在Prometheus配置文件中添加目标:

scrape_configs:
  - job_name: 'go-app'
    static_configs:
      - targets: ['localhost:8080']

重启Prometheus后,在Web UI中就能查询自定义指标。

基本上就这些。关键在于合理设计指标名称和标签,避免 cardinality 过高,同时确保性能开销可控。

以上就是Golang如何实现Prometheus自定义指标采集的详细内容,更多请关注其它相关文章!


# 客户端  # 扬州网站建设方案怎么写  # 网站推广学到心得  # seo上海站排名  # 安庆品牌营销推广价格  # 网站优化快速排名的方法  # 汕头网站建设平台  # 广东抖音seo优化  # 无极医院网站建设方案公示  # 中山seo网络推广培训  # 行业网站建设与推广方案  # 相关文章  # 就能  # 访问权限  # git  # 内网  # 何为  # 如何使用  # 如何实现  # 自定义  # igs  # 配置文件  # ai  # app  # 处理器  # golang  # github  # go 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: J*a里如何实现订单支付与库存同步功能_支付库存同步项目开发方法说明  j*a toString()的覆盖  Angular Material 垂直步进器:实现底部到顶部排序的教程  在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案  新三国志曹操传110级星符试炼夏侯渊极难攻略  steam官方网页快速访问 steam账号注册全流程  在Go语言中利用后缀数组处理多字符串:实现高效文本匹配与自动补全  高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法  拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧  为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法  学习通网页版快速入口 学习通官网网页版直接打开  Android Studio计算器C键功能异常排查与修复教程  漫蛙漫画官方首页 漫蛙2漫画在线阅读入口  提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案  Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式  html5 app怎么运行环境_配html5 app运行环境【教程】  漫蛙2(台版)官方入口地址 漫蛙2(台版)正版漫画网页端  抖音怎么赚钱_抖音创作者变现方法与途径指南  Go语言中JSON数据解析与字段访问教程  铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则  铁路12306官网网页端快速入口 铁路12306官方首页登录教程  J*aScript中管理异步API调用:确保操作顺序与数据一致性  Win10系统服务哪些可以禁用 Win10安全优化服务列表【干货】  天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】  Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】  小米14应用无法联网原因分析_小米14网络权限修复  妖精动漫免费平台 妖精动漫官网资源观看网址  小红书网页版入口链接分享 小红书官网直接进  探索高级语言到原生C/C++的转译:挑战与内存管理策略  Linux如何排查内存不足OOME问题_LinuxOOM分析教程  必由学在线入口 必由学网页版快速登录入口  蛙漫移动版在线看 蛙漫手机浏览器直达入口  iCloud登录入口网页版 苹果iCloud官网登录  AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看  Win10如何清理注册表垃圾 Win10注册表维护与优化指南【慎用】  俄罗斯Yandex搜索引擎入口_Yandex官网免登录一键访问  微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法  c++20的std::jthread是什么_c++可中断线程与RAII式管理  css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染  提升Kafka消费者健壮性:会话超时处理与消息处理语义  J*aScript中针对特定容器内图片动画的实现教程  蛙漫画网页版全站入口 蛙漫热门作品免费浏览  大麦的“候补”是什么意思 大麦候补购票规则【详解】  《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元  中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】  vivo云服务网页版登录 怎么登录vivo云服务网页版  在Typer应用中优雅地处理和重组任意命令行参数  写好的html代码怎么运行出来_运行写好的html代码方法【教程】  c++中的std::launder有什么实际用途_c++对象生命周期与指针优化  腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程 

搜索