Prometheus python client sample server

Flask:

 

from flask import Response, Flask, request
import prometheus_client
from prometheus_client.core import CollectorRegistry
from prometheus_client import Summary, Counter, Histogram, Gauge
import random, time

# Create my app
app = Flask(__name__)

# Create a metric to track time spent and requests made.
REQUEST_TIME = Summary('request_processing_seconds', 'Time spent processing request')
_INF = float("inf")

graphs = {}
graphs['c'] = Counter('test_of_counter', 'Description of counter')
graphs['h'] = Histogram('test_of_histogram', 'Description of histogram', buckets=(1, 5, 10, 50, 100, 200, 500, _INF))
graphs['g'] = Gauge('test_of_gauge', 'Description of gauge')

@app.route("/update/count", methods=["GET"])
def update_count():
    graphs['c'].inc()
    return requests_count()

@app.route("/update/histogram", methods=["GET"])
def update_histogram():
    print request.args
    k = float(request.args.get('value'))
    graphs['h'].observe(k)
    return requests_count()

@app.route("/update/gauge", methods=["GET"])
def update_gauge():
    print request.args
    k = request.args.get('value')
    graphs['g'].set(k)
    return requests_count()

@app.route("/metrics")
def requests_count():
    res = []
    for k,v in graphs.iteritems():
        res.append(prometheus_client.generate_latest(v))
    # res = [prometheus_client.generate_latest(c), prometheus_client.generate_latest(h), prometheus_client.generate_latest(g)]
    return Response(res, mimetype="text/plain")

if __name__ == "__main__":
    app.run(host="0.0.0.0")

prometheus server:

from prometheus_client import start_http_server, Summary, Counter, Histogram, Gauge, MetricsHandler
import random
import time

# Create a metric to track time spent and requests made.
REQUEST_TIME = Summary('request_processing_seconds', 'Time spent processing request')
_INF = float("inf")

# Decorate function with metric.
@REQUEST_TIME.time()
def process_request(t):
    """A dummy function that takes some time."""
    c.inc()  # Increment by 1
    h.observe(t * 100)
    time.sleep(t)
    g.set(t)

if __name__ == '__main__':
    # Start up the server to expose the metrics.
    start_http_server(8000)

    c = Counter('test_of_counter', 'Description of counter')
    h = Histogram('test_of_histogram', 'Description of histogram', buckets=(1, 5, 10, 50, 100, 200, 500, _INF))
    g = Gauge('test_of_gauge', 'Description of gauge')

    # Generate some requests.
    while True:
        process_request(random.random())

Leave a Reply

Your email address will not be published. Required fields are marked *