Можно ли в Prometheus передавать готовые тайм-серии а не единичные значения метрик?

Пытаюсь разобраться с "Prometheus". Как переодически собирать метрики, кажись, понял. Возник вопрос: можно ли передать "Prometheus-у" не одно значение метрики, которое есть на момент опроса, а сразу серию значений, в сочетании с таймстапами, когда эти значения получены. Например, собираю загрузку ЦПУ. Раз в 15, или 20, или 50 секунд получаю от экспортера одно число - все хорошо. А можно ли раз в 60 секунд (не важно, строго говоря, 60 или 70 или еще сколько-то) вычитывать из БД на контролируемом хосте строки, записанные каким-то процессом с интервалом в 1, или 3, или 5 секунд и такую "самодельную" тайм-серию отдать от экспортера и записать ее в "Prometheus". Или другой вариант: в цикле получать от экспортера пары значений из времени и значения метрики и записывать из в базу "Prometheus"?

Это скрипт, который пишет данные в Postgresql БД:

#!/usr/bin/python3 import time import psycopg2 from _datetime import datetime import psutil

while True:
    conn = psycopg2.connect(dbname="edudb", user="masterdb", password="passwdb", host="192.168.30.101", port="5432")
    with conn:
        with conn.cursor() as cursor:
            print("Подключение установлено", cursor)
            data_to_insert = (datetime.now(), psutil.cpu_percent(), psutil.disk_usage("/")[1]/1024**3, psutil.virtual_memory()[3]/1024**3)
            print(data_to_insert)
            cursor.execute("INSERT INTO edutbl (curr_time, cpu_load, disk_use, memory_use) VALUES (%s,%s,%s,%s)", data_to_insert)
            conn.commit()
            time.sleep(20)
    conn.close()`

Это код экспортера для Prometheus:

#!/usr/bin/python3

import prometheus_client
import time
import psutil
import psycopg2

def get_metrics():
    conn = psycopg2.connect(dbname="edudb", user="masterdb", password="passwdb", host="192.168.30.101", port="5432")
    if conn:
        print("Подключение к базе установлено", conn)
    else:
        print("Подключение к базе не установлено")
        return 1
    with conn.cursor() as cursor:
        if cursor:
            print("Курсор создан", cursor)
        else:
            print("Курсор не создан")
            return 1
        cursor.execute('SELECT cpu_load, disk_use, memory_use FROM edutbl ORDER BY id DESC LIMIT 1;')
        conn.commit()
        one_str = cursor.fetchone()
        print(one_str)
    conn.close()
    return one_str

UPDATE_PERIOD = 30
SYSTEM_USAGE = prometheus_client.Gauge('System_usage',
                                       'Hold current system resource usage',
                                       ['resource_type'])

if __name__ == '__main__':
    prometheus_client.start_http_server(8999)

while True:
    gm = get_metrics()
    SYSTEM_USAGE.labels('cpu_load').set(gm[0])
    SYSTEM_USAGE.labels('disk_use').set(gm[1])
    SYSTEM_USAGE.labels('memory_use').set(gm[2])
    time.sleep(UPDATE_PERIOD)

Ответы (0 шт):