亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Rust語(yǔ)言之Prometheus系統(tǒng)監(jiān)控工具包的使用詳解

 更新時(shí)間:2023年10月06日 08:30:03   作者:Pomelo_劉金  
Prometheus?是一個(gè)開源的系統(tǒng)監(jiān)控和警報(bào)工具包,最初是由SoundCloud構(gòu)建的,隨著時(shí)間的發(fā)展,Prometheus已經(jīng)具有適用于各種使用場(chǎng)景的版本,為了開發(fā)者方便開發(fā),更是有各種語(yǔ)言版本的Prometheus的開發(fā)工具包,本文主要介紹Rust版本的Prometheus開發(fā)工具包

1. Prometheus 簡(jiǎn)介

Prometheus 是一個(gè)開源的系統(tǒng)監(jiān)控和警報(bào)工具包,最初是由 SoundCloud 構(gòu)建的。Prometheus 的主要優(yōu)勢(shì)在于其多維數(shù)據(jù)模型和靈活的查詢語(yǔ)言,能夠?qū)崿F(xiàn)高效的數(shù)據(jù)存儲(chǔ)和查詢。

隨著時(shí)間的發(fā)展,Prometheus已經(jīng)具有適用于各種操作系統(tǒng)、各種使用場(chǎng)景的版本。為了開發(fā)者方便開發(fā),更是有各種語(yǔ)言版本的Prometheus的開發(fā)工具包(本文主要介紹Rust版本的Prometheus開發(fā)工具包)

本文章具體介紹兩個(gè)部分的使用:

  • Exporter:用于產(chǎn)生和發(fā)送信息

  • Prometheus:用于接收和展示信息

1.1 Exporter

在整個(gè)Prometheus 的使用中,Exporter是最基礎(chǔ)和重要的部分,Prometheus只是負(fù)責(zé)接收并展示你想知道的信息,但是信息究竟從何而來(lái)呢?是的,消息由Exporter產(chǎn)生,并發(fā)送給Prometheus保存和記錄。

廣義上講所有可以向Prometheus提供監(jiān)控樣本數(shù)據(jù)的程序都可以被稱為一個(gè)Exporter。而Exporter的一個(gè)實(shí)例稱為target,Prometheus通過(guò)輪詢的方式定期從這些target中獲取樣本數(shù)據(jù)。也就是說(shuō)可以同時(shí)有多個(gè)Exporter給同一個(gè)Prometheus發(fā)送需要記錄的信息。

其實(shí)對(duì)于Prometheus工具包的使用具體也在這一部分,通過(guò)工具包創(chuàng)建一個(gè)又一個(gè)Exporter從而完整的記錄你想記錄的任何信息,那問(wèn)題來(lái)了Exporter結(jié)構(gòu)應(yīng)該是怎樣的呢?究竟是使用工具包提供的api寫在自己的程序里面,還是完全隔離開,寫一個(gè)獨(dú)立的Exporter程序呢?

從Exporter的運(yùn)行方式上來(lái)講,又可以分為:

  • 獨(dú)立使用的

以Node Exporter為例,由于操作系統(tǒng)本身并不直接支持Prometheus,同時(shí)用戶也無(wú)法通過(guò)直接從操作系統(tǒng)層面上提供對(duì)Prometheus的支持。因此,用戶只能通過(guò)獨(dú)立運(yùn)行一個(gè)程序的方式,通過(guò)操作系統(tǒng)提供的相關(guān)接口,將系統(tǒng)的運(yùn)行狀態(tài)數(shù)據(jù)轉(zhuǎn)換為可供Prometheus讀取的監(jiān)控?cái)?shù)據(jù)。 除了Node Exporter以外,比如MySQL Exporter、Redis Exporter等都是通過(guò)這種方式實(shí)現(xiàn)的。 這些Exporter程序扮演了一個(gè)中間代理人的角色。

  • 集成到應(yīng)用中的

為了能夠更好的監(jiān)控系統(tǒng)的內(nèi)部運(yùn)行狀態(tài),有些開源項(xiàng)目如Kubernetes,ETCD等直接在代碼中使用了Prometheus的Client Library,提供了對(duì)Prometheus的直接支持。這種方式打破的監(jiān)控的界限,讓應(yīng)用程序可以直接將內(nèi)部的運(yùn)行狀態(tài)暴露給Prometheus,適合于一些需要更多自定義監(jiān)控指標(biāo)需求的項(xiàng)目。

