Overview
Prometheus a plusieurs exportateurs, mais j'ai créé des API Si vous souhaitez générer vos propres métriques, vous pouvez utiliser la bibliothèque cliente.
Donc, python a également une bibliothèque pour cela, qui est ici. En gros, vous pouvez le faire en utilisant Gauge, le code sera donc le suivant.
#!/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()
Ce serait bien si cela était fait à chaque fois, Par exemple, si la valeur 4.2 transmise à self.g.set est utilisée comme suit, des problèmes se produiront.
--Lorsque le code lui-même est réutilisé simplement en divisant la cible comme snmpget cpu_usage de
Plus précisément, que va-t-il se passer?
En d'autres termes, la valeur précédente est utilisée telle quelle. Dans le cas de la structure ci-dessus, l'utilisation du processeur = Aucune, etc. doit être explicitement saisie. Le nombre de processeurs du serveur A et du serveur B est fluide, comme pour le processeur dans cpu_num: Les valeurs factices ne peuvent pas être saisies si l'étiquette est générée dynamiquement.
En utilisant target_info de Collector Registry, qui a été nouvellement engagé en septembre 2019 Vous pourrez séparer le registre. Comme ça. Cependant, à partir de novembre 2019, target_info ajouté à registry.py Il n'est pas emballé, vous devez donc le remplacer vous-même.
#!/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()
Notez que ce qui précède ne fonctionne pas tel quel car aucun nom_serveur n'est entré. (Comme il s'agit d'une explication du registre des collecteurs, la cohérence de ces lieux est omise)