@cryptotaxi247 / netdata-1 / commits / 5cbd74b23

feat(cgroup-name.sh): Add support for `netdata.cloud/*` container labels (#19315)

Ilya Mashchenko committed Jan 3, 2025 at 14:28 UTC 5cbd74b234e7aebc13e13bccc99d13eb48ac52ce
1 file changed +12 -4
src/collectors/cgroups.plugin/cgroup-name.sh.in
+12 -4
@@ -119,13 +119,21 @@ function parse_docker_like_inspect_output() {
119 if [ -n "${IMAGE_NAME}" ]; then
120 LABELS="image=\"${IMAGE_NAME}\""
121 fi
122 +
123 + while IFS= read -r line; do
124 + if [[ -n "$line" && $line == LABEL_netdata.cloud/* ]]; then
125 + IFS="=" read -r lname lval <<<"$line"
126 + lname=${lname#LABEL_}
127 + LABELS="$LABELS,${lname}=\"${lval}\""
128 + fi
129 + done <<<"$output"
130 }
131
132 function docker_like_get_name_command() {
133 local command="${1}"
134 local id="${2}"
127 - info "Running command: ${command} inspect --format='{{range .Config.Env}}{{println .}}{{end}}CONT_NAME={{ .Name}}' \"${id}\""
128 - if OUTPUT="$(${command} inspect --format='{{range .Config.Env}}{{println .}}{{end}}CONT_NAME={{ .Name}}{{println}}IMAGE_NAME={{ .Config.Image}}' "${id}")" &&
135 + # shellcheck disable=SC2016
136 + if OUTPUT="$(${command} inspect --format='{{range .Config.Env}}{{println .}}{{end}}{{range $key, $value := .Config.Labels}}LABEL_{{$key}}={{$value}}{{println}}{{end}}IMAGE_NAME={{.Config.Image}}{{println}}CONT_NAME={{.Name}}' "${id}")" &&
137 [ -n "$OUTPUT" ]; then
138 parse_docker_like_inspect_output "$OUTPUT"
139 fi
@@ -151,7 +159,7 @@ function docker_like_get_name_api() {
159 info "Running API command: curl \"${host}${path}\""
160 JSON=$(curl -sS "${host}${path}")
161 fi
154 - if OUTPUT=$(echo "${JSON}" | jq -r '.Config.Env[]?,"CONT_NAME=\(.Name)","IMAGE_NAME=\(.Config.Image)"') && [ -n "$OUTPUT" ]; then
162 + if OUTPUT=$(echo "${JSON}" | jq -r '.Config.Env[]?, "CONT_NAME=\(.Name)", "IMAGE_NAME=\(.Config.Image)", (.Config.Labels | to_entries[] | "LABEL_\(.key)=\(.value)")') && [ -n "$OUTPUT" ]; then
163 parse_docker_like_inspect_output "$OUTPUT"
164 fi
165 return 0
@@ -424,7 +432,7 @@ function k8s_get_kubepod_name() {
432 jq_filter+='namespace=\"\(.metadata.namespace)\",'
433 jq_filter+='pod_name=\"\(.metadata.name)\",'
434 jq_filter+='pod_uid=\"\(.metadata.uid)\",'
427 - #jq_filter+='\(.metadata.labels | to_entries | map("pod_label_"+.key+"=\""+.value+"\"") | join(",") | if length > 0 then .+"," else . end)'
435 + jq_filter+='\((.metadata.annotations // {}) | to_entries | map(select(.key | startswith("netdata.cloud/")) | .key+"=\""+.value+"\"") | join(",") | if length > 0 then .+"," else . end)'
436 jq_filter+='\((.metadata.ownerReferences[]? | select(.controller==true) | "controller_kind=\""+.kind+"\",controller_name=\""+.name+"\",") // "")'
437 jq_filter+='node_name=\"\(.spec.nodeName)\",'
438 jq_filter+='" + '