Shell脚本采集:CPU、内存、磁盘信息采集输出log

该脚本用于跨两个集群收集节点的系统资源信息,包括CPU使用率、内存使用率、磁盘空间等,并将数据输出到不同的日志文件。通过sysstat工具获取CPU数据,使用ssh进行远程无密执行,确保数据采集的效率和安全性。脚本详细记录了每个节点的IP、CPU核心数、内存大小、磁盘使用情况等关键指标,有助于监控和分析集群健康状态。
摘要由CSDN通过智能技术生成

脚本介绍:用于快速获取各节点状况,最终采集按实际情况来定(本次分为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
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值