8. 傻瓜運維工具

最愛喝酸奶發表於2019-01-25

做運維時,很多時候需要重複地使用一些命令來獲取系統的狀態資訊,這些事情很可能是周而復始,除非是有特殊的要求需要特殊對待。因為這個特點,本案例可以寫一個傻瓜運維工具,通過執行這個指令碼工具來檢視想要的資訊。

具體要求如下:

1)當執行指令碼時,首先會列印出系統的幾個狀態值:系統時間、負載、CPU使用情況、記憶體使用情況、磁碟使用情況、網路卡流量(5s內均值,需列出所有網路卡);

2)然後會列出一個命令列表,使用者只需打出對應數字,就可以執行相應命令;

3)列表中的功能有:

    1.檢視網站訪問日誌最後100行(假設該伺服器上只有一個網站,訪問日誌路徑 /data/logs/www.log);
    
    2.檢視mysql的慢查詢日誌最後50行(mysql慢查詢日誌路徑 /data/mysql/slow.log);
    
    3.檢視php-fpm的慢查詢日誌最後50行(日誌路徑 /usr/local/php-fpm/logs/slow.log);
    
    4.重啟php-fpm服務;
    
    5.重啟nginx服務;
    
    6.檢視mysql佇列,假如mysql密碼是dR6wB1jzq ;
    
    7.退出指令碼。

參考指令碼如下:

#!/bin/bash
#傻瓜運維指令碼,根據列表輸入數字即可實現對應功能

LANG=en

sar=`which sar |grep '/usr/bin/sar' |wc -l`
bc=`which bc |grep '/usr/bin/bc' |wc -l`
if [ $sar -ne 1 ]
then
    yum install -y sysstat
fi

if [ $bc -ne 1 ]
then
    yum install -y bc
fi

sar 1 5 > /tmp/cpu.log &
sar -n DEV 1 5 |grep '^Average:' > /tmp/net.log &

echo -n "收集資料中"

for i  in `seq 1 5`
do
    echo -n "."
    sleep 1
done
echo


mysql_p="dR6wB1jzq"         #資料庫root密碼
t=`date +"%F %T"`
load=`uptime |awk -F 'load averages?: ' '{print $2}' |cut -d '.' -f1`       #5分鐘CPU平均負載個位值

cpu_idle=`tail -1 /tmp/cpu.log |awk '{print $NF}'`
cpu_use=`echo "scale=2;100-$cpu_idle" |bc |sed 's/^./0./g'`         #已用CPU百分比

mem_tot=`free -m |grep '^Mem:' |awk '{print $2}'`
mem_ava=`free -m |grep '^Mem:' |awk '{print $NF}'`          #可用記憶體

net_status=`sed '1d' /tmp/net.log |awk '{print "網路卡"$2":入口流量"$5/1000*8"Mbi,出網流量"$6/1000*8"Mbi"}'`

echo -e "\033[32m當前時間:$t \033[0m"
echo "###############"
echo -e "\033[31m當前負載:$load \033[0m"
echo "###############"
echo -e "\033[33mCPU使用率:$cpu_use% \033[0m"
echo "###############"
echo -e "\033[34m記憶體總數:$mem_tot"MB",記憶體剩餘:$mem_ava"MB" \033[0m"
echo "###############"
echo -e "\033[35m磁碟空間使用情況: \033[0m"
df -h
echo "###############"
echo -e "\033[36m磁碟inode使用情況: \033[0m"
df -i
echo "###############"
echo -e "\033[32m$net_status \033[0m"
echo "###############"

get_acc_log()
{
    tail -100 /data/logs/www.log
}

get_mysql_slow_log()
{
    tail -50 /data/mysql/slow.log
}

get_php_slow_log()
{
    tail -50 /usr/local/php-fpm/logs/slow.log
}

restart_php()
{
    /etc/init.d/php-fpm restart
}

restart_nginx()
{
    systemctl restart nginx
}

get_mysql_process()
{
    mysql -uroot -p$mysql_p -e "show processlist"
}

PS3="請選擇你想要做的操作:"

select c in 檢視訪問日誌 檢視mysql慢查詢日誌 檢視php-fpm慢查詢日誌 重啟php-fpm 重啟nginx 檢視mysql佇列 退出
do
    case $c in
    檢視訪問日誌)
        get_acc_log
        ;;
    檢視mysql慢查詢日誌)
        get_mysql_slow_log
        ;;
    檢視php-fpm慢查詢日誌)
        get_php_slow_log
        ;;
    重啟php-fpm)
        restart_php
        ;;
    重啟nginx)
        restart_nginx
        ;;
    檢視mysql佇列)
        get_mysql_process
        ;;
    退出)
        echo $"Usage: $c 請使用:{1|2|3|4|5|6}"
        exit 0
        ;;
    *)
        echo $"Usage: $1 請使用:{1|2|3|4|5|6}"
        continue
        ;;
    esac
done

相關文章