脚本介绍:用于快速获取各节点状况,最终采集按实际情况来定(本次分为2个集群,将采集到的信息输出到2个日志中)
1、准备条件
1)所有采集机器安装sysstat (CPU使用率通过此工具采集)
#推荐使用pdsh工具批量执行安装
yum -y install pdsh
pdsh -w 192.168.20.[47-49],192.168.20.41,192.168.20.26,192.168.20.8,192.168.20.10,192.168.20.38,192.168.20.25,192.168.20.7,192.168.20.5,192.168.20.3 "yum -y install sysstat"
2)执行节点到其他所有节点做免密(可参考ssh免密三种方法)
2、采集脚本
#!/bin/bash
#by zhb 2021.7.12 reference by ysw
Date=$(date "+%Y-%m-%d_%H:%M")
Dir='/tmp/logs/'
check_A() {
ips=(
192.168.20.41
192.168.20.26
192.168.20.8
192.168.20.10
192.168.20.38
192.168.20.25
192.168.20.47
192.168.20.7
)
#集群A
for ip in ${ips[*]}
do
#节点IP地址
IP=$(timeout 15 ssh $ip hostname -I|awk '{print $1}')
if [ -n "$IP" ]
then
echo -e "Normal_IP地址_${ip}" >> ${Dir}normal.log.${Date}
fi
#节点CPU(vcore)采集
CPU_vcore=$(timeout 15 ssh $ip cat /proc/cpuinfo |grep "processor" |wc -l)
if [ -n "$CPU_vcore" ]
then
echo -e "Normal_CPU核数_${ip}:$CPU_vcore" >> ${Dir}normal.log.${Date}
fi
#CPU使用率采集
CPU_free=$(timeout 15 ssh $ip iostat|grep -A 1 "idle"|sed -n 2p|awk '{print $6}')
CPU_use=`python -c "print(str(100-${CPU_free})+'%')"`
if [ -n "$CPU_use" ]
then
echo -e "Normal_CPU使用率_${ip}:$CPU_use" >> ${Dir}normal.log.${Date}
fi
#节点内存总大小采集
mem_total=$(timeout 15 ssh $ip free -h|awk '{print $2}'|sed -n 2p)
if [ -n "$mem_total" ]
then
echo -e "Normal_内存总大小_${ip}:$mem_total" >> ${Dir}normal.log.${Date}
fi
#节点内存使用率采集
free_size=$(timeout 15 ssh $ip free |sed 1d|grep -v Swap|awk '$3/$2*100 > 0 {print $3/$2*100}' |awk -F . '{print $1 "%"}')
if [ -n "$free_size" ]
then
echo -e "Normal_内存使用率_${ip}:$free_size" >> ${Dir}normal.log.${Date}
fi
#节点最近5分钟CPU负载情况采集
IO=$(timeout 15 ssh $ip w |grep load|awk '{print $10}'|cut -d ',' -f1)
if [ -n "$IO" ]
then
echo -e "Normal_近5分钟io情况_${ip}:$IO" >> ${Dir}normal.log.${Date}
fi
#节点磁盘大小采集(需根据实际情况采集,本次为云虚机所以目录盘符都一样)
Disk_total=$(timeout 15 ssh $ip lsblk|grep "vda1"|awk '{print $4}')
if [ -n "$Disk_total" ]
then
echo -e "Normal_磁盘大小_${ip}:$Disk_total" >> ${Dir}normal.log.${Date}
fi
#"/"磁盘使用率
Disk_use=$(timeout 15 ssh $ip df -hT|grep "dev/vda1"|awk '{print $6}')
if [ -n "$Disk_use" ]
then
echo -e "Normal_磁盘使用率_${ip}:$Disk_use
-------------分割线--------------" >> ${Dir}normal.log.${Date}
fi
done
}
check_B() {
ips=(
192.168.20.49
192.168.20.5
192.168.20.3
192.168.20.48
)
#集群B
for ip in ${ips[*]}
do
#节点IP地址
IP=$(timeout 15 ssh $ip hostname -I|awk '{print $1}')
if [ -n "$IP" ]
then
echo -e "Redis_IP地址_${ip}" >> ${Dir}redis.log.${Date}
fi
#节点CPU(vcore)采集
CPU_vcore=$(timeout 15 ssh $ip cat /proc/cpuinfo |grep "processor" |wc -l)
if [ -n "$CPU_vcore" ]
then
echo -e "Redis_CPU核数_${ip}:$CPU_vcore" >> ${Dir}redis.log.${Date}
fi
#CPU使用率采集
CPU_free=$(timeout 15 ssh $ip iostat|grep -A 1 "idle"|sed -n 2p|awk '{print $6}')
CPU_use=`python -c "print(str(100-${CPU_free})+'%')"`
if [ -n "$CPU_use" ]
then
echo -e "Redis_CPU使用率_${ip}:$CPU_use" >> ${Dir}redis.log.${Date}
fi
#节点内存总大小采集
mem_total=$(timeout 15 ssh $ip free -h|awk '{print $2}'|sed -n 2p)
if [ -n "$mem_total" ]
then
echo -e "Redis_内存总大小_${ip}:$mem_total" >> ${Dir}redis.log.${Date}
fi
#节点内存使用率采集
free_size=$(timeout 15 ssh $ip free |sed 1d|grep -v Swap|awk '$3/$2*100 > 0 {print $3/$2*100}' |awk -F . '{print $1 "%"}')
if [ -n "$free_size" ]
then
echo -e "Redis_内存使用率_${ip}:$free_size" >> ${Dir}redis.log.${Date}
fi
#节点最近5分钟io采集
IO=$(timeout 15 ssh $ip w |grep load|awk '{print $10}'|cut -d ',' -f1)
if [ -n "$IO" ]
then
echo -e "Redis_近5分钟io情况_${ip}:$IO" >> ${Dir}redis.log.${Date}
fi
#节点磁盘大小采集
Disk_total=$(timeout 15 ssh $ip lsblk|grep "data"|awk '{print $4}')
if [ -n "$Disk_total" ]
then
echo -e "Redis_磁盘大小_${ip}:$Disk_total" >> ${Dir}redis.log.${Date}
fi
#"/data" 磁盘使用率
Disk_use=$(timeout 15 ssh $ip df -hT|grep "data"|awk '{print $6}')
if [ -n "$Disk_use" ]
then
echo -e "Redis_磁盘使用率_${ip}:$Disk_use
-------------分割线--------------" >> ${Dir}redis.log.${Date}
fi
done
}
check_A
check_B
3、验证效果
1、集群A
2、集群B