[root@bd-manager devops-shell]# cat project_sys_info.sh
#!/bin/bash
File Name:project_sys_info.sh
Version:V1.0
Author:itter
Organization:www.ipran.com
Desc:
#(1)处理文件的函数
#1、保存文件
file_save_result=sys_info.csv
server_list="nginx mysql php"
web_url="192.168.0.4/status"
#2、处理文件,GBK文件在linux打开乱码,需要win打开
res_file_process() {
date=date +%F
[ -f $file_save_result ] && {
iconv -f utf8 -t gbk $file_save_result -o gbk-${file_save_result}
mv gbk-$file_save_result ${date}-gbk-${file_save_result}
}
}
#3、检测是否能上网
sys_pub_check() {
if_has_pub_addr=0
ping -c 1 -W 1 www.baidu.com &>/dev/null
if [ $? -ne 0 ];then
echo "没有公网"
if_has_pub_addr=1
fi
return $if_has_pub_addr
}
#(2)系统的基础指标获取
sys_basic() {
name="系统基础指标"
hostname=hostname
ips='hostname -I'
source /etc/os-release
kernel_version=uname -r
lang=awk -F"=" '{print $2}' /etc/locale.conf
if sys_pub_check;then
ip_pub=curl -s ifconfig.io
else
ip_pub="没有公网"
fi
#输出基本信息到文件
cat >>$file_save_result<<-EOF
$name,主机名,$hostname
$name,ip地址,$ips
$name,系统,$VERSION $NAME
$name,内核版本,$kernel_version
$name,系统字符集和语言,$lang
$name,公网ip,$ip_pub
EOF
echo "$name:统计完成"
}
#(2)cpu信息
sys_cpu() {
name="系统cpu信息"
cpu_arch=uname -r
cpu_model=lscpu |grep 'Model name:'|sed -r 's#.*: +##g'
cpu_numer=lscpu |awk '/Socket/{print $2}'
cpu_core=lscpu |awk '/^CPU\(s)/{print $2}'
cpu_idle_percent=top -bn1|grep Cpu|awk -F"[, ]+" '{print $8}'
cpu_user_percent=top -bn1|grep Cpu|awk -F"[, ]+" '{print $2}'
cpu_sys_percent=top -bn1|grep Cpu|awk -F"[, ]+" '{print $4}'
cpu_iowait_percent=top -bn1|grep Cpu|awk -F"[, ]+" '{print $10}'
load_avg=uptime |awk -F":" '{print $5}'
cat >>$file_save_result<<-EOF
$name,cpu架构,$cpu_arch
$name,cpu型号,$cpu_model
$name,cpu颗数,$cpu_numer
$name,cpu核心数总数,$cpu_core
$name,cpu空闲率,$cpu_idle_percent
$name,cpu用户态使用率,$cpu_user_percent
$name,cpu系统使用率,$cpu_sys_percent
$name,cpu io使用率,$cpu_iowait_percent
$name,系统负载信息,$load_avg
EOF
echo "$name:统计完成"
}
#(3)内存信息
sys_mem() {
name="系统内存信息"
mem_total=free -h|awk 'NR==2{print $2}'
mem_free=free -h|awk 'NR==2{print $NF}'
mem_used=free -h|awk 'NR==2{print $3}'
mem_free_percent=free |awk 'NR==2{print $NF/$2*100"%"}'
if [ free |awk 'NR==3{print $2}'
-eq 0 ];then
echo "没有swap分区"
if_has_swap=no
else
if_has_swap=yes
fi
[ $if_has_swap = "yes" ] && {
mem_swap_total=free -h|awk 'NR==3{print $2}'
mem_swap_used=free -h|awk 'NR==3{print $3}'
}
if [ ${if_has_swap}x = "yes"x ];then
cat >>$file_save_result<<-EOF
$name,内存大小,$mem_total
$name,已用内存,$mem_free
$name,剩余内存,$mem_used
$name,内存空闲率,$mem_free_percent
$name,是否存在swap,$if_has_swap
$name,swap大小,$mem_swap_total
$name,swap使用大小,$mem_swap_used
EOF
else
cat >>$file_save_result<<-EOF
$name,内存大小,$mem_total
$name,已用内存,$mem_free
$name,剩余内存,$mem_used
$name,内存空闲率,$mem_free_percent
$name,是否存在swap,$if_has_swap
EOF
fi
echo "$name:统计完成"
}
#(4)磁盘信息
sys_disk() {
name="磁盘信息统计"
disk_count=fdisk -l|grep -c '/dev/[sv]d[a-z]:'
disk_size=fdisk -l|grep '/dev/[sv]d[a-z]:'|awk '{print $2,$3,$4}'
cat >>$file_save_result<<-EOF
$name,磁盘数量,$disk_count
$name,磁盘大小,$disk_size
EOF
for part in awk '!/swap|^$|#/{print $2}' /etc/fstab
do
disk_fs_size=df -h $part |awk 'NR==2{print $2}'
disk_fs_used_percent=df -h $part |awk 'NR==2{print $(NF-1)}'
disk_fs_inode_used_percent=df -i / |awk 'NR==2{print $5}'
cat >>$file_save_result<<-EOF
$name,磁盘分区$part大小,$disk_fs_size
$name,磁盘分区$part使用率,$disk_fs_used_percent
$name,磁盘分区inode$part使用率,$disk_fs_inode_used_percent
EOF
done
echo "$name:统计完成"
}
#(5)用户信息
user_info() {
name="系统用户信息"
user_login_count=grep -c '/bin/bash' /etc/passwd
user_login_list=grep '/bin/bash' /etc/passwd|awk -F":" '{print $1}'
user_nologin_count=grep -c -v '/bin/bash' /etc/passwd
cat >>$file_save_result<<-EOF
$name,可登录的用户数,$user_login_count
$name,可登录的用户名字,$user_login_list
$name,虚拟用户的数量,$user_nologin_count
EOF
echo "$name:统计完成"
}
#(6)网络信息
network_info() {
name="网络信息"
net_dns=awk 'NR==4{print $2}' /etc/resolv.conf
dig +timeout=1 baidu.com &>/dev/null
if [ $? -eq 0 ];then
if_dns_work=yes
else
if_dns_work=no
fi
#判断是否配置epel源
if [ yum repolist |grep -c epel
-eq 1 ];then
if_yum_epel=yes
else
if_yum_epel=no
fi
#判断源是凑从默认地址下载
if [ grep -v '#' /etc/yum.repos.d/CentOS-Base.repo |grep -c 'centos.org'
-eq 0 ];then
if_yum_download_url_changed=yes
else
if_yum_download_url_changed=no
fi
cat >>$file_save_result<<-EOF
$name,当前dns,$net_dns
$name,dns是否可用,$if_dns_work
$name,是否配置了额外的yum源,$if_yum_epel
$name,是否优化了yum源的下载地址,$if_yum_download_url_changed
EOF
echo "$name:统计完成"
}
#(7)服务信息检查
service_info() {
name="服务信息"
selinux_status='getenforce'
if [ iptables_status=systemctl is-active iptables
= "active" ];then
iptables_status="运行中"
iptables_rules=iptables-save
else
iptables_status="没有运行"
iptables_rules="空"
fi
port_list=ss -lntup|awk 'NR>1{print $5}'|sed 's#.*:##g' |sort |uniq |xargs
zombie_process_count=ps -aux|awk 'NR>1 && $8=="Z"' |wc -l
zombie_process_list=ps -aux|awk 'NR>1 && $8=="Z"' |xargs
stopped_process_count=ps -aux|awk 'NR>1 && $8=="T"' |wc -l
startup_server_count=systemctl list-unit-files |grep -wc enabled
startup_server_list=systemctl list-unit-files |grep -w enabled|awk '{print $1}'|xargs
cat >>$file_save_result<<-EOF
$name,selinux是否关闭,$selinux_status
$name,iptables防火墙状态,$iptables_status
$name,iptables防火墙状态,$iptables_rules
$name,开启的端口列表,$port_list
$name,僵尸进程的数量,$zombie_process_count
$name,僵尸进程的名字,$zombie_process_list
$name,后台挂起的进程数量,$stopped_process_count
$name,开机自启动服务数量,$startup_server_count
$name,开机自启动服务,$startup_server_list
EOF
#(8)检查指定服务的状态
for srv_name in $server_list
do
server_count=ps -ef|grep -w "$srv_name" |grep -v grep |wc -l
if [ $server_count -gt 0 ];then
server_status="运行中"
else
server_status="没有运行中"
fi
cat >>$file_save_result<<-EOF
$name,$srv_name状态,$server_status
EOF
done
echo "$name:统计完成"
}
#(9)web服务
web_info() {
name="web检查"
wget -t 3 -T 1 -q --spider $web_url
if [ $? -eq 0 ];then
status_code=curl -s -w "%{http_code}\n" -o /dev/null $web_url
else
status_code="网站无法访问"
fi
port_80_conn_count=ss -ant|awk '$4~/:80$/'|wc -l
port_80_bingfa_count=ss -ant|awk '$4~/:80$/ && $1~/ESTAB/'|wc -l
cat >>$file_save_result<<-EOF
$name,网站的状态码,$status_code
$name,80端口连接数,$port_80_conn_count
$name,80端口并发数,$port_80_bingfa_count
EOF
echo "$name:统计完成"
}
#other
other_info() {
name="其他检查"
if_has_backup=crontab -l |grep -c backup
if_has_ntpdate=crontab -l |grep -c ntpdate
cat >>$file_save_result<<-EOF
$name,是否有定时备份,$if_has_backup
$name,是否有时间同步,$if_has_ntpdate
EOF
echo "$name:统计完成"
}
main() {
sys_basic
sys_cpu
sys_mem
sys_disk
user_info
network_info
service_info
web_info
other_info
res_file_process
}
main
[root@bd-manager devops-shell]#