1.2 安裝 Prometheus

Prometheus主要用來(lái)顯示從Exporter發(fā)送的信息,并且Prometheus可以在本地運(yùn)行,只需下載對(duì)應(yīng)的版本。

https://prometheus.io/download/

按照安裝指南完成安裝與配置。

我下載的是Linux,64位系統(tǒng)的版本:prometheus-2.47.0.linux-amd64.tar.gz

輸入指令解壓文件

tar -zxvf prometheus-2.47.0.linux-amd64.tar.gz

進(jìn)入 Prometheus 目錄

cd prometheus-2.47.0.linux-amd64

運(yùn)行 Prometheus

./prometheus

現(xiàn)在 Prometheus 應(yīng)該已經(jīng)開始運(yùn)行,并在默認(rèn)的 9090 端口上監(jiān)聽(tīng)。你可以在 Web 瀏覽器中通過(guò)訪問(wèn) http://<你的服務(wù)器IP>:9090 來(lái)訪問(wèn) Prometheus 的 Web 界面。

配置 Prometheus

Prometheus 通常還需要一個(gè)配置文件,例如 prometheus.yml,來(lái)定義如何執(zhí)行服務(wù)發(fā)現(xiàn)和數(shù)據(jù)采集。在 Prometheus 目錄中,你通常會(huì)找到一個(gè)示例配置文件,你可以根據(jù)自己的需要對(duì)其進(jìn)行修改。

2.Prometheus 庫(kù)的基本使用

2.1 創(chuàng)建新的 Rust 項(xiàng)目

使用 Cargo 創(chuàng)建一個(gè)新項(xiàng)目:

cargo new prometheus_example
cd prometheus_example

配置項(xiàng)目依賴,在 Cargo.toml 文件中加入 Prometheus 庫(kù):

[dependencies]
prometheus = "0.13.3"

0.13.3是寫這篇文章時(shí)的最新版本。也許現(xiàn)在版本已經(jīng)更新,建議使用最新的版本哦

https://docs.rs/prometheus/0.13.3/prometheus/

2.2 創(chuàng)建和配置 Prometheus 計(jì)數(shù)器

簡(jiǎn)單的 初始化 一個(gè) 計(jì)數(shù)器,并配置標(biāo)簽和值:

use prometheus::{Counter, Registry};
let reg = Registry::new();
let counter = Counter::new("example_counter", "An example counter").unwrap();
reg.register(Box::new(counter.clone())).unwrap();

也可以通過(guò)官方的的例子自定義Registry實(shí)例和counter實(shí)例

// 使用 `lazy_static!` 定義靜態(tài) `IntCounter`。
lazy_static! {
    static ref CUSTOM_COUNTER: IntCounter = IntCounter::new("custom", "dedicated counter").unwrap();
}
// Register custom metrics to a custom registry.
let mut labels = HashMap::new();
//這部分代碼創(chuàng)建了一個(gè)帶有自定義前綴“myprefix”的 `Registry`,并為它分配了一個(gè)標(biāo)簽,標(biāo)簽的鍵是“mykey”,值是“myvalue”。
labels.insert("mykey".to_string(), "myvalue".to_string());
let custom_registry = Registry::new_custom(Some("myprefix".to_string()),Some(labels)).unwrap();
//這一行調(diào)用了下面定義的 `custom_metrics` 函數(shù),并將先前創(chuàng)建的 `custom_registry` 作為參數(shù)傳遞給它。
custom_metrics(&custom_registry);
/// Custom metrics, to be collected by a dedicated registry.
fn custom_metrics(registry: &Registry) {
    registry.register(Box::new(CUSTOM_COUNTER.clone())).unwrap();
    CUSTOM_COUNTER.inc_by(42);
    assert_eq!(CUSTOM_COUNTER.get(), 42);
}
//在這個(gè)函數(shù)中:
//  `CUSTOM_COUNTER` 被注冊(cè)到了傳遞進(jìn)來(lái)的 `Registry` 中。
//   然后,`CUSTOM_COUNTER` 的值增加了42。
//   最后,使用 `assert_eq!` 宏來(lái)驗(yàn)證 `CUSTOM_COUNTER` 的值是否確實(shí)為42。

