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?
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.
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.)