3.Exporter概述

杨梅冲發表於2024-04-24

一、Exporter概述

所有可以向Prometheus提供監控樣本資料的程式都可以被稱為一個Exporter。而Exporter的一個例項稱為target,如下所示,Prometheus透過輪詢的方式定期從這些target中獲取樣本資料:

注:安裝好Exporter後會暴露一個http://ip:埠/metrics的HTTP服務,透過Prometheus新增配置- targets: ['node_exporter:9100'](預設會加上/metrics),Prometheus就可以採集到這個http://ip:埠/metrics裡面所有監控樣本資料

二、Exporter的來源

從exporter來源講,分為2類:

1.社群提供( https://prometheus.io/docs/instrumenting/exporters/ )

Prometheus社群提供了豐富的Exporter實現,涵蓋了從基礎設施,中介軟體以及網路等各個方面的監控功能。這些Exporter可以實現大部分通用的監控需求
2.使用者自定義
除了直接使用社群提供的Exporter程式以外,使用者還可以基於Prometheus提供的Client Library建立自己的Exporter程式,目前Promthues社群官方提供了對以下程式語言的支援:Go、Java/Scala、Python、Ruby。同時還有第三方實現的如:Bash、C++、Common Lisp、Erlang,、Haskeel、Lua、Node.js、PHP、Rust等

三、Exporter型別

通常可以將Exporter分為2類:
1.直接採集型

這類Exporter直接內建了相應的應用程式,用於向Prometheus直接提供Target資料支援。這樣設計的好處是,可以更好地監控各自系統的內部執行狀態,同時也適合更多自定義監控指標的專案實施。例如cAdvisor、Kubernetes等,它們均內建了用於向Prometheus提供監控資料的端點。

2.間接採集型

原始監控目標並不直接支援Prometheus,需要我們使用Prometheus提供的Client Library編寫該監控目標的監控採集程式,使用者可以將該程式獨立執行,去獲取指定的各類監控資料值。例如,由於Linux作業系統自身並不能直接支援Prometheus,使用者無法從作業系統層面上直接提供對Prometheus的支援,因此單獨安裝Node exporter,還有資料庫或網站HTTP應用類等Exporter。

四、Exporter規範

所有的Exporter程式都需要按照Prometheus的規範,返回監控的樣本資料。以Node Exporter為例,當訪問http://192.168.10.14:9100/metrics地址時會返回以下內容:

# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 2.8298e-05
go_gc_duration_seconds{quantile="0.25"} 5.1855e-05
go_gc_duration_seconds{quantile="0.5"} 6.7122e-05
go_gc_duration_seconds{quantile="0.75"} 9.3062e-05
go_gc_duration_seconds{quantile="1"} 0.001225949
go_gc_duration_seconds_sum 0.005331134
go_gc_duration_seconds_count 48

以#開始的行通常都是註釋內容。這些樣本資料集合說明如下:

● 以#HELP開始的行,表示metric的幫助與說明註釋,可以包含當前監控指標名稱和對應的說明資訊。
● 以#TYPE開始的行,表示定義metric型別,可以包含當前監控指標名稱和型別,型別有Counter、Gauge、Histogram、Summary和Untyped。
● 非#開頭的行,就是監控樣本資料

4.1 監控樣本規範

metric_name [
  "{" label_name "=" `"` label_value `"` { "," label_name "=" `"` label_value `"` } [ "," ] "}"
] value [ timestamp ]

其中metric_name和label_name必須遵循PromQL的格式規範要求。value是一個float格式的資料,timestamp的型別為int64(從1970-01-01 00:00:00以來的毫秒數),timestamp為可選預設為當前時間。具有相同metric_name的樣本必須按照一個組的形式排列,並且每一行必須是唯一的指標名稱和標籤鍵值對組合。

go_memstats_mcache_sys_bytes{} 15600
go_memstats_mcache_sys_bytes{instance="localhost:9090", job="prometheus"} timestamp VALUE