1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
"""
Prometheus metrics exported by Jupyter Server
Read https://prometheus.io/docs/practices/naming/ for naming
conventions for metrics & labels.
"""
from prometheus_client import Gauge, Histogram, Info
from jupyter_server._version import version_info as server_version_info
try:
from notebook._version import version_info as notebook_version_info
except ImportError:
notebook_version_info = None
if (
notebook_version_info is not None # No notebook package found
and notebook_version_info < (7,) # Notebook package found, is version 6
# Notebook package found, but its version is the same as jupyter_server
# version. This means some package (looking at you, nbclassic) has shimmed
# the notebook package to instead be imports from the jupyter_server package.
# In such cases, notebook.prometheus.metrics is actually *this file*, so
# trying to import it will cause a circular import. So we don't.
and notebook_version_info != server_version_info
):
# Jupyter Notebook v6 also defined these metrics. Re-defining them results in a ValueError,
# so we simply re-export them if we are co-existing with the notebook v6 package.
# See https://github.com/jupyter/jupyter_server/issues/209
from notebook.prometheus.metrics import (
HTTP_REQUEST_DURATION_SECONDS,
KERNEL_CURRENTLY_RUNNING_TOTAL,
TERMINAL_CURRENTLY_RUNNING_TOTAL,
)
else:
HTTP_REQUEST_DURATION_SECONDS = Histogram(
"http_request_duration_seconds",
"duration in seconds for all HTTP requests",
["method", "handler", "status_code"],
)
TERMINAL_CURRENTLY_RUNNING_TOTAL = Gauge(
"terminal_currently_running_total",
"counter for how many terminals are running",
)
KERNEL_CURRENTLY_RUNNING_TOTAL = Gauge(
"kernel_currently_running_total",
"counter for how many kernels are running labeled by type",
["type"],
)
# New prometheus metrics that do not exist in notebook v6 go here
SERVER_INFO = Info("jupyter_server", "Jupyter Server Version information")
SERVER_EXTENSION_INFO = Info(
"jupyter_server_extension",
"Jupyter Server Extensiom Version Information",
["name", "version", "enabled"],
)
LAST_ACTIVITY = Gauge(
"jupyter_server_last_activity_timestamp_seconds",
"Timestamp of last seen activity on this Jupyter Server",
)
SERVER_STARTED = Gauge(
"jupyter_server_started_timestamp_seconds", "Timestamp of when this Jupyter Server was started"
)
ACTIVE_DURATION = Gauge(
"jupyter_server_active_duration_seconds",
"Number of seconds this Jupyter Server has been active",
)
__all__ = [
"HTTP_REQUEST_DURATION_SECONDS",
"TERMINAL_CURRENTLY_RUNNING_TOTAL",
"KERNEL_CURRENTLY_RUNNING_TOTAL",
"SERVER_INFO",
]
|