TH小破站

  • 首页
  • 容器
    • 认识Docker
    • DockerFile详解
  • k8s
    • 认识Kubernetes
    • Kubernetes部署--(kubeadm方式)
    • kubeasz部署k8s集群
    • Ansible-binary部署k8s集群-1.31.2
  • Ceph
    • 认识分布式存储
    • CPEH部署
  • CI/CD
    • DevOps认识
    • 部署--Gitlab
  • ELK
    • ELK简介
    • Elasticsearch
    • Kibana部署
    • Logstash
    • ELK--收集 tomcat 日志(实战)
  • HD
    • 认识--大数据
    • Hadoop-单机部署
    • Hadoop-伪分布部署
    • Hadoop-完全分布部署
    • Hadoop-(HA)完全分布部署
    • Ambari自动部署--Hadoop
  • Nginx
    • Nginx功能介绍
    • Nginx安全选项
    • Nginx配置文件简单介绍
    • 网站服务器部署
  • 监控
    • ZABBIX-部署(yum)
    • ZABBIX-编译安装
  • 云计算
    • KVM 概述
    • OpenStack企业级部署(T版)
    • OpenStack之dashboard部署
    • OpenStack-controller的高可用
    • openstack(Caracal版_ubuntu版本)部署
  • 数据库
    • mariadb与mysql
    • mysql主从
    • MySQL--冷备(实战)
    • MySQL--热备(dump表)
    • MySQL--热备(dump库)
    • 数据恢复实战案例
    • Xtrabackup实现MySql8.x全量备份
    • MyCat实现数据库读写分离
    • MHA实现数据库高可用
    • Percona XtraDB(PXC)实现数据库集群高可用
    • 数据库压力测试
    • PostgreSQL 基操
    • PostgreSQL备份恢复
    • PostgreSQL高可用
    • MongDB安装配置基础使用
    • MongoDB实现复制集
    • MongoDB备份还原
  • 自动化
    • ssh远程服务原理及配置
    • Ansible剧本文件应用
    • Ansible管理服务介绍
    • Ansible自动化部署node_exporter(包含升级,回滚)
    • Saltstack-部署安装
  • 脚本
    • 一键查看服务器资源利用率
    • 一键生成SSL证书
    • 保存指定数量的文件/目录
    • 初始化服务器
    • 扫描可用IP
    • 批量分发SSH密钥
    • 监控多主机磁盘脚本
    • 一键安装MySQL8.x脚本
    • Python脚本监控ES集群
    • 资源巡检脚本
    • 查看各用户使用的cpu占比
热衷于分享
架构师成长之路 !!!
  1. 首页
  2. 监控
  3. 正文

Linux服务器日常巡检脚本

2023年12月28日 1278点热度 0人点赞 0条评论

资源巡检


