Wrapper Python สำหรับ Prometheus http api และเครื่องมือบางอย่างสำหรับการประมวลผลเมตริก
วิธีติดตั้งรุ่นล่าสุด:
pip install prometheus-api-client
วิธีติดตั้งโดยตรงจากสาขานี้:
pip install https://github.com/4n4nd/prometheus-api-client-python/zipball/master
Prometheus ซึ่งเป็นโครงการ Cloud Native Computing Foundation คือระบบและระบบตรวจสอบบริการ โดยจะรวบรวมตัวชี้วัด (ข้อมูลอนุกรมเวลา) จากเป้าหมายที่กำหนดค่าในช่วงเวลาที่กำหนด ประเมินนิพจน์กฎ แสดงผลลัพธ์ และสามารถเรียกใช้การแจ้งเตือนได้หากพบว่าเงื่อนไขบางอย่างเป็นจริง ข้อมูลอนุกรมเวลาดิบที่ได้รับจากโฮสต์ Prometheus บางครั้งอาจตีความได้ยาก เพื่อช่วยให้เข้าใจตัววัดเหล่านี้ได้ดีขึ้น เราได้สร้าง Wrapper Python สำหรับ Prometheus http api เพื่อการประมวลผลและวิเคราะห์ตัววัดที่ง่ายขึ้น
ไลบรารี 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
เริ่มต้นรายการออบเจ็กต์ Metric สำหรับตัววัดที่ดึงมาจากโฮสต์ Prometheus อันเป็นผลมาจากการสืบค้น Promql
# 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
ประกอบด้วยการจัดรูปแบบโค้ดและคำแนะนำการใช้ Lining ต่างๆ ที่เราใช้สำหรับแอปพลิเคชัน
เราเพียงแค่ต้องทำการคอมมิตล่วงหน้าก่อนที่จะเพิ่ม Pull Request
คำสั่งต่อไปนี้สามารถใช้เพื่อรันการคอมมิตล่วงหน้า:
pre-commit run --all-files
หากไม่ได้ติดตั้ง pre-commit ในระบบของคุณ ก็สามารถติดตั้งได้ด้วย : pip install pre-commit