From f11da333ee38da602b171361523ed043af5b6798 Mon Sep 17 00:00:00 2001 From: wangdong_cmcc Date: Mon, 25 Nov 2024 16:36:02 +0800 Subject: [PATCH] feat: add system info check for os --- .../syscommand_check/syscommand_check.sh | 3 +- .../test05_resourceutilzation.sh | 157 ++++++++++++++++++ 2 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 source/tools/detect/generic/syscommand_check/syscommand_check_scripts/test05_resourceutilzation.sh diff --git a/source/tools/detect/generic/syscommand_check/syscommand_check.sh b/source/tools/detect/generic/syscommand_check/syscommand_check.sh index 6a2899df..941f3e59 100644 --- a/source/tools/detect/generic/syscommand_check/syscommand_check.sh +++ b/source/tools/detect/generic/syscommand_check/syscommand_check.sh @@ -43,7 +43,7 @@ function check_parameter (){ if [ "$1" = "clear" ]; then if [ -f "./clear.sh" ]; then - sh clear.sh + sh $SCRIPTS_PATH/clear.sh else echo "Error: clear.sh not found in the current directory." exit 1 @@ -66,3 +66,4 @@ main() { # 脚本入口 main "$@" +echo "脚本执行完成,详情见/var/log/syscommand_check.log" diff --git a/source/tools/detect/generic/syscommand_check/syscommand_check_scripts/test05_resourceutilzation.sh b/source/tools/detect/generic/syscommand_check/syscommand_check_scripts/test05_resourceutilzation.sh new file mode 100644 index 00000000..f39cf4bf --- /dev/null +++ b/source/tools/detect/generic/syscommand_check/syscommand_check_scripts/test05_resourceutilzation.sh @@ -0,0 +1,157 @@ +#!/bin/bash + +# 检测 Linux 系统的健康问题,包括 CPU 占用率、内存占用率、磁盘占用率和网络带宽利用率。 + +# 获取脚本所在目录 +OET_PATH=$(cd "$(dirname "$0")" || exit 1; pwd) +source "$OET_PATH/common_lib.sh" + +# 环境准备 +function pre_test() { + OLD_LANG=$LANG + export LANG=en_US.UTF-8 +} + +#各子模块 +function check_cpu() { + log_info "----------------------------------------" + log_info "CPU信息如下:" + + # 获取CPU厂商信息 + cpu_vendor=$(lscpu | grep 'Vendor ID' | awk '{print $3}') + log_info "CPU 厂商: ${cpu_vendor}" + + # 获取CPU主频 + cpu_mhz=$(lscpu | grep 'CPU MHz' | awk '{print $3}') + cpu_hz=$(echo "scale=1; $cpu_mhz / 1000" | bc) + log_info "CPU 主频: ${cpu_hz} GHz" + + # 获取每个处理器插槽上的核心数 + cpu_cores_per_socket=$(lscpu | grep '^Core(s) per socket:' | awk '{print $4}') + + # 获取总核心数 + total_cores=$(lscpu | grep '^CPU(s):' | head -n 1 | awk '{print $2}') + log_info "总核心数: ${total_cores}" + + # 获取CPU使用率 + cpu_usage=$(top -b -n1 | grep "Cpu(s)" | awk '{print "用户空间使用率: " $2 "%", "内核空间使用率: " $4 "%"}') + log_info "$cpu_usage" + log_info "---------------------------------------------" +} + +function check_memory(){ + log_info "内存信息如下:" + # 获取内存信息 + memory_info=$(free -m) + + # 提取总内存 + total_memory=$(echo "$memory_info" | grep Mem: | awk '{print $2}') + log_info "总物理内存: ${total_memory} MB" + + # 提取已使用的内存 + used_memory=$(echo "$memory_info" | grep Mem: | awk '{print $3}') + log_info "已使用的物理内存: ${used_memory} MB" + + # 计算内存利用率 + memory_utilization=$(echo "scale=2; ($used_memory / $total_memory) * 100" | bc) + log_info "物理内存利用率: ${memory_utilization}%" + + log_info "" + # 提取总虚拟内存 + total_swap=$(echo "$memory_info" | grep Swap: | awk '{print $2}') + log_info "总虚拟内存: ${total_swap} MB" + + # 提取已使用的虚拟内存 + used_swap=$(echo "$memory_info" | grep Swap: | awk '{print $3}') + log_info "已使用的虚拟内存: ${used_swap} MB" + + # 计算虚拟内存利用率 + if [ "$total_swap" -ne 0 ]; then + swap_utilization=$(echo "scale=2; ($used_swap / $total_swap) * 100" | bc) + else + swap_utilization=0 + fi + log_info "虚拟内存利用率: ${swap_utilization}%" + log_info "---------------------------------------------" +} + +function check_disk() { + log_info "磁盘信息如下:" + # 获取总的存储空间、已用空间和可用空间 + total_space=$(df -BG --total | grep 'total' | awk '{print $2}') + used_space=$(df -BG --total | grep 'total' | awk '{print $3}') + available_space=$(df -BG --total | grep 'total' | awk '{print $4}') + usage_percent=$(df -BG --total | grep 'total' | awk '{print $5}') + + # 移除单位'G' + total_space_gb=$(echo "$total_space" | sed 's/G//') + used_space_gb=$(echo "$used_space" | sed 's/G//') + + # 计算已用空间和总空间的浮点数表示 + total_space_gb=$(echo "scale=2; $total_space_gb" | bc) + used_space_gb=$(echo "scale=2; $used_space_gb" | bc) + + # 输出信息 + log_info "主机的硬盘大小: ${total_space_gb} GB" + log_info "总的存储空间大小: ${total_space_gb} GB" + log_info "已利用空间大小: ${used_space_gb} GB" + log_info "空间利用率: ${usage_percent}" + log_info "---------------------------------------------" +} + +# 检查网络带宽利用率的函数 +function check_network(){ + # 获取所有活动网卡设备的名称 + active_interfaces=$(ip -o link show | awk -F': ' '{print $2}' | grep -vE "(lo|virbr|docker|veth|tap|br)") + log_info "网络空间情况:" + for interface in $active_interfaces; do + log_info "设备名称: $interface" + + # 获取设备带宽(如果可用) + speed_file="/sys/class/net/$interface/speed" + if [ -f "$speed_file" ]; then + speed=$(cat $speed_file) + log_info "带宽: $speed Mbps" + else + log_error "带宽信息不可用" + fi + done + log_info "---------------------------------------------" +} + +# 测试执行 +function run_test() { + # 检测CPU占用率 + check_cpu + + # 检测内存占用率 + check_memory + + # 检测磁盘占用率 + check_disk + + # 检测网络空间 + check_network +} + +# 环境清理 +function post_test() { + export LANG=${OLD_LANG} +} + +# 用例调用入口 +function main() { + pre_test + run_test + post_test + + # 返回测试结果 + if [ "$uname_passed" = true ]; then + return 0 + else + return 1 + fi +} + +# 脚本入口 +main "$@" -- Gitee