|
|
- """
- Prometheus metrics exported by Jupyter Notebook Server
-
- Read https://prometheus.io/docs/practices/naming/ for naming
- conventions for metrics & labels.
- """
-
- from prometheus_client import Histogram
-
- # This is a fairly standard name for HTTP duration latency reporting
- HTTP_REQUEST_DURATION_SECONDS = Histogram(
- 'http_request_duration_seconds',
- 'duration in seconds for all HTTP requests',
- ['method', 'handler', 'status_code'],
- )
-
- def prometheus_log_method(handler):
- """
- Tornado log handler for recording RED metrics.
-
- We record the following metrics:
- Rate - the number of requests, per second, your services are serving.
- Errors - the number of failed requests per second.
- Duration - The amount of time each request takes expressed as a time interval.
-
- We use a fully qualified name of the handler as a label,
- rather than every url path to reduce cardinality.
-
- This function should be either the value of or called from a function
- that is the 'log_function' tornado setting. This makes it get called
- at the end of every request, allowing us to record the metrics we need.
- """
- HTTP_REQUEST_DURATION_SECONDS.labels(
- method=handler.request.method,
- handler='{}.{}'.format(handler.__class__.__module__, type(handler).__name__),
- status_code=handler.get_status()
- ).observe(handler.request.request_time())
|