cronmon 定時任務執行狀態監控
阿新 • • 發佈:2018-12-05
cronmon是一個計劃任務(定時任務)監控系統,可以對迴圈執行的程式和指令碼進行監控告警,當其未按照預期執行時,傳送郵件到對應郵箱進行通知。同時可以將監控任務劃分到不同業務下面,每個業務可以分配不同的通知人,建立業務、通知人和監控任務的多層級關係。
通過以一定的間隔傳送HTTPS請求到特定的URL實現監控。如果URL未按時接受到請求,對應的業務通知人則會收到告警。
也就是說,你可以在你的計劃任務或者程式指令碼中,根據執行結果進行條件判斷,如果成功則傳送請求到cronmon,這樣的任務可以包括資料庫備份、安全掃描、資料同步等任何你認為重要的,需要保證其在指定時間間隔完成的任務。
主要功能介紹
- 登入;
- 登入之後,看到的是首頁:包括業務、通知人、任務和日誌相關彙總資訊,以及圖表展示一段時間API請求資料;
- 任務管理相關操作:這裡是系統最核心的功能,監控任務管理,包括新建,編輯,刪除,監控日誌檢視。;
- 系統管理相關操作:系統使用者角色分為二種,擁有所有許可權的系統管理員和繫結若干業務的業務管理員。在這裡,你可以新建、編輯、刪除使用者以及業務許可權分配;
API呼叫
目前API僅針對監控任務,包括獲取所有監控任務和基於關鍵字進行的任務過濾,json格式返回。
- 獲取所有監控任務
- 按指定關鍵字獲取任務(業務名、任務名和任務URL)
公共引數包括page(顯示第幾頁)和length(每頁顯示多少記錄)
如何使用監控連結
在不同情況下呼叫任務監控URL的寫法
- crontab寫法
# system status check 20 * * * * cd /path/to/systemStatusCheck && ./systemStatusCheck.sh > systemStatusCheck.sh.cron.log 2>&1 && curl -kfsS --retry 3 --connect-timeout 10 --ipv4 https://cronmon.yoursite.io/api/monlink/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx >> systemStatusCheck.sh.cron.log 2>&1
- bash寫法
curl -kfsS --retry 3 --connect-timeout 10 --ipv4 https://cronmon.yoursite.io/api/monlink/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- python寫法
import requests
requests.get('https://cronmon.yoursite.io/api/monlink/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')
生產環境
本部分是針對生產環境一些額外的配置優化,包括日誌表自動分割槽指令碼、程式管理服務化(linux)、nginx配置和日誌輪轉配置。
- 服務啟停
以CentOS為例,首先編輯相關變數
然後將啟動指令碼(production/init.d/cronmon)放入/etc/init.d目錄
$ service cronmon help
Usage: cronmon {start|stop|restart|reload|status|help}
$ chkconfig --level 35 cronmon on # 加入開機啟動
- 日誌分割槽
針對日誌表資料,為了方便管理和提高效率,使用mysql分割槽,首先匯入儲存過程建立sql檔案(production/cronmonPartition.sql),
指令碼首先修改表結構,添加了複合主鍵(id+create_datetime),然後建立了所需的5個儲存過程,指令碼基於zabbix分割槽建立指令碼進行修改,執行指令碼後結果如下:
對應的shell指令碼
對應的crontab配置
# cronmon mysql partition
15 0 * * * cd /path/to/cronmonMysqlPartition && ./cronmonMysqlPartition.sh > cronmonMysqlPartition.sh.cron.log 2>&1 && curl -kfsS --retry 3 --connect-timeout 10 --ipv4 https://cronmon.yoursite.io/api/monlink/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx >> cronmonMysqlPartition.sh.cron.log 2>&1
- WebService配置
以nginx為例
- 日誌輪轉
以logrotate為例
壓力測試
本系統主要的壓力是客戶端對監控URL的請求,而網站本身操作的壓力以及API請求的壓力相對較小,有鑑於此,針對此部分進行了壓力測試。
- 配置調整
uwsgi相關配置
[uwsgi]
listen=10240
processes=8
gevent=100
系統相關配置
# echo 'net.core.somaxconn=4096' >> /etc/sysctl.conf
- 壓測表現
使用ab對監控連結進行壓力測試,10000併發無錯誤(目前只測試到10000併發,未測試更高併發),客戶端和服務端網路延遲在11ms左右:
$ ab -n 50000 -c 10000 https://cronmon.yoursite.com/api/monlink/ba60afc4-f162-11e8-a56a-001b7872e686
獲取幫助
如果想進一步瞭解安裝配置,資料庫變更和系統網站的功能可以點選github