@cryptotaxi247 / netdata-1 / commits / 363352a40

feat(cgroups.plugin): resolve nomad containers name (docker driver only) (#13481)

Ilya Mashchenko committed Aug 4, 2022 at 00:23 UTC 363352a40e80708ba8c6def9dd049ce6310a82e0
1 file changed +21 -6
collectors/cgroups.plugin/cgroup-name.sh
+21 -6
@@ -45,11 +45,24 @@ fatal() {
45 exit 1
46 }
47
48 +function parse_docker_like_inspect_output() {
49 + local output="${1}"
50 + eval "$(grep -E "^(NOMAD_NAMESPACE|NOMAD_JOB_NAME|NOMAD_TASK_NAME|NOMAD_SHORT_ALLOC_ID|CONT_NAME)=" <<<"$output")"
51 + if [ -n "$NOMAD_NAMESPACE" ] && [ -n "$NOMAD_JOB_NAME" ] && [ -n "$NOMAD_TASK_NAME" ] && [ -n "$NOMAD_SHORT_ALLOC_ID" ]; then
52 + echo "${NOMAD_NAMESPACE}-${NOMAD_JOB_NAME}-${NOMAD_TASK_NAME}-${NOMAD_SHORT_ALLOC_ID}"
53 + else
54 + echo "${CONT_NAME}" | sed 's|^/||'
55 + fi
56 +}
57 +
58 function docker_like_get_name_command() {
59 local command="${1}"
60 local id="${2}"
51 - info "Running command: ${command} ps --filter=id=\"${id}\" --format=\"{{.Names}}\""
52 - NAME="$(${command} ps --filter=id="${id}" --format="{{.Names}}")"
61 + info "Running command: ${command} inspect --format='{{range .Config.Env}}{{println .}}{{end}}CONT_NAME={{ .Name}}' \"${id}\""
62 + if OUTPUT="$(${command} inspect --format='{{range .Config.Env}}{{println .}}{{end}}CONT_NAME={{ .Name}}' "${id}")" &&
63 + [ -n "$OUTPUT" ]; then
64 + NAME="$(parse_docker_like_inspect_output "$OUTPUT")"
65 + fi
66 return 0
67 }
68
@@ -61,7 +74,7 @@ function docker_like_get_name_api() {
74 warning "No ${host_var} is set"
75 return 1
76 fi
64 - if ! command -v jq > /dev/null 2>&1; then
77 + if ! command -v jq >/dev/null 2>&1; then
78 warning "Can't find jq command line tool. jq is required for netdata to retrieve container name using ${host} API, falling back to docker ps"
79 return 1
80 fi
@@ -72,7 +85,9 @@ function docker_like_get_name_api() {
85 info "Running API command: curl \"${host}${path}\""
86 JSON=$(curl -sS "${host}${path}")
87 fi
75 - NAME=$(echo "${JSON}" | jq -r .Name,.Config.Hostname | grep -v null | head -n1 | sed 's|^/||')
88 + if OUTPUT=$(echo "${JSON}" | jq -r '.Config.Env[],"CONT_NAME=\(.Name)"') && [ -n "$OUTPUT" ]; then
89 + NAME="$(parse_docker_like_inspect_output "$OUTPUT")"
90 + fi
91 return 0
92 }
93
@@ -378,7 +393,7 @@ function k8s_get_kubepod_name() {
393 name+="_$(get_lbl_val "$labels" pod_name)"
394 labels=$(add_lbl_prefix "$labels" "k8s_")
395 name+=" $labels"
381 - else
396 + else
397 return 2
398 fi
399 fi
@@ -400,7 +415,7 @@ function k8s_get_name() {
415 local id="${2}"
416
417 NAME=$(k8s_get_kubepod_name "$cgroup_path" "$id")
403 -
418 +
419 case "$?" in
420 0)
421 NAME="k8s_${NAME}"