@cryptotaxi247 / netdata-1 / commits / ff4b15fb5

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)"