Skip to content

Commit

Permalink
Allow toggling auth for prometheus metrics
Browse files Browse the repository at this point in the history
Equivalent to jupyterhub/jupyterhub#2224.

Port of jupyter/notebook#5870

Prometheus metrics can potentially leak information about
the user, so they should be kept behind auth by default.
However, for many JupyterHub deployments, they would need
to be scraped by a centralized Prometheus instance that can not
really authenticate separately to each user notebook without
a lot of work. Admins can use this setting to allow unauthenticated
access to the /metrics endpoint.
  • Loading branch information
yuvipanda committed Nov 18, 2020
1 parent e3de58b commit 293bff0
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 2 deletions.
6 changes: 4 additions & 2 deletions jupyter_server/base/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -842,10 +842,12 @@ def get(self):

class PrometheusMetricsHandler(JupyterHandler):
"""
Return prometheus metrics for this Jupyter server
Return prometheus metrics for this notebook server
"""
@web.authenticated
def get(self):
if self.settings['authenticate_prometheus'] and not self.logged_in:
raise web.HTTPError(403)

self.set_header('Content-Type', prometheus_client.CONTENT_TYPE_LATEST)
self.write(prometheus_client.generate_latest(prometheus_client.REGISTRY))

Expand Down
9 changes: 9 additions & 0 deletions jupyter_server/serverapp.py
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,7 @@ def init_settings(self, jupyter_app, kernel_manager, contents_manager,
disable_check_xsrf=jupyter_app.disable_check_xsrf,
allow_remote_access=jupyter_app.allow_remote_access,
local_hostnames=jupyter_app.local_hostnames,
authenticate_prometheus=jupyter_app.authenticate_prometheus,

# managers
kernel_manager=kernel_manager,
Expand Down Expand Up @@ -1199,6 +1200,14 @@ def _update_server_extensions(self, change):
is not available.
"""))

authenticate_prometheus = Bool(
True,
help=""""
Require authentication to access prometheus metrics.
""",
config=True
)

def parse_command_line(self, argv=None):

super(ServerApp, self).parse_command_line(argv)
Expand Down

0 comments on commit 293bff0

Please sign in to comment.