最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Prometheus開發(fā)中間件Exporter過程詳解

 更新時間:2020年11月30日 09:19:05   作者:-零  
這篇文章主要介紹了Prometheus開發(fā)中間件Exporter過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

Prometheus 為開發(fā)這提供了客戶端工具,用于為自己的中間件開發(fā)Exporter,對接Prometheus 。

目前支持的客戶端

以go為例開發(fā)自己的Exporter

依賴包的引入

工程結(jié)構(gòu)

[root@node1 data]# tree exporter/
exporter/
├── collector
│ └── node.go
├── go.mod
└── main.go

引入依賴包

require (
  github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
  github.com/modern-go/reflect2 v1.0.1 // indirect
  github.com/prometheus/client_golang v1.1.0
    //借助gopsutil 采集主機指標
  github.com/shirou/gopsutil v0.0.0-20190731134726-d80c43f9c984
)

main.go

package main

import (
  "cloud.io/exporter/collector"
  "fmt"
  "github.com/prometheus/client_golang/prometheus"
  "github.com/prometheus/client_golang/prometheus/promhttp"
  "net/http"
)

func init() {
   //注冊自身采集器
  prometheus.MustRegister(collector.NewNodeCollector())
}
func main() {
  http.Handle("/metrics", promhttp.Handler())
  if err := http.ListenAndServe(":8080", nil); err != nil {
    fmt.Printf("Error occur when start server %v", err)
  }
}

為了能看清結(jié)果我將默認采集器注釋,位置registry.go

func init() {
  //MustRegister(NewProcessCollector(ProcessCollectorOpts{}))
  //MustRegister(NewGoCollector())
}

/collector/node.go

代碼中涵蓋了Counter、Gauge、Histogram、Summary四種情況,一起混合使用的情況,具體的說明見一下代碼中。

package collector

import (
  "github.com/prometheus/client_golang/prometheus"
  "github.com/shirou/gopsutil/host"
  "github.com/shirou/gopsutil/mem"
  "runtime"
  "sync"
)

var reqCount int32
var hostname string
type NodeCollector struct {
  requestDesc  *prometheus.Desc  //Counter
  nodeMetrics   nodeStatsMetrics //混合方式 
  goroutinesDesc *prometheus.Desc  //Gauge
  threadsDesc  *prometheus.Desc //Gauge
  summaryDesc  *prometheus.Desc //summary
  histogramDesc *prometheus.Desc  //histogram
  mutex     sync.Mutex
}
//混合方式數(shù)據(jù)結(jié)構(gòu)
type nodeStatsMetrics []struct {
  desc  *prometheus.Desc
  eval  func(*mem.VirtualMemoryStat) float64
  valType prometheus.ValueType
}

//初始化采集器
func NewNodeCollector() prometheus.Collector {
  host,_:= host.Info()
  hostname = host.Hostname
  return &NodeCollector{
    requestDesc: prometheus.NewDesc(
      "total_request_count",
      "請求數(shù)",
      []string{"DYNAMIC_HOST_NAME"}, //動態(tài)標簽名稱
      prometheus.Labels{"STATIC_LABEL1":"靜態(tài)值可以放在這里","HOST_NAME":hostname}),
    nodeMetrics: nodeStatsMetrics{
      {
        desc: prometheus.NewDesc(
          "total_mem",
          "內(nèi)存總量",
          nil, nil),
        valType: prometheus.GaugeValue,
        eval: func(ms *mem.VirtualMemoryStat) float64 { return float64(ms.Total) / 1e9 },
      },
      {
        desc: prometheus.NewDesc(
          "free_mem",
          "內(nèi)存空閑",
          nil, nil),
        valType: prometheus.GaugeValue,
        eval: func(ms *mem.VirtualMemoryStat) float64 { return float64(ms.Free) / 1e9 },
      },

    },
    goroutinesDesc:prometheus.NewDesc(
      "goroutines_num",
      "協(xié)程數(shù).",
      nil, nil),
    threadsDesc: prometheus.NewDesc(
      "threads_num",
      "線程數(shù)",
      nil, nil),
    summaryDesc: prometheus.NewDesc(
      "summary_http_request_duration_seconds",
      "summary類型",
      []string{"code", "method"},
      prometheus.Labels{"owner": "example"},
    ),
    histogramDesc: prometheus.NewDesc(
      "histogram_http_request_duration_seconds",
      "histogram類型",
      []string{"code", "method"},
      prometheus.Labels{"owner": "example"},
    ),
  }
}

