Linux运维小技巧---每日收集所有服务器信息并归档到指定服务器
服务器信息通常指的是主机名,服务器ip,操作系统类型,内核版本数这些固定的信息和服务器的CPU使用率,CPU的负载情况,内存以及交换内存的使用情况,磁盘的使用情况,这些动态的信息。
那么,日常运维工作巡检也主要针对的是这些动态信息,毕竟固定的信息怎么看都是一个样,不会变的,而我们需要对服务器的内存,CPU,磁盘这三个主要硬件的运行参数监控并通过这些参数得出服务器是否运行良好或者服务器运行不良,以指导后续的运维工作。
如果你的运维工作内容是针对比较少的机器,通常比较少这个概念是指十几台不超过20台,那么,一次正常的巡检也会花费不少的时间,而数量如果超过20台,甚至达到上百台上千台服务器,那么,巡检无疑是对运维的一个巨大挑战了。
那么,有什么办法解决呢?当然有了,其实也很简单的,自动化运维会帮助我们解除这些痛点。
实验目标:
管理的n台服务器,在每天的自定义时间,将各个服务器的CPU,内存,磁盘使用情况单独总结成文档后,归档到一个我们常用的服务器内,从而在需要了解所有服务器的情况的时候,登陆一个管理服务器就可以看到所有服务器的信息。
实验需求分析:
每一个服务器单独收集自己的信息,这个的实现方法当然是shell脚本比较好实现啦。因此,我们要编写一个样本脚本,然后把这个脚本分发到所有服务器内,
脚本运行时间是根据自己的实际需求来,比如,你希望每一天开始上班后,可以看到服务器的运行信息,那么,将脚本运行时间定义在上班前的10分钟是一个不错的主意。
前面说了,是每个服务器单独收集信息,那么,需要通过scp命令将所有信息汇总到常用的管理服务器上即可了。
说人话,所有服务器需要一个ntp时间服务器,统一时间。所有服务器需要定义一个定时任务,到时间就收集一次信息。所有服务器将各自的信息上传到某个指定的管理服务器。这些工作完成后,我们就可以很轻松的掌握所有服务器的运行信息了。
一,实验环境简介
三台服务器,192.168.88.11,192.168.88.12,192.168.88.13,后续以 11 ,12 ,13代替。
11作为管理服务器,也就是12 13的信息和11的信息统一保存到11这个服务器里。
二,实验实现步骤1
三台服务器都做互相免密,11做ntp时间管理服务器,12,13服务器时间和11同步。(免密和时间服务器搭建就不说了,比较基础的运维,应知应会)
三,实验实现步骤2
在11服务器上编写脚本,脚本内容如下,脚本名称为systeminfo.sh,磁盘使用率超过20的分区会全部输出:
#!/bin/bash
#!author zsk
#description:system_info
echo -e "-------------------------------System Information----------------------------"
echo -e "Hostname:\t\t"`hostname`
echo -e "uptime:\t\t\t"`uptime | awk '{print $3,$4}' | sed 's/,//'`
echo -e "Manufacturer:\t\t"`cat /sys/class/dmi/id/chassis_vendor`
echo -e "Product Name:\t\t"`cat /sys/class/dmi/id/product_name`
echo -e "Product Version:\t"`cat /sys/class/dmi/id/product_version`
echo -e "Serial Number:\t\t"`cat /sys/class/dmi/id/product_serial`
lscpu | grep VMware &>/dev/null
echo -e "Machine Type:\t\t"`if [ $? -eq 0 ]; then echo "VMware"; else echo "Physical"; fi`
echo -e "Operating System:\t"`hostnamectl | grep "Operating System" | cut -d ' ' -f5-`
echo -e "Version:\t\t"`cat /etc/redhat-release `
echo -e "Kernel:\t\t\t"`uname -r`
echo -e "Architecture:\t\t"`arch`
echo -e "Processor Name:\t\t"`awk -F':' '/^model name/ {print $2}' /proc/cpuinfo | uniq | sed -e 's/^[ \t]*//'`
echo -e "processor number:\t"`cat /proc/cpuinfo | grep processor | wc -l`
echo -e "Active User:\t\t"`w | cut -d ' ' -f1 | grep -v USER | xargs -n1`
echo -e "System Main IP:\t\t"`hostname -I`
echo ""
echo -e "-------------------------------CPU/Memory Usage------------------------------"
echo -e "Memory Usage:\t\t"`free | awk '/Mem/{printf("%.2f%"), $3/$2*100}'`
echo -e "Swap Usage:\t\t"`free | awk '/Swap/{printf("%.2f%"), $3/$2*100}'`
echo -e "CPU Free Space:\t\t"`top -bn 1 -i -c | grep ^% |cut -f4 -d, | awk '{print $1}'`%
echo -e "CPU LOAD:\t\t"`top -bn 1 -i -c|grep load|awk -F',' '{print $4,$5,$6}'`%
echo ""
echo -e "-------------------------------Disk Usage>20%-------------------------------"
df -Ph | sed s/%//g | awk '{ if($5 > 20) print $0;}'
echo ""
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
然后通过scp将该脚本分发到12和13上。脚本运行结果应该如下(是在别的机器上运行的)
结果提示,我这台机器是vm虚拟机,CPU是e5-2660,/dev/mapper/centos-var这个分区使用率超过百分之20了,登录的用户是root,centos版本等等信息都在这里了。:
[root@master ~]# bash systeminfo.sh
-------------------------------System Information----------------------------
Hostname: master
uptime: 8 min
Manufacturer: No Enclosure
Product Name: VMware Virtual Platform
Product Version: SLIC DELL2.4 By CuiPlaY
Serial Number: VMware-56 4d b7 29 eb 96 6e fc-8b 6a 03 12 c5 55 91 06
Machine Type: VMware
Operating System: CentOS Linux 7 (Core)
Version: CentOS Linux release 7.4.1708 (Core)
Kernel: 3.10.0-693.el7.x86_64
Architecture: x86_64
Processor Name: Intel(R) Xeon(R) CPU E5-2660 0 @ 2.20GHz
processor number: 8
Active User: root
System Main IP: 192.168.0.16
-------------------------------CPU/Memory Usage------------------------------
Memory Usage: 2.81%
Swap Usage: 0.00%
CPU Free Space: 98.5%
CPU LOAD: 0.01 0.01 %
-------------------------------Disk Usage>20%-------------------------------
Filesystem Size Used Avail Use Mounted on
/dev/mapper/centos-var 10G 4.4G 5.7G 44 /var
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
四,实验实现步骤3
11,12,13编写定时任务,每天10点运行一次脚本,生成服务器信息文件,
在11服务器上:
先新建一个文件夹 mkdir /Log,然后crontab -e 编辑如下内容:
00 10 * * * /usr/bin/bash /root/systeminfo.sh 2>&1|tee /root/11.log
05 10 * * * /usr/bin/scp -P 22 /root/11.log 192.168.88.11:~/Log/
在12服务器上:
00 10 * * * /usr/bin/bash /root/systeminfo.sh 2>&1|tee /root/12.log
05 10 * * * /usr/bin/scp -P 22 /root/12.log 192.168.88.11:~/Log/
在13服务器上:
00 10 * * * /usr/bin/bash /root/systeminfo.sh 2>&1|tee /root/13.log
05 10 * * * /usr/bin/scp -P 22 /root/13.log 192.168.88.11:~/Log/
五,实验实现步骤4
编写定时任务,在5分钟延迟后,将所有服务器信息文件传送到11服务器上指定目录内
第三步的定时任务第二行就是延迟归档。
六,实验实现步骤5
在11这个服务器上将所有文件合并归档成一个文件。
在11服务器上:
cat /Log/{11..13}.log >/Log/allinfo.log
这个allinfo.log 就是所有的服务器信息了。