如何使用gin作为服务器编写prometheus导出器指标

2024-01-17

这是官方的prometheus golang-client示例:

package main

import (
    "log"
    "net/http"

    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

var cpuTemp = prometheus.NewGauge(prometheus.GaugeOpts{
        Name: "cpu_temperature_celsius",
        Help: "Current temperature of the CPU.",
    })


func init() {
    // Metrics have to be registered to be exposed:
    prometheus.MustRegister(cpuTemp)
}

func main() {
    cpuTemp.Set(65.3)

    // The Handler function provides a default handler to expose metrics
    // via an HTTP server. "/metrics" is the usual endpoint for that.
    http.Handle("/metrics", promhttp.Handler())
    log.Fatal(http.ListenAndServe(":8080", nil))
}

在此代码中,http 服务器使用promhttp图书馆。

使用时如何修改指标处理程序gin框架?我在问题中没有找到答案文档 https://pkg.go.dev/github.com/prometheus/client_golang/prometheus.


我们只要利用promhttp处理程序。

package main

import (
    "github.com/gin-gonic/gin"
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

var cpuTemp = prometheus.NewGauge(prometheus.GaugeOpts{
    Name: "cpu_temperature_celsius",
    Help: "Current temperature of the CPU.",
})

func init() {
    prometheus.MustRegister(cpuTemp)
}

func prometheusHandler() gin.HandlerFunc {
    h := promhttp.Handler()

    return func(c *gin.Context) {
        h.ServeHTTP(c.Writer, c.Request)
    }
}

func main() {
    cpuTemp.Set(65.3)

    r := gin.New()

    r.GET("/", func(c *gin.Context) {
        c.JSON(200, "Hello world!")
    })

    r.GET("/metrics", prometheusHandler())

    r.Run()
}

或者我们总是可以切换到 Prometheus 中间件 -https://github.com/zsais/go-gin-prometheus https://github.com/zsais/go-gin-prometheus

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用gin作为服务器编写prometheus导出器指标 的相关文章

  • Go 中的切片分块

    我有一个切片 其中包含约 210 万条日志字符串 我想创建一个切片切片 其中字符串尽可能均匀分布 这是我到目前为止所拥有的 logs is a slice with 2 1 million strings in it var divided
  • Golang 网络爬虫 NTLM 身份验证

    Golang 网络抓取工具需要从经过 NTLM 验证的网页中提取信息 有了有效的用户名和密码 网络抓取工具如何与服务器进行 NTLM 4 次握手 以获得对后面受保护网页的访问权限 url username password http www
  • 使用 google.protobuf.Timestamp 在 Go 中解析带有时区偏移的日期时间戳

    我正在创建一个将使用 GRPC 和 protobuf 的 Go 应用程序 我的 RPC 服务应获取包含类型的消息google protobuf Timestamp 解析它并最终将其保存在数据库中或对其执行更多操作 我对什么被认为是该类型的有
  • 初始化嵌套匿名结构

    我有一个 json 作为 fields time id status customerId additionalDetail pageInfo start 0 rows 1000 我想将我的结构编组到上面的 json 并创建如下结构 typ
  • 构建链代码时 ltdl.h 未找到错误

    我正在尝试使用构建链码go build 当我运行 Go build 命令时它的报告 hyperledger fabric vendor github com miekg pkcs11 pkcs11 g o 29 18 fatal error
  • 在 Go 中跟踪 HTTP 请求时指定超时

    我知道通过执行以下操作来指定 HTTP 请求超时的常用方法 httpClient http Client Timeout time Duration 5 time Second 但是 我似乎不知道在跟踪 HTTP 请求时如何执行相同的操作
  • PromQL:查询警报是否被静音

    我已成功消除了当前已关闭节点的警报 并且在我们有时间物理替换它之前会持续一段时间 虽然我认为沉默会阻止警报在 Slack 通道中重新出现 但我也想在我们在 Prometheus 之上运行的 Grafana 仪表板上删除它 这是对 grafa
  • Go io.Pipe 的缓冲版本

    有缓冲版本吗io Pipe https golang org pkg io Pipe 在标准库或第三方库中 在我推出自己的库之前 上下文 我正在尝试使用这个解决方案 https stackoverflow com a 36229262 15
  • 如何解析 Content-Disposition 标头以检索文件名属性?

    使用 go 如何解析从 http HEAD 请求检索到的 Content Disposition 标头以获取文件的文件名 此外 如何从 http HEAD 响应中检索标头本身 这样的事情正确吗 resp err http Head http
  • GoQt 致命错误:QAbstractAnimation:没有这样的文件或目录

    我尝试编译 Qt 来开发桌面应用程序 我按照 Qt 网站上的官方 wiki 指南的说明进行操作 当我尝试go run示例文件夹中的示例 我收到错误 去运行 home pinkya rabbit workspace go1programs s
  • 如何在 Go 中解组具有多个项目的简单 xml?

    我想从以下 xml 中获取人物 People 的一部分
  • 鸭子在 Go 中打字

    我想写一个Join函数接受任意对象String 方法 package main import fmt strings type myint int func i myint String string return fmt Sprintf
  • 匿名结构和空结构

    http play golang org p vhaKi5uVmm http play golang org p vhaKi5uVmm package main import fmt var battle make chan string
  • Golang 正则表达式命名组和子匹配

    我正在尝试匹配正则表达式并获取匹配的捕获组名称 当正则表达式仅与字符串匹配一次时 这是有效的 但如果它与字符串匹配多次 SubexpNames不返回重复的名称 这是一个例子 package main import fmt regexp fu
  • 模板中的 bson.ObjectId

    我有一个具有 bson ObjectId 类型的结构 例如如下所示 type Test struct Id bson ObjectId Name string Foo string 我想在 html 模板中呈现它 Name Food a h
  • 打印到 stdout 会导致阻塞的 goroutine 运行吗?

    作为一个愚蠢的基本线程练习 我一直在尝试实现理发师睡觉的问题 http en wikipedia org wiki Sleeping barber problem在戈兰 对于通道来说 这应该很容易 但我遇到了一个 heisenbug 也就是
  • 为什么我不能将左大括号放在下一行?

    当我尝试编译以下代码时遇到奇怪的错误 package main import fmt fmt func main var arr 3 int for i 0 i lt 3 i fmt Printf d arr i 错误如下 unexpect
  • 为什么 json.Unmarshal 返回映射而不是预期的结构?

    看看这个游乐场 http play golang org p dWku6SPqj5 http play golang org p dWku6SPqj5 基本上 我正在工作的图书馆收到了interface 作为参数 然后需要json Unma
  • os.Mkdir 和 os.MkdirAll 权限

    我正在尝试在程序开始时创建一个日志文件 我需要检查是否 log如果不创建目录 则目录存在 然后继续创建日志文件 好吧 我尝试使用os Mkdir 也os MkdirAll 但无论我在第二个参数中输入什么值 我都会得到一个没有权限的锁定文件夹
  • select 语句是否保证通道选择的顺序?

    继从这个答案 https stackoverflow com a 25795236 274460 如果一个 goroutine 在两个通道上进行选择 是否保证通道的选择顺序与其发送的顺序相同 我对发送者是单线程的情况特别感兴趣 例如 是否保

随机推荐

  • Rapidjson C++ 释放对象内的数组

    我正在使用rapidjson C 库 https github com miloyip rapidjson 使用此库您可以创建 JSON 对象 目前我有一些记忆问题 情况 在我当前的设置中 我创建了一个新对象 并向其添加了值成员和数组成员
  • 将引导日期时间选择器与 Vuejs 2 结合使用

    我想将日期时间选择器与 vue 2 或 webpack 集成 我尝试搜索但找不到相关文章 有没有人将日期时间选择器与Vue2或webpack集成 有任何示例代码可供参考吗 任何帮助将不胜感激 Thanks 只需谷歌搜索 您肯定可以找到有关该
  • 如何在 Linux 2.6.35 上从用户模式清除和无效 ARM v7 处理器缓存

    我尝试清除指令行的 ARM v7 处理器缓存并使之无效 因为指令代码在执行中可能会发生变化 为了达到效果 我尝试了两种变体 他们来了 我用过海湾合作委员会 清除缓存 函数 但没有给出所需的结果 缓存中的指令代码没有改变 我寻找了 GCC 的
  • CountDownLatch 是否受到虚假唤醒的影响?

    诸如等待 通知和锁定 条件之类的并发管理机制似乎受到以下因素的影响虚假唤醒 https en wikipedia org wiki Spurious wakeup 开发人员通过重新检查情况是否确实发生变化来应对这些意外的唤醒 当谈到 Cou
  • 如何使用 Sql Profiler 捕获 SqlBulkCopy 中传递的数据?

    我一直在使用 Sql Profiler 来捕获 SQL 语句并重新运行有问题的语句 很有用 但是 有些代码使用 SqlBulkCopy API 我不知道如何捕获这些代码 我看到临时表的创建 但没有填充它们 似乎 SqlBulkCopy 绕过
  • Activity 的实例什么时候会消亡?

    这是一个示例代码 让我有点想念 package com leak import android app Activity import android app ProgressDialog import android os AsyncTa
  • 随机选择设置位的有效方法

    我当前的爱好项目为纸牌游戏提供蒙特卡罗模拟French牌组 52 张牌 从 2 到 A 为了尽可能快地进行模拟 我在某些地方将多张卡表示为位掩码 这是一些 简化的 代码 public struct Card public enum Card
  • 将特征矩阵转换为 C++ 形式的三元组

    我认为 Eigen 使用压缩方法来存储稀疏矩阵 有什么方法可以从 std vectors 中提取特征稀疏矩阵的三重格式向量 Thanks 更多信息 三元组格式的示例 矩阵的三元组格式 A 3 0 4 0 0 0 1 0 0 2 0 5 4
  • Selenium - 跨域和 HTTPS 问题

    我使用 Selenium 来测试我的网站 该网站需要访问外部目录才能从中选择一些项目 问题是该目录是通过 HTTPS 协议发布在另一个域上的 我在互联网上搜索并阅读了许多有关 Selenium 和跨域问题的主题 但我仍然没有找到答案 有些主
  • 在 python seaborn 图中创建多列图例

    我在用seaborn distplot python3 并希望每个系列有 2 个标签 我尝试了一种黑客字符串格式方法 如下所示 bigkey and bigcount are longest string lengths of my key
  • 使用单个标识符 REST 方式嵌套资源路由

    在我的 Rails 应用程序中 两个实体之间有一个相当标准的 has many 关系 AFoo有零个或多个Bars a Bar恰好属于一个Foo Foo 和 Bar 均由单个整数 ID 值标识 这些值在其各自的所有实例中都是唯一的 Bar
  • iOS 保持状态栏为纵向

    我有一个使用接近传感器的应用程序 但接近传感器在横向模式下不起作用 我听说如果你将状态栏保持在纵向模式 传感器就会工作 我已经尝试过 但没有成功 UIApplication sharedApplication setStatusBarOri
  • SSRS 在组内交替行颜色

    我在获取替代行颜色时遇到一些问题 我尝试了不同的表达方式 这是我已经完成的最接近的表达方式 IIF RunningValue Fields agent name Value CountDistinct Nothing MOD 2 1 Gai
  • CHM 格式替代品?

    Microsoft CHM 格式非常有用 因为它提供了以下功能 带有树视图的目录 指数 索引搜索 基于 HTML 源 但这种格式已经过时并且有很多缺点 存在安全问题 允许执行 JavaScript 代码 不知道新的 HTML 格式 没有记录
  • 反应过渡组出现过渡无法正常工作

    我在用着反应过渡基团 http reactcommunity org react transition group transition渲染组件时处理动画 CSSTransition 我想要一个组件的简单淡入 转出似乎工作正常 但转入则不然
  • Tkinter 单选按钮指示器无法识别

    我希望我的单选按钮通过设置 Indicatoron 0 来使用本页提到的按钮框界面 http effbot org tkinterbook radiobutton htm http effbot org tkinterbook radiob
  • 使用多线程时如何使用Delphi设计时FireDac TFDQuery?

    我想设计我的TFDQuery使用组件编辑器 即在设计时设置 SQL 字符串 选项等 然后在线程中使用查询 我的问题是 线程的每个运行实例都需要自己的查询实例 否则它将不是线程安全的 我是否应该在线程开始运行时克隆查询 即在线程的 Execu
  • 检查 Windows 更新是否可用

    是否可以通过编程方式检查 Windows 是否有可用的新更新 欢迎任何建议 谢谢 The Windows更新代理 http msdn microsoft com en us library aa387287 28VS 85 29 aspxA
  • 如何将当前文档的innerHTML下载为文件?

    有没有办法可以下载当前文档innerHTML作为文件以编程方式 我做了以下尝试但没有成功 它确实下载了当前文档的源代码 但这不是我想要的 因为我想保留任何加载后的文档修改 var save document createElement a
  • 如何使用gin作为服务器编写prometheus导出器指标

    这是官方的prometheus golang client示例 package main import log net http github com prometheus client golang prometheus github c