summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIlya Mashchenko <ilya@netdata.cloud>2021-01-18 15:44:14 +0300
committerGitHub <noreply@github.com>2021-01-18 07:44:14 -0500
commit10b745cba808ed2069ae51c23d75c02cf3ca3f65 (patch)
tree191cbb9fb1a93a739383a39a1cf2b838d1f035f5
parentf4193c3b5c013df00b6d05805bf1cc99bebe02bf (diff)
add `_is_k8s_node` label to the host labels (#10501)
* auto format system-info.sh * detect whether the node is k8s node in system-info.sh * fix unmae=>uname * add_is_k8s_node_to_host_labels: Add new variable to structure * add_is_k8s_node_to_host_labels: Add is_k8_node to labels * add_is_k8s_node_to_host_labels: Add is_k8_node inside endpoint * add_is_k8s_node_to_host_labels: Add data to swagge file * change yes/no to true/false * Update web/api/netdata-swagger.json * add_is_k8s_node_to_host_labels: Add anonymous statistic * add_is_k8s_node_to_host_labels: Add information to using-host-labels.md * add_is_k8s_node_to_host_labels: Add variable to stream * add_is_k8s_node_to_host_labels: Change swagger.yaml * add_is_k8s_node_to_host_labels: Adding missing documentation * add_is_k8s_node_to_host_labels: rename variable * add_is_k8s_node_to_host_labels: Rename lables to match variable names * add_is_k8s_node_to_host_labels: Add to wget * add_is_k8s_node_to_host_labels: Add content to swagger files * add_is_k8s_node_to_host_labels: update both swagger files * add_is_k8s_node_to_host_labels: fix wrong exportation Co-authored-by: Thiago Marques <thiagoftsm@gmail.com>
-rwxr-xr-xdaemon/anonymous-statistics.sh.in2
-rwxr-xr-xdaemon/system-info.sh525
-rw-r--r--database/rrd.h1
-rw-r--r--database/rrdhost.c9
-rw-r--r--docs/guides/using-host-labels.md2
-rw-r--r--streaming/sender.c2
-rw-r--r--web/api/netdata-swagger.json7
-rw-r--r--web/api/netdata-swagger.yaml6
-rw-r--r--web/api/web_api_v1.c2
9 files changed, 297 insertions, 259 deletions
diff --git a/daemon/anonymous-statistics.sh.in b/daemon/anonymous-statistics.sh.in
index 41b1c886c7..f0d9c10efe 100755
--- a/daemon/anonymous-statistics.sh.in
+++ b/daemon/anonymous-statistics.sh.in
@@ -63,6 +63,7 @@ if [ -n "$(command -v curl 2> /dev/null)" ]; then
--data-urlencode "cd17=${NETDATA_CONTAINER_OS_VERSION}" \
--data-urlencode "cd18=${NETDATA_CONTAINER_OS_VERSION_ID}" \
--data-urlencode "cd19=${NETDATA_CONTAINER_OS_DETECTION}" \
+ --data-urlencode "cd20=${NETDATA_HOST_IS_K8S_NODE}" \
"https://www.google-analytics.com/collect" > /dev/null 2>&1
else
wget -q -O - --timeout=1 "https://www.google-analytics.com/collect?\
@@ -98,5 +99,6 @@ else
&cd17=${NETDATA_CONTAINER_OS_VERSION} \
&cd18=${NETDATA_CONTAINER_OS_VERSION_ID} \
&cd19=${NETDATA_CONTAINER_OS_DETECTION} \
+&cd20=${NETDATA_HOST_IS_K8S_NODE} \
" > /dev/null 2>&1
fi
diff --git a/daemon/system-info.sh b/daemon/system-info.sh
index 9ccb55d8fd..373680e7b2 100755
--- a/daemon/system-info.sh
+++ b/daemon/system-info.sh
@@ -11,32 +11,32 @@ ARCHITECTURE="$(uname -m)"
# detect the virtualization
if [ -z "${VIRTUALIZATION}" ]; then
- VIRTUALIZATION="unknown"
- VIRT_DETECTION="none"
-
- if [ -n "$(command -v systemd-detect-virt 2>/dev/null)" ]; then
- VIRTUALIZATION="$(systemd-detect-virt -v)"
- VIRT_DETECTION="systemd-detect-virt"
- CONTAINER="$(systemd-detect-virt -c)"
- CONT_DETECTION="systemd-detect-virt"
+ VIRTUALIZATION="unknown"
+ VIRT_DETECTION="none"
+
+ if [ -n "$(command -v systemd-detect-virt 2> /dev/null)" ]; then
+ VIRTUALIZATION="$(systemd-detect-virt -v)"
+ VIRT_DETECTION="systemd-detect-virt"
+ CONTAINER="$(systemd-detect-virt -c)"
+ CONT_DETECTION="systemd-detect-virt"
+ else
+ if grep -q "^flags.*hypervisor" /proc/cpuinfo 2> /dev/null; then
+ VIRTUALIZATION="hypervisor"
+ VIRT_DETECTION="/proc/cpuinfo"
+ elif [ -n "$(command -v dmidecode)" ] && dmidecode -s system-product-name 2> /dev/null | grep -q "VMware\|Virtual\|KVM\|Bochs"; then
+ VIRTUALIZATION="$(dmidecode -s system-product-name)"
+ VIRT_DETECTION="dmidecode"
else
- if grep -q "^flags.*hypervisor" /proc/cpuinfo 2>/dev/null; then
- VIRTUALIZATION="hypervisor"
- VIRT_DETECTION="/proc/cpuinfo"
- elif [ -n "$(command -v dmidecode)" ] && dmidecode -s system-product-name 2>/dev/null | grep -q "VMware\|Virtual\|KVM\|Bochs"; then
- VIRTUALIZATION="$(dmidecode -s system-product-name)"
- VIRT_DETECTION="dmidecode"
- else
- VIRTUALIZATION="none"
- fi
- fi
- if [ -z "${VIRTUALIZATION}" ]; then
- # Output from the command is outside of spec
- VIRTUALIZATION="unknown"
+ VIRTUALIZATION="none"
fi
+ fi
+ if [ -z "${VIRTUALIZATION}" ]; then
+ # Output from the command is outside of spec
+ VIRTUALIZATION="unknown"
+ fi
else
- # Passed from outside - probably in docker run
- VIRT_DETECTION="provided"
+ # Passed from outside - probably in docker run
+ VIRT_DETECTION="provided"
fi
# -------------------------------------------------------------------------------------------------
@@ -46,33 +46,33 @@ CONTAINER="unknown"
CONT_DETECTION="none"
if [ "${CONTAINER}" = "unknown" ]; then
- if [ -f /proc/1/sched ] ; then
- IFS='(, ' read -r process _ </proc/1/sched
- if [ "${process}" = "netdata" ]; then
- CONTAINER="container"
- CONT_DETECTION="process"
- fi
- fi
- # ubuntu and debian supply /bin/running-in-container
- # https://www.apt-browse.org/browse/ubuntu/trusty/main/i386/upstart/1.12.1-0ubuntu4/file/bin/running-in-container
- if /bin/running-in-container >/dev/null 2>&1; then
- CONTAINER="container"
- CONT_DETECTION="/bin/running-in-container"
- fi
-
- # lxc sets environment variable 'container'
- #shellcheck disable=SC2154
- if [ -n "${container}" ]; then
- CONTAINER="lxc"
- CONT_DETECTION="containerenv"
- fi
-
- # docker creates /.dockerenv
- # http://stackoverflow.com/a/25518345
- if [ -f "/.dockerenv" ]; then
- CONTAINER="docker"
- CONT_DETECTION="dockerenv"
- fi
+ if [ -f /proc/1/sched ]; then
+ IFS='(, ' read -r process _ < /proc/1/sched
+ if [ "${process}" = "netdata" ]; then
+ CONTAINER="container"
+ CONT_DETECTION="process"
+ fi
+ fi
+ # ubuntu and debian supply /bin/running-in-container
+ # https://www.apt-browse.org/browse/ubuntu/trusty/main/i386/upstart/1.12.1-0ubuntu4/file/bin/running-in-container
+ if /bin/running-in-container > /dev/null 2>&1; then
+ CONTAINER="container"
+ CONT_DETECTION="/bin/running-in-container"
+ fi
+
+ # lxc sets environment variable 'container'
+ #shellcheck disable=SC2154
+ if [ -n "${container}" ]; then
+ CONTAINER="lxc"
+ CONT_DETECTION="containerenv"
+ fi
+
+ # docker creates /.dockerenv
+ # http://stackoverflow.com/a/25518345
+ if [ -f "/.dockerenv" ]; then
+ CONTAINER="docker"
+ CONT_DETECTION="dockerenv"
+ fi
fi
@@ -89,51 +89,51 @@ CONTAINER_ID="unknown"
CONTAINER_ID_LIKE="unknown"
if [ "${KERNEL_NAME}" = "Darwin" ]; then
- CONTAINER_ID=$(sw_vers -productName)
- CONTAINER_ID_LIKE="mac"
- CONTAINER_NAME="mac"
- CONTAINER_VERSION=$(sw_vers -productVersion)
- CONTAINER_OS_DETECTION="sw_vers"
+ CONTAINER_ID=$(sw_vers -productName)
+ CONTAINER_ID_LIKE="mac"
+ CONTAINER_NAME="mac"
+ CONTAINER_VERSION=$(sw_vers -productVersion)
+ CONTAINER_OS_DETECTION="sw_vers"
elif [ "${KERNEL_NAME}" = "FreeBSD" ]; then
- CONTAINER_ID="FreeBSD"
- CONTAINER_ID_LIKE="FreeBSD"
- CONTAINER_NAME="FreeBSD"
- CONTAINER_OS_DETECTION="uname"
- CONTAINER_VERSION=$(uname -r)
- KERNEL_VERSION=$(uname -K)
+ CONTAINER_ID="FreeBSD"
+ CONTAINER_ID_LIKE="FreeBSD"
+ CONTAINER_NAME="FreeBSD"
+ CONTAINER_OS_DETECTION="uname"
+ CONTAINER_VERSION=$(uname -r)
+ KERNEL_VERSION=$(uname -K)
else
- if [ -f "/etc/os-release" ]; then
- eval "$(grep -E "^(NAME|ID|ID_LIKE|VERSION|VERSION_ID)=" </etc/os-release | sed 's/^/CONTAINER_/')"
- CONTAINER_OS_DETECTION="/etc/os-release"
- fi
-
- # shellcheck disable=SC2153
- if [ "${NAME}" = "unknown" ] || [ "${VERSION}" = "unknown" ] || [ "${ID}" = "unknown" ]; then
- if [ -f "/etc/lsb-release" ]; then
- if [ "${OS_DETECTION}" = "unknown" ]; then
- CONTAINER_OS_DETECTION="/etc/lsb-release"
- else
- CONTAINER_OS_DETECTION="Mixed"
- fi
- DISTRIB_ID="unknown"
- DISTRIB_RELEASE="unknown"
- DISTRIB_CODENAME="unknown"
- eval "$(grep -E "^(DISTRIB_ID|DISTRIB_RELEASE|DISTRIB_CODENAME)=" </etc/lsb-release)"
- if [ "${NAME}" = "unknown" ]; then CONTAINER_NAME="${DISTRIB_ID}"; fi
- if [ "${VERSION}" = "unknown" ]; then CONTAINER_VERSION="${DISTRIB_RELEASE}"; fi
- if [ "${ID}" = "unknown" ]; then CONTAINER_ID="${DISTRIB_CODENAME}"; fi
- fi
- if [ -n "$(command -v lsb_release 2>/dev/null)" ]; then
- if [ "${OS_DETECTION}" = "unknown" ]; then
- CONTAINER_OS_DETECTION="lsb_release"
- else
- CONTAINER_OS_DETECTION="Mixed"
- fi
- if [ "${NAME}" = "unknown" ]; then CONTAINER_NAME="$(lsb_release -is 2>/dev/null)"; fi
- if [ "${VERSION}" = "unknown" ]; then CONTAINER_VERSION="$(lsb_release -rs 2>/dev/null)"; fi
- if [ "${ID}" = "unknown" ]; then CONTAINER_ID="$(lsb_release -cs 2>/dev/null)"; fi
- fi
- fi
+ if [ -f "/etc/os-release" ]; then
+ eval "$(grep -E "^(NAME|ID|ID_LIKE|VERSION|VERSION_ID)=" < /etc/os-release | sed 's/^/CONTAINER_/')"
+ CONTAINER_OS_DETECTION="/etc/os-release"
+ fi
+
+ # shellcheck disable=SC2153
+ if [ "${NAME}" = "unknown" ] || [ "${VERSION}" = "unknown" ] || [ "${ID}" = "unknown" ]; then
+ if [ -f "/etc/lsb-release" ]; then
+ if [ "${OS_DETECTION}" = "unknown" ]; then
+ CONTAINER_OS_DETECTION="/etc/lsb-release"
+ else
+ CONTAINER_OS_DETECTION="Mixed"
+ fi
+ DISTRIB_ID="unknown"
+ DISTRIB_RELEASE="unknown"
+ DISTRIB_CODENAME="unknown"
+ eval "$(grep -E "^(DISTRIB_ID|DISTRIB_RELEASE|DISTRIB_CODENAME)=" < /etc/lsb-release)"
+ if [ "${NAME}" = "unknown" ]; then CONTAINER_NAME="${DISTRIB_ID}"; fi
+ if [ "${VERSION}" = "unknown" ]; then CONTAINER_VERSION="${DISTRIB_RELEASE}"; fi
+ if [ "${ID}" = "unknown" ]; then CONTAINER_ID="${DISTRIB_CODENAME}"; fi
+ fi
+ if [ -n "$(command -v lsb_release 2> /dev/null)" ]; then
+ if [ "${OS_DETECTION}" = "unknown" ]; then
+ CONTAINER_OS_DETECTION="lsb_release"
+ else
+ CONTAINER_OS_DETECTION="Mixed"
+ fi
+ if [ "${NAME}" = "unknown" ]; then CONTAINER_NAME="$(lsb_release -is 2> /dev/null)"; fi
+ if [ "${VERSION}" = "unknown" ]; then CONTAINER_VERSION="$(lsb_release -rs 2> /dev/null)"; fi
+ if [ "${ID}" = "unknown" ]; then CONTAINER_ID="$(lsb_release -cs 2> /dev/null)"; fi
+ fi
+ fi
fi
# If Netdata is not running in a container then use the local detection as the host
@@ -144,32 +144,32 @@ HOST_VERSION_ID="unknown"
HOST_ID="unknown"
HOST_ID_LIKE="unknown"
if [ "${CONTAINER}" = "unknown" ]; then
- for v in NAME ID ID_LIKE VERSION VERSION_ID OS_DETECTION; do
- eval "HOST_$v=\$CONTAINER_$v; CONTAINER_$v=none"
- done
+ for v in NAME ID ID_LIKE VERSION VERSION_ID OS_DETECTION; do
+ eval "HOST_$v=\$CONTAINER_$v; CONTAINER_$v=none"
+ done
else
-# Otherwise try and use a user-supplied bind-mount into the container to resolve the host details
- if [ -e "/host/etc/os-release" ]; then
- OS_DETECTION="/etc/os-release"
- eval "$(grep -E "^(NAME|ID|ID_LIKE|VERSION|VERSION_ID)=" </host/etc/os-release | sed 's/^/HOST_/')"
- HOST_OS_DETECTION="/host/etc/os-release"
- fi
- if [ "${HOST_NAME}" = "unknown" ] || [ "${HOST_VERSION}" = "unknown" ] || [ "${HOST_ID}" = "unknown" ]; then
- if [ -f "/host/etc/lsb-release" ]; then
- if [ "${HOST_OS_DETECTION}" = "unknown" ]; then
- HOST_OS_DETECTION="/etc/lsb-release"
- else
- HOST_OS_DETECTION="Mixed"
- fi
- DISTRIB_ID="unknown"
- DISTRIB_RELEASE="unknown"
- DISTRIB_CODENAME="unknown"
- eval "$(grep -E "^(DISTRIB_ID|DISTRIB_RELEASE|DISTRIB_CODENAME)=" </etc/lsb-release)"
- if [ "${HOST_NAME}" = "unknown" ]; then HOST_NAME="${DISTRIB_ID}"; fi
- if [ "${HOST_VERSION}" = "unknown" ]; then HOST_VERSION="${DISTRIB_RELEASE}"; fi
- if [ "${HOST_ID}" = "unknown" ]; then HOST_ID="${DISTRIB_CODENAME}"; fi
- fi
- fi
+ # Otherwise try and use a user-supplied bind-mount into the container to resolve the host details
+ if [ -e "/host/etc/os-release" ]; then
+ OS_DETECTION="/etc/os-release"
+ eval "$(grep -E "^(NAME|ID|ID_LIKE|VERSION|VERSION_ID)=" < /host/etc/os-release | sed 's/^/HOST_/')"
+ HOST_OS_DETECTION="/host/etc/os-release"
+ fi
+ if [ "${HOST_NAME}" = "unknown" ] || [ "${HOST_VERSION}" = "unknown" ] || [ "${HOST_ID}" = "unknown" ]; then
+ if [ -f "/host/etc/lsb-release" ]; then
+ if [ "${HOST_OS_DETECTION}" = "unknown" ]; then
+ HOST_OS_DETECTION="/etc/lsb-release"
+ else
+ HOST_OS_DETECTION="Mixed"
+ fi
+ DISTRIB_ID="unknown"
+ DISTRIB_RELEASE="unknown"
+ DISTRIB_CODENAME="unknown"
+ eval "$(grep -E "^(DISTRIB_ID|DISTRIB_RELEASE|DISTRIB_CODENAME)=" < /etc/lsb-release)"
+ if [ "${HOST_NAME}" = "unknown" ]; then HOST_NAME="${DISTRIB_ID}"; fi
+ if [ "${HOST_VERSION}" = "unknown" ]; then HOST_VERSION="${DISTRIB_RELEASE}"; fi
+ if [ "${HOST_ID}" = "unknown" ]; then HOST_ID="${DISTRIB_CODENAME}"; fi
+ fi
+ fi
fi
# -------------------------------------------------------------------------------------------------
@@ -188,93 +188,93 @@ lscpu_output=""
dmidecode="$(command -v dmidecode)"
dmidecode_output=""
-if [ -n "${lscpu}" ] && lscpu >/dev/null 2>&1 ; then
- lscpu_output="$(LC_NUMERIC=C ${lscpu} 2>/dev/null)"
- CPU_INFO_SOURCE="lscpu"
- LCPU_COUNT="$(echo "${lscpu_output}" | grep "^CPU(s):" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
- CPU_VENDOR="$(echo "${lscpu_output}" | grep "^Vendor ID:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
- CPU_MODEL="$(echo "${lscpu_output}" | grep "^Model name:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
- possible_cpu_freq="$(echo "${lscpu_output}" | grep -F "CPU max MHz:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | grep -o '^[0-9]*') MHz"
- if [ "${possible_cpu_freq}" = " MHz" ] ; then
- possible_cpu_freq="$(echo "${lscpu_output}" | grep -F "CPU MHz:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | grep -o '^[0-9]*') MHz"
- fi
-elif [ -n "${dmidecode}" ] && dmidecode -t processor >/dev/null 2>&1 ; then
- dmidecode_output="$(${dmidecode} -t processor 2>/dev/null)"
- CPU_INFO_SOURCE="dmidecode"
- LCPU_COUNT="$(echo "${dmidecode_output}" | grep -F "Thread Count:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
- CPU_VENDOR="$(echo "${dmidecode_output}" | grep -F "Manufacturer:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
- CPU_MODEL="$(echo "${dmidecode_output}" | grep -F "Version:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
- possible_cpu_freq="$(echo "${dmidecode_output}" | grep -F "Current Speed:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
+if [ -n "${lscpu}" ] && lscpu > /dev/null 2>&1; then
+ lscpu_output="$(LC_NUMERIC=C ${lscpu} 2> /dev/null)"
+ CPU_INFO_SOURCE="lscpu"
+ LCPU_COUNT="$(echo "${lscpu_output}" | grep "^CPU(s):" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
+ CPU_VENDOR="$(echo "${lscpu_output}" | grep "^Vendor ID:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
+ CPU_MODEL="$(echo "${lscpu_output}" | grep "^Model name:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
+ possible_cpu_freq="$(echo "${lscpu_output}" | grep -F "CPU max MHz:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | grep -o '^[0-9]*') MHz"
+ if [ "${possible_cpu_freq}" = " MHz" ]; then
+ possible_cpu_freq="$(echo "${lscpu_output}" | grep -F "CPU MHz:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | grep -o '^[0-9]*') MHz"
+ fi
+elif [ -n "${dmidecode}" ] && dmidecode -t processor > /dev/null 2>&1; then
+ dmidecode_output="$(${dmidecode} -t processor 2> /dev/null)"
+ CPU_INFO_SOURCE="dmidecode"
+ LCPU_COUNT="$(echo "${dmidecode_output}" | grep -F "Thread Count:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
+ CPU_VENDOR="$(echo "${dmidecode_output}" | grep -F "Manufacturer:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
+ CPU_MODEL="$(echo "${dmidecode_output}" | grep -F "Version:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
+ possible_cpu_freq="$(echo "${dmidecode_output}" | grep -F "Current Speed:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
else
- if [ -n "${nproc}" ] ; then
- CPU_INFO_SOURCE="nproc"
- LCPU_COUNT="$(${nproc})"
- elif [ "${KERNEL_NAME}" = FreeBSD ] ; then
- CPU_INFO_SOURCE="sysctl"
- LCPU_COUNT="$(sysctl -n kern.smp.cpus)"
- elif [ -d /sys/devices/system/cpu ] ; then
- CPU_INFO_SOURCE="sysfs"
- # This is potentially more accurate than checking `/proc/cpuinfo`.
- LCPU_COUNT="$(find /sys/devices/system/cpu -mindepth 1 -maxdepth 1 -type d -name 'cpu*' | grep -cEv 'idle|freq')"
- elif [ -r /proc/cpuinfo ] ; then
- CPU_INFO_SOURCE="procfs"
- LCPU_COUNT="$(grep -c ^processor /proc/cpuinfo)"
- fi
-
- # If we have GNU uname, we can use that to get CPU info (probably).
- if unmae --version 2>/dev/null | grep -qF 'GNU coreutils' ; then
- CPU_INFO_SOURCE="${CPU_INFO_SOURCE} uname"
- CPU_MODEL="$(uname -p)"
- CPU_VENDOR="$(uname -i)"
- elif [ "${KERNEL_NAME}" = FreeBSD ] ; then
- if ( echo "${CPU_INFO_SOURCE}" | grep -qv sysctl ) ; then
- CPU_INFO_SOURCE="${CPU_INFO_SOURCE} sysctl"
- fi
-
- CPU_MODEL="$(sysctl -n hw.model)"
- elif [ -r /proc/cpuinfo ] ; then
- if ( echo "${CPU_INFO_SOURCE}" | grep -qv procfs ) ; then
- CPU_INFO_SOURCE="${CPU_INFO_SOURCE} procfs"
- fi
-
- CPU_MODEL="$(grep -F "model name" /proc/cpuinfo | head -n 1 | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
- CPU_VENDOR="$(grep -F "vendor_id" /proc/cpuinfo | head -n 1 | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
- fi
-fi
-
-if [ -r /sys/devices/system/cpu/cpu0/cpufreq/base_frequency ] ; then
- if ( echo "${CPU_INFO_SOURCE}" | grep -qv sysfs ) ; then
- CPU_INFO_SOURCE="${CPU_INFO_SOURCE} sysfs"
+ if [ -n "${nproc}" ]; then
+ CPU_INFO_SOURCE="nproc"
+ LCPU_COUNT="$(${nproc})"
+ elif [ "${KERNEL_NAME}" = FreeBSD ]; then
+ CPU_INFO_SOURCE="sysctl"
+ LCPU_COUNT="$(sysctl -n kern.smp.cpus)"
+ elif [ -d /sys/devices/system/cpu ]; then
+ CPU_INFO_SOURCE="sysfs"
+ # This is potentially more accurate than checking `/proc/cpuinfo`.
+ LCPU_COUNT="$(find /sys/devices/system/cpu -mindepth 1 -maxdepth 1 -type d -name 'cpu*' | grep -cEv 'idle|freq')"
+ elif [ -r /proc/cpuinfo ]; then
+ CPU_INFO_SOURCE="procfs"
+ LCPU_COUNT="$(grep -c ^processor /proc/cpuinfo)"
+ fi
+
+ # If we have GNU uname, we can use that to get CPU info (probably).
+ if uname --version 2> /dev/null | grep -qF 'GNU coreutils'; then
+ CPU_INFO_SOURCE="${CPU_INFO_SOURCE} uname"
+ CPU_MODEL="$(uname -p)"
+ CPU_VENDOR="$(uname -i)"
+ elif [ "${KERNEL_NAME}" = FreeBSD ]; then
+ if (echo "${CPU_INFO_SOURCE}" | grep -qv sysctl); then
+ CPU_INFO_SOURCE="${CPU_INFO_SOURCE} sysctl"
fi
- CPU_FREQ="$(cat /sys/devices/system/cpu/cpu0/cpufreq/base_frequency)"
-elif [ -n "${possible_cpu_freq}" ] ; then
- CPU_FREQ="${possible_cpu_freq}"
-elif [ -r /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq ] ; then
- if ( echo "${CPU_INFO_SOURCE}" | grep -qv sysfs ) ; then
- CPU_INFO_SOURCE="${CPU_INFO_SOURCE} sysfs"
+ CPU_MODEL="$(sysctl -n hw.model)"
+ elif [ -r /proc/cpuinfo ]; then
+ if (echo "${CPU_INFO_SOURCE}" | grep -qv procfs); then
+ CPU_INFO_SOURCE="${CPU_INFO_SOURCE} procfs"
fi
- CPU_FREQ="$(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq)"
+ CPU_MODEL="$(grep -F "model name" /proc/cpuinfo | head -n 1 | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
+ CPU_VENDOR="$(grep -F "vendor_id" /proc/cpuinfo | head -n 1 | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
+ fi
+fi
+
+if [ -r /sys/devices/system/cpu/cpu0/cpufreq/base_frequency ]; then
+ if (echo "${CPU_INFO_SOURCE}" | grep -qv sysfs); then
+ CPU_INFO_SOURCE="${CPU_INFO_SOURCE} sysfs"
+ fi
+
+ CPU_FREQ="$(cat /sys/devices/system/cpu/cpu0/cpufreq/base_frequency)"
+elif [ -n "${possible_cpu_freq}" ]; then
+ CPU_FREQ="${possible_cpu_freq}"
+elif [ -r /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq ]; then
+ if (echo "${CPU_INFO_SOURCE}" | grep -qv sysfs); then
+ CPU_INFO_SOURCE="${CPU_INFO_SOURCE} sysfs"
+ fi
+
+ CPU_FREQ="$(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq)"
fi
freq_units="$(echo "${CPU_FREQ}" | cut -f 2 -d ' ')"
case "${freq_units}" in
- GHz)
- value="$(echo "${CPU_FREQ}" | cut -f 1 -d ' ')"
- CPU_FREQ="$((value*1000*1000*1000))"
- ;;
- MHz)
- value="$(echo "${CPU_FREQ}" | cut -f 1 -d ' ')"
- CPU_FREQ="$((value*1000*1000))"
- ;;
- KHz)
- value="$(echo "${CPU_FREQ}" | cut -f 1 -d ' ')"
- CPU_FREQ="$((value*1000))"
- ;;
- *)
- ;;
+ GHz)
+ value="$(echo "${CPU_FREQ}" | cut -f 1 -d ' ')"
+ CPU_FREQ="$((value * 1000 * 1000 * 1000))"
+ ;;
+ MHz)
+ value="$(echo "${CPU_FREQ}" | cut -f 1 -d ' ')"
+ CPU_FREQ="$((value * 1000 * 1000))"
+ ;;
+ KHz)
+ value="$(echo "${CPU_FREQ}" | cut -f 1 -d ' ')"
+ CPU_FREQ="$((value * 1000))"
+ ;;
+ *) ;;
+
esac
# -------------------------------------------------------------------------------------------------
@@ -283,16 +283,16 @@ esac
TOTAL_RAM="unknown"
RAM_DETECTION="none"
-if [ "${KERNEL_NAME}" = FreeBSD ] ; then
- RAM_DETECTION="sysctl"
- TOTAL_RAM="$(sysctl -n hw.physmem)"
-elif [ "${KERNEL_NAME}" = Darwin ] ; then
- RAM_DETECTION="sysctl"
- TOTAL_RAM="$(sysctl -n hw.physmem)"
-elif [ -r /proc/meminfo ] ; then
- RAM_DETECTION="procfs"
- TOTAL_RAM="$(grep -F MemTotal /proc/meminfo | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | cut -f 1 -d ' ')"
- TOTAL_RAM="$((TOTAL_RAM*1024))"
+if [ "${KERNEL_NAME}" = FreeBSD ]; then
+ RAM_DETECTION="sysctl"
+ TOTAL_RAM="$(sysctl -n hw.physmem)"
+elif [ "${KERNEL_NAME}" = Darwin ]; then
+ RAM_DETECTION="sysctl"
+ TOTAL_RAM="$(sysctl -n hw.physmem)"
+elif [ -r /proc/meminfo ]; then
+ RAM_DETECTION="procfs"
+ TOTAL_RAM="$(grep -F MemTotal /proc/meminfo | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | cut -f 1 -d ' ')"
+ TOTAL_RAM="$((TOTAL_RAM * 1024))"
fi
# -------------------------------------------------------------------------------------------------
@@ -302,65 +302,76 @@ DISK_SIZE="unknown"
DISK_DETECTION="none"
if [ "${KERNEL_NAME}" = "Darwin" ]; then
- types='hfs'
+ types='hfs'
- if (lsvfs | grep -q apfs) ; then
- types="${types},apfs"
- fi
+ if (lsvfs | grep -q apfs); then
+ types="${types},apfs"
+ fi
- if (lsvfs | grep -q ufs) ; then
- types="${types},ufs"
- fi
+ if (lsvfs | grep -q ufs); then
+ types="${types},ufs"
+ fi
- DISK_DETECTION="df"
- DISK_SIZE=$(($(/bin/df -k -t ${types} | tail -n +2 | sed -E 's/\/dev\/disk([[:digit:]]*)s[[:digit:]]*/\/dev\/disk\1/g' | sort -k 1 | awk -F ' ' '{s=$NF;for(i=NF-1;i>=1;i--)s=s FS $i;print s}' | uniq -f 9 | awk '{print $8}' | tr '\n' '+' | rev | cut -f 2- -d '+' | rev) * 1024))
-elif [ "${KERNEL_NAME}" = FreeBSD ] ; then
- types='ufs'
+ DISK_DETECTION="df"
+ DISK_SIZE=$(($(/bin/df -k -t ${types} | tail -n +2 | sed -E 's/\/dev\/disk([[:digit:]]*)s[[:digit:]]*/\/dev\/disk\1/g' | sort -k 1 | awk -F ' ' '{s=$NF;for(i=NF-1;i>=1;i--)s=s FS $i;print s}' | uniq -f 9 | awk '{print $8}' | tr '\n' '+' | rev | cut -f 2- -d '+' | rev) * 1024))
+elif [ "${KERNEL_NAME}" = FreeBSD ]; then
+ types='ufs'
- if (lsvfs | grep -q zfs) ; then
- types="${types},zfs"
- fi
+ if (lsvfs | grep -q zfs); then
+ types="${types},zfs"
+ fi
- DISK_DETECTION="df"
- total="$(df -t ${types} -c -k | tail -n 1 | awk '{print $2}')"
- DISK_SIZE="$((total * 1024))"
+ DISK_DETECTION="df"
+ total="$(df -t ${types} -c -k | tail -n 1 | awk '{print $2}')"
+ DISK_SIZE="$((total * 1024))"
else
- if [ -d /sys/block ] && [ -r /proc/devices ] ; then
- dev_major_whitelist=''
-
- # This is a list of device names used for block storage devices.
- # These translate to the prefixs of files in `/dev` indicating the device type.
- # They are sorted by lowest used device major number, with dynamically assigned ones at the end.
- # We use this to look up device major numbers in `/proc/devices`
- device_names='hd sd mfm ad ftl pd nftl dasd intfl mmcblk ub xvd rfd vbd nvme'
-
- for name in ${device_names} ; do
- if grep -qE " ${name}\$" /proc/devices ; then
- dev_major_whitelist="${dev_major_whitelist}:$(grep -E "${name}\$" /proc/devices | sed -e 's/^[[:space:]]*//' | cut -f 1 -d ' ' | tr '\n' ':'):"
- fi
- done
-
- DISK_DETECTION="sysfs"
- DISK_SIZE="0"
- for disk in /sys/block/* ; do
- if [ -r "${disk}/size" ] && \
- (echo "${dev_major_whitelist}" | grep -q ":$(cut -f 1 -d ':' "${disk}/dev"):") && \
- grep -qv 1 "${disk}/removable"
- then
- size="$(($(cat "${disk}/size") * 512))"
- DISK_SIZE="$((DISK_SIZE + size))"
- fi
- done
- elif df --version 2>/dev/null | grep -qF "GNU coreutils" ; then
- DISK_DETECTION="df"
- DISK_SIZE=$(($(df -x tmpfs -x devtmpfs -x squashfs -l -B1 --output=source,size | tail -n +2 | sort -u -k 1 | awk '{print $2}' | tr '\n' '+' | head -c -1)))
- else
- DISK_DETECTION="df"
- include_fs_types="ext*|btrfs|xfs|jfs|reiser*|zfs"
- DISK_SIZE=$(($(df -T -P | tail -n +2 | sort -u -k 1 | grep "${include_fs_types}" | awk '{print $3}' | tr '\n' '+' | head -c -1) * 1024))
- fi
+ if [ -d /sys/block ] && [ -r /proc/devices ]; then
+ dev_major_whitelist=''
+
+ # This is a list of device names used for block storage devices.
+ # These translate to the prefixs of files in `/dev` indicating the device type.
+ # They are sorted by lowest used device major number, with dynamically assigned ones at the end.
+ # We use this to look up device major numbers in `/proc/devices`
+ device_names='hd sd mfm ad ftl pd nftl dasd intfl mmcblk ub xvd rfd vbd nvme'
+
+ for name in ${device_names}; do
+ if grep -qE " ${name}\$" /proc/devices; then
+ dev_major_whitelist="${dev_major_whitelist}:$(grep -E "${name}\$" /proc/devices | sed -e 's/^[[:space:]]*//' | cut -f 1 -d ' ' | tr '\n' ':'):"
+ fi
+ done
+
+ DISK_DETECTION="sysfs"
+ DISK_SIZE="0"
+ for disk in /sys/block/*; do
+ if [ -r "${disk}/size" ] \
+ && (echo "${dev_major_whitelist}" | grep -q ":$(cut -f 1 -d ':' "${disk}/dev"):") \
+ && grep -qv 1 "${disk}/removable"; then
+ size="$(($(cat "${disk}/size") * 512))"
+ DISK_SIZE="$((DISK_SIZE + size))"
+ fi
+ done
+ elif df --version 2> /dev/null | grep -qF "GNU coreutils"; then
+ DISK_DETECTION="df"
+ DISK_SIZE=$(($(df -x tmpfs -x devtmpfs -x squashfs -l -B1 --output=source,size | tail -n +2 | sort -u -k 1 | awk '{print $2}' | tr '\n' '+' | head -c -1)))
+ else
+ DISK_DETECTION="df"
+ include_fs_types="ext*|btrfs|xfs|jfs|reiser*|zfs"
+ DISK_SIZE=$(($(df -T -P | tail -n +2 | sort -u -k 1 | grep "${include_fs_types}" | awk '{print $3}' | tr '\n' '+' | head -c -1) * 1024))
+ fi
fi
+# -------------------------------------------------------------------------------------------------
+# Detect whether the node is kubernetes node
+
+HOST_IS_K8S_NODE="false"
+
+if [ -n "${KUBERNETES_SERVICE_HOST}" ] && [ -n "${KUBERNETES_SERVICE_PORT}" ]; then
+ # These env vars are set for every container managed by k8s.
+ HOST_IS_K8S_NODE="true"
+elif pgrep "kubelet"; then
+ # The kubelet is the primary "node agent" that runs on each node.
+ HOST_IS_K8S_NODE="true"
+fi
echo "NETDATA_CONTAINER_OS_NAME=${CONTAINER_NAME}"
echo "NETDATA_CONTAINER_OS_ID=${CONTAINER_ID}"
@@ -374,6 +385,7 @@ echo "NETDATA_HOST_OS_ID_LIKE=${HOST_ID_LIKE}"
echo "NETDATA_HOST_OS_VERSION=${HOST_VERSION}"
echo "NETDATA_HOST_OS_VERSION_ID=${HOST_VERSION_ID}"
echo "NETDATA_HOST_OS_DETECTION=${HOST_OS_DETECTION}"
+echo "NETDATA_HOST_IS_K8S_NODE=${HOST_IS_K8S_NODE}"
echo "NETDATA_SYSTEM_KERNEL_NAME=${KERNEL_NAME}"
echo "NETDATA_SYSTEM_KERNEL_VERSION=${KERNEL_VERSION}"
echo "NETDATA_SYSTEM_ARCHITECTURE=${ARCHITECTURE}"
@@ -390,4 +402,3 @@ echo "NETDATA_SYSTEM_TOTAL_RAM=${TOTAL_RAM}"
echo "NETDATA_SYSTEM_RAM_DETECTION=${RAM_DETECTION}"
echo "NETDATA_SYSTEM_TOTAL_DISK_SIZE=${DISK_SIZE}"
echo "NETDATA_SYSTEM_DISK_DETECTION=${DISK_DETECTION}"
-
diff --git a/database/rrd.h b/database/rrd.h
index 86f4226348..f52d34af8a 100644
--- a/database/rrd.h
+++ b/database/rrd.h
@@ -721,6 +721,7 @@ struct rrdhost_system_info {
char *virt_detection;
char *container;
char *container_detection;
+ char *is_k8s_node;
};
struct rrdhost {
diff --git a/database/rrdhost.c b/database/rrdhost.c
index e120e9d445..8b8a2dc2a6 100644
--- a/database/rrdhost.c
+++ b/database/rrdhost.c
@@ -758,6 +758,7 @@ void rrdhost_system_info_free(struct rrdhost_system_info *system_info) {
freez(system_info->virt_detection);
freez(system_info->container);
freez(system_info->container_detection);
+ freez(system_info->is_k8s_node);
freez(system_info);
}
}
@@ -982,6 +983,10 @@ static struct label *rrdhost_load_auto_labels(void)
label_list =
add_label_to_list(label_list, "_virt_detection", localhost->system_info->virt_detection, LABEL_SOURCE_AUTO);
+ if (localhost->system_info->is_k8s_node)
+ label_list =
+ add_label_to_list(label_list, "_is_k8s_node", localhost->system_info->is_k8s_node, LABEL_SOURCE_AUTO);
+
label_list = add_label_to_list(
label_list, "_is_parent", (localhost->next || configured_as_parent()) ? "true" : "false", LABEL_SOURCE_AUTO);
@@ -1523,6 +1528,10 @@ int rrdhost_set_system_info_variable(struct rrdhost_system_info *system_info, ch
freez(system_info->container_detection);
system_info->container_detection = strdupz(value);
}
+ else if(!strcmp(name, "NETDATA_HOST_IS_K8S_NODE")){
+ freez(system_info->is_k8s_node);
+ system_info->is_k8s_node = strdupz(value);
+ }
else if (!strcmp(name, "NETDATA_SYSTEM_CPU_VENDOR"))
return res;
else if (!strcmp(name, "NETDATA_SYSTEM_CPU_MODEL"))
diff --git a/docs/guides/using-host-labels.md b/docs/guides/using-host-labels.md
index 9d235961ab..6d4af2e5da 100644
--- a/docs/guides/using-host-labels.md
+++ b/docs/guides/using-host-labels.md
@@ -50,6 +50,7 @@ read the status of your agent. For example, from a VPS system running Debian 10:
{
...
"host_labels": {
+ "_is_k8s_node": "false",
"_is_parent": "false",
"_virt_detection": "systemd-detect-virt",
"_container_detection": "none",
@@ -81,6 +82,7 @@ They capture the following:
- Operating system name and version
- CPU architecture, system cores, CPU frequency, RAM, and disk space
- Whether Netdata is running inside of a container, and if so, the OS and hardware details about the container's host
+- Whether Netdata is running inside K8s node
- What virtualization layer the system runs on top of, if any
- Whether the system is a streaming parent or child
diff --git a/streaming/sender.c b/streaming/sender.c
index c112609808..d55a420ab7 100644
--- a/streaming/sender.c
+++ b/streaming/sender.c
@@ -221,6 +221,7 @@ static int rrdpush_sender_thread_connect_to_parent(RRDHOST *host, int default_po
"&NETDATA_SYSTEM_OS_VERSION=%s"
"&NETDATA_SYSTEM_OS_VERSION_ID=%s"
"&NETDATA_SYSTEM_OS_DETECTION=%s"
+ "&NETDATA_HOST_IS_K8S_NODE=%s"
"&NETDATA_SYSTEM_KERNEL_NAME=%s"
"&NETDATA_SYSTEM_KERNEL_VERSION=%s"
"&NETDATA_SYSTEM_ARCHITECTURE=%s"
@@ -257,6 +258,7 @@ static int rrdpush_sender_thread_connect_to_parent(RRDHOST *host, int default_po
, se.os_version
, (host->system_info->host_os_version_id) ? host->system_info->host_os_version_id : ""
, (host->system_info->host_os_detection) ? host->system_info->host_os_detection : ""
+ , (host->system_info->is_k8s_node) ? host->system_info->is_k8s_node : ""
, se.kernel_name
, se.kernel_version
, (host->system_info->architecture) ? host->system_info->architecture : ""
diff --git a/web/api/netdata-swagger.json b/web/api/netdata-swagger.json
index 47f5fe379d..ed2555f830 100644
--- a/web/api/netdata-swagger.json
+++ b/web/api/netdata-swagger.json
@@ -9,7 +9,7 @@
"/info": {
"get": {
"summary": "Get netdata basic information",
- "description": "The info endpoint returns basic information about netdata. It provides:\n* netdata version\n* netdata unique id\n* list of hosts mirrored (includes itself)\n* Operating System, Virtualization and Container technology information\n* List of active collector plugins and modules\n* number of alarms in the host\n * number of alarms in normal state\n * number of alarms in warning state\n * number of alarms in critical state\n",
+ "description": "The info endpoint returns basic information about netdata. It provides:\n* netdata version\n* netdata unique id\n* list of hosts mirrored (includes itself)\n* Operating System, Virtualization, K8s nodes and Container technology information\n* List of active collector plugins and modules\n* number of alarms in the host\n * number of alarms in normal state\n * number of alarms in warning state\n * number of alarms in critical state\n",
"responses": {
"200": {
"description": "netdata basic information.",
@@ -1172,6 +1172,11 @@
"description": "Kernel Version.",
"example": "4.19.32-1-MANJARO"
},
+ "is_k8s_node": {
+ "type": "boolean",
+ "description": "Netdata is running on a K8s node.",
+ "example": false
+