红河游戏网:好玩的手机版传奇游戏免费下载和不花钱手机游戏排行榜就来红河手游下载平台吧,祝您游戏红红火火!
游戏
您当前所在位置:首页 > 软件资讯 > 手机评测

运维工程师必看!服务器每日线上巡检指标及shell脚本示例

时间:2025-10-13 来源:www.hongheyouxi.com 作者:红河游戏

服务器运维工作繁琐又关键,每天手动检查CPU、内存和硬盘状态,不仅耗时还容易遗漏细节。自动化巡检脚本能把管理员从重复劳动中解放出来,成为保障系统稳定的隐形守护者。

系统信息检查基础

系统基础信息包括操作系统版本、内核发行时间和运行时长。在CentOS 7.9环境中,通过uname -r可获取当前内核版本,uptime命令则能显示系统连续工作的时间。这些数据帮助管理员判断是否需要安排系统重启或安全更新。

主机名与IP地址的对应关系也属于系统信息范畴。使用hostname -I查看所有IP地址,再通过cat /etc/hosts验证配置是否正确。这些检查能避免因网络配置错误导致的服务不可用问题。

CPU性能监控方法

CPU使用率需要关注当前负载与历史趋势。top命令实时显示每个核心的利用率,vmstat 1 5则可采样分析CPU在用户模式和系统模式下的时间分配。当某个进程持续占用超过70%的CPU资源时,可能需要进一步调查原因。

系统负载平均值反映了CPU的任务处理压力。在CentOS系统中,cat /proc/loadavg提供的三个数值分别代表1分钟、5分钟和15分钟内的平均负载。对于4核服务器,若15分钟负载持续高于3.5,说明系统可能已经超载运行。

内存使用情况分析

内存检查需同时关注物理内存与交换空间。使用free -h命令能以人类可读格式显示内存总量、已用数量和剩余容量。当可用内存低于总容量的10%时,系统性能会明显下降。

通过cat /proc/meminfo可以获取更详细的内存统计信息,包括缓冲区和缓存的使用量。定期对比这些数据,能够发现内存泄漏的早期迹象。若交换空间使用率持续增长,通常意味着物理内存已不足以支撑当前工作负载。

硬盘空间管理要点

磁盘空间巡检需要检查各分区使用率。df -h命令列出所有挂载点的空间使用情况,当任一分区使用率超过85%时,应及时清理日志文件或扩容存储。

#!/bin/bash
# @Author: 爱踢人生sre
# beseem CentOS6.X CentOS7.X
# date: 20250224
echo "Host Daily Check Script"
[ $(id -u) -gt 0 ] && echo "请用root用户执行此脚本!" && exit 1
if [ ! -d /root/check_log  ];then
  mkdir /root/check_log
  echo "/root/check_log检查日志存放目录创建成功"
else
  echo "/root/check_log检查日志存放目录已存在"
