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

使用golang生成prometheus格式數(shù)據(jù)

 更新時(shí)間:2025年02月06日 09:10:39   作者:景天科技苑  
Prometheus是一個(gè)開源的監(jiān)控系統(tǒng),擁有許多Advanced?Feature,本文將介紹Primetheus?client的使用,并基于golang生成prometheus格式數(shù)據(jù),希望對(duì)大家有所幫助

Prometheus是一個(gè)開源的監(jiān)控系統(tǒng),擁有許多Advanced Feature,他會(huì)定期用HTTP協(xié)議來pull所監(jiān)控系統(tǒng)狀態(tài)進(jìn)行數(shù)據(jù)收集,在加上timestamp等數(shù)據(jù)組織成time series data,用metric name和label來標(biāo)識(shí)不同的time series,用戶可以將數(shù)據(jù)用可視化工具顯示出來,并設(shè)置報(bào)警閾值進(jìn)行報(bào)警。

本文將介紹Primetheus client的使用,基于golang語言,golang client 是當(dāng)pro收集所監(jiān)控的系統(tǒng)的數(shù)據(jù)時(shí),用于響應(yīng)pro的請(qǐng)求,按照一定的格式給pro返回?cái)?shù)據(jù),說白了就是一個(gè)http server。

1. 何為exporter

Prometheus 監(jiān)控基于一個(gè)很簡(jiǎn)單的模型: 主動(dòng)抓取目標(biāo)的指標(biāo)接口(HTTP 協(xié)議)獲取監(jiān)控指標(biāo), 再存儲(chǔ)到本地或遠(yuǎn)端的時(shí)序數(shù)據(jù)庫. Prometheus 對(duì)于指標(biāo)接口有一套固定的格式要求, 格式大致如下:

# HELP http_requests_total The total number of HTTP requests.
# TYPE http_requests_total counter
http_requests_total{method="post",code="200"} 1027
http_requests_total{method="post",code="400"} 3

對(duì)于自己寫的代碼, 我們當(dāng)然可以使用 Prometheus 的 SDK 暴露出上述格式的指標(biāo). 但對(duì)于大量現(xiàn)有服務(wù), 系統(tǒng)甚至硬件, 它們并不會(huì)暴露 Prometheus 格式的指標(biāo).

