Prometheus http api 的 Python 包裝器和一些用於指標處理的工具。
若要安裝最新版本:
pip install prometheus-api-client
若要直接從此分支安裝:
pip install https://github.com/4n4nd/prometheus-api-client-python/zipball/master
Prometheus 是雲端原生運算基金會項目,是一個系統和服務監控系統。它以給定的時間間隔從配置的目標收集指標(時間序列資料),評估規則表達式,顯示結果,如果觀察到某些條件為真,則可以觸發警報。從 Prometheus 主機獲得的原始時間序列資料有時很難解釋。為了幫助更好地理解這些指標,我們為 Prometheus http API 創建了一個 Python 包裝器,以便更輕鬆地進行指標處理和分析。
prometheus-api-client
庫由多個模組組成,這些模組有助於連接到 Prometheus 主機、獲取所需的指標並對時間序列資料執行各種聚合操作。
庫的PrometheusConnect
模組可用於連接到 Prometheus 主機。該模組本質上是一個為從 Prometheus 主機收集指標而創建的類別。它儲存以下連接參數:
from prometheus_api_client import PrometheusConnect
prom = PrometheusConnect ( url = "<prometheus-host>" , disable_ssl = True )
# Get the list of all the metrics that the Prometheus host scrapes
prom . all_metrics ()
您也可以使用自訂查詢來取得特定指標的時間序列數據,如下所示:
prom = PrometheusConnect ()
my_label_config = { 'cluster' : 'my_cluster_id' , 'label_2' : 'label_2_value' }
prom . get_current_metric_value ( metric_name = 'up' , label_config = my_label_config )
# Here, we are fetching the values of a particular metric name
prom . custom_query ( query = "prometheus_http_requests_total" )
# Now, lets try to fetch the `sum` of the metrics
prom . custom_query ( query = "sum(prometheus_http_requests_total)" )
我們也可以使用自訂查詢來取得特定時間間隔內的指標資料。例如,讓我們嘗試以 1 天為單位來取得特定指標過去 2 天的資料:
# Import the required datetime functions
from prometheus_api_client . utils import parse_datetime
from datetime import timedelta
start_time = parse_datetime ( "2d" )
end_time = parse_datetime ( "now" )
chunk_size = timedelta ( days = 1 )
metric_data = prom . get_metric_range_data (
"up{cluster='my_cluster_id'}" , # this is the metric name and label config
start_time = start_time ,
end_time = end_time ,
chunk_size = chunk_size ,
)
有關PrometheusConnect
模組中包含的更多功能,請參閱此文件。
MetricsList
模組初始化 Metric 物件列表,用於作為 promql 查詢的結果從 Prometheus 主機取得的指標。
# Import the MetricsList and Metric modules
from prometheus_api_client import PrometheusConnect , MetricsList , Metric
prom = PrometheusConnect ()
my_label_config = { 'cluster' : 'my_cluster_id' , 'label_2' : 'label_2_value' }
metric_data = prom . get_metric_range_data ( metric_name = 'up' , label_config = my_label_config )
metric_object_list = MetricsList ( metric_data ) # metric_object_list will be initialized as
# a list of Metric objects for all the
# metrics downloaded using get_metric query
# We can see what each of the metric objects look like
for item in metric_object_list :
print ( item . metric_name , item . label_config , " n " )
metric_object_list
中的每個項目都被初始化為Metric
類別物件。讓我們來看看metric_object_list
中的一個指標,以了解更多關於Metric
類別的資訊:
my_metric_object = metric_object_list [ 1 ] # one of the metrics from the list
print ( my_metric_object )
有關MetricsList
和Metrics
模組中包含的更多功能,請參閱此文件。
Metric
類別也支援多種功能,例如新增、等於和繪製各種度量物件。
您可以為同一時間序列新增兩個指標對象,如下所示:
metric_1 = Metric ( metric_data_1 )
metric_2 = Metric ( metric_data_2 )
metric_12 = metric_1 + metric_2 # will add the data in ``metric_2`` to ``metric_1``
# so if any other parameters are set in ``metric_1``
# will also be set in ``metric_12``
# (like ``oldest_data_datetime``)
重載運算子=,檢查兩個指標是否相同(無論資料如何,都是相同的時間序列)
metric_1 = Metric ( metric_data_1 )
metric_2 = Metric ( metric_data_2 )
print ( metric_1 == metric_2 ) # will print True if they belong to the same time-series
為度量時間序列繪製一個非常簡單的線圖:
from prometheus_api_client import PrometheusConnect , MetricsList , Metric
prom = PrometheusConnect ()
my_label_config = { 'cluster' : 'my_cluster_id' , 'label_2' : 'label_2_value' }
metric_data = prom . get_metric_range_data ( metric_name = 'up' , label_config = my_label_config )
metric_object_list = MetricsList ( metric_data )
my_metric_object = metric_object_list [ 1 ] # one of the metrics from the list
my_metric_object . plot ()
要執行資料分析和操作,使用 pandas DataFrame 表示資料通常會很有幫助。此函式庫中有兩個模組可用於處理擷取到 DataFrame 中的原始指標。
MetricSnapshotDataFrame
模組將「目前指標值」資料轉換為 DataFrame 表示形式, MetricRangeDataFrame
將「指標範圍值」資料轉換為 DataFrame 表示形式。這些類別的用法範例如下:
import datetime as dt
from prometheus_api_client import PrometheusConnect , MetricSnapshotDataFrame , MetricRangeDataFrame
prom = PrometheusConnect ()
my_label_config = { 'cluster' : 'my_cluster_id' , 'label_2' : 'label_2_value' }
# metric current values
metric_data = prom . get_current_metric_value (
metric_name = 'up' ,
label_config = my_label_config ,
)
metric_df = MetricSnapshotDataFrame ( metric_data )
metric_df . head ()
""" Output:
+-------------------------+-----------------+------------+-------+
| __name__ | cluster | label_2 | timestamp | value |
+==========+==============+=================+============+=======+
| up | cluster_id_0 | label_2_value_2 | 1577836800 | 0 |
+-------------------------+-----------------+------------+-------+
| up | cluster_id_1 | label_2_value_3 | 1577836800 | 1 |
+-------------------------+-----------------+------------+-------+
"""
# metric values for a range of timestamps
metric_data = prom . get_metric_range_data (
metric_name = 'up' ,
label_config = my_label_config ,
start_time = ( dt . datetime . now () - dt . timedelta ( minutes = 30 )),
end_time = dt . datetime . now (),
)
metric_df = MetricRangeDataFrame ( metric_data )
metric_df . head ()
""" Output:
+------------+------------+-----------------+--------------------+-------+
| | __name__ | cluster | label_2 | value |
+-------------------------+-----------------+--------------------+-------+
| timestamp | | | | |
+============+============+=================+====================+=======+
| 1577836800 | up | cluster_id_0 | label_2_value_2 | 0 |
+-------------------------+-----------------+--------------------+-------+
| 1577836801 | up | cluster_id_1 | label_2_value_3 | 1 |
+-------------------------+-----------------+------------=-------+-------+
"""
有關prometheus-api-client
庫中包含的更多功能,請參閱此文件。
PROM_URL="http://demo.robustperception.io:9090/" pytest
Prometheus Api 用戶端使用預先提交框架來維護程式碼 linting 和 python 程式碼樣式。
AICoE-CI 將對每個拉取請求執行預提交檢查。
我們鼓勵我們的貢獻者在貢獻程式碼時遵循相同的模式。
我們希望保持相同的標準並維護程式碼以獲得更好的品質和可讀性。
預提交設定檔存在於儲存庫.pre-commit-config.yaml
中
它包含我們用於應用程式的不同程式碼樣式和 linting 指南。
我們只需要在提出拉取請求之前執行預提交。
以下命令可用於運行預提交:
pre-commit run --all-files
如果您的系統中未安裝預先提交,可以使用以下命令進行安裝: pip install pre-commit