netdata:shell脚本获取当前操作系统(linux)的信息

系统管理员 2023-01-02 11:25 211阅读 0赞

检测内核

  1. #!/usr/bin/env sh
  2. # -------------------------------------------------------------------------------------------------
  3. # detect the kernel
  4. KERNEL_NAME="$(uname -s)"
  5. KERNEL_VERSION="$(uname -r)"
  6. ARCHITECTURE="$(uname -m)"
  7. echo "NETDATA_SYSTEM_KERNEL_NAME=${KERNEL_NAME}"
  8. echo "NETDATA_SYSTEM_KERNEL_VERSION=${KERNEL_VERSION}"
  9. echo "NETDATA_SYSTEM_ARCHITECTURE=${ARCHITECTURE}"

在这里插入图片描述

检测虚拟化技术

  1. #!/usr/bin/env sh
  2. # -------------------------------------------------------------------------------------------------
  3. # 检测虚拟化技术
  4. if [ -z "${VIRTUALIZATION}" ]; then
  5. VIRTUALIZATION="unknown"
  6. VIRT_DETECTION="none"
  7. if [ -n "$(command -v systemd-detect-virt 2>/dev/null)" ]; then
  8. VIRTUALIZATION="$(systemd-detect-virt -v)"
  9. VIRT_DETECTION="systemd-detect-virt"
  10. CONTAINER="$(systemd-detect-virt -c)"
  11. CONT_DETECTION="systemd-detect-virt"
  12. else
  13. if grep -q "^flags.*hypervisor" /proc/cpuinfo 2>/dev/null; then
  14. VIRTUALIZATION="hypervisor"
  15. VIRT_DETECTION="/proc/cpuinfo"
  16. elif [ -n "$(command -v dmidecode)" ] && dmidecode -s system-product-name 2>/dev/null | grep -q "VMware\|Virtual\|KVM\|Bochs"; then
  17. VIRTUALIZATION="$(dmidecode -s system-product-name)"
  18. VIRT_DETECTION="dmidecode"
  19. else
  20. VIRTUALIZATION="none"
  21. fi
  22. fi
  23. if [ -z "${VIRTUALIZATION}" ]; then
  24. # Output from the command is outside of spec
  25. VIRTUALIZATION="unknown"
  26. fi
  27. else
  28. # Passed from outside - probably in docker run
  29. VIRT_DETECTION="provided"
  30. fi
  31. echo "NETDATA_SYSTEM_VIRTUALIZATION=${VIRTUALIZATION}"
  32. echo "NETDATA_SYSTEM_VIRT_DETECTION=${VIRT_DETECTION}"
  33. echo "NETDATA_SYSTEM_CONTAINER=${CONTAINER}"
  34. echo "NETDATA_SYSTEM_CONTAINER_DETECTION=${CONT_DETECTION}"

在这里插入图片描述

变量说明:

  • VIRTUALIZATION:是虚拟机还是物理机
  • VIRT_DETECTION:检测是否虚拟的方法
  • CONTAINER:检测容器
  • CONT_DETECTION:检测容器的方法

语法说明:

  • if条件判断
    在这里插入图片描述
  • 检查Linux服务器是物理的还是虚拟的
  • command -v可以判断一个命令是否支持

