0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

寫一個自動化重啟服務(wù)腳本

阿銘linux ? 來源:阿銘linux ? 作者:阿銘 ? 2022-11-22 10:12 ? 次閱讀

我們搞運維的總幻想著,任何線上問題都能靠它自己自愈,它只需要在發(fā)生問題時自動解決問題后通知一下我們即可!

這不,今天就有這樣一個小需求,對你來說一定非常簡單。

【需求】

寫一個自動化重啟服務(wù)腳本,當(dāng)訪問日志頻繁出現(xiàn)502狀態(tài)碼時,重啟php-fpm服務(wù)。

提示:

假定Ngnix訪問日志路徑為/data/logs/www_access.log

重啟php-fpm服務(wù)的命令為systemctl restart php-fpm

訪問日志片段(里面的200就是狀態(tài)碼)

123.52.13.247 - [30/Jul/202203:15 +0800]bbs.aabcc.cn "/thread-2403963-2-198.html" 200 "http://bbs.aabcc.cn/thread-2403963-1-198.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
171.8.172.146 - [30/Jul/202203:15 +0800]bbs.aabcc.cn "/thread-2430178-2-7.html" 200 "http://bbs.aabcc.cn:8234/thread-2430178-8-7.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
171.8.173.103 - [30/Jul/202203:15 +0800]bbs.aabcc.cn "/forum.php?mod=viewthread&action=printable&tid=2407976" 200 "http://bbs.aabcc.cn:8784/forum.php?mod=viewthread&tid=2407976&extra&ordertype=2" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
123.52.13.247 - [30/Jul/202203:15 +0800]bbs.aabcc.cn "/thread-2396686-1-245.html" 200 "http://bbs.aabcc.cn/thread-2396686-2-245.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"

腳本可以每分鐘執(zhí)行一次,腳本執(zhí)行時截取上一分鐘的日志,可以計算總?cè)罩拘袛?shù),和出現(xiàn)502的行數(shù),計算比例,這里我給大家定一個比例吧,超過20%就算是有問題啦

【解析】

首先,給出思路:

每分鐘執(zhí)行腳本,將過去一分鐘的日志截取出來;

然后分析這一分鐘內(nèi)的日志,計算日志總行數(shù),計算狀態(tài)碼為502的日志行數(shù);

兩個數(shù)字相除,計算百分比;

拿到百分比數(shù)字和20相比較;

高于20執(zhí)行重啟php-fpm服務(wù)的命令;

先看第一個需求點,如何拿到過去一分鐘的日志?

看日志片段吧,很明顯日志里有一個時間字段 "30/Jul/202203:15"

過去一分鐘,就是拿當(dāng)前的分鐘減去一分鐘,date就可以實現(xiàn)啊 :

date -d "-1 min" +%Y:%H:%M

為了過濾的更加精準(zhǔn),建議在最后面再加個:

所以,從訪問日志中截取過去一分鐘的日志可以這樣做:

last_t=`date -d "-1 min" +%Y:%H:%M"`
tail -n 10000 /data/logs/www_access.log |grep "/${last_t}:"  > /tmp/last.log

解釋一下,為什么tail -n 10000呢,因為如果訪問日志很大的話,直接去grep會比較耗費時間,所以先將最后面的1w行截取出來,效率會高很多。

當(dāng)然,這個1w是我預(yù)估的,大家也可以根據(jù)實際的日志量來評估這個數(shù)字,你也可以是1000行。

將過濾后的日志先存放到一個臨時文件里,留著備用。

下面就該計算日志總行數(shù),這個很簡單,直接 wc -l /tmp/last.log 就行了。

而502狀態(tài)碼的日志行數(shù),還需要使用grep:

grep  -c '" 502 "' /tmp/last.log

大家注意,502左右都帶有空格,這是為了更加精準(zhǔn)匹配,因為日志里很有可能其它地方包含502關(guān)鍵詞。

拿到兩個數(shù)字后,接下來就該計算百分比了。

百分比要精確到小數(shù)點后兩位,所以不能直接使用shell中的數(shù)學(xué)運算,得借助于一個linux下的計算器bc,先看例子吧 :

echo "scale=2; 12*100/101"|bc

4ff15aca-6991-11ed-8abf-dac502259ad0.png

所以對應(yīng)到本案例中,假設(shè)502行數(shù)用s502_c變量標(biāo)記,最后1分鐘日志總行數(shù)用last_1min_c標(biāo)記,計算百分比,這樣做:

echo "scale=2; ${s502_c}*100/${last_1min_c}"|bc

由于shell中的數(shù)學(xué)邏輯運算不能使用小數(shù)來比較,所以還需要將上面獲取到的數(shù)字進一步包裝,可以將其乘以100,也就是去掉點:

echo "scale=2; ${s502_c}*100/${last_1min_c}"|bc|sed 's/.//'

獲取到這個數(shù)字后,然后再與2000進行比較。

之后,就是去做判斷,若符合條件進行重啟操作。

【參考答案】

腳本最終是這樣的:

#!/bin/bash
logfile="/data/logs/www_access.log"
last_t=`date -d "-1 min" +%Y:%H:%M`
tail -n 10000 $logfile |grep "/${last_t}:"  > /tmp/last.log
last_1min_c=`wc -l /tmp/last.log|awk '{print $1}'`
s502_c=`grep  -c '" 502 "' /tmp/last.log`
p=`echo "scale=2; ${s502_c}*100/${last_1min_c}"|bc|sed 's/.//'`
if [ $p -gt 2000 ]
then
    echo "`date` 502日志大于20%,需要重啟php-fpm服務(wù)" >> /tmp/restart_php-fpm.log
    systemctl restart php-fpm
