[1228]Как использовать клиент Python prometheus
[1228]Как использовать клиент Python prometheus

github:https://github.com/prometheus/client_python

Установите prometheus_client

использовать pip Инструменты могут быть очень удобными. prometheus_client:

Язык кода:javascript
копировать
pip install prometheus-client
Введение в базовое использование

prometheus_client предоставляет богатый API, который можно использовать для определения и регистрации метрик, а также при необходимости предоставлять интерфейсы для этих метрик.

Язык кода:javascript
копировать
from prometheus_client import Counter, Gauge, Summary, Histogram, start_http_server

# Определение и регистрация metric
c = Counter('test_counter', «тестовый счетчик»)
g = Gauge('test_gauge', «Тестовая панель»)
s = Summary('test_summary', «Сводка испытаний»)
h = Histogram('test_histogram', «Тестовая гистограмма», buckets=(1, 2, 3))

# Приращения счетчика
c.inc()

# Настройки панели управления
g.set(42)

# Значения настроек сводки и гистограммы
s.observe(1.2)
h.observe(4.2)

# запускать HTTP сервер, открытый metrics интерфейс
start_http_server(8080)

В приведенном выше коде мы сначала определяем четыре различных типа метрика (счетчик, панель мониторинга, сводка и гистограмма), а затем работали с ними соответственно. Например, счетчик выполнил операцию автоматического приращения, панель мониторинга установила значение, а сводка и гистограмма установили значение наблюдения. Наконец, мы вызываем start_http_server() функция, будет metrics Интерфейс открыт для доступа к нему внешних программ.

Примеры применения
Сбор показателей использования ЦП

Следующий пример кода можно использовать для сбора CPU изиспользовать Индикатор скорости:

Язык кода:javascript
копировать
from prometheus_client import Counter, Gauge, Summary, Histogram, start_http_server
import psutil
import time

# Определение и регистрацияиндекс
cpu_percent = Gauge('cpu_percent','CPU использоватьпроцент ставки')
cpu_freq_current = Gauge('cpu_freq_current', 'CPU текущая частота')
cpu_freq_min = Gauge('cpu_freq_min', 'CPU минимальная частота')
cpu_freq_max = Gauge('cpu_freq_max', 'CPU максимальная частота')

# получать CPU информация о частоте
cpu_freq = psutil.cpu_freq()

# Установить начальное значение
cpu_freq_current.set(cpu_freq.current)
cpu_freq_min.set(cpu_freq.min)
cpu_freq_max.set(cpu_freq.max)

# запускать HTTP сервер, открытый metrics интерфейс
start_http_server(8080)

while True:
    # Сбор показателей использования ЦП
    cpu_percent.set(psutil.cpu_percent())

    # собирать CPU индекс частоты
    cpu_freq = psutil.cpu_freq()
    cpu_freq_current.set(cpu_freq.current)

    # ждать 1 секунд, сделай это еще раз, собери
    time.sleep(1)

В приведенном выше коде мы используем psutil приобретение библиотеки CPU использовать информацию о скорости и частоте и использовать их в качестве индикаторов для сбора данных. При каждом выполнении цикла мы будем устанавливать текущее значение индикатора на соответствующее metric и подождите одну секунду перед повторным сбором.

Собирайте специальные показатели

prometheus_client может не только собирать индикаторы системного уровня, но также легко собирать пользовательские индикаторы.

В следующем примере кода показано, как получить индикатор случайного числа:

Язык кода:javascript
копировать
from prometheus_client import Gauge, start_http_server
import random

# Определение и регистрацияиндекс
random_value = Gauge('random_value', «Индикатор случайных чисел»)

# запускать HTTP сервер, открытый metrics интерфейс
start_http_server(8080)

while True:
    # генерировать 0 приезжать 100 случайное число,и установитьприезжатьиндекссередина
    random_value.set(random.randint(0, 100))

    # ждать 5 секунд, сделай это еще раз, собери
    time.sleep(5)

В приведенном выше коде мы определяем индикатор случайных чисел, каждый 5 Секунды генерируется случайное число и устанавливается на индикатор. Затем мы передаем этот индикатор через start_http_server() Интерфейс открыт, чтобы другие программы могли легко получить к нему доступ.

Из двух приведенных выше примеров мы видим, что гибкий API prometheus_client может легко реализовать сбор и предоставление индикаторов различных типов и размеров.

Инкапсуляция Python
  • monitor.py
Язык кода:javascript
копировать
# encoding: utf-8
from prometheus_client import Counter, Gauge, Summary
from prometheus_client.core import CollectorRegistry
from prometheus_client.exposition import choose_encoder