[root@expr01 ~]# vim check_idc-v1.sh 
#!/bin/bash
# ------------------------------------------
# Filename:         check_idc-v1.sh 
# Version:          1.1
# Date:             2023/12/28
# Author:           tanghao
# Email:            15823093565@163.com
# Description:      This is the script
# Copyright:        2023 tanghao
# License:          GPL
# ------------------------------------------
​
function RED(){
 echo -e "\033[31m$@\033[0m"
}
function GRE(){
 echo -e "\033[36m$@\033[0m"
}
function OS_INFO(){
 # 系统名
 local OS_NAME=`uname -n`
 # 系统版本
 # local OS_VERSION=`cat /etc/. | grep dist_id | grep -oE "Kylin.*" 2>/dev/null || echo 获取信息失败`
 # 系统类型
 local OS_TYPE=`uname`
 # 主机序列号
 local OS_NUM=`dmidecode -t system | grep 'Serial Number' | awk '{print $3}'`
 # 系统内核版本
 local OS_KERNEL=`uname -r`
 # 系统机器码
 local OS_CODE=""
 # 系统语言环境
 local OS_LANG=`echo $LANG`
 # 系统时间
 local OS_DATE=`date +"%Y-%m-%d %H:%M:%S"`
 # 系统运行时间
 local OS_UPTIME=`uptime | awk -F',' '{sub(/.*up /,"",$1);print $1'} || echo 获取信息失败`
 # 系统上次重启时间
 local OS_LAST_REBOOT=`last reboot | head -1 | awk '{print $5,$6,$7,$8,$10}'`
 # 系统上次关机时间
 local OS_LAST_SHUTDOWN=`last -x | grep shutdown | head -1 | awk '{print $5,$6,$7,$8,$10}'`
 RED "################################# [ 系统信息巡检区 ] ######################################"
 GRE "主机名:$OS_NAME"
 GRE "主机类型:$OS_TYPE"
 GRE "主机序列号:${OS_NUM:-获取信息失败}"
 GRE "系统版本:$OS_VERSION"
 GRE "系统内核版本:$OS_KERNEL"
 GRE "系统机器码:${OS_CODE:-获取信息失败}"
 GRE "系统语言环境:${OS_LANG}"
 GRE "系统时间;$OS_DATE"
 GRE "系统已运行时间:$OS_UPTIME"
 GRE "系统上次重启时间:${OS_LAST_REBOOT:-获取信息失败}"
 GRE "系统上次关机时间:${OS_LAST_SHUTDOWN:-获取信息失败}"
}
function OS_HDWARE(){
 # CPU架构
 local CPU_ARCH=`uname -m`
 # CPU型号
 local CPU_TYPE=`cat /proc/cpuinfo | grep "model name" | uniq | awk -F':' '{sub(/ /,"",$2);print $2}'`
 # CPU个数
 local CPU_NUM=`cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l`
 # CPU 核数
 local CPU_CORE=`cat /proc/cpuinfo | grep cores | uniq | awk -F':' '{sub(/ /,"",$2);print $2}'`
 # CPU 频率
 local CPU_HZ=`cat /proc/cpuinfo | grep "cpu MHz" | uniq | awk -F':' '{sub(/ /,"",$2);printf "%s MHz\n",$2}'`
 # 内存容量
 local ME_SIZE=$(echo "scale=2;`cat /proc/meminfo | grep 'MemTotal:' | awk '{print $2}'`/1048576"|bc)
 # 空闲内存
 local ME_FREE=$(echo "scale=2;`cat /proc/meminfo | grep 'MemFree:' | awk '{print $2}'`/1048576"|bc)
 # 可用内存
 local ME_FREEE=$(echo "scale=2;`cat /proc/meminfo | grep 'MemAvailable:' | awk '{print $2}'`/1048576" | bc)
 # 内存使用率
 local ME_USE=$(awk 'BEGIN{printf "%.1f%\n",('$ME_SIZE'-'$ME_FREEE')/'$ME_SIZE'*100}')
 # SWAP大小
 local ME_SWAP_SIZE=$(echo "scale=2;`cat /proc/meminfo | grep 'SwapTotal:' | awk '{print $2}'`/1048576"|bc)
 # SWAP可用
 local ME_SWAP_FREE=$(echo "scale=2;`cat /proc/meminfo | grep 'SwapFree:' | awk '{print $2}'`/1048576"|bc)
 # SWAP使用率
 local ME_SWAP_USE=$(awk 'BEGIN{printf "%.1f%\n",('$ME_SWAP_SIZE'-'$ME_SWAP_FREE')/'$ME_SWAP_SIZE'*100}')
 # Buffer大小
 local ME_BUF=$(cat /proc/meminfo | grep 'Buffers:' | awk '{printf "%s KB",$2}')
 # 内存Cache大小
 local ME_CACHE=$(cat /proc/meminfo | grep '^Cached:' | awk '{printf "%s KB",$2}')
 # 当前系统所有网卡
 local NET_DEVICE=(`cat /proc/net/dev | awk 'NR>2 && $1 !~/lo/ {sub(/:/,"");print $1}'`)
 RED "################################# [ 系统硬件巡检区 ] ######################################"
 GRE "CPU型号:$CPU_TYPE"
 GRE "CPU架构:$CPU_ARCH"
 GRE "CPU个数:$CPU_NUM"
 GRE "CPU核数: $CPU_CORE"
 GRE "CPU频率:$CPU_HZ"
 GRE "内存容量:${ME_SIZE} GB"
 GRE "内存空闲:${ME_FREE} GB"
 GRE "内存可用:${ME_FREEE} GB"
 GRE "内存使用率:${ME_USE}"
 GRE "SWAP容量:$ME_SWAP_SIZE GB"
 GRE "SWAP可用容量:$ME_SWAP_FREE GB"
 GRE "SWAP使用率:$ME_SWAP_USE"
 GRE "内存Buffer大小:${ME_BUF}"
 GRE "内存Cache大小:${ME_CACHE}"
 for i in ${NET_DEVICE[@]}
 do
 GRE "网卡:$i 状态: $(ip link show $i | awk 'NR==1{print $9}') RX: $(ethtool -g $i | grep "RX:" | tail -1 | awk '{print $2}') TX: $(ethtool -g $i | grep "TX:" | tail -1 | awk '{print $2}')"
 done
}
function OS_NETWORK(){
 # 系统IP
 local IP=$(hostname -I)
 # 网关地址
 local GATEWAY=$(ip route | grep default &>/dev/null && ip route | grep default | awk '{print $3}' || echo '未设置默认网关')
 # DNS地址
 local DNS=(`cat /etc/resolv.conf | grep nameserver | uniq | awk '{print $2}'`)
 RED "################################# [ 系统网络巡检区 ] ######################################"
 GRE "IP地址:$IP"
 GRE "网关地址:$GATEWAY"
 GRE "DNS地址:${DNS[@]}"
 GRE "网关[$GATEWAY]连接情况: $(ping -c 1 -W 1 $GATEWAY &>/dev/null && echo '正常通信' || echo '无法通信')"
}
function OS_RESOURCE(){
 # 系统磁盘列表
 local DISK_LIST=(`lsblk | egrep "^[a-z].*" | grep -v "^sr" | awk '{print $1}'`)
 # 系统磁盘使用率情况
 local DISK_PER=(`df -h | awk 'NR>1 && $1 !~/sr/ {gsub(/%/,"",$5);print $5}'`)
 # CPU空闲率
 # local CPU_FREE=$(top -d 1 -n 1 -b | awk 'NR==3{print $8}')
 # CPU使用率
 local CPU_USE=`top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}' | cut -c1-4`
        # echo $CPU_USE
 # CPU_TOP_TEN
 local CPU_TOP_TEN=$(top -d 1 -n 1 -b | column -t | awk 'NR>=7 && NR<=15')
 # 当前进程数
 local CPU_PROCESSORS=$(top -d 1 -n 1 -b | awk 'NR==2{print $2}')
 # 当前正在运行进程数
 local CPU_RUN_PROCESSORS=$(top -d 1 -n 1 -b | awk 'NR==2{print $4}')
 # 当前正在休眠进程数
 local CPU_SL_PROCESSORS=$(top -d 1 -n 1 -b | awk 'NR==2{print $6}')
 # 当前停止运行进程数
 local CPU_STOP_PROCESSORS=$(top -d 1 -n 1 -b | awk 'NR==2{print 8}')
 # 当前僵尸进程数
 local CPU_ZOM_PROCESSORS=$(top -d 1 -n 1 -b | awk 'NR==2{print $10}')
​
 RED "################################# [ 系统资源巡检区 ] ######################################"
 GRE "CPU使用率:${CPU_USE}%"
 GRE "CPU使用率前十进程信息:"
 GRE "$(ps -eo user,pid,pcpu,pmem,args --sort=-pcpu | head -n 10)"
 GRE "\n内存使用率前十进程信息:"
 GRE "$(ps -eo user,pid,pcpu,pmem,args --sort=-pmem | head -n 10)"
 GRE "\n磁盘IO信息:$(iotop -bon 1 &>/dev/null || echo 'io top 未安装信息获取失败')"
 GRE "$(iotop -bon 1 &>/dev/null && iotop -bon 1 | head -n 13)"
 GRE "\n磁盘分区使用率是否正常:正常"
 for i in ${DISK_LIST}
 do
 if [[ -z "$(lsblk --nodeps -no serial /dev/$i)" ]]; then
 GRE "磁盘:$i 磁盘序列号:获取信息失败" 
 else
 GRE "磁盘:$i 磁盘序列号:$(lsblk --nodeps -no serial /dev/$i)"
 fi
 done
 for i in ${DISK_PER[@]}
 do
 if [ $i -gt 80 ]; then
 RED "某分区磁盘使用率为:$i% > 80% 请及时扩容"
 fi
 done
 GRE "\n系统磁盘分区inode使用情况:"
 GRE "$(df -Thi)"
 GRE "\n系统当前进程数:$CPU_PROCESSORS" 
 GRE "系统当前进程运行数:$CPU_RUN_PROCESSORS"
 GRE "系统当前休眠进程数:$CPU_SL_PROCESSORS"
 GRE "系统当前停止进程数:$CPU_STOP_PROCESSORS"
 GRE "系统当前僵尸进程数:$CPU_ZOM_PROCESSORS"
 GRE "\n系统当前允许最大fd数量:$(cat /proc/sys/fs/file-nr | awk '{print $3}')"
 GRE "系统当前已打开fd数量:$(cat /proc/sys/fs/file-nr | awk '{print $1}')"
 GRE "系统单个进程运行打开fd数量:$(ulimit -n)"
 GRE "\n系统当前socket连接数:$(netstat -anp &>/dev/null && netstat -anp | wc -l || echo 'net-tools 未安装,获取信息失败')"
 GRE "系统 established socket数量: $(netstat -anp &>/dev/null && netstat -anp | grep "ESTABLISHED" | wc -l || echo 'net-tools 未安装,获取信息失败')"
 GRE "系统 sync socket数量:$(netstat -anp &>/dev/null && netstat -anp | grep "SYN" | wc -l || echo 'net-tools 未安装,获取信息失败')"
 #GRE "系统当前已建立socket如下:"
 #GRE "$(netstat -anp &>/dev/null && netstat -anp | grep ESTABLISHED | awk '{printf " 本地:%-20s <=>   外部:%-22s\n",$4,$5}' || echo '')"
}
function OS_SECURITY(){
 # 系统所有能登录的用户
 local OS_USER=(`cat /etc/passwd | awk -F':' '$NF !~/nologin|sync|shutdown|halt/ {print $1}'`)
 # Selinux
 local OS_SELINUX=`getenforce`
 # 防火墙状态
 local OS_FIREWALLD=`service firewalld status &>/dev/null | grep "running" && echo on || echo off`
 RED "################################# [ 系统安全巡检区 ] ######################################"
 GRE "防火墙状态: $OS_FIREWALLD"
 GRE "Selinux状态:${OS_SELINUX}\n"
 GRE "系统可登录用户数:$(cat /etc/passwd | awk -F':' '$NF !~/nologin|sync|shutdown|halt/ {print $1}' | wc -l)"
 GRE "系统可登录用户:${OS_USER[@]}"
 for i in ${OS_USER[@]}
 do
 GRE "用户 $i 最后1次登录信息: $(lastlog -u $i | awk 'NR==2')"
 done
 GRE "系统当前登录用户:"
 GRE "$(who | sed 's#[()]##g' | awk '{printf "   用户: %10s 终端: %7s 登录时间: %7s %7s 登录IP: %7s\n",$1,$2,$3,$4,$5}')"
}
function OS_SERVICE(){
 RED "################################# [ 系统服务巡检区 ] ######################################"
 GRE "自行添加"
}
if [ $(id -u -n) != "root" ]; then
 ERROR "请以ROOT用户运行这个脚本"
fi
OS_INFO
OS_HDWARE
OS_NETWORK
OS_RESOURCE
#OS_SECURITY
标签: 暂无
最后更新:2023年12月28日

tanghao946

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章目录
  • 资源巡检

COPYRIGHT © 2025 TH小破站. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

渝ICP备2023013789号

渝公网安备50011702500926号