netdata:shell脚本获取当前操作系统(linux)的信息
检测内核
#!/usr/bin/env sh
# -------------------------------------------------------------------------------------------------
# detect the kernel
KERNEL_NAME="$(uname -s)"
KERNEL_VERSION="$(uname -r)"
ARCHITECTURE="$(uname -m)"
echo "NETDATA_SYSTEM_KERNEL_NAME=${KERNEL_NAME}"
echo "NETDATA_SYSTEM_KERNEL_VERSION=${KERNEL_VERSION}"
echo "NETDATA_SYSTEM_ARCHITECTURE=${ARCHITECTURE}"
检测虚拟化技术
#!/usr/bin/env sh
# -------------------------------------------------------------------------------------------------
# 检测虚拟化技术
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"
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"
fi
else
# Passed from outside - probably in docker run
VIRT_DETECTION="provided"
fi
echo "NETDATA_SYSTEM_VIRTUALIZATION=${VIRTUALIZATION}"
echo "NETDATA_SYSTEM_VIRT_DETECTION=${VIRT_DETECTION}"
echo "NETDATA_SYSTEM_CONTAINER=${CONTAINER}"
echo "NETDATA_SYSTEM_CONTAINER_DETECTION=${CONT_DETECTION}"
变量说明:
- VIRTUALIZATION:是虚拟机还是物理机
- VIRT_DETECTION:检测是否虚拟的方法
- CONTAINER:检测容器
- CONT_DETECTION:检测容器的方法
语法说明:
- if条件判断
- 检查Linux服务器是物理的还是虚拟的
- command -v可以判断一个命令是否支持
检测操作系统
#!/usr/bin/env sh
CONTAINER="unknown"
CONT_DETECTION="none"
#--------------------------------------------------检测操作系统---------------------------------------------
#最初假设所有操作系统检测值都是针对一个容器的,如果我们是裸机,这些值将在稍后移动
CONTAINER_OS_DETECTION="unknown"
CONTAINER_NAME="unknown"
CONTAINER_VERSION="unknown"
CONTAINER_VERSION_ID="unknown"
CONTAINER_ID="unknown"
CONTAINER_ID_LIKE="unknown"
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
#如果Netdata未在容器中运行,则使用本地检测作为主机
HOST_OS_DETECTION="unknown"
HOST_NAME="unknown"
HOST_VERSION="unknown"
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
fi
echo "NETDATA_HOST_OS_NAME=${HOST_NAME}"
echo "NETDATA_HOST_OS_ID=${HOST_ID}"
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_CONTAINER_OS_DETECTION=${CONTAINER_OS_DETECTION}"
echo "NETDATA_CONTAINER_OS_NAME=${CONTAINER_NAME}"
echo "NETDATA_CONTAINER_OS_VERSION=${CONTAINER_VERSION}"
echo "NETDATA_CONTAINER_OS_VERSION_ID=${CONTAINER_VERSION_ID}"
echo "NETDATA_CONTAINER_OS_ID=${CONTAINER_ID}"
echo "NETDATA_CONTAINER_OS_ID_LIKE=${CONTAINER_ID_LIKE}"
检测整个系统RAM
#!/usr/bin/env sh
# -------------------------------------------------------------------------------------------------
# 检测整个系统RAM
if [ -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
echo "NETDATA_SYSTEM_TOTAL_RAM=${TOTAL_RAM}"
echo "NETDATA_SYSTEM_RAM_DETECTION=${RAM_DETECTION}"
检测总系统磁盘空间
#!/usr/bin/env sh
#--------------------------------------------------检测总系统磁盘空间---------------------------------------------
DISK_SIZE="unknown"
DISK_DETECTION="none"
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
fi
echo "NETDATA_SYSTEM_TOTAL_DISK_SIZE=${DISK_SIZE}"
echo "NETDATA_SYSTEM_DISK_DETECTION=${DISK_DETECTION}"
还没有评论,来说两句吧...