国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Golang - 詳解prometheus監控golang服務實踐記錄

詳解prometheus監控golang服務實踐記錄

2021-02-03 01:05Harvard_Fly Golang

這篇文章主要介紹了詳解prometheus監控golang服務實踐記錄,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

 

一、prometheus基本原理介紹

 

prometheus是基于metric采樣的監控,可以自定義監控指標,如:服務每秒請求數、請求失敗數、請求執行時間等,每經過一個時間間隔,數據都會從運行的服務中流出,存儲到一個時間序列數據庫中,之后可通過PromQL語法查詢。

主要特點:

多維數據模型,時間序列數據通過metric名以key、value的形式標識;

使用PromQL語法靈活地查詢數據;

不需要依賴分布式存儲,各服務器節點是獨立自治的;

時間序列的收集,通過 HTTP 調用,基于pull 模型進行拉取;

通過push gateway推送時間序列;

通過服務發現或者靜態配置,來發現目標服務對象;

多種繪圖和儀表盤的可視化支持;

 

二、prometheus使用docker部署

 

查看是否有鏡像

?
1
sudo docker search prometheus

新建prometheus.yaml

?
1
2
3
4
5
6
7
8
9
10
11
12
global:
scrape_interval: 10s
evaluation_interval: 60s
 
 
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
- job_name: integral
static_configs:
- targets: ['10.20.xx.xx:8001']

執行:

?
1
docker run --name prometheus -p 9090:9090 -v ~/prometheus.yaml:/etc/prometheus/prometheus.yml prom/prometheus

進入容器中可以看到配置文件已映射到容器指定目錄:

詳解prometheus監控golang服務實踐記錄

踩坑: prometheus官方鏡像指定的配置文件是prometheus.yml 所以映射到容器內的文件名一定要保持一致 否則會出現指定的配置文件不生效

 

三、prometheus整體架構及各組件

 

詳解prometheus監控golang服務實踐記錄

Prometheus Server :主程序,負責抓取和存儲時序數據;

Client Libraries:客戶端庫,負責檢測應用程序代碼;

Push Gateway:Push 網關,接收短生命周期的 Job 主動推送的時序數據;

Exporters:為不同服務定制的Exporter(如:HAProxy、StatsD、Graphite等) ,從而抓取它們的Metris指標數據;

Alert Manage:告警管理器,處理不同的告警;

 

四、prometheus客戶端調用示例

 

自定義prometheus的gin中間件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package ginprometheus
 
import (
  "strconv"
  "sync"
  "time"
 
  "github.com/gin-gonic/gin"
  "github.com/prometheus/client_golang/prometheus"
)
 
const (
  metricsPath = "/metrics"
  faviconPath = "/favicon.ico"
)
 
var (
  // httpHistogram prometheus 模型
  httpHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
    Namespace:  "http_server",
    Subsystem:  "",
    Name:    "requests_seconds",
    Help:    "Histogram of response latency (seconds) of http handlers.",
    ConstLabels: nil,
    Buckets:   nil,
  }, []string{"method", "code", "uri"})
)
 
// init 初始化prometheus模型
func init() {
  prometheus.MustRegister(httpHistogram)
}
 
// handlerPath 定義采樣路由struct
type handlerPath struct {
  sync.Map
}
 
// get 獲取path
func (hp *handlerPath) get(handler string) string {
  v, ok := hp.Load(handler)
  if !ok {
    return ""
  }
  return v.(string)
}
 
// set 保存path到sync.Map
func (hp *handlerPath) set(ri gin.RouteInfo) {
  hp.Store(ri.Handler, ri.Path)
}
 
// GinPrometheus gin調用Prometheus的struct
type GinPrometheus struct {
  engine *gin.Engine
  ignored map[string]bool
  pathMap *handlerPath
  updated bool
}
 
type Option func(*GinPrometheus)
 
// Ignore 添加忽略的路徑
func Ignore(path ...string) Option {
  return func(gp *GinPrometheus) {
    for _, p := range path {
      gp.ignored[p] = true
    }
  }
}
 
// New new gin prometheus
func New(e *gin.Engine, options ...Option) *GinPrometheus {
  if e == nil {
    return nil
  }
 
  gp := &GinPrometheus{
    engine: e,
    ignored: map[string]bool{
      metricsPath: true,
      faviconPath: true,
    },
    pathMap: &handlerPath{},
  }
 
  for _, o := range options {
    o(gp)
  }
  return gp
}
 
