Prometheus client_python-Tipps - So erstellen Sie Metriken für mehrere Ziele

Overview

Prometheus hat verschiedene Exporteure, aber ich habe APIs erstellt Wenn Sie Ihre eigenen Metriken generieren möchten, können Sie die Clientbibliothek verwenden.

Python hat also auch eine Bibliothek dafür, hier. Grundsätzlich können Sie es mit Gauge erstellen, sodass der Code wie folgt lautet.

#!/usr/bin/env python3
# import os
import sys
import re
from logging import getLogger
from prometheus_client import generate_latest
from prometheus_client import Gauge
from prometheus_client import REGISTRY
logger = getLogger(__name__)

class MetricsGenetator(object):

    def __init__(self):
        self.g = Gauge('my_inprogress_requests', 'Description of gauge')

    def run(self):
        self.g.inc()      # Increment by 1
        self.g.dec(10)    # Decrement by given value
        self.g.set(4.2)   # Set to a given value
        metrics = generate_latest(self.registry)
        return metrics



def main():
    app = MetricsGenerator()
    metrics = app.run()
    print(metrics)

if __name__ == '__main__':
    main()

Es wäre schön, wenn dies jedes Mal gemacht würde, Wenn beispielsweise der an self.g.set übergebene Wert 4.2 wie folgt verwendet wird, treten Probleme auf.

--Wenn der Code selbst wiederverwendet wird, teilen Sie das Ziel wie snmpget cpu_usage von

Was wird konkret passieren?

  1. Holen Sie sich die CPU-Auslastung von einem Server auf -50
  2. Der Versuch, die CPU-Auslastung von Server B abzurufen, schlägt fehl (Keine).
  1. Dann wird die CPU-Auslastung von Server B als 50 zurückgegeben.

Mit anderen Worten, der vorherige Wert wird unverändert verwendet. Im Fall der obigen Struktur sollte die CPU-Auslastung = Keine usw. explizit eingegeben werden. Die Anzahl der CPUs von A-Server und B-Server ist fließend, z. B. für CPU in cpu_num: Dummy-Werte können nicht eingegeben werden, wenn das Etikett dynamisch generiert wird.

was ist zu tun

Durch die Verwendung von target_info von Collector Registry, das im September 2019 neu festgeschrieben wurde Sie können die Registrierung trennen. So was. Ab November 2019 wurde target_info jedoch zu registry.py hinzugefügt Es ist nicht verpackt, daher müssen Sie es selbst ersetzen.

#!/usr/bin/env python3
# import os
import sys
import re
from logging import getLogger
from prometheus_client import generate_latest
from prometheus_client import Gauge
# from prometheus_client import REGISTRY
from prometheus_client.core import CollectorRegistry
logger = getLogger(__name__)

class MetricsGenetator(object):

    def __init__(self):
        registry = CollectorRegistry(target_info={"target": server_name})
        self.g = Gauge(
                     'my_inprogress_requests',
                     'Description of gauge',
                     registry=registry)

    def run(self):
        self.g.inc()      # Increment by 1
        self.g.dec(10)    # Decrement by given value
        self.g.set(4.2)   # Set to a given value
        metrics = generate_latest(self.registry)
        return metrics



def main():
    app = MetricsGenerator()
    metrics = app.run()
    print(metrics)

if __name__ == '__main__':
    main()

Beachten Sie, dass das oben Gesagte nicht funktioniert, da kein Servername eingegeben wird. (Da es sich um eine Erklärung des Collector Registry handelt, wird die Konsistenz solcher Orte weggelassen.)

Recommended Posts

Prometheus client_python-Tipps - So erstellen Sie Metriken für mehrere Ziele
So erstellen Sie eine * .spec-Datei für pyinstaller.
[Python] So erstellen Sie auf einfache Weise Ordner für Training, Validierung und Test für mehrere Klassifizierungsprobleme