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:检测容器的方法

语法说明:

检测操作系统

#!/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}"

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值