zoukankan      html  css  js  c++  java
  • shell脚本实现多台服务器自动巡检

    shell脚本实现多台服务器自动巡检
     
    摘要:
     
            运维服务一个项目二十多台(或者多台)服务器,每天要做服务器的性能巡检工作是查看服务器的CPU、内存、磁盘空间是否在正常值范围内。像这样每天或者每个固定时间段都做相同的重复工作,为了简化重复的工作,我写了基于liunx服务器的自动巡检脚本,在crontab中设定一个固定时间进行自动执行即可,以减少人工重复劳动的工作。
     
    环境:
     
            我的项目上主要服务器是LINUX和AIX两种服务器,总数在30台左右。现在的工作量是每周巡检两次,都是手动登录到每台服务器使用相应的命令查看服务器性能参数。
     
    思路:
     
    1、所有的服务器之间的网络都是在同一个局域网内,所有网络两两相通。
     
    2、在其中选择一台性能相对较好或者是服务器运行压力较小的服务器,作为巡检服务器。
     
    3、通过这一服务器来实现对其他服务器的巡检,然后把巡检结果记录到巡检服务器上。
     
    4、每台服务器巡检结果都以时间和ip做命名用来区分,最后将所有巡检结果压缩打包。
     
    5、每次维护人员只需要定时去取这个压缩包查看最后结果即可,免去了对每台服务器都需要登录和输入相同的命令进行查看。
     
    具体实现脚本:





     cat check.sh 

    #! /bin/bash
    echo "start running" | tee -a 
    LANG=en
    set `date`
    path="/home/check"
    echo "start running" | tee -a  $path/log/$1-$2-$3.log
    if [ -d /home/check/result/$1-$2-$3 ];
     then
       echo ''
    else
    mkdir -p /home/check/result/$1-$2-$3
    echo `date +"%Y/%m/%d-%H:%M:%S"` "create " "$1-$2-$3" "directory success "|tee -a $path/log/$1-$2-$3.log
    fi
    echo `date +"%Y/%m/%d-%H:%M:%S"` "starting reading linuxconfig.txt " |tee -a $path/log/$1-$2-$3.log
    cat "$path"/config/linuxconfig.txt| while read line;
    do
    ip=`echo $line |cut -d '=' -f2`
    echo `date +"%Y/%m/%d-%H:%M:%S"` "check LINUX " $ip " starting " |tee -a $path/log/$1-$2-$3.log
    (
    sleep 1
    #echo account
     echo root

    sleep 1
    #echo password
     echo root

    sleep 3
    echo "free -k"
    echo ""
    echo "df -k"
    echo ""

    #memory_used_rate
    echo "ps -ef| grep java"
    echo ""
    echo "netstat -an|egrep -n '80|22|21|23|9043|9044|45331|45332|39194|19195'"
    echo ""
    #echo "ifconfig -a "
    echo  "/sbin/ip ad"
    echo ""

    echo " tail -2000  /var/log/messages | grep -v snmp |grep  -i  error "
    echo ""
    echo "/bin/dmesg  |grep -i error"
    echo ""

    echo "top -n1|sed -n '1,5p'"
    echo "exit"
    echo "/usr/bin/vmstat  1 3"
    echo ""

    sleep 5
    )|telnet $ip >/home/check/result/$1-$2-$3/$ip-$1-$2-$3-$4.txt
    echo `date +"%Y/%m/%d-%H:%M:%S"` "check LINUX " $ip " end" |tee -a $path/log/$1-$2-$3.log
    echo "" | tee -a $path/log/$1-$2-$3.log
    done
    echo `date +"%Y/%m/%d-%H:%M:%S"` "end reading linuxconfig.txt  " |tee -a $path/log/$1-$2-$3.log
     
    echo `date +"%Y/%m/%d-%H:%M:%S"` "starting reading AIXconfig.txt " | tee -a $path/log/$1-$2-$3.log
    cat "$path"/config/AIXconfig.txt| while read line;
    do
    ip=`echo $line |cut -d '=' -f2`
    echo `date +"%Y/%m/%d-%H:%M:%S"` "check IBM AIX " $ip " starting " |tee -a $path/log/$1-$2-$3.log
    (
    sleep 1
    #echo account
     echo root

    sleep 1
    #echo password
     echo root
    sleep 5
    echo ""
    #echo "df -k"
     echo "df -g"
    echo ""

    #memory_used_rate
    echo "ps -ef| grep java"
    echo ""
    echo "netstat -an|egrep -n '80|22|21|23|9043|9044|45331|45332|39194|19195'"
    echo ""
    echo "ifconfig -a"
    echo ""
    echo "topas"
    echo "exit"
    sleep 5
    )|telnet $ip >/home/check/result/$1-$2-$3/$ip-$1-$2-$3-$4.txt
    echo `date +"%Y/%m/%d-%H:%M:%S"` "check IBM AIX " $ip " end " |tee -a $path/log/$1-$2-$3.log
    echo "" | tee -a $path/log/$1-$2-$3.log
    done
    echo `date +"%Y/%m/%d-%H:%M:%S"` "end reading AIXconfig.txt " | tee -a $path/log/$1-$2-$3.log
    zip -r /home/check/result/$1-$2-$3/$1-$2-$3.zip /home/check/result/$1-$2-$3/*
    echo "End running "


    注意:
     
    该脚本的巡检是基于TELNET服务所以被检服务器必须开启TELNET服务

    感谢:http://blog.chinaunix.net/uid-14824714-id-4181103.html

  • 相关阅读:
    教程:在 Visual Studio 中开始使用 Flask Web 框架
    教程:Visual Studio 中的 Django Web 框架入门
    vs2017下发现解决python运行出现‘No module named "XXX""的解决办法
    《sqlite权威指南》读书笔记 (一)
    SQL Server手工插入标识列
    hdu 3729 I'm Telling the Truth 二分图匹配
    HDU 3065 AC自动机 裸题
    hdu 3720 Arranging Your Team 枚举
    virtualbox 虚拟3台虚拟机搭建hadoop集群
    sqlserver 数据行统计,秒查语句
  • 原文地址:https://www.cnblogs.com/xred/p/7766300.html
Copyright © 2011-2022 走看看