通過(guò)上面的方式生成的metrics可以打印出來(lái)

// Print metrics for the custom registry.
let mut buffer = Vec::<u8>::new();
let encoder = prometheus::TextEncoder::new();
encoder
    .encode(&custom_registry.gather(), &mut buffer)
    .unwrap();
println!("## Custom registry");
println!("{}", String::from_utf8(buffer.clone()).unwrap());

打印結(jié)果:

## Custom registry
# HELP myprefix_custom dedicated counter
# TYPE myprefix_custom counter
myprefix_custom 42

3. 數(shù)據(jù)收集和展示

3.1通過(guò)web服務(wù)提供查詢數(shù)據(jù)的接口給 Prometheus

因?yàn)?Prometheus 主要是通過(guò) HTTP 協(xié)議來(lái)抓?。╯crape)應(yīng)用暴露出的指標(biāo)(metrics)的,但這并不意味著你的應(yīng)用必須是一個(gè)完整的 web 服務(wù)。你只需要為你的應(yīng)用添加一個(gè)簡(jiǎn)單的 HTTP 服務(wù)器來(lái)暴露指標(biāo)。這樣的 HTTP 服務(wù)器通常非常輕量,對(duì)你的應(yīng)用幾乎沒(méi)有什么影響。

可以使用warp的輕量級(jí)web框架,也可以使用最近剛推出的評(píng)價(jià)還不錯(cuò)的一個(gè)web框架,當(dāng)然選用什么框架都看個(gè)人習(xí)慣。

我將用warp舉例 在Cargo.toml文件中添加依賴

[dependencies]
warp = "0.3" 
tokio = { version = "1", features = ["full"] }

接下來(lái),用warp創(chuàng)建一個(gè)簡(jiǎn)單的web服務(wù):這個(gè)服務(wù)會(huì)在 http://[127:0:0:1]:8080/test 上暴露你的 Prometheus 指標(biāo):