比如說:

  • Linux 的很多指標(biāo)信息以文件形式記錄在 proc 下的各個(gè)目錄中, 如 /proc/meminfo 里記錄內(nèi)存信息, /proc/stat 里記錄 CPU 信息;
  • Redis 的監(jiān)控信息需要通過 INFO 命令獲取;
  • 路由器等硬件的監(jiān)控信息需要通過 `SNMP 協(xié)議獲取;

要監(jiān)控這些目標(biāo), 我們有兩個(gè)辦法, 一是改動(dòng)目標(biāo)系統(tǒng)的代碼, 讓它主動(dòng)暴露 Prometheus 格式的指標(biāo), 當(dāng)然, 對(duì)于上述幾個(gè)場(chǎng)景這種辦法完全是不現(xiàn)實(shí)的.
這時(shí)候就只能采用第二種辦法:

編寫一個(gè)代理服務(wù), 將其它監(jiān)控信息轉(zhuǎn)化為 Prometheus 格式的指標(biāo)——這個(gè)代理服務(wù)就是exporter

2. exporter簡(jiǎn)介

廣義上講所有可以向Prometheus提供監(jiān)控樣本數(shù)據(jù)的程序都可以被稱為一個(gè)Exporter。而Exporter的一個(gè)實(shí)例稱為target。

從Exporter的來源上來講,主要分為兩類:

1.社區(qū)提供的

Prometheus社區(qū)提供了豐富的Exporter實(shí)現(xiàn),涵蓋了從基礎(chǔ)設(shè)施,中間件以及網(wǎng)絡(luò)等各個(gè)方面的監(jiān)控功能。這些Exporter可以實(shí)現(xiàn)大部分通用的監(jiān)控需求。

https://exporterhub.io/

2.用戶自定義的

除了直接使用社區(qū)提供的Exporter程序以外,用戶還可以基于Prometheus提供的Client Library創(chuàng)建自己的Exporter程序,目前Promthues社區(qū)官方提供了對(duì)以下編程語言的支持:Go、Java/Scala、Python、Ruby。同時(shí)還有第三方實(shí)現(xiàn)的如:Bash、C++、Common Lisp、Erlang,、Haskeel、Lua、Node.js、PHP、Rust等。

prometheus四種類型的指標(biāo)Counter 計(jì)數(shù),Gauge 觀測(cè)類,Histogram 直方,Summary 摘要 用golang語言如何構(gòu)造這4種類型對(duì)應(yīng)的指標(biāo),二是搞清楚修改指標(biāo)值的場(chǎng)景和方式。

在prometheus中如果要監(jiān)控服務(wù)器和應(yīng)用的各種指標(biāo),需要用各種各樣的exporter服務(wù),例如node_exportes、mysql_exportes、pgsql_exportes等。這些都是官方或者第三方已經(jīng)提供好的。

但是如果自己想要監(jiān)控一些其它exportes沒有的指標(biāo),則就需要自己去構(gòu)建一個(gè)屬于自己的exportes,好在官方提供相關(guān)的庫,目前支持以下語言:

官方支持語言:

  • Go
  • Java or Scala
  • Python
  • Ruby
  • Rust

3. exporter編寫指導(dǎo)

Prometheus 官方文檔中 Writing Exporter 這篇寫得非常全面, 假如你要寫 exporter 推薦先通讀一遍, 限于篇幅, 這里只概括一下:

做到開箱即用(默認(rèn)配置就可以直接開始用)

推薦使用 YAML 作為配置格式

指標(biāo)使用下劃線命名

為指標(biāo)提供 HELP String (指標(biāo)上的 # HELP 注釋, 事實(shí)上這點(diǎn)大部分 exporter 都沒做好)

為 Exporter 本身的運(yùn)行狀態(tài)提供指標(biāo)

可以提供一個(gè)落地頁

metric的類型

在開始之前需要了解下metric的類型劃分

要在Golang中生成Prometheus數(shù)據(jù),你可以使用Prometheus的官方客戶端庫 prometheus/client_golang。這個(gè)庫允許你定義和暴露自定義的指標(biāo),并通過HTTP端點(diǎn)將這些指標(biāo)暴露給Prometheus服務(wù)器。

以下是一個(gè)簡(jiǎn)單的示例,展示如何使用Golang生成Prometheus數(shù)據(jù):

4. 安裝依賴

首先,你需要安裝Prometheus的Golang客戶端庫:

go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promhttp

5. 編寫代碼

接下來,編寫一個(gè)簡(jiǎn)單的Golang程序來生成和暴露Prometheus指標(biāo)。

package main

import (
	"net/http"
	"time"

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

func main() {
	// 創(chuàng)建一個(gè)自定義的Gauge指標(biāo)
	customMetric := prometheus.NewGauge(prometheus.GaugeOpts{
		Name: "my_custom_metric",
		Help: "This is a custom metric",
	})

	// 注冊(cè)指標(biāo)
	prometheus.MustRegister(customMetric)

	// 啟動(dòng)一個(gè)goroutine來更新指標(biāo)值
	go func() {
		for {
			// 模擬一些業(yè)務(wù)邏輯,更新指標(biāo)值
			customMetric.Set(float64(time.Now().Unix()))
			time.Sleep(10 * time.Second)
		}
	}()

	// 暴露指標(biāo)端點(diǎn)
	http.Handle("/metrics", promhttp.Handler())
	http.ListenAndServe(":8080", nil)
}

6. 運(yùn)行程序

運(yùn)行這個(gè)Golang程序:

go run main.go

程序?qū)⒃诒镜氐?080端口上啟動(dòng)一個(gè)HTTP服務(wù)器,并暴露 /metrics 端點(diǎn)。

7. 訪問指標(biāo)

你可以通過瀏覽器或 curl 命令訪問 http://localhost:8080/metrics,查看生成的Prometheus指標(biāo)。

curl http://localhost:8080/metrics

你應(yīng)該會(huì)看到類似以下的輸出:

# HELP my_custom_metric This is a custom metric
# TYPE my_custom_metric gauge
my_custom_metric 1.623456789e+09

8. 配置Prometheus

最后,你需要在Prometheus的配置文件中添加這個(gè)目標(biāo),以便Prometheus服務(wù)器可以定期抓取這些指標(biāo)。

在 prometheus.yml 中添加以下內(nèi)容:

scrape_configs:
  - job_name: 'my_golang_app'
    static_configs:
      - targets: ['localhost:8080']

然后重啟Prometheus服務(wù)器,它將會(huì)開始抓取你的Golang應(yīng)用程序暴露的指標(biāo)。

9. 總結(jié)

通過使用 prometheus/client_golang 庫,你可以輕松地在Golang中生成和暴露Prometheus指標(biāo)。這個(gè)示例展示了如何創(chuàng)建一個(gè)簡(jiǎn)單的Gauge指標(biāo),并通過HTTP端點(diǎn)暴露它。你可以根據(jù)需要擴(kuò)展這個(gè)示例,添加更多的指標(biāo)類型(如Counter、Histogram等)和更復(fù)雜的業(yè)務(wù)邏輯。

到此這篇關(guān)于使用golang生成prometheus格式數(shù)據(jù)的文章就介紹到這了,更多相關(guān)golang生成prometheus數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang 并發(fā)讀寫鎖的具體實(shí)現(xiàn)

    Golang 并發(fā)讀寫鎖的具體實(shí)現(xiàn)

    Go語言中的sync.RWMutex提供了讀寫鎖機(jī)制,允許多個(gè)協(xié)程并發(fā)讀取共享資源,但在寫操作時(shí)保持獨(dú)占性,本文主要介紹了Golang 并發(fā)讀寫鎖的具體實(shí)現(xiàn),感興趣的可以了解一下
    2025-02-02
  • Go隨機(jī)數(shù)與UUID生成原理與避坑指南

    Go隨機(jī)數(shù)與UUID生成原理與避坑指南

    本文介紹了Go中的隨機(jī)數(shù)生成和UUID生成的相關(guān)知識(shí),包括兩種隨機(jī)數(shù)生成庫的區(qū)別和使用場(chǎng)景,UUID的版本和優(yōu)缺點(diǎn),以及在實(shí)際工程中如何正確使用這兩種工具的建議,文章強(qiáng)調(diào)了在實(shí)際應(yīng)用中,開發(fā)者需要理解背后的原理和設(shè)計(jì)理念,并做出合適的選擇,需要的朋友可以參考下
    2026-05-05
  • Go語言使用Etcd實(shí)現(xiàn)分布式鎖

    Go語言使用Etcd實(shí)現(xiàn)分布式鎖

    etcd是近幾年比較火熱的一個(gè)開源的、分布式的鍵值對(duì)數(shù)據(jù)存儲(chǔ)系統(tǒng),本文將介紹如何利用Etcd實(shí)現(xiàn)分布式鎖,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-05-05
  • Go語言中的格式化輸出占位符的用法詳解

    Go語言中的格式化輸出占位符的用法詳解

    在 Go 語言中,格式化輸出是一個(gè)非常常用的功能,特別是在處理字符串、數(shù)字和其他數(shù)據(jù)類型時(shí),本文將詳細(xì)介紹 Go 語言中常用的格式化占位符及其用法,希望對(duì)大家有所幫助
    2024-10-10
  • go語言題解LeetCode66加一示例詳解

    go語言題解LeetCode66加一示例詳解

    這篇文章主要為大家介紹了go語言題解LeetCode66加一示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 淺談JWT在GO中的使用方法及原理

    淺談JWT在GO中的使用方法及原理

    JWT是一種基于?JSON?的開放標(biāo)準(zhǔn),用于在網(wǎng)絡(luò)應(yīng)用間傳遞聲明,JWT被設(shè)計(jì)為可安全地將用戶身份驗(yàn)證和授權(quán)數(shù)據(jù)作為?JSON?對(duì)象在各個(gè)應(yīng)用程序之間傳遞,本文將詳細(xì)給大家介紹JWT原理及在Go中的用法,需要的朋友可以參考下
    2023-05-05
  • Go?time包AddDate使用解惑實(shí)例詳解

    Go?time包AddDate使用解惑實(shí)例詳解

    這篇文章主要為大家介紹了Go?time包AddDate使用解惑實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • golang1.21新特性全面講解

    golang1.21新特性全面講解

    經(jīng)過了半年左右的開發(fā),golang?1.21?最近正式發(fā)布了,這個(gè)版本中有不少重要的新特性和變更,尤其是在泛型相關(guān)的代碼上,下面小編就來和大家好好嘮嘮吧
    2023-08-08
  • Go 泛型和非泛型代碼詳解

    Go 泛型和非泛型代碼詳解

    Go 在 1.17 中支持泛型,但是默認(rèn)未開啟;1.18 中會(huì)正式支持泛型,下面文章內(nèi)容小編將給大家講解Go 語言中的泛型和非泛型并且附上代碼詳解,剛興趣的小伙伴請(qǐng)參考下面文章的具體內(nèi)容
    2021-10-10
  • Go anko實(shí)現(xiàn)支持腳本語言

    Go anko實(shí)現(xiàn)支持腳本語言

    anko是一個(gè)可以讓 Go 項(xiàng)目支持腳本語言的小工具,換句話說,就是可以給 Go 項(xiàng)目加點(diǎn)“腳本魔法”,下面就跟隨小編一起來學(xué)習(xí)一下他的具體使用吧
    2024-11-11

最新評(píng)論

鹤岗市| 永济市| 保亭| 新乡县| 威宁| 海阳市| 永新县| 无棣县| 嘉黎县| 彩票| 大庆市| 和龙市| 新野县| 汉寿县| 若尔盖县| 博客| 定西市| 民勤县| 汉阴县| 平舆县| 慈溪市| 遵化市| 益阳市| 玛曲县| 眉山市| 永和县| 乌鲁木齐市| 栾川县| 镶黄旗| 利川市| 开原市| 陵水| 宿州市| 津南区| 芜湖县| 苗栗县| 鹿邑县| 平遥县| 延寿县| 永胜县| 江都市|