检测操作系统

  1. #!/usr/bin/env sh
  2. CONTAINER="unknown"
  3. CONT_DETECTION="none"
  4. #--------------------------------------------------检测操作系统---------------------------------------------
  5. #最初假设所有操作系统检测值都是针对一个容器的,如果我们是裸机,这些值将在稍后移动
  6. CONTAINER_OS_DETECTION="unknown"
  7. CONTAINER_NAME="unknown"
  8. CONTAINER_VERSION="unknown"
  9. CONTAINER_VERSION_ID="unknown"
  10. CONTAINER_ID="unknown"
  11. CONTAINER_ID_LIKE="unknown"
  12. if [ -f "/etc/os-release" ]; then
  13. eval "$(grep -E "^(NAME|ID|ID_LIKE|VERSION|VERSION_ID)=" </etc/os-release | sed 's/^/CONTAINER_/')"
  14. CONTAINER_OS_DETECTION="/etc/os-release"
  15. fi
  16. #如果Netdata未在容器中运行,则使用本地检测作为主机
  17. HOST_OS_DETECTION="unknown"
  18. HOST_NAME="unknown"
  19. HOST_VERSION="unknown"
  20. HOST_VERSION_ID="unknown"
  21. HOST_ID="unknown"
  22. HOST_ID_LIKE="unknown"
  23. if [ "${CONTAINER}" = "unknown" ]; then
  24. for v in NAME ID ID_LIKE VERSION VERSION_ID OS_DETECTION; do
  25. eval "HOST_$v=\$CONTAINER_$v; CONTAINER_$v=none"
  26. done
  27. fi
  28. echo "NETDATA_HOST_OS_NAME=${HOST_NAME}"
  29. echo "NETDATA_HOST_OS_ID=${HOST_ID}"
  30. echo "NETDATA_HOST_OS_ID_LIKE=${HOST_ID_LIKE}"
  31. echo "NETDATA_HOST_OS_VERSION=${HOST_VERSION}"
  32. echo "NETDATA_HOST_OS_VERSION_ID=${HOST_VERSION_ID}"
  33. echo "NETDATA_HOST_OS_DETECTION=${HOST_OS_DETECTION}"
  34. echo "NETDATA_CONTAINER_OS_DETECTION=${CONTAINER_OS_DETECTION}"
  35. echo "NETDATA_CONTAINER_OS_NAME=${CONTAINER_NAME}"
  36. echo "NETDATA_CONTAINER_OS_VERSION=${CONTAINER_VERSION}"
  37. echo "NETDATA_CONTAINER_OS_VERSION_ID=${CONTAINER_VERSION_ID}"
  38. echo "NETDATA_CONTAINER_OS_ID=${CONTAINER_ID}"
  39. echo "NETDATA_CONTAINER_OS_ID_LIKE=${CONTAINER_ID_LIKE}"

在这里插入图片描述

检测整个系统RAM

  1. #!/usr/bin/env sh
  2. # -------------------------------------------------------------------------------------------------
  3. # 检测整个系统RAM
  4. if [ -r /proc/meminfo ] ; then
  5. RAM_DETECTION="procfs"
  6. TOTAL_RAM="$(grep -F MemTotal /proc/meminfo | cut -f 2 -d ':' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | cut -f 1 -d ' ')"
  7. TOTAL_RAM="$((TOTAL_RAM*1024))"
  8. fi
  9. echo "NETDATA_SYSTEM_TOTAL_RAM=${TOTAL_RAM}"
  10. echo "NETDATA_SYSTEM_RAM_DETECTION=${RAM_DETECTION}"

在这里插入图片描述
检测总系统磁盘空间

  1. #!/usr/bin/env sh
  2. #--------------------------------------------------检测总系统磁盘空间---------------------------------------------
  3. DISK_SIZE="unknown"
  4. DISK_DETECTION="none"
  5. if [ -d /sys/block ] && [ -r /proc/devices ] ; then
  6. dev_major_whitelist=''
  7. # This is a list of device names used for block storage devices.
  8. # These translate to the prefixs of files in `/dev` indicating the device type.
  9. # They are sorted by lowest used device major number, with dynamically assigned ones at the end.
  10. # We use this to look up device major numbers in `/proc/devices`
  11. device_names='hd sd mfm ad ftl pd nftl dasd intfl mmcblk ub xvd rfd vbd nvme'
  12. for name in ${device_names} ; do
  13. if grep -qE " ${name}\$" /proc/devices ; then
  14. dev_major_whitelist="${dev_major_whitelist}:$(grep -E "${name}\$" /proc/devices | sed -e 's/^[[:space:]]*//' | cut -f 1 -d ' ' | tr '\n' ':'):"
  15. fi
  16. done
  17. DISK_DETECTION="sysfs"
  18. DISK_SIZE="0"
  19. for disk in /sys/block/* ; do
  20. if [ -r "${disk}/size" ] && \
  21. (echo "${dev_major_whitelist}" | grep -q ":$(cut -f 1 -d ':' "${disk}/dev"):") && \
  22. grep -qv 1 "${disk}/removable"
  23. then
  24. size="$(($(cat "${disk}/size") * 512))"
  25. DISK_SIZE="$((DISK_SIZE + size))"
  26. fi
  27. done
  28. fi
  29. echo "NETDATA_SYSTEM_TOTAL_DISK_SIZE=${DISK_SIZE}"
  30. echo "NETDATA_SYSTEM_DISK_DETECTION=${DISK_DETECTION}"

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,211人围观)

还没有评论,来说两句吧...

相关阅读