use prometheus::{Encoder, TextEncoder};
use warp::Filter;
use std::collections::HashMap;
use prometheus::{Registry, IntCounter};
use std::sync::Arc;
use tokio::sync::RwLock;
lazy_static! {
    static ref CUSTOM_COUNTER: IntCounter = IntCounter::new("custom", "dedicated counter").unwrap();
#[tokio::main]
async fn main() {
let mut labels = HashMap::new();
labels.insert("mykey".to_string(), "myvalue".to_string());
let custom_registry = Registry::new_custom(Some("myprefix".to_string()),Some(labels)).unwrap();
custom_metrics(&custom_registry);
fn custom_metrics(registry: &Registry) {
    registry.register(Box::new(CUSTOM_COUNTER.clone())).unwrap();
    CUSTOM_COUNTER.inc_by(42);
    assert_eq!(CUSTOM_COUNTER.get(), 42);
}
let custom_registry = Arc::new(RwLock::new(custom_registry));
// 創(chuàng)建一個(gè) warp filter,該 filter 會(huì)暴露 Prometheus 指標(biāo)。
    let consensus_route = warp::path!("test").map(move || {
        GET_BLOCK_COUNTER.inc();
        SEND_TX_COUNTER.inc();
        let buffer = metrics_encode(Consensus_registry.clone());
        warp::reply::with_header(buffer, "Content-Type", "text/plain")
    });
    let routes=rpc_route.or(consensus_route);
    warp::serve(routes).run(([127, 0, 0, 1], 8080)).await;

在配置文件中添加剛剛寫的web服務(wù)的網(wǎng)址,使打開prometheus可以定時(shí)訪問(wèn)這個(gè)地址從而獲取信息。 文件編輯好后,保存,退出,重新運(yùn)行prometheus就會(huì)去監(jiān)控這個(gè)地址了。

3.2. 監(jiān)控信息

打開瀏覽器,訪問(wèn)localhost:9090地址,會(huì)出現(xiàn)prometheus的監(jiān)控畫面

在搜索欄中輸入想要監(jiān)控的信息:myprefix_custom,點(diǎn)擊Execute,便可以看到想要查詢的信息,數(shù)量等

以上就是Rust語(yǔ)言之Prometheus系統(tǒng)監(jiān)控工具包的使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Rust Prometheus工具包使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Rust數(shù)據(jù)類型之結(jié)構(gòu)體Struct的使用

    Rust數(shù)據(jù)類型之結(jié)構(gòu)體Struct的使用

    結(jié)構(gòu)體是Rust中非常強(qiáng)大和靈活的數(shù)據(jù)結(jié)構(gòu),可以用于組織和操作各種類型的數(shù)據(jù),本文就來(lái)介紹一下Rust數(shù)據(jù)類型之結(jié)構(gòu)體Struct的使用,感興趣的可以了解一下
    2023-12-12
  • Rust之Substrate框架中Core詳解

    Rust之Substrate框架中Core詳解

    Substrate是一個(gè)用于構(gòu)建區(qū)塊鏈的開發(fā)框架,它由Parity團(tuán)隊(duì)基于Rust語(yǔ)言開發(fā)而成,是一個(gè)開箱即用的區(qū)塊鏈構(gòu)造器,本文詳細(xì)介紹了Substrate框架中的Core,需要的朋友可以參考下
    2023-05-05
  • vscode搭建rust開發(fā)環(huán)境的圖文教程

    vscode搭建rust開發(fā)環(huán)境的圖文教程

    本文主要介紹了vscode搭建rust開發(fā)環(huán)境的圖文教程,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Rust 函數(shù)詳解

    Rust 函數(shù)詳解

    函數(shù)在 Rust 語(yǔ)言中是普遍存在的。Rust 支持多種編程范式,但更偏向于函數(shù)式,函數(shù)在 Rust 中是“一等公民”,函數(shù)可以作為數(shù)據(jù)在程序中進(jìn)行傳遞,對(duì)Rust 函數(shù)相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-11-11
  • rust多樣化錯(cuò)誤處理(從零學(xué)習(xí))

    rust多樣化錯(cuò)誤處理(從零學(xué)習(xí))

    一個(gè)優(yōu)秀的項(xiàng)目,錯(cuò)誤處理的優(yōu)雅性是至關(guān)重要的,而rust,anyhow creat是繞不過(guò)去的一個(gè),今天我們來(lái)研究下,怎么使用它,幫助我們寫出更優(yōu)雅的代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2023-11-11
  • rust語(yǔ)言基礎(chǔ)pub關(guān)鍵字及Some語(yǔ)法示例

    rust語(yǔ)言基礎(chǔ)pub關(guān)鍵字及Some語(yǔ)法示例

    這篇文章主要為大家介紹了rust語(yǔ)言基礎(chǔ)pub關(guān)鍵字及Some語(yǔ)法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Rust 中的文件操作示例詳解

    Rust 中的文件操作示例詳解

    Rust 中的路徑操作是跨平臺(tái)的,std::path 模塊提供的了兩個(gè)用于描述路徑的類型,本文給大家介紹Rust 中的文件操作示例詳解,感興趣的朋友一起看看吧
    2021-11-11
  • Rust使用csv crate構(gòu)建CSV文件讀取器的全過(guò)程

    Rust使用csv crate構(gòu)建CSV文件讀取器的全過(guò)程

    這篇文章主要學(xué)習(xí)如何基于Rust使用csv這個(gè)crate構(gòu)建一個(gè)CSV文件讀取器的過(guò)程,學(xué)習(xí)了csv相關(guān)的用法以及一些往期學(xué)過(guò)的crate的復(fù)習(xí),兼顧了實(shí)用性和Rust的學(xué)習(xí),需要的朋友可以參考下
    2024-05-05
  • Rust語(yǔ)言從入門到精通系列之Iterator迭代器深入詳解

    Rust語(yǔ)言從入門到精通系列之Iterator迭代器深入詳解

    這篇文章主要為大家介紹了Rust語(yǔ)言從入門到精通系列之Iterator迭代器深入詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Rust中泛型的學(xué)習(xí)筆記

    Rust中泛型的學(xué)習(xí)筆記

    在Rust語(yǔ)言中,泛型是一種強(qiáng)大的工具,它允許我們編寫可復(fù)用且靈活的代碼,本文主要介紹了Rust中泛型的學(xué)習(xí)筆記,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03

最新評(píng)論