Prometheus http API용 Python 래퍼와 측정항목 처리를 위한 일부 도구입니다.
최신 릴리스를 설치하려면:
pip install prometheus-api-client
이 분기에서 직접 설치하려면 다음을 수행하세요.
pip install https://github.com/4n4nd/prometheus-api-client-python/zipball/master
Cloud Native Computing Foundation 프로젝트인 Prometheus는 시스템 및 서비스 모니터링 시스템입니다. 지정된 간격으로 구성된 대상에서 지표(시계열 데이터)를 수집하고, 규칙 표현식을 평가하고, 결과를 표시하고, 일부 조건이 true로 관찰되면 경고를 트리거할 수 있습니다. 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)" )
특정 시간 간격으로 측정항목 데이터를 가져오기 위해 사용자 지정 쿼리를 사용할 수도 있습니다. 예를 들어 특정 측정항목에 대한 지난 2일간의 데이터를 1일 단위로 가져오도록 시도해 보겠습니다.
# 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
모듈은 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
클래스에 대해 자세히 알아보려면 metric_object_list
의 메트릭 중 하나를 살펴보겠습니다.
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 클라이언트는 사전 커밋 프레임워크를 사용하여 코드 린팅 및 Python 코드 스타일을 유지합니다.
AICoE-CI는 각 풀 요청에 대해 사전 커밋 확인을 실행합니다.
우리는 기여자들이 코드에 기여하면서 동일한 패턴을 따르도록 권장합니다.
우리는 동일한 표준을 유지하고 더 나은 품질과 가독성을 위해 코드를 유지하고 싶습니다.
사전 커밋 구성 파일은 .pre-commit-config.yaml
저장소에 있습니다.
여기에는 우리가 애플리케이션에 사용하는 다양한 코드 스타일 및 린팅 가이드가 포함되어 있습니다.
Pull Request를 올리기 전에 사전 커밋을 실행하면 됩니다.
다음 명령을 사용하여 사전 커밋을 실행할 수 있습니다.
pre-commit run --all-files
사전 커밋이 시스템에 설치되지 않은 경우 다음을 사용하여 설치할 수 있습니다. pip install pre-commit