当前位置: 首页 > news >正文

prometheus暴露指标

自定义指标暴露的端点

package controllerimport ("fmt""net/http""github.com/gin-gonic/gin""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp"
)type PromController struct {metricsNames map[string]*prometheus.Descr            *prometheus.Registry
}var (promHandler http.Handler
)const (net_calico_number= "net_calico_number"
)func NewPromController() *PromController {promController := &PromController{metricsNames: make(map[string]*prometheus.Desc),}promController.r = prometheus.NewRegistry()//初始化指标labels := []string{"Hostname", "instance"}promController.metricsNames[net_calico_number] = prometheus.NewDesc(net_calico_number,"calico linkup status,>25=false,<25=true (not loss card)",labels,nil,)promController.r.MustRegister(promController)promHandler = promhttp.HandlerFor(prometheus.Gatherers{promController.r,},promhttp.HandlerOpts{},)return promController
}func (pc *PromController) ExportMetrics(c *gin.Context) {promHandler.ServeHTTP(c.Writer, c.Request)
}// Describe implements the prometheus.Collector interface.
func (pc *PromController) Describe(ch chan<- *prometheus.Desc) {for _, v := range pc.metricsNames {fmt.Printf("register describe: %v", v.String())ch <- v}
}// Collect implements the prometheus.Collector interface.
func (pc *PromController) Collect(ch chan<- prometheus.Metric) {prometheusDesc, exist := pc.metricsNames[net_calico_number]if exist {//指标的数据value := float64(10.0)ch <- prometheus.MustNewConstMetric(prometheusDesc, prometheus.GaugeValue, value, convertToLabelValue()...)}
}// 需要跟标签定义的顺序一致
func convertToLabelValue() []string {//指标的标签的值return []string{"gpu001", "10.0.11.21"}
}

启动服务暴露指标

import ("prome_test/controller""github.com/gin-gonic/gin"
)func main() {r := gin.Default()// 暴露 Prometheus 指标接口promController := controller.NewPromController()r.GET("/metrics", promController.ExportMetrics)r.Run(":8080")
}
http://www.dtcms.com/a/490233.html

相关文章:

  • RunnableParallel 操纵输入和输出
  • [双指针] 1. 力扣283.移动零
  • 【博客规划】关于我未来的研究方向……
  • python 列表浅拷贝 深拷贝
  • 网站如何做后台留言淘宝客网站一般用什么做的
  • 使用snmpsim与docker批量生成snmpd模拟服务
  • 燕之屋(1497.HK)燕窝肽260万单场售罄,科技重塑传统
  • 【动态规划】数位DP的原理、模板(封装类)
  • 神经网络中的批归一化(BatchNorm)
  • 最新版本组件的docker下载-nacos-Rabbitmq-redis
  • 互素最多:任意五个整数互素的巧妙构造
  • 博客网站大全上海专业网站建设价格
  • Apache换行解析 文件上传漏洞复现:原理详解+环境搭建+渗透实践(CVE-2017-15715 vulhub)
  • 自动伸缩:K8s Cluster Autoscaler,节点池配置技巧?
  • 网站制作的预算网站建设著作权
  • 性能优化之前端与服务端中的 Gzip 压缩全解析
  • 【Day 77】Linux-iptables防火墙
  • GitHub 热榜项目 - 日榜(2025-10-16)
  • 爬虫汇总与实战
  • 哪个网站做网销更好python怎么做网站
  • dede 网站地图 插件添加图标wordpress
  • 对比k8s的service和kube-proxy
  • 理想汽车Java后台开发面试题及参考答案(上)
  • Kotlin 实现社交 App 音视频模块:语音录制、播放、暂停与进度控制全流程封装
  • Lustre/Scade 形式化语义基础 —— 同步Kahn网络 (1996)
  • 内核空间与用户空间解读
  • ELK运维之路(Filebeat第一章-7.17.24)
  • 开源接口管理工具深度横评,swagger vs PostIn哪个更适合你?
  • list的使用和模拟实现
  • 群辉怎么做网站服务器专做投放广告网站