// Describe returns all descriptions of the collector.
//實現(xiàn)采集器Describe接口
func (n *NodeCollector) Describe(ch chan<- *prometheus.Desc) {
  ch <- n.requestDesc
  for _, metric := range n.nodeMetrics {
    ch <- metric.desc
  }
  ch <- n.goroutinesDesc
  ch <- n.threadsDesc
  ch <- n.summaryDesc
  ch <- n.histogramDesc
}
// Collect returns the current state of all metrics of the collector.
//實現(xiàn)采集器Collect接口,真正采集動作
func (n *NodeCollector) Collect(ch chan<- prometheus.Metric) {
  n.mutex.Lock()
  ch <- prometheus.MustNewConstMetric(n.requestDesc,prometheus.CounterValue,0,hostname)
  vm, _ := mem.VirtualMemory()
  for _, metric := range n.nodeMetrics {
    ch <- prometheus.MustNewConstMetric(metric.desc, metric.valType, metric.eval(vm))
  }

  ch <- prometheus.MustNewConstMetric(n.goroutinesDesc, prometheus.GaugeValue, float64(runtime.NumGoroutine()))

  num, _ := runtime.ThreadCreateProfile(nil)
  ch <- prometheus.MustNewConstMetric(n.threadsDesc, prometheus.GaugeValue, float64(num))

  //模擬數(shù)據(jù)
  ch <- prometheus.MustNewConstSummary(
    n.summaryDesc,
    4711, 403.34,
    map[float64]float64{0.5: 42.3, 0.9: 323.3},
    "200", "get",
  )

  //模擬數(shù)據(jù)
  ch <- prometheus.MustNewConstHistogram(
      n.histogramDesc,
      4711, 403.34,
      map[float64]uint64{25: 121, 50: 2403, 100: 3221, 200: 4233},
      "200", "get",
    )
  n.mutex.Unlock()
}

執(zhí)行的結(jié)果http://127.0.0.1:8080/metrics

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Python字符串對象的實現(xiàn)

    詳解Python字符串對象的實現(xiàn)

    本文介紹了 python 內(nèi)部是如何管理字符串對象,以及字符串查找操作是如何實現(xiàn)的,感興趣的小伙伴們可以參考一下
    2015-12-12
  • Anaconda下Python中h5py與netCDF4模塊下載與安裝的教程詳解

    Anaconda下Python中h5py與netCDF4模塊下載與安裝的教程詳解

    這篇文章主要為大家詳細介紹了基于Anaconda,下載并安裝Python中h5py與netCDF4這兩個模塊的方法,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01
  • Python爬取三國演義的實現(xiàn)方法

    Python爬取三國演義的實現(xiàn)方法

    這篇文章通過實例給大家演示了利用python如何爬取三國演義,對于學習python的朋友們來說是個不錯的實例,有需要的朋友可以參考借鑒,下面來一起看看吧。
    2016-09-09
  • 解決python線程卡死的問題

    解決python線程卡死的問題

    今天小編就為大家分享一篇解決python線程卡死的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python中kivy庫的使用教程詳解

    Python中kivy庫的使用教程詳解

    Kivy是一個開源Python框架,用于構(gòu)建具有創(chuàng)意和多點觸控功能的用戶界面(UI)應(yīng)用程序,本文主要為大家介紹了一下Kivy的具體使用,需要的可以參考下
    2024-01-01
  • Python簡單實現(xiàn)socket信息發(fā)送與監(jiān)聽功能示例

    Python簡單實現(xiàn)socket信息發(fā)送與監(jiān)聽功能示例

    這篇文章主要介紹了Python簡單實現(xiàn)socket信息發(fā)送與監(jiān)聽功能,結(jié)合實例形式分析了Python基于socket構(gòu)建客戶端與服務(wù)器端通信相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • 使用django的ORM框架按月統(tǒng)計近一年內(nèi)的數(shù)據(jù)方法

    使用django的ORM框架按月統(tǒng)計近一年內(nèi)的數(shù)據(jù)方法

    今天小編就為大家分享一篇使用django的ORM框架按月統(tǒng)計近一年內(nèi)的數(shù)據(jù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python 正則表達式爬蟲使用案例解析

    Python 正則表達式爬蟲使用案例解析

    這篇文章主要介紹了Python 正則表達式爬蟲使用案例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • pandas取dataframe特定行列的實現(xiàn)方法

    pandas取dataframe特定行列的實現(xiàn)方法

    大家在使用Python進行數(shù)據(jù)分析時,經(jīng)常要使用到的一個數(shù)據(jù)結(jié)構(gòu)就是pandas的DataFrame,本文介紹了pandas取dataframe特定行列的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • pandas中iloc函數(shù)的具體實現(xiàn)

    pandas中iloc函數(shù)的具體實現(xiàn)

    iloc是Pandas中用于基于整數(shù)位置進行索引和切片的方法,本文主要介紹了pandas中iloc函數(shù)的具體實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-06-06

最新評論

滦南县| 安图县| 卢湾区| 淄博市| 黄山市| 收藏| 会理县| 湖口县| 中宁县| 克东县| 屏东县| 将乐县| 大余县| 清镇市| 昭通市| 密山市| 金溪县| 会昌县| 荥经县| 阿荣旗| 青冈县| 东辽县| 健康| 朝阳区| 曲沃县| 吉木乃县| 方城县| 习水县| 中方县| 大英县| 上林县| 桂林市| 敦化市| 阳高县| 壤塘县| 长岛县| 山东| 曲靖市| 双流县| 肇源县| 米泉市|