superlance 命令

superlance介紹

superlance就是基于supervisor的事件機(jī)制實現(xiàn)的一系列命令行的工具集,它實現(xiàn)了許多supervisor本身沒有實現(xiàn)的實用的進(jìn)程監(jiān)控和管理的特性,包括內(nèi)存監(jiān)控,http接口監(jiān)控,郵件和短信通知機(jī)制等。同樣的,superlance本身也是使用python編寫的


superlance命令

superlance是一系列命令行工具的集合,其包括以下這些命令:

httpok

通過定時對一個HTTP接口進(jìn)行GET請求,根據(jù)請求是否成功來判定一個進(jìn)程是否處于正常狀態(tài),如果不正常則對進(jìn)程進(jìn)行重啟。

crashmail

當(dāng)一個進(jìn)程意外退出時,發(fā)送郵件告警。

memmon

當(dāng)一個進(jìn)程的內(nèi)存占用超過了設(shè)定閾值時,發(fā)送郵件告警。

crashmailbatch

類似于crashmail的告警,但是一段時間內(nèi)的郵件將會被合成起來發(fā)送,以避免郵件轟炸。

fatalmailbatch

當(dāng)一個進(jìn)程沒有成功啟動多次后會進(jìn)入FATAL狀態(tài),此時發(fā)送郵件告警。與crashmailbatch一樣會進(jìn)行合成報警。

crashsms

當(dāng)一個進(jìn)程意外退出時發(fā)送短信告警,這個短信也是通過email網(wǎng)關(guān)來發(fā)送的

1.當(dāng)supervisord啟動的時候,如果我們的listener配置為autostart=true的話,listener就會作為supervisor的子進(jìn)程被啟動。2.listener被啟動之后,會向自己的stdout寫一個"READY"的消息,此時父進(jìn)程也就是supervisord讀取到這條消息后,會認(rèn)為listener處于就緒狀態(tài)。3.listener處于就緒狀態(tài)后,當(dāng)supervisord產(chǎn)生的event在listener的配置的可接受的events中時,supervisord就會把該event發(fā)送給該listener。4.listener接收到event后,我們就可以根據(jù)event的head,body里面的數(shù)據(jù),做一系列的處理了。我們根據(jù)event的內(nèi)容,判斷,提取,報警等等操作。5.該干的活都干完之后,listener需要向自己的stdout寫一個消息"RESULTnOK",supervisord接受到這條消息后。就知道listener處理event完畢了。


Supervisord支持的Event

PROCESS_STATE??? 進(jìn)程狀態(tài)發(fā)生改變

PROCESS_STATE_STARTING? 進(jìn)程狀態(tài)從其他狀態(tài)轉(zhuǎn)換為正在啟動(Supervisord的配置項中有startsecs配置項, 是指程序啟動時需要程序至少穩(wěn)定運(yùn)行x秒才認(rèn)為程序運(yùn)行正常,在這x秒中程序狀態(tài)為正在啟動)

PROCESS_STATE_RUNNING?? 進(jìn)程狀態(tài)由正在啟動轉(zhuǎn)換為正在運(yùn)行

PROCESS_STATE_BACKOFF?? 進(jìn)程狀態(tài)由正在啟動轉(zhuǎn)換為失敗

PROCESS_STATE_STOPPING?? 進(jìn)程狀態(tài)由正在運(yùn)行轉(zhuǎn)換為正在停止

PROCESS_STATE_EXITED?? 進(jìn)程狀態(tài)由正在運(yùn)行轉(zhuǎn)換為退出

PROCESS_STATE_STOPPED?? 進(jìn)程狀態(tài)由正在停止轉(zhuǎn)換為已經(jīng)停止(exited和stopped的區(qū)別是exited是程序自行退出,而stopped為人為控制其退出)

PROCESS_STATE_FATAL?? 進(jìn)程狀態(tài)由正在運(yùn)行轉(zhuǎn)換為失敗

