11
# detect the virtualization
12
13
if [ -z "${VIRTUALIZATION}" ]; then
14
- VIRTUALIZATION="unknown"
15
- VIRT_DETECTION="none"
16
-
17
- if [ -n "$(command -v systemd-detect-virt 2>/dev/null)" ]; then
18
- VIRTUALIZATION="$(systemd-detect-virt -v)"
19
- VIRT_DETECTION="systemd-detect-virt"
20
- CONTAINER="$(systemd-detect-virt -c)"
21
- CONT_DETECTION="systemd-detect-virt"
14
+ VIRTUALIZATION="unknown"
15
+ VIRT_DETECTION="none"
16
+
17
+ if [ -n "$(command -v systemd-detect-virt 2> /dev/null)" ]; then
18
+ VIRTUALIZATION="$(systemd-detect-virt -v)"
19
+ VIRT_DETECTION="systemd-detect-virt"
20
+ CONTAINER="$(systemd-detect-virt -c)"
21
+ CONT_DETECTION="systemd-detect-virt"
22
+ else
23
+ if grep -q "^flags.*hypervisor" /proc/cpuinfo 2> /dev/null; then
24
+ VIRTUALIZATION="hypervisor"
25
+ VIRT_DETECTION="/proc/cpuinfo"
26
+ elif [ -n "$(command -v dmidecode)" ] && dmidecode -s system-product-name 2> /dev/null | grep -q "VMware\|Virtual\|KVM\|Bochs"; then
27
+ VIRTUALIZATION="$(dmidecode -s system-product-name)"
28
+ VIRT_DETECTION="dmidecode"
29
else
23
- if grep -q "^flags.*hypervisor" /proc/cpuinfo 2>/dev/null; then
24
- VIRTUALIZATION="hypervisor"
25
- VIRT_DETECTION="/proc/cpuinfo"
26
- elif [ -n "$(command -v dmidecode)" ] && dmidecode -s system-product-name 2>/dev/null | grep -q "VMware\|Virtual\|KVM\|Bochs"; then
27
- VIRTUALIZATION="$(dmidecode -s system-product-name)"
28
- VIRT_DETECTION="dmidecode"
29
- else
30
- VIRTUALIZATION="none"
31
- fi
32
- fi
33
- if [ -z "${VIRTUALIZATION}" ]; then
34
- # Output from the command is outside of spec
35
- VIRTUALIZATION="unknown"
30
+ VIRTUALIZATION="none"
31
fi
32
+ fi
33
+ if [ -z "${VIRTUALIZATION}" ]; then
34
+ # Output from the command is outside of spec
35
+ VIRTUALIZATION="unknown"
36
+ fi
37
else
38
- # Passed from outside - probably in docker run
39
- VIRT_DETECTION="provided"
38
+ # Passed from outside - probably in docker run
39
+ VIRT_DETECTION="provided"
40
fi
41
42
# -------------------------------------------------------------------------------------------------
46
CONT_DETECTION="none"
47
48
if [ "${CONTAINER}" = "unknown" ]; then
49
- if [ -f /proc/1/sched ] ; then
50
- IFS='(, ' read -r process _ </proc/1/sched
51
- if [ "${process}" = "netdata" ]; then
52
- CONTAINER="container"
53
- CONT_DETECTION="process"
54
- fi
55
- fi
56
- # ubuntu and debian supply /bin/running-in-container
57
- # https://www.apt-browse.org/browse/ubuntu/trusty/main/i386/upstart/1.12.1-0ubuntu4/file/bin/running-in-container
58
- if /bin/running-in-container >/dev/null 2>&1; then
59
- CONTAINER="container"
60
- CONT_DETECTION="/bin/running-in-container"
61
- fi
62
-
63
- # lxc sets environment variable 'container'
64
- #shellcheck disable=SC2154
65
- if [ -n "${container}" ]; then
66
- CONTAINER="lxc"
67
- CONT_DETECTION="containerenv"
68
- fi
69
-
70
- # docker creates /.dockerenv
71
- # http://stackoverflow.com/a/25518345
72
- if [ -f "/.dockerenv" ]; then
73
- CONTAINER="docker"
74
- CONT_DETECTION="dockerenv"
75
- fi
49
+ if [ -f /proc/1/sched ]; then
50
+ IFS='(, ' read -r process _ < /proc/1/sched
51
+ if [ "${process}" = "netdata" ]; then
52
+ CONTAINER="container"
53
+ CONT_DETECTION="process"
54
+ fi
55
+ fi
56
+ # ubuntu and debian supply /bin/running-in-container
57
+ # https://www.apt-browse.org/browse/ubuntu/trusty/main/i386/upstart/1.12.1-0ubuntu4/file/bin/running-in-container
58
+ if /bin/running-in-container > /dev/null 2>&1; then
59
+ CONTAINER="container"
60
+ CONT_DETECTION="/bin/running-in-container"
61
+ fi
62
+
63
+ # lxc sets environment variable 'container'
64
+ #shellcheck disable=SC2154
65
+ if [ -n "${container}" ]; then
66
+ CONTAINER="lxc"
67
+ CONT_DETECTION="containerenv"
68
+ fi
69
+
70
+ # docker creates /.dockerenv
71
+ # http://stackoverflow.com/a/25518345
72
+ if [ -f "/.dockerenv" ]; then
73
+ CONTAINER="docker"
74
+ CONT_DETECTION="dockerenv"
75
+ fi
76
77
fi
78
89
CONTAINER_ID_LIKE="unknown"
90
91
if [ "${KERNEL_NAME}" = "Darwin" ]; then
92
- CONTAINER_ID=$(sw_vers -productName)
93
- CONTAINER_ID_LIKE="mac"
94
- CONTAINER_NAME="mac"
95
- CONTAINER_VERSION=$(sw_vers -productVersion)
96
- CONTAINER_OS_DETECTION="sw_vers"
92
+ CONTAINER_ID=$(sw_vers -productName)
93
+ CONTAINER_ID_LIKE="mac"
94
+ CONTAINER_NAME="mac"
95
+ CONTAINER_VERSION=$(sw_vers -productVersion)
96
+ CONTAINER_OS_DETECTION="sw_vers"
97
elif [ "${KERNEL_NAME}" = "FreeBSD" ]; then
98
- CONTAINER_ID="FreeBSD"
99
- CONTAINER_ID_LIKE="FreeBSD"
100
- CONTAINER_NAME="FreeBSD"
101
- CONTAINER_OS_DETECTION="uname"
102
- CONTAINER_VERSION=$(uname -r)
103
- KERNEL_VERSION=$(uname -K)
98
+ CONTAINER_ID="FreeBSD"
99
+ CONTAINER_ID_LIKE="FreeBSD"
100
+ CONTAINER_NAME="FreeBSD"
101
+ CONTAINER_OS_DETECTION="uname"
102
+ CONTAINER_VERSION=$(uname -r)
103
+ KERNEL_VERSION=$(uname -K)
104
else
105
- if [ -f "/etc/os-release" ]; then
106
- eval "$(grep -E "^(NAME|ID|ID_LIKE|VERSION|VERSION_ID)=" </etc/os-release | sed 's/^/CONTAINER_/')"
107
- CONTAINER_OS_DETECTION="/etc/os-release"
108
- fi
109
-
110
- # shellcheck disable=SC2153
111
- if [ "${NAME}" = "unknown" ] || [ "${VERSION}" = "unknown" ] || [ "${ID}" = "unknown" ]; then
112
- if [ -f "/etc/lsb-release" ]; then
113
- if [ "${OS_DETECTION}" = "unknown" ]; then
114
- CONTAINER_OS_DETECTION="/etc/lsb-release"
115
- else
116
- CONTAINER_OS_DETECTION="Mixed"
117
- fi
118
- DISTRIB_ID="unknown"
119
- DISTRIB_RELEASE="unknown"
120
- DISTRIB_CODENAME="unknown"
121
- eval "$(grep -E "^(DISTRIB_ID|DISTRIB_RELEASE|DISTRIB_CODENAME)=" </etc/lsb-release)"
122
- if [ "${NAME}" = "unknown" ]; then CONTAINER_NAME="${DISTRIB_ID}"; fi
123
- if [ "${VERSION}" = "unknown" ]; then CONTAINER_VERSION="${DISTRIB_RELEASE}"; fi
124
- if [ "${ID}" = "unknown" ]; then CONTAINER_ID="${DISTRIB_CODENAME}"; fi
125
- fi
126
- if [ -n "$(command -v lsb_release 2>/dev/null)" ]; then
127
- if [ "${OS_DETECTION}" = "unknown" ]; then
128
- CONTAINER_OS_DETECTION="lsb_release"
129
- else
130
- CONTAINER_OS_DETECTION="Mixed"
131
- fi
132
- if [ "${NAME}" = "unknown" ]; then CONTAINER_NAME="$(lsb_release -is 2>/dev/null)"; fi
133
- if [ "${VERSION}" = "unknown" ]; then CONTAINER_VERSION="$(lsb_release -rs 2>/dev/null)"; fi
134
- if [ "${ID}" = "unknown" ]; then CONTAINER_ID="$(lsb_release -cs 2>/dev/null)"; fi
135
- fi
136
- fi
105
+ if [ -f "/etc/os-release" ]; then
106
+ eval "$(grep -E "^(NAME|ID|ID_LIKE|VERSION|VERSION_ID)=" < /etc/os-release | sed 's/^/CONTAINER_/')"
107
+ CONTAINER_OS_DETECTION="/etc/os-release"
108
+ fi
109
+
110
+ # shellcheck disable=SC2153
111
+ if [ "${NAME}" = "unknown" ] || [ "${VERSION}" = "unknown" ] || [ "${ID}" = "unknown" ]; then
112
+ if [ -f "/etc/lsb-release" ]; then
113
+ if [ "${OS_DETECTION}" = "unknown" ]; then
114
+ CONTAINER_OS_DETECTION="/etc/lsb-release"
115
+ else
116
+ CONTAINER_OS_DETECTION="Mixed"
117
+ fi
118
+ DISTRIB_ID="unknown"
119
+ DISTRIB_RELEASE="unknown"
120
+ DISTRIB_CODENAME="unknown"
121
+ eval "$(grep -E "^(DISTRIB_ID|DISTRIB_RELEASE|DISTRIB_CODENAME)=" < /etc/lsb-release)"
122
+ if [ "${NAME}" = "unknown" ]; then CONTAINER_NAME="${DISTRIB_ID}"; fi
123
+ if [ "${VERSION}" = "unknown" ]; then CONTAINER_VERSION="${DISTRIB_RELEASE}"; fi
124
+ if [ "${ID}" = "unknown" ]; then CONTAINER_ID="${DISTRIB_CODENAME}"; fi
125
+ fi
126
+ if [ -n "$(command -v lsb_release 2> /dev/null)" ]; then
127
+ if [ "${OS_DETECTION}" = "unknown" ]; then
128
+ CONTAINER_OS_DETECTION="lsb_release"
129
+ else
130
+ CONTAINER_OS_DETECTION="Mixed"
131
+ fi
132
+ if [ "${NAME}" = "unknown" ]; then CONTAINER_NAME="$(lsb_release -is 2> /dev/null)"; fi
133
+ if [ "${VERSION}" = "unknown" ]; then CONTAINER_VERSION="$(lsb_release -rs 2> /dev/null)"; fi
134
+ if [ "${ID}" = "unknown" ]; then CONTAINER_ID="$(lsb_release -cs 2> /dev/null)"; fi
135
+ fi
136
+ fi
137
fi
138
139
# If Netdata is not running in a container then use the local detection as the host
144
HOST_ID="unknown"
145
HOST_ID_LIKE="unknown"
146
if [ "${CONTAINER}" = "unknown" ]; then
147
- for v in NAME ID ID_LIKE VERSION VERSION_ID OS_DETECTION; do
148
- eval "HOST_$v=\$CONTAINER_$v; CONTAINER_$v=none"
149
- done
147
+ for v in NAME ID ID_LIKE VERSION VERSION_ID OS_DETECTION; do
148
+ eval "HOST_$v=\$CONTAINER_$v; CONTAINER_$v=none"
149
+ done
150
else
151
-# Otherwise try and use a user-supplied bind-mount into the container to resolve the host details
152
- if [ -e "/host/etc/os-release" ]; then
153
- OS_DETECTION="/etc/os-release"
154
- eval "$(grep -E "^(NAME|ID|ID_LIKE|VERSION|VERSION_ID)=" </host/etc/os-release | sed 's/^/HOST_/')"
155
- HOST_OS_DETECTION="/host/etc/os-release"
156
- fi
157
- if [ "${HOST_NAME}" = "unknown" ] || [ "${HOST_VERSION}" = "unknown" ] || [ "${HOST_ID}" = "unknown" ]; then
158
- if [ -f "/host/etc/lsb-release" ]; then
159
- if [ "${HOST_OS_DETECTION}" = "unknown" ]; then
160
- HOST_OS_DETECTION="/etc/lsb-release"
161
- else
162
- HOST_OS_DETECTION="Mixed"
163
- fi
164
- DISTRIB_ID="unknown"
165
- DISTRIB_RELEASE="unknown"
166
- DISTRIB_CODENAME="unknown"
167
- eval "$(grep -E "^(DISTRIB_ID|DISTRIB_RELEASE|DISTRIB_CODENAME)=" </etc/lsb-release)"
168
- if [ "${HOST_NAME}" = "unknown" ]; then HOST_NAME="${DISTRIB_ID}"; fi
169
- if [ "${HOST_VERSION}" = "unknown" ]; then HOST_VERSION="${DISTRIB_RELEASE}"; fi
170
- if [ "${HOST_ID}" = "unknown" ]; then HOST_ID="${DISTRIB_CODENAME}"; fi
171
- fi
172
- fi
151
+ # Otherwise try and use a user-supplied bind-mount into the container to resolve the host details
152
+ if [ -e "/host/etc/os-release" ]; then
153
+ OS_DETECTION="/etc/os-release"
154
+ eval "$(grep -E "^(NAME|ID|ID_LIKE|VERSION|VERSION_ID)=" < /host/etc/os-release | sed 's/^/HOST_/')"
155
+ HOST_OS_DETECTION="/host/etc/os-release"
156
+ fi
157
+ if [ "${HOST_NAME}" = "unknown" ] || [ "${HOST_VERSION}" = "unknown" ] || [ "${HOST_ID}" = "unknown" ]; then
158
+ if [ -f "/host/etc/lsb-release" ]; then
159
+ if [ "${HOST_OS_DETECTION}" = "unknown" ]; then
160
+ HOST_OS_DETECTION="/etc/lsb-release"
161
+ else
162
+ HOST_OS_DETECTION="Mixed"
163
+ fi
164
+ DISTRIB_ID="unknown"
165
+ DISTRIB_RELEASE="unknown"
166
+ DISTRIB_CODENAME="unknown"
167
+ eval "$(grep -E "^(DISTRIB_ID|DISTRIB_RELEASE|DISTRIB_CODENAME)=" < /etc/lsb-release)"
168
+ if [ "${HOST_NAME}" = "unknown" ]; then HOST_NAME="${DISTRIB_ID}"; fi
169
+ if [ "${HOST_VERSION}" = "unknown" ]; then HOST_VERSION="${DISTRIB_RELEASE}"; fi
170
+ if [ "${HOST_ID}" = "unknown" ]; then HOST_ID="${DISTRIB_CODENAME}"; fi
171
+ fi
172
+ fi
173
fi
174
175
# -------------------------------------------------------------------------------------------------
188
dmidecode="$(command -v dmidecode)"
189
dmidecode_output=""
190
191
-if [ -n "${lscpu}" ] && lscpu >/dev/null 2>&1 ; then
192
- lscpu_output="$(LC_NUMERIC=C ${lscpu} 2>/dev/null)"
193
- CPU_INFO_SOURCE="lscpu"
194
- LCPU_COUNT="$(echo "${lscpu_output}" | grep "^CPU(s):" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
195
- CPU_VENDOR="$(echo "${lscpu_output}" | grep "^Vendor ID:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
196
- CPU_MODEL="$(echo "${lscpu_output}" | grep "^Model name:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
197
- 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"
198
- if [ "${possible_cpu_freq}" = " MHz" ] ; then
199
- 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"
200
- fi
201
-elif [ -n "${dmidecode}" ] && dmidecode -t processor >/dev/null 2>&1 ; then
202
- dmidecode_output="$(${dmidecode} -t processor 2>/dev/null)"
203
- CPU_INFO_SOURCE="dmidecode"
204
- LCPU_COUNT="$(echo "${dmidecode_output}" | grep -F "Thread Count:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
205
- CPU_VENDOR="$(echo "${dmidecode_output}" | grep -F "Manufacturer:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
206
- CPU_MODEL="$(echo "${dmidecode_output}" | grep -F "Version:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
207
- possible_cpu_freq="$(echo "${dmidecode_output}" | grep -F "Current Speed:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
191
+if [ -n "${lscpu}" ] && lscpu > /dev/null 2>&1; then
192
+ lscpu_output="$(LC_NUMERIC=C ${lscpu} 2> /dev/null)"
193
+ CPU_INFO_SOURCE="lscpu"
194
+ LCPU_COUNT="$(echo "${lscpu_output}" | grep "^CPU(s):" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
195
+ CPU_VENDOR="$(echo "${lscpu_output}" | grep "^Vendor ID:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
196
+ CPU_MODEL="$(echo "${lscpu_output}" | grep "^Model name:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
197
+ 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"
198
+ if [ "${possible_cpu_freq}" = " MHz" ]; then
199
+ 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"
200
+ fi
201
+elif [ -n "${dmidecode}" ] && dmidecode -t processor > /dev/null 2>&1; then
202
+ dmidecode_output="$(${dmidecode} -t processor 2> /dev/null)"
203
+ CPU_INFO_SOURCE="dmidecode"
204
+ LCPU_COUNT="$(echo "${dmidecode_output}" | grep -F "Thread Count:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
205
+ CPU_VENDOR="$(echo "${dmidecode_output}" | grep -F "Manufacturer:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
206
+ CPU_MODEL="$(echo "${dmidecode_output}" | grep -F "Version:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
207
+ possible_cpu_freq="$(echo "${dmidecode_output}" | grep -F "Current Speed:" | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
208
else
209
- if [ -n "${nproc}" ] ; then
210
- CPU_INFO_SOURCE="nproc"
211
- LCPU_COUNT="$(${nproc})"
212
- elif [ "${KERNEL_NAME}" = FreeBSD ] ; then
213
- CPU_INFO_SOURCE="sysctl"
214
- LCPU_COUNT="$(sysctl -n kern.smp.cpus)"
215
- elif [ -d /sys/devices/system/cpu ] ; then
216
- CPU_INFO_SOURCE="sysfs"
217
- # This is potentially more accurate than checking `/proc/cpuinfo`.
218
- LCPU_COUNT="$(find /sys/devices/system/cpu -mindepth 1 -maxdepth 1 -type d -name 'cpu*' | grep -cEv 'idle|freq')"
219
- elif [ -r /proc/cpuinfo ] ; then
220
- CPU_INFO_SOURCE="procfs"
221
- LCPU_COUNT="$(grep -c ^processor /proc/cpuinfo)"
222
- fi
223
-
224
- # If we have GNU uname, we can use that to get CPU info (probably).
225
- if unmae --version 2>/dev/null | grep -qF 'GNU coreutils' ; then
226
- CPU_INFO_SOURCE="${CPU_INFO_SOURCE} uname"
227
- CPU_MODEL="$(uname -p)"
228
- CPU_VENDOR="$(uname -i)"
229
- elif [ "${KERNEL_NAME}" = FreeBSD ] ; then
230
- if ( echo "${CPU_INFO_SOURCE}" | grep -qv sysctl ) ; then
231
- CPU_INFO_SOURCE="${CPU_INFO_SOURCE} sysctl"
232
- fi
233
-
234
- CPU_MODEL="$(sysctl -n hw.model)"
235
- elif [ -r /proc/cpuinfo ] ; then
236
- if ( echo "${CPU_INFO_SOURCE}" | grep -qv procfs ) ; then
237
- CPU_INFO_SOURCE="${CPU_INFO_SOURCE} procfs"
238
- fi
239
-
240
- CPU_MODEL="$(grep -F "model name" /proc/cpuinfo | head -n 1 | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
241
- CPU_VENDOR="$(grep -F "vendor_id" /proc/cpuinfo | head -n 1 | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
242
- fi
243
-fi
244
-
245
-if [ -r /sys/devices/system/cpu/cpu0/cpufreq/base_frequency ] ; then
246
- if ( echo "${CPU_INFO_SOURCE}" | grep -qv sysfs ) ; then
247
- CPU_INFO_SOURCE="${CPU_INFO_SOURCE} sysfs"
209
+ if [ -n "${nproc}" ]; then
210
+ CPU_INFO_SOURCE="nproc"
211
+ LCPU_COUNT="$(${nproc})"
212
+ elif [ "${KERNEL_NAME}" = FreeBSD ]; then
213
+ CPU_INFO_SOURCE="sysctl"
214
+ LCPU_COUNT="$(sysctl -n kern.smp.cpus)"
215
+ elif [ -d /sys/devices/system/cpu ]; then
216
+ CPU_INFO_SOURCE="sysfs"
217
+ # This is potentially more accurate than checking `/proc/cpuinfo`.
218
+ LCPU_COUNT="$(find /sys/devices/system/cpu -mindepth 1 -maxdepth 1 -type d -name 'cpu*' | grep -cEv 'idle|freq')"
219
+ elif [ -r /proc/cpuinfo ]; then
220
+ CPU_INFO_SOURCE="procfs"
221
+ LCPU_COUNT="$(grep -c ^processor /proc/cpuinfo)"
222
+ fi
223
+
224
+ # If we have GNU uname, we can use that to get CPU info (probably).
225
+ if uname --version 2> /dev/null | grep -qF 'GNU coreutils'; then
226
+ CPU_INFO_SOURCE="${CPU_INFO_SOURCE} uname"
227
+ CPU_MODEL="$(uname -p)"
228
+ CPU_VENDOR="$(uname -i)"
229
+ elif [ "${KERNEL_NAME}" = FreeBSD ]; then
230
+ if (echo "${CPU_INFO_SOURCE}" | grep -qv sysctl); then
231
+ CPU_INFO_SOURCE="${CPU_INFO_SOURCE} sysctl"
232
fi
233
250
- CPU_FREQ="$(cat /sys/devices/system/cpu/cpu0/cpufreq/base_frequency)"
251
-elif [ -n "${possible_cpu_freq}" ] ; then
252
- CPU_FREQ="${possible_cpu_freq}"
253
-elif [ -r /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq ] ; then
254
- if ( echo "${CPU_INFO_SOURCE}" | grep -qv sysfs ) ; then
255
- CPU_INFO_SOURCE="${CPU_INFO_SOURCE} sysfs"
234
+ CPU_MODEL="$(sysctl -n hw.model)"
235
+ elif [ -r /proc/cpuinfo ]; then
236
+ if (echo "${CPU_INFO_SOURCE}" | grep -qv procfs); then
237
+ CPU_INFO_SOURCE="${CPU_INFO_SOURCE} procfs"
238
fi
239
258
- CPU_FREQ="$(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq)"
240
+ CPU_MODEL="$(grep -F "model name" /proc/cpuinfo | head -n 1 | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
241
+ CPU_VENDOR="$(grep -F "vendor_id" /proc/cpuinfo | head -n 1 | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
242
+ fi
243
+fi
244
+
245
+if [ -r /sys/devices/system/cpu/cpu0/cpufreq/base_frequency ]; then
246
+ if (echo "${CPU_INFO_SOURCE}" | grep -qv sysfs); then
247
+ CPU_INFO_SOURCE="${CPU_INFO_SOURCE} sysfs"
248
+ fi
249
+
250
+ CPU_FREQ="$(cat /sys/devices/system/cpu/cpu0/cpufreq/base_frequency)"
251
+elif [ -n "${possible_cpu_freq}" ]; then
252
+ CPU_FREQ="${possible_cpu_freq}"
253
+elif [ -r /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq ]; then
254
+ if (echo "${CPU_INFO_SOURCE}" | grep -qv sysfs); then
255
+ CPU_INFO_SOURCE="${CPU_INFO_SOURCE} sysfs"
256
+ fi
257
+
258
+ CPU_FREQ="$(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq)"
259
fi
260
261
freq_units="$(echo "${CPU_FREQ}" | cut -f 2 -d ' ')"
262
263
case "${freq_units}" in
264
- GHz)
265
- value="$(echo "${CPU_FREQ}" | cut -f 1 -d ' ')"
266
- CPU_FREQ="$((value*1000*1000*1000))"
267
- ;;
268
- MHz)
269
- value="$(echo "${CPU_FREQ}" | cut -f 1 -d ' ')"
270
- CPU_FREQ="$((value*1000*1000))"
271
- ;;
272
- KHz)
273
- value="$(echo "${CPU_FREQ}" | cut -f 1 -d ' ')"
274
- CPU_FREQ="$((value*1000))"
275
- ;;
276
- *)
277
- ;;
264
+ GHz)
265
+ value="$(echo "${CPU_FREQ}" | cut -f 1 -d ' ')"
266
+ CPU_FREQ="$((value * 1000 * 1000 * 1000))"
267
+ ;;
268
+ MHz)
269
+ value="$(echo "${CPU_FREQ}" | cut -f 1 -d ' ')"
270
+ CPU_FREQ="$((value * 1000 * 1000))"
271
+ ;;
272
+ KHz)
273
+ value="$(echo "${CPU_FREQ}" | cut -f 1 -d ' ')"
274
+ CPU_FREQ="$((value * 1000))"
275
+ ;;
276
+ *) ;;
277
+
278
esac
279
280
# -------------------------------------------------------------------------------------------------
283
TOTAL_RAM="unknown"
284
RAM_DETECTION="none"
285
286
-if [ "${KERNEL_NAME}" = FreeBSD ] ; then
287
- RAM_DETECTION="sysctl"
288
- TOTAL_RAM="$(sysctl -n hw.physmem)"
289
-elif [ "${KERNEL_NAME}" = Darwin ] ; then
290
- RAM_DETECTION="sysctl"
291
- TOTAL_RAM="$(sysctl -n hw.physmem)"
292
-elif [ -r /proc/meminfo ] ; then
293
- RAM_DETECTION="procfs"
294
- TOTAL_RAM="$(grep -F MemTotal /proc/meminfo | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | cut -f 1 -d ' ')"
295
- TOTAL_RAM="$((TOTAL_RAM*1024))"
286
+if [ "${KERNEL_NAME}" = FreeBSD ]; then
287
+ RAM_DETECTION="sysctl"
288
+ TOTAL_RAM="$(sysctl -n hw.physmem)"
289
+elif [ "${KERNEL_NAME}" = Darwin ]; then
290
+ RAM_DETECTION="sysctl"
291
+ TOTAL_RAM="$(sysctl -n hw.physmem)"
292
+elif [ -r /proc/meminfo ]; then
293
+ RAM_DETECTION="procfs"
294
+ TOTAL_RAM="$(grep -F MemTotal /proc/meminfo | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | cut -f 1 -d ' ')"
295
+ TOTAL_RAM="$((TOTAL_RAM * 1024))"
296
fi
297
298
# -------------------------------------------------------------------------------------------------
302
DISK_DETECTION="none"
303
304
if [ "${KERNEL_NAME}" = "Darwin" ]; then
305
- types='hfs'
305
+ types='hfs'
306
307
- if (lsvfs | grep -q apfs) ; then
308
- types="${types},apfs"
309
- fi
307
+ if (lsvfs | grep -q apfs); then
308
+ types="${types},apfs"
309
+ fi
310
311
- if (lsvfs | grep -q ufs) ; then
312
- types="${types},ufs"
313
- fi
311
+ if (lsvfs | grep -q ufs); then
312
+ types="${types},ufs"
313
+ fi
314
315
- DISK_DETECTION="df"
316
- 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))
317
-elif [ "${KERNEL_NAME}" = FreeBSD ] ; then
318
- types='ufs'
315
+ DISK_DETECTION="df"
316
+ 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))
317
+elif [ "${KERNEL_NAME}" = FreeBSD ]; then
318
+ types='ufs'
319
320
- if (lsvfs | grep -q zfs) ; then
321
- types="${types},zfs"
322
- fi
320
+ if (lsvfs | grep -q zfs); then
321
+ types="${types},zfs"
322
+ fi
323
324
- DISK_DETECTION="df"
325
- total="$(df -t ${types} -c -k | tail -n 1 | awk '{print $2}')"
326
- DISK_SIZE="$((total * 1024))"
324
+ DISK_DETECTION="df"
325
+ total="$(df -t ${types} -c -k | tail -n 1 | awk '{print $2}')"
326
+ DISK_SIZE="$((total * 1024))"
327
else
328
- if [ -d /sys/block ] && [ -r /proc/devices ] ; then
329
- dev_major_whitelist=''
330
-
331
- # This is a list of device names used for block storage devices.
332
- # These translate to the prefixs of files in `/dev` indicating the device type.
333
- # They are sorted by lowest used device major number, with dynamically assigned ones at the end.
334
- # We use this to look up device major numbers in `/proc/devices`
335
- device_names='hd sd mfm ad ftl pd nftl dasd intfl mmcblk ub xvd rfd vbd nvme'
336
-
337
- for name in ${device_names} ; do
338
- if grep -qE " ${name}\$" /proc/devices ; then
339
- dev_major_whitelist="${dev_major_whitelist}:$(grep -E "${name}\$" /proc/devices | sed -e 's/^[[:space:]]*//' | cut -f 1 -d ' ' | tr '\n' ':'):"
340
- fi
341
- done
342
-
343
- DISK_DETECTION="sysfs"
344
- DISK_SIZE="0"
345
- for disk in /sys/block/* ; do
346
- if [ -r "${disk}/size" ] && \
347
- (echo "${dev_major_whitelist}" | grep -q ":$(cut -f 1 -d ':' "${disk}/dev"):") && \
348
- grep -qv 1 "${disk}/removable"
349
- then
350
- size="$(($(cat "${disk}/size") * 512))"
351
- DISK_SIZE="$((DISK_SIZE + size))"
352
- fi
353
- done
354
- elif df --version 2>/dev/null | grep -qF "GNU coreutils" ; then
355
- DISK_DETECTION="df"
356
- 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)))
357
- else
358
- DISK_DETECTION="df"
359
- include_fs_types="ext*|btrfs|xfs|jfs|reiser*|zfs"
360
- 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))
361
- fi
328
+ if [ -d /sys/block ] && [ -r /proc/devices ]; then
329
+ dev_major_whitelist=''
330
+
331
+ # This is a list of device names used for block storage devices.
332
+ # These translate to the prefixs of files in `/dev` indicating the device type.
333
+ # They are sorted by lowest used device major number, with dynamically assigned ones at the end.
334
+ # We use this to look up device major numbers in `/proc/devices`
335
+ device_names='hd sd mfm ad ftl pd nftl dasd intfl mmcblk ub xvd rfd vbd nvme'
336
+
337
+ for name in ${device_names}; do
338
+ if grep -qE " ${name}\$" /proc/devices; then
339
+ dev_major_whitelist="${dev_major_whitelist}:$(grep -E "${name}\$" /proc/devices | sed -e 's/^[[:space:]]*//' | cut -f 1 -d ' ' | tr '\n' ':'):"
340
+ fi
341
+ done
342
+
343
+ DISK_DETECTION="sysfs"
344
+ DISK_SIZE="0"
345
+ for disk in /sys/block/*; do
346
+ if [ -r "${disk}/size" ] \
347
+ && (echo "${dev_major_whitelist}" | grep -q ":$(cut -f 1 -d ':' "${disk}/dev"):") \
348
+ && grep -qv 1 "${disk}/removable"; then
349
+ size="$(($(cat "${disk}/size") * 512))"
350
+ DISK_SIZE="$((DISK_SIZE + size))"
351
+ fi
352
+ done
353
+ elif df --version 2> /dev/null | grep -qF "GNU coreutils"; then
354
+ DISK_DETECTION="df"
355
+ 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)))
356
+ else
357
+ DISK_DETECTION="df"
358
+ include_fs_types="ext*|btrfs|xfs|jfs|reiser*|zfs"
359
+ 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))
360
+ fi
361
fi
362
363
+# -------------------------------------------------------------------------------------------------
364
+# Detect whether the node is kubernetes node
365
+
366
+HOST_IS_K8S_NODE="false"
367
+
368
+if [ -n "${KUBERNETES_SERVICE_HOST}" ] && [ -n "${KUBERNETES_SERVICE_PORT}" ]; then
369
+ # These env vars are set for every container managed by k8s.
370
+ HOST_IS_K8S_NODE="true"
371
+elif pgrep "kubelet"; then
372
+ # The kubelet is the primary "node agent" that runs on each node.
373
+ HOST_IS_K8S_NODE="true"
374
+fi
375
376
echo "NETDATA_CONTAINER_OS_NAME=${CONTAINER_NAME}"
377
echo "NETDATA_CONTAINER_OS_ID=${CONTAINER_ID}"
385
echo "NETDATA_HOST_OS_VERSION=${HOST_VERSION}"
386
echo "NETDATA_HOST_OS_VERSION_ID=${HOST_VERSION_ID}"
387
echo "NETDATA_HOST_OS_DETECTION=${HOST_OS_DETECTION}"
388
+echo "NETDATA_HOST_IS_K8S_NODE=${HOST_IS_K8S_NODE}"
389
echo "NETDATA_SYSTEM_KERNEL_NAME=${KERNEL_NAME}"
390
echo "NETDATA_SYSTEM_KERNEL_VERSION=${KERNEL_VERSION}"
391
echo "NETDATA_SYSTEM_ARCHITECTURE=${ARCHITECTURE}"
402
echo "NETDATA_SYSTEM_RAM_DETECTION=${RAM_DETECTION}"
403
echo "NETDATA_SYSTEM_TOTAL_DISK_SIZE=${DISK_SIZE}"
404
echo "NETDATA_SYSTEM_DISK_DETECTION=${DISK_DETECTION}"
393
-