系统巡检
所谓系统巡检就是就是定时检查系统的各项指标,与监控互补。
指标信息
1.基本信息:主机名,ip地址,公网ip,系统发行版本,内核版本,cpu架构
hostname
hostname -i
curl ifconfig.io
cat /etc/os-release
uname -r
uname -m
echo $LANG 系统的语言
lscpu中的Model name cpu的型号,cpu的核数
top cpu的使用情况,io,系统态,用户态
2.系统信息:内存,swap,磁盘数量,磁盘大小,磁盘分区空间,分区状态,cpu颗数,核心数,空闲率,负载,用户及登录信息,可登录用户信息,sudo权限用户信息,系统dns及是否可用,yum仓库是否优化,selinux是否关闭,防火墙规则
free
lsblk/fdisk -l 磁盘个数
3.服务信息:端口,进程,僵尸进程数量,后台挂起进程数量,开机自启动的服务,当前运行的服务
ss -lntup 查看端口有哪些
top/ps aux 查看僵尸进程
systemctl list-unit-files 开启自启的服务
4.web服务:状态码,连接数,并发数
ss -ant|排除LIsten即可 ---连接数
ss -ant|grep ESTABLE ---并发数
代码
1.尽可能的使用函数
2.指标取出后存放到文件中,如csv
#!/bin/bash
#author:刚刚
file_save_path=~/sys_info
####生成结果文件函数####
res_file_process(){
[ ! -d $file_save_path ] && {
mkdir $file_save_path
}
}
####判断是否可以上公网####
sys_pub_check(){
ping -c2 -i 0.01 www.baidu.com &>/dev/null
if [ $? -eq 0 ];then
if_has_pub_addr=2
else
echo "没有公网"
fi
echo $if_has_pub_addr
}
####系统的基础指标检查####
sys_basic_check(){
name="系统的基础指标"
hostname=`hostname`
ips=`hostname -I`
kernel_version=`uname -r`
source /etc/os-release
issue_version=`echo $PRETTY_NAME`
if [ $(sys_pub_check) -eq 2 ];then
pub_ip=`curl -s ipconfig.io`
else
pub_ip="没有公有ip"
fi
lang=`echo $LANG`
date=`date +%F_%T`
res_file_process
cat >> $file_save_path/$date.cvs <<EOF
$name,主机名,$hostname
$name,ip地址,$ips
$name,内核版本,$kernel_version
$name,发行版本,$issue_version
$name,公有ip,$pub_ip
$name,系统语言,$lang
EOF
echo "$name检查完成"
}
sys_cpu(){
name="系统cpu信息"
cpu_arch=`lscpu | grep Architecture |awk '{print $2}'`
cpu_model=`lscpu | grep "Model name:"| head -1 | awk -F: '{print $2}'|sed -r 's/[[:space:]]+//'`
cpu_core=`lscpu | grep "^CPU(s):" | awk '{print $2}'`
cpu_idel=`iostat | grep -A1 "avg-cpu" | tail -1 | awk '{print $NF}'`
cpu_user=`iostat | grep -A1 "avg-cpu" | tail -1 | awk '{print $1}'`
cpu_sys=`iostat | grep -A1 "avg-cpu" | tail -1 | awk '{print $3}'`
cpu_iowait=`iostat | grep -A1 "avg-cpu" | tail -1 | awk '{print $4}'`
cpu_load_1=`uptime | awk '{print $10}'|cut -d, -f1`
cpu_load_5=`uptime | awk '{print $11}'|cut -d, -f1`
cpu_load_15=`uptime | awk '{print $12}'|cut -d, -f1`
cat >> $file_save_path/$date.cvs <<EOF
$name,cpu的架构,$cpu_arch
$name,cpu的型号,$cpu_model
$name,cpu的核数,$cpu_core
$name,cpu的空闲率,$cpu_idel
$name,cpu用户态使用率,$cpu_user
$name,cpu系统态使用率,$cpu_sys
$name,cpuio使用率,$cpu_iowait
$name,cpu过去一分钟的平均负载,$cpu_load_1
EOF
echo "$name检查完成"
}
sys_mem(){
name="系统内存信息"
mem_total=`free -h|awk 'NR==2{print $2}'`
mem_free=`free -h|awk 'NR==2{print $NF}'`
if [ `free |awk 'NR==3{print $2}'` -eq 0 ];then
echo -e "\033[31m没有交换分区\033[0m"
if_has_swap=no
else
if_has_swap=yes
fi
if [ $if_has_swap = "yes" ];then
mem_swap_total=`free -h |awk 'NR==3{print $2}'`
cat >> $file_save_path/$date.cvs <<-EOF
$name,交换分区总大小,$mem_swap_total
EOF
fi
cat >> $file_save_path/$date.cvs <<EOF
$name,内存的总量,$mem_total
$name,剩余内存,$mem_free
EOF
echo "$name检查完成"
}
sys_fdisk(){
name="系统磁盘相关的信息"
disk_count=`lsblk | grep disk | wc -l`
disk_size=`lsblk | grep disk | awk -v OFS='----->' '{print $1,$4}'`
cat >> $file_save_path/$date.cvs <<EOF
$name,内存的总量,$disk_count
$name,剩余内存,$disk_size
EOF
echo "$name检查完成"
}
service_info(){
name=`服务信息`
selinux_status=`getenforce`
firewall_status=`systemctl is-active firewalld.service`
}
main(){
sys_basic_check
sys_cpu
sys_mem
sys_fdisk
}
main
总结:自动巡检项目就是根据你的需求编写相关的shell脚本,来定时检查系统有没有出现一些问题。