fi
function getSystem(){
echo ""
echo ""
echo "############################ 系统信息检查 ############################"
Default_LANG=${LANG}
OS=$(uname -o)
Release=$(cat /etc/redhat-release 2>/dev/null)
Kernel=$(uname -r)
Hostname=$(uname -n)
Nowdate=$(date +'%F %T')

软件测试抓取log日志

LastReboot=$(who -b | awk '{print $3,$4}') uptime=$(uptime | sed 's/.*up \([^,]*\), .*/\1/') echo " 语言环境: $Default_LANG" echo " 系统: $OS" echo " 发行版本: $Release" echo " 内核: $Kernel" echo " 主机名: $Hostname" echo " 当前时间: $Nowdate" echo " 最后启动: $LastReboot" echo " 运行时间: $uptime" } function getCpu(){ echo "" echo "" echo "############################ CPU检查 ############################" Physical_CPUs=$(grep "physical id" /proc/cpuinfo| sort | uniq | wc -l) Virt_CPUs=$(grep "processor" /proc/cpuinfo | wc -l) CPU_Kernels=$(grep "cores" /proc/cpuinfo|uniq| awk -F ': ' '{print $2}') CPU_Type=$(grep "model name" /proc/cpuinfo | awk -F ': ' '{print $2}' | sort | uniq) CPU_Hz=$(cat /proc/cpuinfo | grep "cpu MHz" | uniq | awk -F':' '{sub(/ /,"",$2);printf "%s MHz\n",$2}') CPU_Arch=$(uname -m) CPU_Usage=$(cat /proc/loadavg | awk '{print $1}') echo "物理CPU个数: $Physical_CPUs" echo "逻辑CPU个数: $Virt_CPUs" echo "每CPU核心数: $CPU_Kernels" echo "CPU型号: $CPU_Type" echo "CPU频率: $CPU_Hz" echo "CPU架构: $CPU_Arch" echo "CPU使用率: ${CPU_Usage}%" } function getMemory(){ echo "" echo "" echo "############################ 内存检查 ############################" Memory_Used=$(awk '/MemTotal/{total=$2}/MemFree/{free=$2}END{print (total-free)/1024/1024}' /proc/meminfo) Memory_Total=$(awk '/MemTotal/{total=$2}END{print (total)/1024/1024}' /proc/meminfo) # kb的换算是1000 kB的换算是1024

软件测试抓取log日志

Memory_Usage=$(awk '/MemTotal/{total=$2}/MemFree/{free=$2}END{print (total-free)/total*100}' /proc/meminfo) echo "已使用内存/全部内存: ${Memory_Used}GB/${Memory_Total}GB" echo "内存使用率: ${Memory_Usage}%" } function getDisk(){ echo "" echo "" echo "############################ 硬盘检查 ############################" Disk_Count=$(lsblk |awk '/disk/{print $1}'|wc -l) echo "硬盘数量: ${Disk_Count}个" echo "硬盘分区情况: " echo "`df -hTP | sort |grep -E "/sd|/mapper" |awk '{print ($1 "\t\n" " 文件系统"$2 " 合计"$3 " 已用"$4 " 剩余"$5 " 使用率"$6 " 挂载点"$7)}'`" # -P, --portability 使用 POSIX 输出格式,方便shell过滤处理 smartctl -V >&/dev/null if [ $? -eq 0 ]; then echo "smartctl工具已安装,可以进行硬盘健康检测: " for i in $(lsblk |awk '/disk/{print $1}') do echo "硬盘"$i `smartctl -H /dev/$i |grep -Ei "OK|PASSED|FAILED|Failure|Failed"` done else echo "smartctl工具未安装,无法进行硬盘健康检测" fi # "\n磁盘IO信息:$(iotop -bon 1 &>/dev/null || echo 'iotop 未安装信息获取失败')" } function getNetwork(){ echo "" echo "" echo "############################ 网络检查 ############################" Network_Device=$(cat /proc/net/dev | awk 'NR>2 && $1 !~/lo/ {sub(/:/,"");print $1}') for i in $Network_Device do echo "网卡:$i 状态: $(ip link show $Network_Device | awk 'NR==1{print $9}') RX: $(ethtool -g $Network_Device | grep "RX:" | tail -1 | awk '{print $2}') TX: $(ethtool -g $Network_Device | grep "TX:" | tail -1 | awk '{print $2}')" # rx是接收(receive),tx是发送(transport) Mac_Info=$(ip link | egrep -v "lo" | grep link | awk '{print $2}') echo "MAC地址: $Mac_Info" Private_Ip=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}') echo "IP地址: $Private_Ip"

软件测试抓取log日志

# Public_Ip=$(curl ifconfig.me -s) # echo "公网IP地址: $Public_Ip" Gateway=$(ip route | grep default | awk '{print $3}') # echo "网关地址: $Gateway" # Dns_Config=$(grep nameserver /etc/resolv.conf| grep -v "#" | awk '{print $2}' | tr '\n' ',' | sed 's/,$//') # echo "DNS地址: $Dns_Config" echo "网关连接情况: $(ping -c 4 -i 0.5 -W 3 $Gateway &>/dev/null && echo '正常通信' || echo '无法通信')" echo "外网连接情况: $(ping -c 4 -i 0.5 -W 3 baidu.com &>/dev/null && echo '正常通信' || echo '无法通信')" # 发送4次请求包,每次间隔0.5秒,最长等待时间为3秒 done Listen_Port=$(ss -tuln | grep LISTEN | awk '{print $5}' | awk -F: '{print $2$4}' | sort |uniq -d | tr '\n' ',' | sed 's/,$//') echo "系统运行的端口: $Listen_Port" } function check(){ echo "Host Daily Check Script" getSystem getCpu getMemory getDisk getNetwork } RESULTFILE="/root/check_log/check-`date +%Y%m%d`.txt" check > $RESULTFILE echo "检查结果:$RESULTFILE"

除了可用空间,还需要监控磁盘inode使用量。通过df -i查看各分区inode状态,防止因小文件过多导致磁盘无法写入。同时,iostat -x 1 3命令可评估磁盘读写性能,及时发现硬件老化问题。

网络连接状态检测

网络连通性检查包括本地端口监听和远程服务可达性。netstat -tuln显示所有监听中的TCP和UDP端口,确保必要服务正常运行,同时发现异常开放端口。

chmod +x system_check.sh
./system_check.sh

使用ping测试网关和外部域名的响应时间,通过traceroute分析网络路径质量。对于提供Web服务的服务器,还应使用curl -I验证HTTP服务的返回状态码,确保应用层服务可用。

巡检脚本安全实践

自动化巡检脚本通常需要较高执行权限,但直接使用root账户存在安全风险。建议通过sudo授权特定命令,并设置严格的脚本文件权限为744,避免非授权修改。

在脚本中谨慎处理敏感信息,如密码和密钥不应以明文形式存储。对于需要定期执行的巡检任务,可配置专门的监控账户,并限制其登录权限,仅允许从特定IP地址访问。

软件测试抓取log日志

你在日常运维中还遇到过哪些看似简单却极易忽略的检查项?欢迎在评论区分享你的经验,如果觉得这些巡检方法有用,请点赞支持并分享给更多需要的同行。

相关应用
相关文章

玩家评论

精品推荐