// updatePath 更新path
func (gp *GinPrometheus) updatePath() {
  gp.updated = true
  for _, ri := range gp.engine.Routes() {
    gp.pathMap.set(ri)
  }
}
 
// Middleware set gin middleware
func (gp *GinPrometheus) Middleware() gin.HandlerFunc {
  return func(c *gin.Context) {
    if !gp.updated {
      gp.updatePath()
    }
    // 過濾請求
    if gp.ignored[c.Request.URL.String()] {
      c.Next()
      return
    }
 
    start := time.Now()
    c.Next()
 
    httpHistogram.WithLabelValues(
      c.Request.Method,
      strconv.Itoa(c.Writer.Status()),
      gp.pathMap.get(c.HandlerName()),
    ).Observe(time.Since(start).Seconds())
  }
}

gin路由初始化prometheus,使用中間件采樣

?
1
2
3
4
gp := ginprometheus.New(r)
r.Use(gp.Middleware())
// metrics采樣
r.GET("/metrics", gin.WrapH(promhttp.Handler()))

詳解prometheus監控golang服務實踐記錄

查看target

詳解prometheus監控golang服務實踐記錄

選取指標對應的graph,這里以gc采樣的時間為例:

詳解prometheus監控golang服務實踐記錄

如果需要展示更為豐富的可視化看板,可以將prometheus與grafana結合,將prometheus數據接入到grafana中,此處不再過多闡述

到此這篇關于詳解prometheus監控golang服務實踐記錄的文章就介紹到這了,更多相關prometheus監控golang服務內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/FG123/p/13689649.html

延伸 · 閱讀

精彩推薦
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

    這篇文章主要介紹了Golang中Bit數組的實現方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    天易獨尊11682021-06-09
  • GolangGolang通脈之數據類型詳情

    Golang通脈之數據類型詳情

    這篇文章主要介紹了Golang通脈之數據類型,在編程語言中標識符就是定義的具有某種意義的詞,比如變量名、常量名、函數名等等,Go語言中標識符允許由...

    4272021-11-24
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

    這篇文章主要給大家介紹了關于golang的httpserver優雅重啟的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    helight2992020-05-14
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
  • Golanggo日志系統logrus顯示文件和行號的操作

    go日志系統logrus顯示文件和行號的操作

    這篇文章主要介紹了go日志系統logrus顯示文件和行號的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • Golanggolang json.Marshal 特殊html字符被轉義的解決方法

    golang json.Marshal 特殊html字符被轉義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉義的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • Golanggolang如何使用struct的tag屬性的詳細介紹

    golang如何使用struct的tag屬性的詳細介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細介紹,從例子說起,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看...

    Go語言中文網11352020-05-21
主站蜘蛛池模板: 精品日韩一区 | 久久久精品精品 | 先锋av在线资源 | 日韩电影在线一区 | 久久久天堂 | 国产视频一区在线 | 一区二区三区视频在线观看 | 国产精品网站在线看 | 九九九九国产 | 亚洲精品久久久久久久久久久久久 | 日本精品久久久 | 野花国产精品入口 | 国产特级毛片aaaaaa高清 | 免费视频久久久 | 亚洲一区 中文字幕 | 欧美日韩成人一区二区 | 国产精品不卡一区二区三区 | 色中色av | 成人高清网站 | 国产精品久久久久久av下载网址 | 久草视频网站 | 国产 日韩 欧美 中文 在线播放 | 亚洲理论电影在线观看 | 日韩成人在线电影 | 2019中文字幕视频 | www国产亚洲精品久久网站 | 亚洲三级电影 | 色狠狠综合天天综合综合 | 国产在线精品一区二区 | 免费网站在线观看黄 | 91久久久久久久久久久久久久久久 | 亚洲视频在线观看 | 成人免费网站 | 91亚洲日本 | 亚洲国产高清美女在线观看 | 成人午夜精品一区二区三区 | 国产精品久久久久久久久久三级 | 国产成人免费视频网站高清观看视频 | 亚洲精品视频在线看 | 欧美视频在线免费 | 国产精品资源在线 |