@@ -25,17 +25,29 @@ local memoryUsage =
2525 '$PROMETHEUS_DS' ,
2626 |||
2727 sum(
28- container_memory_working_set_bytes{name!="", pod=~"jupyter-.*", namespace=~"$hub_name"}
29- * on (namespace, pod) group_left(annotation_hub_jupyter_org_username, usergroup)
30- group(
31- kube_pod_annotations{namespace=~"$hub_name", annotation_hub_jupyter_org_username=~".*", pod=~"jupyter-.*"}
32- ) by (pod, namespace, annotation_hub_jupyter_org_username)
33- * on (namespace, annotation_hub_jupyter_org_username) group_left(usergroup)
28+
29+ # sum pod containers' Memory usage, for each namespace and user combination
30+ sum(
31+ container_memory_working_set_bytes{namespace=~"$hub_name", pod=~"jupyter-.*", name!=""}
32+
33+ # add an annotation_hub_jupyter_org_username label
34+ * on (namespace, pod) group_left(annotation_hub_jupyter_org_username)
3435 group(
35- label_replace(jupyterhub_user_group_info{namespace=~"$hub_name", username=~".*", usergroup=~"$user_group"},
36- "annotation_hub_jupyter_org_username", "$1", "username", "(.+)")
37- ) by (annotation_hub_jupyter_org_username, usergroup, namespace)
38- ) by (usergroup, namespace)
36+ kube_pod_annotations{namespace=~"$hub_name", annotation_hub_jupyter_org_username=~".*"}
37+ ) by (namespace, pod, annotation_hub_jupyter_org_username)
38+ ) by (namespace, annotation_hub_jupyter_org_username)
39+
40+ # make namespace/user combinations become more namespace/user/usergroup combinations
41+ * on (namespace, annotation_hub_jupyter_org_username) group_right()
42+ group(
43+ # duplicate jupyterhub_user_group_info's username label as annotation_hub_jupyter_org_username
44+ label_replace(
45+ jupyterhub_user_group_info{namespace=~"$hub_name", username=~".*", usergroup=~"$user_group"},
46+ "annotation_hub_jupyter_org_username", "$1", "username", "(.+)"
47+ )
48+ ) by (namespace, annotation_hub_jupyter_org_username, usergroup)
49+
50+ ) by (namespace, usergroup)
3951 |||
4052 )
4153 + prometheus.withLegendFormat('{{ usergroup }} - ({{ namespace }})' ),
@@ -61,20 +73,29 @@ local cpuUsage =
6173 '$PROMETHEUS_DS' ,
6274 |||
6375 sum(
64- # exclude name="" because the same container can be reported
65- # with both no name and `name=k8s_...`,
66- # in which case sum() by (pod) reports double the actual metric
67- irate(container_cpu_usage_seconds_total{name!="", pod=~"jupyter-.*"}[5m])
68- * on (namespace, pod) group_left(annotation_hub_jupyter_org_username)
69- group(
70- kube_pod_annotations{namespace=~"$hub_name", annotation_hub_jupyter_org_username=~".*"}
71- ) by (pod, namespace, annotation_hub_jupyter_org_username)
72- * on (namespace, annotation_hub_jupyter_org_username) group_left(usergroup)
76+
77+ # sum pod containers' CPU usage, for each namespace and user combination
78+ sum(
79+ irate(container_cpu_usage_seconds_total{pod=~"jupyter-.*", name!=""}[5m])
80+
81+ # add an annotation_hub_jupyter_org_username label
82+ * on (namespace, pod) group_left(annotation_hub_jupyter_org_username)
83+ group(
84+ kube_pod_annotations{namespace=~"$hub_name", annotation_hub_jupyter_org_username=~".*"}
85+ ) by (namespace, pod, annotation_hub_jupyter_org_username)
86+ ) by (namespace, annotation_hub_jupyter_org_username)
87+
88+ # make namespace/user combinations become more namespace/user/usergroup combinations
89+ * on (namespace, annotation_hub_jupyter_org_username) group_right()
7390 group(
74- label_replace(jupyterhub_user_group_info{namespace=~"$hub_name", username=~".*", usergroup=~"$user_group"},
75- "annotation_hub_jupyter_org_username", "$1", "username", "(.+)")
76- ) by (annotation_hub_jupyter_org_username, usergroup, namespace)
77- ) by (usergroup, namespace)
91+ # duplicate jupyterhub_user_group_info's username label as annotation_hub_jupyter_org_username
92+ label_replace(
93+ jupyterhub_user_group_info{namespace=~"$hub_name", username=~".*", usergroup=~"$user_group"},
94+ "annotation_hub_jupyter_org_username", "$1", "username", "(.+)"
95+ )
96+ ) by (namespace, annotation_hub_jupyter_org_username, usergroup)
97+
98+ ) by (namespace, usergroup)
7899 |||
79100 )
80101 + prometheus.withLegendFormat('{{ usergroup }} - ({{ namespace }})' ),
@@ -99,15 +120,31 @@ local homedirSharedUsage =
99120 '$PROMETHEUS_DS' ,
100121 |||
101122 sum(
123+
124+ # max is used to de-duplicate data from multiple sources
102125 max(
103126 dirsize_total_size_bytes{namespace=~"$hub_name"}
104127 ) by (namespace, directory)
105- * on (namespace, directory) group_left(usergroup)
128+
129+ # make namespace/directory combinations become more namespace/directory/usergroup combinations
130+ * on (namespace, directory) group_right()
106131 group(
132+ # FIXME: We assume ability to match the escaped username with the
133+ # directory name, but how usernames are escaped has changed
134+ # over time - the directory name may or may not match
135+ # `username_escaped`.
136+ #
137+ 138+ # - old escaped: my-2ename-40example-2ecom
139+ # - new escaped: my-name-example-com---abcd1234
140+ #
141+ # duplicate jupyterhub_user_group_info's username_escaped label as directory
107142 label_replace(
108143 jupyterhub_user_group_info{namespace=~"$hub_name", username_escaped=~".*", usergroup=~"$user_group"},
109- "directory", "$1", "username_escaped", "(.+)")
110- ) by (directory, namespace, usergroup)
144+ "directory", "$1", "username_escaped", "(.+)"
145+ )
146+ ) by (namespace, directory, usergroup)
147+
111148 ) by (namespace, usergroup)
112149 |||
113150 )
@@ -133,16 +170,29 @@ local memoryRequests =
133170 '$PROMETHEUS_DS' ,
134171 |||
135172 sum(
136- kube_pod_container_resource_requests{resource="memory", namespace=~"$hub_name", pod=~"jupyter-.*"} * on (namespace, pod)
137- group_left(annotation_hub_jupyter_org_username) group(
138- kube_pod_annotations{namespace=~"$hub_name", annotation_hub_jupyter_org_username=~".*"}
139- ) by (pod, namespace, annotation_hub_jupyter_org_username)
140- * on (namespace, annotation_hub_jupyter_org_username) group_left(usergroup)
173+
174+ # sum pod containers' Memory requests, for each namespace and user combination
175+ sum(
176+ kube_pod_container_resource_requests{resource="memory", namespace=~"$hub_name", pod=~"jupyter-.*"}
177+
178+ # add an annotation_hub_jupyter_org_username label
179+ * on (namespace, pod) group_left(annotation_hub_jupyter_org_username)
180+ group(
181+ kube_pod_annotations{namespace=~"$hub_name", annotation_hub_jupyter_org_username=~".*"}
182+ ) by (namespace, pod, annotation_hub_jupyter_org_username)
183+ ) by (namespace, annotation_hub_jupyter_org_username)
184+
185+ # make namespace/user combinations become more namespace/user/usergroup combinations
186+ * on (namespace, annotation_hub_jupyter_org_username) group_right()
141187 group(
142- label_replace(jupyterhub_user_group_info{namespace=~"$hub_name", username=~".*", usergroup=~"$user_group"},
143- "annotation_hub_jupyter_org_username", "$1", "username", "(.+)")
144- ) by (annotation_hub_jupyter_org_username, usergroup, namespace)
145- ) by (usergroup, namespace)
188+ # duplicate jupyterhub_user_group_info's username label as annotation_hub_jupyter_org_username
189+ label_replace(
190+ jupyterhub_user_group_info{namespace=~"$hub_name", username=~".*", usergroup=~"$user_group"},
191+ "annotation_hub_jupyter_org_username", "$1", "username", "(.+)"
192+ )
193+ ) by (namespace, annotation_hub_jupyter_org_username, usergroup)
194+
195+ ) by (namespace, usergroup)
146196 |||
147197 )
148198 + prometheus.withLegendFormat('{{ usergroup }} - ({{ namespace }})' ),
@@ -167,16 +217,29 @@ local cpuRequests =
167217 '$PROMETHEUS_DS' ,
168218 |||
169219 sum(
170- kube_pod_container_resource_requests{resource="cpu", namespace=~"$hub_name", pod=~"jupyter-.*"} * on (namespace, pod)
171- group_left(annotation_hub_jupyter_org_username) group(
172- kube_pod_annotations{namespace=~"$hub_name", annotation_hub_jupyter_org_username=~".*"}
173- ) by (pod, namespace, annotation_hub_jupyter_org_username)
174- * on (namespace, annotation_hub_jupyter_org_username) group_left(usergroup)
220+
221+ # sum pod containers' CPU requests, for each namespace and user combination
222+ sum(
223+ kube_pod_container_resource_requests{resource="cpu", namespace=~"$hub_name", pod=~"jupyter-.*"}
224+
225+ # add an annotation_hub_jupyter_org_username label
226+ * on (namespace, pod) group_left(annotation_hub_jupyter_org_username)
227+ group(
228+ kube_pod_annotations{namespace=~"$hub_name", annotation_hub_jupyter_org_username=~".*"}
229+ ) by (namespace, pod, annotation_hub_jupyter_org_username)
230+ ) by (namespace, annotation_hub_jupyter_org_username)
231+
232+ # make namespace/user combinations become more namespace/user/usergroup combinations
233+ * on (namespace, annotation_hub_jupyter_org_username) group_right()
175234 group(
176- label_replace(jupyterhub_user_group_info{namespace=~"$hub_name", username=~".*", usergroup=~"$user_group"},
177- "annotation_hub_jupyter_org_username", "$1", "username", "(.+)")
178- ) by (annotation_hub_jupyter_org_username, usergroup, namespace)
179- ) by (usergroup, namespace)
235+ # duplicate jupyterhub_user_group_info's username label as annotation_hub_jupyter_org_username
236+ label_replace(
237+ jupyterhub_user_group_info{namespace=~"$hub_name", username=~".*", usergroup=~"$user_group"},
238+ "annotation_hub_jupyter_org_username", "$1", "username", "(.+)"
239+ )
240+ ) by (namespace, annotation_hub_jupyter_org_username, usergroup)
241+
242+ ) by (namespace, usergroup)
180243 |||
181244 )
182245 + prometheus.withLegendFormat('{{ usergroup }} - ({{ namespace }})' ),
0 commit comments