feat(cgroups.plugin): add k8s cluster name label (GKE only) (#12858)
Ilya Mashchenko committed
May 9, 2022 at 22:04 UTC
ff4b15fb5681581f780e330a31deabb8ec206687
1 file changed
+25
collectors/cgroups.plugin/cgroup-name.sh
+25
@@ -139,6 +139,20 @@ function k8s_is_pause_container() {
139
return
140
}
141
142
+function k8s_gcp_get_cluster_name() {
143
+ local header url id loc name
144
+ header="Metadata-Flavor: Google"
145
+ url="http://metadata/computeMetadata/v1"
146
+ if id=$(curl --fail -s -m 3 --noproxy "*" -H "$header" "$url/project/project-id") &&
147
+ loc=$(curl --fail -s -m 3 --noproxy "*" -H "$header" "$url/instance/attributes/cluster-location") &&
148
+ name=$(curl --fail -s -m 3 --noproxy "*" -H "$header" "$url/instance/attributes/cluster-name") &&
149
+ [ -n "$id" ] && [ -n "$loc" ] && [ -n "$name" ]; then
150
+ echo "gke_${id}_${loc}_${name}"
151
+ return 0
152
+ fi
153
+ return 1
154
+}
155
+
156
# k8s_get_kubepod_name resolves */kubepods/* cgroup name.
157
# pod level cgroup name format: 'pod_<namespace>_<pod_name>'
158
# container level cgroup name format: 'cntr_<namespace>_<pod_name>_<container_name>'
@@ -230,21 +244,29 @@ function k8s_get_kubepod_name() {
244
return 1
245
fi
246
247
+ local tmp_kube_cluster_name="${TMPDIR:-"/tmp"}/netdata-cgroups-k8s-cluster-name"
248
local tmp_kube_system_ns_uid_file="${TMPDIR:-"/tmp"}/netdata-cgroups-kubesystem-uid"
249
local tmp_kube_containers_file="${TMPDIR:-"/tmp"}/netdata-cgroups-containers"
250
251
+ local kube_cluster_name
252
local kube_system_uid
253
local labels
254
255
if [ -n "$cntr_id" ] &&
256
+ [ -f "$tmp_kube_cluster_name" ] &&
257
[ -f "$tmp_kube_system_ns_uid_file" ] &&
258
[ -f "$tmp_kube_containers_file" ] &&
259
labels=$(grep "$cntr_id" "$tmp_kube_containers_file" 2>/dev/null); then
260
IFS= read -r kube_system_uid 2>/dev/null <"$tmp_kube_system_ns_uid_file"
261
+ IFS= read -r kube_cluster_name 2>/dev/null <"$tmp_kube_cluster_name"
262
else
263
IFS= read -r kube_system_uid 2>/dev/null <"$tmp_kube_system_ns_uid_file"
264
+ IFS= read -r kube_cluster_name 2>/dev/null <"$tmp_kube_containers_file"
265
+ [ -z "$kube_cluster_name" ] && ! kube_cluster_name=$(k8s_gcp_get_cluster_name) && kube_cluster_name="unknown"
266
+
267
local kube_system_ns
268
local pods
269
+
270
if [ -n "${KUBERNETES_SERVICE_HOST}" ] && [ -n "${KUBERNETES_PORT_443_TCP_PORT}" ]; then
271
local token header host url
272
token="$(</var/run/secrets/kubernetes.io/serviceaccount/token)"
@@ -308,6 +330,7 @@ function k8s_get_kubepod_name() {
330
return 1
331
fi
332
333
+ [ -n "$kube_cluster_name" ] && echo "$kube_cluster_name" >"$tmp_kube_cluster_name" 2>/dev/null
334
[ -n "$kube_system_ns" ] && [ -n "$kube_system_uid" ] && echo "$kube_system_uid" >"$tmp_kube_system_ns_uid_file" 2>/dev/null
335
echo "$containers" >"$tmp_kube_containers_file" 2>/dev/null
336
fi
@@ -326,6 +349,7 @@ function k8s_get_kubepod_name() {
349
labels+=',kind="container"'
350
labels+=",qos_class=\"$qos_class\""
351
[ -n "$kube_system_uid" ] && [ "$kube_system_uid" != "null" ] && labels+=",cluster_id=\"$kube_system_uid\""
352
+ [ -n "$kube_cluster_name" ] && [ "$kube_cluster_name" != "unknown" ] && labels+=",cluster_name=\"$kube_cluster_name\""
353
name="cntr"
354
name+="_$(get_lbl_val "$labels" namespace)"
355
name+="_$(get_lbl_val "$labels" pod_name)"
@@ -341,6 +365,7 @@ function k8s_get_kubepod_name() {
365
labels+=',kind="pod"'
366
labels+=",qos_class=\"$qos_class\""
367
[ -n "$kube_system_uid" ] && [ "$kube_system_uid" != "null" ] && labels+=",cluster_id=\"$kube_system_uid\""
368
+ [ -n "$kube_cluster_name" ] && [ "$kube_cluster_name" != "unknown" ] && labels+=",cluster_name=\"$kube_cluster_name\""
369
name="pod"
370
name+="_$(get_lbl_val "$labels" namespace)"
371
name+="_$(get_lbl_val "$labels" pod_name)"