Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import threading
- from http.server import HTTPServer
- import socket
- import time
- import datetime
- from prometheus.collectors import Gauge
- from prometheus.registry import Registry
- from prometheus.exporter import PrometheusMetricHandler
- PORT_NUMBER = 9999
- seconds = 0
- def seconds_elapsed():
- return seconds
- def time_elapsed():
- return datetime.timedelta(seconds=seconds_elapsed())
- def gather_data(registry):
- """Gathers the metrics"""
- global seconds
- # Acquire the name of host
- host = socket.gethostname()
- fqdn = socket.getfqdn(host)
- # Create our collectors
- time_metric = Gauge("host_time_epoch", "")
- fqdn_metric = Gauge("fully_qualified_domain_name", "")
- # register the metric collectors
- registry.register(time_metric)
- registry.register(fqdn_metric)
- # Start gathering metrics every second
- while True:
- time.sleep(1)
- seconds += 1
- time_metric.set({'type': 'Timestamp'}, time_elapsed())
- time_metric.set({'type': 'Seconds'}, seconds)
- fqdn_metric.set("", fqdn)
- if __name__ == "__main__":
- # Create the registry
- registry = Registry()
- # Create the thread that gathers the data while we serve it
- thread = threading.Thread(target=gather_data, args=(registry,))
- thread.start()
- # Set a server to export (expose to prometheus) the data (in a thread)
- try:
- # We make this to set the registry in the handler
- def handler(*args, **kwargs):
- PrometheusMetricHandler(registry, *args, **kwargs)
- server = HTTPServer(('0.0.0.0', PORT_NUMBER), handler)
- server.serve_forever()
- except KeyboardInterrupt:
- server.socket.close()
- thread.join()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement