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