精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

寫一個自動化重啟服務腳本

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

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

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

【需求】

寫一個自動化重啟服務腳本,當訪問日志頻繁出現502狀態碼時,重啟php-fpm服務。

提示:

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

重啟php-fpm服務的命令為systemctl restart php-fpm

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

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"

腳本可以每分鐘執行一次,腳本執行時截取上一分鐘的日志,可以計算總日志行數,和出現502的行數,計算比例,這里我給大家定一個比例吧,超過20%就算是有問題啦

【解析】

首先,給出思路:

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

然后分析這一分鐘內的日志,計算日志總行數,計算狀態碼為502的日志行數;

兩個數字相除,計算百分比;

拿到百分比數字和20相比較;

高于20執行重啟php-fpm服務的命令;

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

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

過去一分鐘,就是拿當前的分鐘減去一分鐘,date就可以實現啊 :

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

為了過濾的更加精準,建議在最后面再加個:

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

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行截取出來,效率會高很多。

當然,這個1w是我預估的,大家也可以根據實際的日志量來評估這個數字,你也可以是1000行。

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

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

而502狀態碼的日志行數,還需要使用grep:

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

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

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

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

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

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

所以對應到本案例中,假設502行數用s502_c變量標記,最后1分鐘日志總行數用last_1min_c標記,計算百分比,這樣做:

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

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

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

獲取到這個數字后,然后再與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服務" >> /tmp/restart_php-fpm.log
    systemctl restart php-fpm
fi




審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11229

    瀏覽量

    208931
  • PHP
    PHP
    +關注

    關注

    0

    文章

    452

    瀏覽量

    26650
  • Shell
    +關注

    關注

    1

    文章

    363

    瀏覽量

    23297
  • FPM
    FPM
    +關注

    關注

    0

    文章

    5

    瀏覽量

    1281
收藏 人收藏

    評論

    相關推薦

    介紹10Python自動化腳本

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

    10Python腳本來自動化你的日常任務

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

    10殺手級的Python自動化腳本

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

    手機自動化測試方法

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

    手機自動化測試

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

    自動化測試腳本開發技巧

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

    iOS自動化打包腳本

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

    來練習Redis部署的腳本

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

    如何創建自動化腳本

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

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

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

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

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

    使用Python腳本實現自動化運維任務

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

    自動化的測試流程

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

    modelsim自動化仿真實驗 利用腳本實現modelsim自動化仿真

    大家好!今天給大家帶來的是modelsim自動化仿真程序。我們在代碼編寫完成時,通常都需要先進行仿真,然后上板實驗。但是如果我們每次仿真都要去新建工程,添加.v文件以及testbench文件
    的頭像 發表于 07-19 10:10 ?1606次閱讀
    modelsim<b class='flag-5'>自動化</b>仿真實驗 利用<b class='flag-5'>腳本</b>實現modelsim<b class='flag-5'>自動化</b>仿真

    keil自動化編譯腳本

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