首页 > 其他分享 >Prometheus如何收集gin框架的指标

Prometheus如何收集gin框架的指标

时间:2024-08-15 15:16:23浏览次数:13  
标签:收集 Request prometheus Prometheus func duration gin

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
    "net/http"
    "time"
)

var (
    WebRequestTotal = prometheus.NewCounterVec(prometheus.CounterOpts{
        Name: "web_reqeust_total",
        Help: "Number of hello requests in total",
    }, []string{"method", "path"})
    WebRequestDurationHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
        Name:    "http_request_duration_seconds",
        Help:    "Histogram of the duration of HTTP requests",
        Buckets: prometheus.DefBuckets,
    }, []string{"method", "path"})
)

func init() {
    // 注册计数器到 Prometheus
    prometheus.MustRegister(WebRequestTotal)
    // 注册直方图到 Prometheus
    prometheus.MustRegister(WebRequestDurationHistogram)
}
func main() {
    r := gin.Default() //创建gin

    r.Use(func(c *gin.Context) {
        start := time.Now()
        //处理请求
        c.Next()
        duration := time.Since(start).Seconds()
        //记录请求次数
        WebRequestTotal.WithLabelValues(c.Request.Method, c.Request.URL.Path).Inc()
           //记录http方法和路径对应的耗时
        WebRequestDurationHistogram.WithLabelValues(c.Request.Method, c.Request.URL.Path).Observe(duration)
    })
    r.GET("/", index) //绑定路由
    r.GET("/metrics", gin.WrapH(promhttp.Handler()))
    r.Run(":8001") //运行绑定端口
}

func index(c *gin.Context) {
    fmt.Println("1111")
    c.JSON(200, gin.H{
        "message": "how are you?怎么是你?",
    })
}

标签:收集,Request,prometheus,Prometheus,func,duration,gin
From: https://www.cnblogs.com/qcy-blog/p/18360985

相关文章

  • 河南萌新联赛2024第(五)场:信息工程大学——小美想收集
    https://ac.nowcoder.com/acm/contest/88527/C#include<bits/stdc++.h>#definexfirst#defineysecondusingnamespacestd;typedefpair<int,int>pii;typedeflonglongll;constintN=2e5+10,M=30;intn,m;intp[N];structnode{inta,b,c;......
  • golang gin框架中创建自定义中间件的2种方式总结 - func(*gin.Context)方式和闭包函数
    在gin框架中,我们可以通过2种方式创建自定义中间件:1.直接定义一个类型为 func(*gin.Context)的函数或者方法    这种方式是我们常用的方式,也就是定义一个参数为*gin.Context的函数或者方法。定义的方法就是创建一个参数类型为gin.HandlerFunc【他的原型定义为t......
  • PHP转Go系列 | ThinkPHP与Gin框架之打造基于WebSocket技术的消息推送中心
    大家好,我是码农先森。在早些年前客户端想要实时获取到最新消息,都是使用定时长轮询的方式,不断的从服务器上获取数据,这种粗暴的骚操作实属不雅。不过现如今我也还见有人还在一些场景下使用,比如在PC端扫描二维码,然后使用长轮询的方式从服务端获取最新的扫码信息,来判断用户是否已经......
  • nginx的功能?部署前端代码的步骤?负载均衡的功能,说一下。
    nginx的功能?部署前端代码的步骤?负载均衡的功能,说一下。使用Nginx部署前端项目的详细步骤作者:rousong2024.01.2920:50浏览量:423使用Nginx部署前端项目的详细步骤(baidu.com)简介:本文将介绍使用Nginx部署前端项目的详细步骤,包括下载和安装Nginx、配置Nginx、部署前端项目等。......
  • 云计算课程设计(Prometheus+grafana+Flume+ganglia+mysql+jdk)
    一、准备环境prometheus下载地址:https://github.com/prometheus/prometheus/releases/download/v2.52.0-rc.1/prometheus-2.52.0-rc.1.windows-amd64.zipgrafana下载地址:https://dl.grafana.com/enterprise/release/grafana-enterprise-10.4.2.windows-amd64.zip......
  • 构建企业级监控大屏 prometheus + grafana
    1prometheus下载安装1.1虚机部署https://prometheus.io/download/wgethttps://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gztar-xvfprometheus-2.53.0.linux-amd64.tar.gzcd/home/prometheus-2.53.0.linux-am......
  • docker-compose部署tdengine 3.3.0.0集群
    说明:官方文档提供dockerswarm部署多台服务器集群方式,不适用于公司目前部署方式,故研究多台服务器docker部署集群目前只是部署,还未生产使用,仅供参考一、环境:服务器3台,系统为Ubuntu20.04.4LTSemscluster0110.1.1.103emscluster0210.1.1.104emscluster0310.1.1.105......
  • Nginx Proxy Manager反向代理工具
    简介NginxProxyManager(以下简称NPM)就是一个Nginx的代理管理器,它最大的特点是简单方便。即使是没有Nginx基础的小伙伴,也能轻松地用它来完成反向代理的操作,不需要自己写复杂的nginx配置,而且因为自带面板,操作极其简单。NginxProxyManager后台还可以一键申请SSL证书,并......
  • Filebeat多目录收集日志
    参考:https://www.jianshu.com/p/d889aae7c72efilebeat日志通过redis传递至logstash在输出至elasticsearch参考https://www.cnblogs.com/minseo/p/9185423.html场景需求说明在同一台主机有多个日志需要区分不同index输出至elasticsearchfilebeat配置#cat/etc/filebeat/f......
  • 【Nginx】nginx案例-配置文件
      案例一、【web服务应用】七层反向代理,负载均衡,动静分离 vim/usr/local/nginx/conf/nginx.conf......http{......#gzipon;#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大upstreamtomcat_server{server1......