PROCESS_STATE_UNKNOWN?? 未知的進(jìn)程狀態(tài)

REMOTE_COMMUNICATION?? 使用Supervisord的RPC接口與Supervisord進(jìn)行通信

PROCESS_LOG?? 進(jìn)程產(chǎn)生日志輸出,包括標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤輸出

PROCESS_LOG_STDOUT?? 進(jìn)程產(chǎn)生標(biāo)準(zhǔn)輸出

PROCESS_LOG_STDERR?? 進(jìn)程產(chǎn)生標(biāo)準(zhǔn)錯誤輸出

PROCESS_COMMUNICATION?? 進(jìn)程的日志輸出包含 和

PROCESS_COMMUNICATION_STDOUT?? 進(jìn)程的標(biāo)準(zhǔn)輸出包含 和

PROCESS_COMMUNICATION_STDERR?? 進(jìn)程的標(biāo)準(zhǔn)錯誤輸出包含 和

SUPERVISOR_STATE_CHANGE_RUNNING Supervisord? 啟動

SUPERVISOR_STATE_CHANGE_STOPPING Supervisord? 停止

TICK_5?? 每隔5秒觸發(fā)

TICK_60?? 每隔60秒觸發(fā)

TICK_3600?? 每隔3600觸發(fā)

PROCESS_GROUP?? Supervisord的進(jìn)程組發(fā)生變化

PROCESS_GROUP_ADDED?? 新增了Supervisord的進(jìn)程組

PROCESS_GROUP_REMOVED?? 刪除了Supervisord的進(jìn)程組

安裝superlance

也是python程序,直接pip 安裝


pip install superlance


既然有了上面的event特性,下面就配置一個發(fā)郵件報警,當(dāng)nginx莫名其妙的重啟后 就立刻發(fā)郵件通知。

這里在說一下,centos下如何用命令行直接發(fā)郵件的,我一直都沒有用過默認(rèn) 自帶的,也不好用。推薦一個比較好用的。

sendEmail,用perl語言寫好的 也都封裝好了,只需要提供發(fā)件人 郵箱賬號 密碼 smtp服務(wù) 收件人 就可以了。

先配置一下


wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gztar zxvf sendEmail-v1.56.tar.gz

cp sendEmail-v1.56/sendEmail /usr/bin/sendemail


ok,發(fā)郵件測試一下,這里我把郵箱信息隱藏一下了.....


sendemail -f 發(fā)件人郵箱 -t 收件人郵箱 -s 發(fā)件人郵箱smtp服務(wù)器 -u"sendEmail"-m"haha"-xu 發(fā)件人郵箱 -xp 發(fā)件人郵箱密碼

-f 發(fā)件人-t 收件人-s 發(fā)件人smtp服務(wù)器-u 主題-m 內(nèi)容-xu 發(fā)件人用戶名-xp 發(fā)件人密碼


我這里用的163發(fā)的 qq郵箱收件的,測試沒啥問題的。




ok 現(xiàn)在要做的就是配置一個supervisor配置文件,來一直監(jiān)聽進(jìn)程的狀態(tài)變化


[root@test?/]# cat /etc/supervisor/config.d/mail.conf

[eventlistener:crashmail-exited]

command=crashmail?-a?-s?"/usr/bin/sendemail -f xxxxxx@163.com -t xxxxxx@qq.com -s smtp.163.com -u 'nginx' -xu xxxxxxx@163.com -xp xxxxxxxx -m"?-m xxxxxxxx@qq.com

events=PROCESS_STATE_EXITED

redirect_stderr=false

添加好一個進(jìn)程配置文件后,supervisorctl reload 重啟一下



已經(jīng)是兩個進(jìn)程在running了

下面測試一下 kill 掉nginx進(jìn)程


ps aux | grep nginx

kill -91765917660



然后看一下supervisor




此時 nginx pid已經(jīng)變化,說明kill之后 又被拉起來了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容