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

在Go项目中接入Prometheus自定义指标采集,核心是使用官方提供的 client_golang 库暴露业务相关的监控数据。整个过程包括定义指标、注册、更新数值,并通过HTTP服务暴露给Prometheus抓取。
1. 引入Prometheus客户端库
安装Go的Prometheus客户端:
go get github.com/prometheus/client_golang/prometheusgo 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标书新时代!3分钟智能生成,行业唯一具备查重功能,自动避雷废标项
135
查看详情
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"} 56. 配置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++对象生命周期与指针优化
腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程


2025-11-08
浏览次数:次
返回列表