我是靠谱客的博主 爱听歌酒窝,最近开发中收集的这篇文章主要介绍go+ prometheus+ Grafana引言golangprometheusGrafana,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

引言

我们知道针对go服务,线上内存泄漏问题,大多数都是goroutines泄漏导致,一方面可以利用goleak在开发阶段单测预防,线上可以用pprof定位,那么中间一个环节线上监控就得靠prometheus

golang

package main

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

func main() {
   r := gin.Default()

   r.GET("metrics", PromHandler(promhttp.Handler()))//prometheus采集路由
   r.GET("my_counter", MyCounter)    //自定义统计
   r.GET("goroutines", MyGoroutines) //协程泄漏
   r.Run(":8001")                           //8001端口
}

func PromHandler(handler http.Handler) gin.HandlerFunc {
   return func(c *gin.Context) {
      handler.ServeHTTP(c.Writer, c.Request)
   }
}

var (
   MetricHttpRequestTotal = prometheus.NewCounterVec(
      prometheus.CounterOpts{
         Namespace: "promdemo",
         Subsystem: "demo",
         Name:      "http_request_total",
         Help:      "http request total",
      },
      []string{"from"},
   )

   counter = prometheus.NewCounter(
      prometheus.CounterOpts{
         Namespace: "golang",
         Name:      "my_counter",
         Help:      "This is my counter",
      })
)
var Cnt int

func MyCounter(ginCtx *gin.Context) {
   Cnt += 5
   counter.Add(float64(Cnt))
   ginCtx.JSON(http.StatusOK, map[string]interface{}{
      "counter": Cnt,
   })
}
func MyGoroutines(ginCtx *gin.Context) {
   
   ch1 := make(chan int)
   go func() {
      ch1 <- 1
   }()
   ginCtx.JSON(http.StatusOK, struct {
   }{})
}
func init() {
   prometheus.MustRegister(MetricHttpRequestTotal)
   prometheus.MustRegister(counter) //自定义指标
}

使用的是gin框架,go服务暴露web端口8001(后续prometheus会用到这个)

访问http://127.0.0.1:8001/metrics

image.png

prometheus

二进制的安装包:https://github.com/prometheus/prometheus/releases
mac:brew install prometheus
docker:https://hub.docker.com/r/bitnami/prometheus

我这边是通过二进制的安装包安装2.37.0版本

开始使用

  1. 进入安装目录

image.png

  1. 编辑prometheus.yml文件,在targets这一行修改(8001就是web服务)

这里的实现原理就是prometheus-server按照采集频率,访问go服务的http://127.0.0.1:8001/metrics 采集数据指标

- targets: ["127.0.0.1:8001"]

此外可以采集多个系统,如node_exporter

image.png

具体配置可见:
prometheus.yml详解

  1. 启动:./prometheus --config.file="prometheus.yml"

可以在输出里看见prometheus的端口是address=0.0.0.0:9090

image.png

Grafana

二进制的安装包:https://github.com/grafana/grafana/releases
mac:brew install grafana
docker:https://hub.docker.com/r/grafana/grafana

我这边是通过brew安装

开始使用

启动:brew services start grafana web端口为http://localhost:3000/
初始密码为admin/admin

  1. 设置data sources

configuration->Data sources->add data source->选择prometheus>url填写http://127.0.0.1:9090/

image.png

image.png

  1. 添加panel(图表)

Create->Dashboard->Add an empty panel->Data source选刚刚建的->点击metrics browser->选择自己想要监控的指标

最后

以上就是爱听歌酒窝为你收集整理的go+ prometheus+ Grafana引言golangprometheusGrafana的全部内容,希望文章能够帮你解决go+ prometheus+ Grafana引言golangprometheusGrafana所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部