Linux系统资源使用率脚本查询
·
效果如下:

脚本代码如下:
#!/bin/bash
# 确保所需工具可被找到
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
# 定义全局变量
system_facts=""
cpu_facts=""
mem_facts=""
disk_facts=""
# 获取系统信息
function get_system() {
local hostname
local os_pretty_name
local kernel
hostname=$(hostname 2>/dev/null)
if [ $? -ne 0 ]; then
echo "获取主机名失败" >&2
hostname=""
fi
os_pretty_name=$(get_os_pretty_name)
if [ $? -ne 0 ]; then
echo "获取系统版本信息失败" >&2
os_pretty_name=""
fi
kernel=$(uname -r 2>/dev/null)
if [ $? -ne 0 ]; then
echo "获取内核信息失败" >&2
kernel=""
fi
system_facts=$(cat << EOF
{
"hostname": "${hostname}",
"os_pretty_name": "${os_pretty_name}",
"kernel": "${kernel}"
}
EOF
)
}
# 获取操作系统版本信息的辅助函数
function get_os_pretty_name() {
awk '/^PRETTY_NAME=/' /etc/*-release 2>/dev/null | awk -F'=' '{gsub("\"","");print $2 }'
}
# 获取 CPU 信息
function get_cpu() {
local cpu_physical_cores
local one_minute_load
local five_minutes_load
local cpu_usage
cpu_physical_cores=$(get_cpu_physical_cores)
if [ $? -ne 0 ]; then
echo "获取 CPU 物理核心数失败" >&2
cpu_physical_cores=0
fi
local uptime_info=$(uptime | awk -F':' '{print $NF}' | sed 's/,//g')
one_minute_load=$(echo "${uptime_info}" | awk '{print $1}')
five_minutes_load=$(echo "${uptime_info}" | awk '{print $2}')
if command -v iostat >/dev/null 2>&1; then
cpu_usage=$(get_cpu_usage_from_iostat)
else
cpu_usage=$(get_cpu_usage_from_top)
fi
cpu_facts=$(cat << EOF
{
"cpuused": "${cpu_usage}%",
"cpu_loadavg1": "${one_minute_load}",
"cpu_loadavg5": "${five_minutes_load}"
}
EOF
)
}
# 获取 CPU 物理核心数的辅助函数
function get_cpu_physical_cores() {
grep "^processor" /proc/cpuinfo | wc -l
}
# 从 iostat 获取 CPU 使用率
function get_cpu_usage_from_iostat() {
iostat 1 2 | grep -A 1 avg-cpu | tail -1 | awk '{print 100 - $NF}'
}
# 从 top 获取 CPU 使用率
function get_cpu_usage_from_top() {
local command
command=$(top -bn 1 | grep Cpu | awk -F: '{print $2}' | sed 's/%/ %/g' | sed 's/,/ /g' | tail -1)
echo "${command}" | awk '{print 100 - $7}'
}
# 获取内存信息
function get_mem() {
local mem_info
local mem_total_size
local mem_free
local buffers_cache_size
local available_memory
local used_memory
local used_percentage
mem_info=$(export LANG=en_US; free -m | grep -i mem)
mem_total_size=$(echo "${mem_info}" | awk 'NR==1{print $2}')
mem_free=$(echo "${mem_info}" | awk 'NR==1{print $4}')
buffers_cache_size=$(echo "${mem_info}" | awk 'NR==1{print $6}')
available_memory=$(export LANG=en_US; free -m | grep -A 1 available | awk 'NR==2{print $NF}')
if [ -z "${available_memory}" ]; then
used_memory=$((mem_total_size - mem_free - buffers_cache_size))
used_percentage=$(awk -v used=${used_memory} -v total=${mem_total_size} 'BEGIN{printf "%.2f\n", 100 * used / total}')
else
used_memory=$((mem_total_size - available_memory))
used_percentage=$(awk -v avail=${available_memory} -v total=${mem_total_size} 'BEGIN{printf "%.2f\n", 100 - (avail / total * 100)}')
fi
mem_facts=$(cat << EOF
{
"MemTotalSize": "${mem_total_size}M",
"MemFree": "${mem_free}M",
"Available": "${available_memory}M",
"usedperc": "${used_percentage}%"
}
EOF
)
}
# 获取磁盘信息
function get_disk() {
local root_disk_info
local data_disk_info
local root_total_disk
local root_free_disk
local root_usage_disk
local data_total_disk
local data_free_disk
local data_usage_disk
root_disk_info=$(df -HT | grep -w '/')
data_disk_info=$(df -HT | grep -w '/data')
if [ $(echo "${root_disk_info}" | grep -Ev "^$" | wc -l) -eq 1 ]; then
root_total_disk=$(echo "${root_disk_info}" | awk '{print $3}')
root_free_disk=$(echo "${root_disk_info}" | awk '{print $5}')
root_usage_disk=$(echo "${root_disk_info}" | awk '{print $(NF-1)}')
else
root_total_disk=""
root_free_disk=""
root_usage_disk=""
fi
if [ $(echo "${data_disk_info}" | grep -Ev "^$" | wc -l) -eq 1 ]; then
data_total_disk=$(echo "${data_disk_info}" | awk '{print $3}')
data_free_disk=$(echo "${data_disk_info}" | awk '{print $4}')
data_usage_disk=$(echo "${data_disk_info}" | awk '{print $(NF-1)}')
else
data_total_disk=""
data_free_disk=""
data_usage_disk=""
fi
disk_facts=$(cat << EOF
{
"root_total_disk": "${root_total_disk}",
"root_free_disk": "${root_free_disk}",
"root_usage_disk": "${root_usage_disk}",
"data_total_disk": "${data_total_disk}",
"data_free_disk": "${data_free_disk}",
"data_usage_disk": "${data_usage_disk}"
}
EOF
)
}
# 主函数
function main() {
get_system
get_cpu
get_mem
get_disk
check_facts=$(cat << EOF
{
"system": ${system_facts:-[]},
"cpu": ${cpu_facts:-[]},
"mem": ${mem_facts:-[]},
"disk": ${disk_facts:-[]}
}
EOF
)
echo "${check_facts:-[]}"
}
# 调用主函数
main
更多推荐



所有评论(0)