class Monitor:
    def __init__(self):
    # зарегистрироватьсясобиратьустройство&Максимальные затраты времениmap
    self.collector_registry = CollectorRegistry(auto_describe=False)
    self.request_time_max_map = {}

    # интерфейсвызовsummaryстатистика
    self.http_request_summary = Summary(name="http_server_requests_seconds",
                                   documentation="Num of request time summary",
                                   labelnames=("method", "code", "uri"),
                                   registry=self.collector_registry)
    # интерфейс Максимальное время статистики
    self.http_request_max_cost = Gauge(name="http_server_requests_seconds_max",
                                  documentation="Number of request max cost",
                                  labelnames=("method", "code", "uri"),
                                  registry=self.collector_registry)

    # Статистика количества неудачных запросов
    self.http_request_fail_count = Counter(name="http_server_requests_error",
                                      documentation="Times of request fail in total",
                                      labelnames=("method", "code", "uri"),
                                      registry=self.collector_registry)

    # Прогнозирование модели требует времени статистика
    self.http_request_predict_cost = Counter(name="http_server_requests_seconds_predict",
                                        documentation="Seconds of prediction cost in total",
                                        labelnames=("method", "code", "uri"),
                                        registry=self.collector_registry)
    # Загрузка изображения занимает время статистика
    self.http_request_download_cost = Counter(name="http_server_requests_seconds_download",
                                         documentation="Seconds of download cost in total",
                                         labelnames=("method", "code", "uri"),
                                         registry=self.collector_registry)

    # получать/metricsрезультат
    def get_prometheus_metrics_info(self, handler):
        encoder, content_type = choose_encoder(handler.request.headers.get('accept'))
        handler.set_header("Content-Type", content_type)
        handler.write(encoder(self.collector_registry))
        self.reset_request_time_max_map()

    # summaryстатистика
    def set_prometheus_request_summary(self, handler):
        self.http_request_summary.labels(handler.request.method, handler.get_status(), handler.request.path).observe(handler.request.request_time())
        self.set_prometheus_request_max_cost(handler)

    # Пользовательская сводная статистика
    def set_prometheus_request_summary_customize(self, method, status, path, cost_time):
        self.http_request_summary.labels(method, status, path).observe(cost_time)
        self.set_prometheus_request_max_cost_customize(method, status, path, cost_time)

    # статистика отказов
    def set_prometheus_request_fail_count(self, handler, amount=1.0):
        self.http_request_fail_count.labels(handler.request.method, handler.get_status(), handler.request.path).inc(amount)

    # Настроить отказов
    def set_prometheus_request_fail_count_customize(self, method, status, path, amount=1.0):
        self.http_request_fail_count.labels(method, status, path).inc(amount)

    # Статистика максимальной трудоемкости
    def set_prometheus_request_max_cost(self, handler):
        requset_cost = handler.request.request_time()
        if self.check_request_time_max_map(handler.request.path, requset_cost):
            self.http_request_max_cost.labels(handler.request.method, handler.get_status(), handler.request.path).set(requset_cost)
            self.request_time_max_map[handler.request.path] = requset_cost

    # Настроить статистику максимальной трудоемкости
    def set_prometheus_request_max_cost_customize(self, method, status, path, cost_time):
        if self.check_request_time_max_map(path, cost_time):
            self.http_request_max_cost.labels(method, status, path).set(cost_time)
            self.request_time_max_map[path] = cost_time

    # Прогнозирование статистики затрат времени
    def set_prometheus_request_predict_cost(self, handler, amount=1.0):
        self.http_request_predict_cost.labels(handler.request.method, handler.get_status(), handler.request.path).inc(amount)

    # Настроить Прогнозирование статистики затрат времени
    def set_prometheus_request_predict_cost_customize(self, method, status, path, cost_time):
        self.http_request_predict_cost.labels(method, status, path).inc(cost_time)

    # Статистика времени загрузки
    def set_prometheus_request_download_cost(self, handler, amount=1.0):
        self.http_request_download_cost.labels(handler.request.method, handler.get_status(), handler.request.path).inc(amount)

    # Настроить статистику времени загрузки
    def set_prometheus_request_download_cost_customize(self, method, status, path, cost_time):
        self.http_request_download_cost.labels(method, status, path).inc(cost_time)

    # Проверка, назначать ли максимально трудоемкую карту
    def check_request_time_max_map(self, uri, cost):
        if uri not in self.request_time_max_map:
            return True
        if self.request_time_max_map[uri] < cost:
            return True
        return False

    # Сброс максимально трудоемкой карты
    def reset_request_time_max_map(self):
        for key in self.request_time_max_map:
            self.request_time_max_map[key] = 0.0
вызов
Язык кода:javascript
копировать
import tornado
import tornado.ioloop
import tornado.web
import tornado.gen
from datetime import datetime
from tools.monitor import Monitor

global g_monitor

class ClassifierHandler(tornado.web.RequestHandler):
    def post(self):
        # TODO Something you need
        # work....
        # Сводная статистика, включая количество запросов и затраченное время каждый раз
        g_monitor.set_prometheus_request_summary(self)
        self.write("OK")


class PingHandler(tornado.web.RequestHandler):
    def head(self):
        print('INFO', datetime.now(), "/ping Head.")
        g_monitor.set_prometheus_request_summary(self)
        self.write("OK")

    def get(self):
        print('INFO', datetime.now(), "/ping Get.")
        g_monitor.set_prometheus_request_summary(self)
        self.write("OK")


class MetricsHandler(tornado.web.RequestHandler):
    def get(self):
        print('INFO', datetime.now(), "/metrics Get.")
		g_monitor.set_prometheus_request_summary(self)
		# Возврат результатов статистики по Metricsинтерфейс
    	g_monitor.get_prometheus_metrics_info(self)
    

def make_app():
    return tornado.web.Application([
        (r"/ping?", PingHandler),
        (r"/metrics?", MetricsHandler),
        (r"/work?", ClassifierHandler)
    ])

if __name__ == "__main__":
    g_monitor = Monitor()
	
	app = make_app()
    app.listen(port)
    tornado.ioloop.IOLoop.current().start()

Метрики возвращают экземпляр результата

Ссылка: https://pythonjishu.com/ldkilffcsapzipi/ https://www.cnblogs.com/alioth01/p/14363574.html

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose