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+='" + '