summaryrefslogtreecommitdiffstats
path: root/collectors/cgroups.plugin
diff options
context:
space:
mode:
authorIlya Mashchenko <ilya@netdata.cloud>2022-05-09 22:04:01 +0300
committerGitHub <noreply@github.com>2022-05-09 22:04:01 +0300
commitff4b15fb5681581f780e330a31deabb8ec206687 (patch)
treeee778f501181840d8372740620610b061e51fa29 /collectors/cgroups.plugin
parent8e573c63208f66c1ed533369f8b4917da981b962 (diff)
feat(cgroups.plugin): add k8s cluster name label (GKE only) (#12858)
Diffstat (limited to 'collectors/cgroups.plugin')
-rwxr-xr-xcollectors/cgroups.plugin/cgroup-name.sh25
1 files changed, 25 insertions, 0 deletions
diff --git a/collectors/cgroups.plugin/cgroup-name.sh b/collectors/cgroups.plugin/cgroup-name.sh
index e65167568f..924b5b3197 100755
--- a/collectors/cgroups.plugin/cgroup-name.sh
+++ b/collectors/cgroups.plugin/cgroup-name.sh
@@ -139,6 +139,20 @@ function k8s_is_pause_container() {
return
}
+function k8s_gcp_get_cluster_name() {
+ local header url id loc name
+ header="Metadata-Flavor: Google"
+ url="http://metadata/computeMetadata/v1"
+ if id=$(curl --fail -s -m 3 --noproxy "*" -H "$header" "$url/project/project-id") &&
+ loc=$(curl --fail -s -m 3 --noproxy "*" -H "$header" "$url/instance/attributes/cluster-location") &&
+ name=$(curl --fail -s -m 3 --noproxy "*" -H "$header" "$url/instance/attributes/cluster-name") &&
+ [ -n "$id" ] && [ -n "$loc" ] && [ -n "$name" ]; then
+ echo "gke_${id}_${loc}_${name}"
+ return 0
+ fi
+ return 1
+}
+
# k8s_get_kubepod_name resolves */kubepods/* cgroup name.
# pod level cgroup name format: 'pod_<namespace>_<pod_name>'
# container level cgroup name format: 'cntr_<namespace>_<pod_name>_<container_name>'
@@ -230,21 +244,29 @@ function k8s_get_kubepod_name() {
return 1
fi
+ local tmp_kube_cluster_name="${TMPDIR:-"/tmp"}/netdata-cgroups-k8s-cluster-name"
local tmp_kube_system_ns_uid_file="${TMPDIR:-"/tmp"}/netdata-cgroups-kubesystem-uid"
local tmp_kube_containers_file="${TMPDIR:-"/tmp"}/netdata-cgroups-containers"
+ local kube_cluster_name
local kube_system_uid
local labels
if [ -n "$cntr_id" ] &&
+ [ -f "$tmp_kube_cluster_name" ] &&
[ -f "$tmp_kube_system_ns_uid_file" ] &&
[ -f "$tmp_kube_containers_file" ] &&
labels=$(grep "$cntr_id" "$tmp_kube_containers_file" 2>/dev/null); then
IFS= read -r kube_system_uid 2>/dev/null <"$tmp_kube_system_ns_uid_file"
+ IFS= read -r kube_cluster_name 2>/dev/null <"$tmp_kube_cluster_name"
else
IFS= read -r kube_system_uid 2>/dev/null <"$tmp_kube_system_ns_uid_file"
+ IFS= read -r kube_cluster_name 2>/dev/null <"$tmp_kube_containers_file"
+ [ -z "$kube_cluster_name" ] && ! kube_cluster_name=$(k8s_gcp_get_cluster_name) && kube_cluster_name="unknown"
+
local kube_system_ns
local pods
+
if [ -n "${KUBERNETES_SERVICE_HOST}" ] && [ -n "${KUBERNETES_PORT_443_TCP_PORT}" ]; then
local token header host url
token="$(</var/run/secrets/kubernetes.io/serviceaccount/token)"
@@ -308,6 +330,7 @@ function k8s_get_kubepod_name() {
return 1
fi
+ [ -n "$kube_cluster_name" ] && echo "$kube_cluster_name" >"$tmp_kube_cluster_name" 2>/dev/null
[ -n "$kube_system_ns" ] && [ -n "$kube_system_uid" ] && echo "$kube_system_uid" >"$tmp_kube_system_ns_uid_file" 2>/dev/null
echo "$containers" >"$tmp_kube_containers_file" 2>/dev/null
fi
@@ -326,6 +349,7 @@ function k8s_get_kubepod_name() {
labels+=',kind="container"'
labels+=",qos_class=\"$qos_class\""
[ -n "$kube_system_uid" ] && [ "$kube_system_uid" != "null" ] && labels+=",cluster_id=\"$kube_system_uid\""
+ [ -n "$kube_cluster_name" ] && [ "$kube_cluster_name" != "unknown" ] && labels+=",cluster_name=\"$kube_cluster_name\""
name="cntr"
name+="_$(get_lbl_val "$labels" namespace)"
name+="_$(get_lbl_val "$labels" pod_name)"
@@ -341,6 +365,7 @@ function k8s_get_kubepod_name() {
labels+=',kind="pod"'
labels+=",qos_class=\"$qos_class\""
[ -n "$kube_system_uid" ] && [ "$kube_system_uid" != "null" ] && labels+=",cluster_id=\"$kube_system_uid\""
+ [ -n "$kube_cluster_name" ] && [ "$kube_cluster_name" != "unknown" ] && labels+=",cluster_name=\"$kube_cluster_name\""
name="pod"
name+="_$(get_lbl_val "$labels" namespace)"
name+="_$(get_lbl_val "$labels" pod_name)"