fi




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11329

    瀏覽量

    209969
  • PHP
    PHP
    +關(guān)注

    關(guān)注

    0

    文章

    454

    瀏覽量

    26724
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    366

    瀏覽量

    23428
  • FPM
    FPM
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    1311
收藏 人收藏

    評論

    相關(guān)推薦

    介紹10Python自動化腳本

    在這個自動化時代,我們有很多重復(fù)無聊的工作要做。想想這些你不再需要一次又一次地做的無聊的事情,讓它自動化,讓你的生活更輕松。那么在本文中,我將向您介紹 10 Python
    發(fā)表于 10-17 09:27 ?950次閱讀

    10Python腳本來自動化你的日常任務(wù)

    今天浩道跟大家分享幾個關(guān)于python自動化日常工作的實用案例腳本!
    發(fā)表于 10-25 09:04 ?730次閱讀

    10殺手級的Python自動化腳本

    今天浩道跟大家分享10日常工作中用到的python自動化腳本。讓你感受番python簡單強大之處!
    發(fā)表于 11-28 11:07 ?697次閱讀

    手機自動化測試方法

    腳本生成后點擊調(diào)試按鈕 8.點擊左下角的啟動鍵進行腳本回放,不要控制鼠標(biāo),此時鼠標(biāo)會自動點擊小蘿貝控機大師進而控制手機進行手機APP自動化測試 `
    發(fā)表于 07-05 15:07

    手機自動化測試

    之前發(fā)布過小蘿貝控機大師與按鍵精靈結(jié)合實現(xiàn)手機自動化測試的功能,小蘿貝控機大師升級了實現(xiàn)了更多手機自動化測試的功能,如下:l手機功能自動化測試:錄制腳本,檢查點時點擊小蘿貝控機大師右邊
    發(fā)表于 07-08 13:36

    自動化測試腳本開發(fā)技巧

    開發(fā)自動化測試腳本的技巧和心得軟件測試 增量式調(diào)試腳本 錄制測試腳本,和其他的軟件開發(fā)成果樣,會變得非常大。為了可以成功的回放,需要調(diào)試幾
    發(fā)表于 03-26 16:24 ?53次下載

    iOS自動化打包腳本

    iOS自動化打包腳本,地址:(https://github.com/hades0918/ipapy) iOS項目自動打包腳本 1.腳本
    發(fā)表于 10-12 16:47 ?0次下載

    來練習(xí)Redis部署的腳本

    繼Nginx和MySQL的部署腳本之后,相信只要你跟著寫了,那么里面的很多關(guān)鍵精髓你已經(jīng)知曉,今天就來練習(xí)Redis部署的腳本吧。
    的頭像 發(fā)表于 12-01 09:16 ?798次閱讀

    如何創(chuàng)建自動化腳本

    在前面的 bash 初學(xué)者系列文章中,我們介紹了關(guān)于 bash 的些基礎(chǔ)知識,在了解了這些基礎(chǔ)知識之后,可以嘗試創(chuàng)建自動化腳本,來完成
    的頭像 發(fā)表于 01-04 16:50 ?3521次閱讀
    如何創(chuàng)建<b class='flag-5'>自動化</b><b class='flag-5'>腳本</b>

    10殺手級的Python自動化腳本分享

    重復(fù)性任務(wù)總是耗時且無聊,想想你想要張地裁剪 100 張照片或 Fetch API、糾正拼寫和語法等工作,所有這些任務(wù)都很耗時,為什么不自動化它們呢?在今天的文章中,我將與你分
    的頭像 發(fā)表于 01-06 15:34 ?772次閱讀

    分享10實用的Python自動化腳本

    重復(fù)性任務(wù)總是耗時且無聊,想想你想要張地裁剪 100 張照片或 Fetch API、糾正拼寫和語法等工作,所有這些任務(wù)都很耗時,為什么不自動化它們呢?在今天的文章中,我將與你分
    的頭像 發(fā)表于 01-21 15:58 ?1355次閱讀

    使用Python腳本實現(xiàn)自動化運維任務(wù)

    許多運維工程師會使用 Python 腳本來自動化運維任務(wù)。Python 是種流行的編程語言,具有豐富的第三方庫和強大的自動化能力,適用于許多不同的領(lǐng)域。
    的頭像 發(fā)表于 04-08 10:36 ?1723次閱讀

    自動化的測試流程

    自動化的測試流程。
    發(fā)表于 05-04 17:48 ?0次下載

    keil自動化編譯腳本

    這是 keil 的自動化編譯腳本,可被其他腳本或程序調(diào)用,接收參數(shù)并按參數(shù)編譯 keil 工程,而不必打開 keil 軟件,實現(xiàn)程序上的
    的頭像 發(fā)表于 10-16 17:04 ?1966次閱讀
    keil<b class='flag-5'>自動化</b>編譯<b class='flag-5'>腳本</b>

    使用OpenSCAD腳本自動化電容式觸摸傳感器PCB設(shè)計

    電子發(fā)燒友網(wǎng)站提供《使用OpenSCAD腳本自動化電容式觸摸傳感器PCB設(shè)計.pdf》資料免費下載
    發(fā)表于 09-14 10:39 ?0次下載
    使用OpenSCAD<b class='flag-5'>腳本</b><b class='flag-5'>自動化</b>電容式觸摸傳感器PCB設(shè)計