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

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

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

1. Prometheus 簡介

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

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

本文章具體介紹兩個部分的使用:

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

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

1.1 Exporter

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

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

其實對于Prometheus工具包的使用具體也在這一部分,通過工具包創(chuàng)建一個又一個Exporter從而完整的記錄你想記錄的任何信息,那問題來了Exporter結構應該是怎樣的呢?究竟是使用工具包提供的api寫在自己的程序里面,還是完全隔離開,寫一個獨立的Exporter程序呢?

從Exporter的運行方式上來講,又可以分為:

  • 獨立使用的

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

  • 集成到應用中的

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

1.2 安裝 Prometheus

Prometheus主要用來顯示從Exporter發(fā)送的信息,并且Prometheus可以在本地運行,只需下載對應的版本。

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

進入 Prometheus 目錄

cd prometheus-2.47.0.linux-amd64

運行 Prometheus

./prometheus

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

配置 Prometheus

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

2.Prometheus 庫的基本使用

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

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

cargo new prometheus_example
cd prometheus_example

配置項目依賴,在 Cargo.toml 文件中加入 Prometheus 庫:

[dependencies]
prometheus = "0.13.3"

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

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

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

簡單的 初始化 一個 計數(shù)器,并配置標簽和值:

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();

也可以通過官方的的例子自定義Registry實例和counter實例

// 使用 `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)建了一個帶有自定義前綴“myprefix”的 `Registry`,并為它分配了一個標簽,標簽的鍵是“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);
}
//在這個函數(shù)中:
//  `CUSTOM_COUNTER` 被注冊到了傳遞進來的 `Registry` 中。
//   然后,`CUSTOM_COUNTER` 的值增加了42。
//   最后,使用 `assert_eq!` 宏來驗證 `CUSTOM_COUNTER` 的值是否確實為42。

通過上面的方式生成的metrics可以打印出來

// 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());

打印結果:

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

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

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

因為 Prometheus 主要是通過 HTTP 協(xié)議來抓?。╯crape)應用暴露出的指標(metrics)的,但這并不意味著你的應用必須是一個完整的 web 服務。你只需要為你的應用添加一個簡單的 HTTP 服務器來暴露指標。這樣的 HTTP 服務器通常非常輕量,對你的應用幾乎沒有什么影響。

可以使用warp的輕量級web框架,也可以使用最近剛推出的評價還不錯的一個web框架,當然選用什么框架都看個人習慣。

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

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

接下來,用warp創(chuàng)建一個簡單的web服務:這個服務會在 http://[127:0:0:1]:8080/test 上暴露你的 Prometheus 指標:

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)建一個 warp filter,該 filter 會暴露 Prometheus 指標。
    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ǎng)址,使打開prometheus可以定時訪問這個地址從而獲取信息。 文件編輯好后,保存,退出,重新運行prometheus就會去監(jiān)控這個地址了。

3.2. 監(jiān)控信息

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

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

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

相關文章

  • Rust 多線程編程的實現(xiàn)

    Rust 多線程編程的實現(xiàn)

    在rust中,多線程編程不算困難,但是也需要留心和別的編程語言中不同的地方,本文主要介紹了Rust 多線程編程的實現(xiàn),感興趣的可以了解一下
    2023-12-12
  • Rust 累計時間長度的操作方法

    Rust 累計時間長度的操作方法

    在Rust中,如果你想要記錄累計時間,通??梢允褂脴藴蕩熘械膕td::time::Duration類型,這篇文章主要介紹了Rust如何累計時間長度,需要的朋友可以參考下
    2024-05-05
  • Rust使用kind進行異常處理(錯誤的分類與傳遞)

    Rust使用kind進行異常處理(錯誤的分類與傳遞)

    Rust?有一套獨特的處理異常情況的機制,它并不像其它語言中的?try?機制那樣簡單,這篇文章主要介紹了Rust指南錯誤的分類與傳遞以及使用kind進行異常處理,需要的朋友可以參考下
    2022-09-09
  • 深入探究在Rust中函數(shù)、方法和關聯(lián)函數(shù)有什么區(qū)別

    深入探究在Rust中函數(shù)、方法和關聯(lián)函數(shù)有什么區(qū)別

    在 Rust 中,函數(shù)、方法和關聯(lián)函數(shù)都是用來封裝行為的,它們之間的區(qū)別主要在于它們的定義和調(diào)用方式,本文將通過一個簡單的rust代碼示例來給大家講講Rust中函數(shù)、方法和關聯(lián)函數(shù)區(qū)別,需要的朋友可以參考下
    2023-08-08
  • rust 如何使用文件鎖防止應用多開

    rust 如何使用文件鎖防止應用多開

    這篇文章主要介紹了rust 如何使用文件鎖防止應用多開,本文給出了進程只能單開的方法,結合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • rust?創(chuàng)建多線程web?server的詳細過程

    rust?創(chuàng)建多線程web?server的詳細過程

    web?server?中主要的兩個協(xié)議是?http?和?tcp,tcp?是底層協(xié)議,http?是構建在?tcp?之上的,本篇文章重點給大家介紹rust?創(chuàng)建多線程web?server的詳細過程,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • rust中間件actix_web在項目中的使用實戰(zhàn)

    rust中間件actix_web在項目中的使用實戰(zhàn)

    這篇文章主要介紹了rust中間件在項目中的使用實戰(zhàn),包括自定義中間件,日志中間件,Default?headers,用戶會話,錯誤處理的用法實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Rust突破編譯器限制構造可修改的全局變量

    Rust突破編譯器限制構造可修改的全局變量

    這篇文章主要為大家介紹了Rust突破編譯器限制構造可修改的全局變量示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 如何使用rust實現(xiàn)簡單的單鏈表

    如何使用rust實現(xiàn)簡單的單鏈表

    實現(xiàn)單鏈表在別的語言里面可能是一件簡單的事情,單對于Rust來說,絕對不簡單,下面這篇文章主要給大家介紹了關于如何使用rust實現(xiàn)簡單的單鏈表的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • 使用Rust語言管理Node.js版本

    使用Rust語言管理Node.js版本

    這篇文章主要介紹一個使用?Rust?進行編寫的一體化版本管理工具?Rtx,比如使用它來管理?Node.js?版本,它很簡單易用,使用了它,就可以拋棄掉?nvm?了,文中通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
    2023-12-12

最新評論

雷波县| 宜春市| 唐山市| 青铜峡市| 嫩江县| 新闻| 蕲春县| 安康市| 天水市| 蒙自县| 嘉鱼县| 西乌珠穆沁旗| 永安市| 白城市| 莒南县| 隆安县| 衡阳县| 云和县| 蒲江县| 拜城县| 蕉岭县| 吴旗县| 青浦区| 红原县| 屯门区| 嘉定区| 克东县| 胶南市| 沾益县| 秦安县| 九龙城区| 安吉县| 瑞昌市| 三门峡市| 虞城县| 修水县| 本溪市| 紫阳县| 沂南县| 于田县| 桦南县|