33from typing import Text
44
55from flask import Blueprint , Response , request
6+ from prometheus_client import Counter , Histogram , generate_latest
67from pyms .flask .services .driver import DriverService
78
8- from prometheus_client import generate_latest
9- from opentelemetry import metrics
10- from opentelemetry .exporter .prometheus import PrometheusMetricsExporter
11- from opentelemetry .sdk .metrics .export import ConsoleMetricsExporter
12- from opentelemetry .sdk .metrics import Counter , ValueRecorder , MeterProvider
13-
149# Based on https://github.com/sbarratt/flask-prometheus
1510# and https://github.com/korfuri/python-logging-prometheus/
1611
17- metrics .set_meter_provider (MeterProvider ())
18- meter = metrics .get_meter (__name__ )
19- exporter = PrometheusMetricsExporter ()
20- metrics .get_meter_provider ().start_pipeline (meter , exporter , 1 )
21-
22- FLASK_REQUEST_LATENCY = meter .create_metric (
23- "http_server_requests_seconds" ,
24- "Flask Request Latency" ,
25- "http_server_requests_seconds" ,
26- float ,
27- ValueRecorder ,
28- ("service" , "method" , "uri" , "status" ),
12+ FLASK_REQUEST_LATENCY = Histogram (
13+ "http_server_requests_seconds" , "Flask Request Latency" , ["service" , "method" , "uri" , "status" ]
2914)
30- FLASK_REQUEST_COUNT = meter .create_metric (
31- "http_server_requests_count" ,
32- "Flask Request Count" ,
33- "http_server_requests_count" ,
34- int ,
35- Counter ,
36- ["service" , "method" , "uri" , "status" ],
15+ FLASK_REQUEST_COUNT = Counter (
16+ "http_server_requests_count" , "Flask Request Count" , ["service" , "method" , "uri" , "status" ]
3717)
38- LOGGER_TOTAL_MESSAGES = meter .create_metric (
18+
19+ LOGGER_TOTAL_MESSAGES = Counter (
3920 "logger_messages_total" ,
4021 "Count of log entries by service and level." ,
41- "logger_messages_total" ,
42- int ,
43- Counter ,
4422 ["service" , "level" ],
4523)
4624
@@ -58,28 +36,20 @@ def after_request(self, response):
5836 else :
5937 path = request .path
6038 request_latency = time .time () - request .start_time
61- labels = {
62- "service" : self .app_name ,
63- "method" : str (request .method ),
64- "uri" : path ,
65- "status" : str (response .status_code ),
66- }
67-
68- FLASK_REQUEST_LATENCY .record (request_latency , labels )
69- FLASK_REQUEST_COUNT .add (1 , labels )
39+ FLASK_REQUEST_LATENCY .labels (self .app_name , request .method , path , response .status_code ).observe (request_latency )
40+ FLASK_REQUEST_COUNT .labels (self .app_name , request .method , path , response .status_code ).inc ()
7041
7142 return response
7243
7344
7445class Service (DriverService ):
7546 """
76- Adds [Prometheus](https://prometheus.io/) metrics using the [Opentelemetry Client Library](https://opentelemetry-python.readthedocs.io/en/latest/exporter/ prometheus/prometheus.html ).
47+ Adds [Prometheus](https://prometheus.io/) metrics using the [Prometheus Client Library](https://github.com/ prometheus/client_python ).
7748 """
7849 config_resource : Text = "metrics"
7950
8051 def __init__ (self , * args , ** kwargs ):
8152 super ().__init__ (* args , ** kwargs )
82-
8353 self .metrics_blueprint = Blueprint ("metrics" , __name__ )
8454 self .serve_metrics ()
8555
@@ -109,8 +79,7 @@ class MetricsLogHandler(logging.Handler):
10979
11080 def __init__ (self , app_name ):
11181 super ().__init__ ()
112- self .app_name = str ( app_name )
82+ self .app_name = app_name
11383
11484 def emit (self , record ):
115- labels = {"service" : self .app_name , "level" : record .levelname }
116- LOGGER_TOTAL_MESSAGES .add (1 , labels )
85+ LOGGER_TOTAL_MESSAGES .labels (self .app_name , record .levelname ).inc ()
0 commit comments