lnmp環境檢測工具:lnmpcheck
lnmpcheck
lnmp環境檢測工具,檢測部署linux,nginx,php,mysql服務機器的問題。通過運行lnmpcheck腳本,就可以將lnmp環境中的各種問題報告出來,如磁盤滿了、cpu負載過高、磁盤IO過高、網絡出現了問題、遭遇了synflood攻擊、php進程hang在了某個地方等等,甚至還會檢查nginx日志文件是否有異常。與監控工具不同的是,lnmpcheck能夠直接指明問題所在,主要用于對一臺已出現服務異常的機器進行具體問題的排查。
lnmpcheck很容易進行擴展添加新的檢查項,另外也可以對已有的檢測項添加自己的特殊的版本而不影響原來的版本。
檢測的問題項
- 磁盤占用
- inode使用
- CPU
包括CPU idle,CPU負載,CPU在I/O時花費的時間比 - 內存
包括內存占用比,swap交換數 - I/O
I/O所消耗的CPU時間比
I/O總共花費時間與實際I/O操作所花費時間比(await/svctm) - 網絡流量
檢查目前流量占網卡帶寬的比 - 網絡錯誤
包括網絡傳輸丟包及網絡傳輸緩存區空間不足的錯誤 - 文件句柄數
目前已使用的文件句柄數與系統限制的比 - core文件
檢查是否由于進程運行異常而產生了core文件 - synflood攻擊
檢測系統是否遭到了synflood攻擊 - nginx壓力
通過網絡連接數來估值nginx并發度
并發度= 請求處理時間 * QPS
進而評估nginx是否壓力過大
- php壓力
評估方式類似nginx壓力 - nginx存活
檢查nginx進程是否正常運行 - php存活
檢查php進程是否正常運行 - nginx日志檢查
檢查nginx日志文件中狀態碼非200的個數,從而發現請求返回不正常的情況 - php進程hang住檢查
檢查php進程是否都hang在了某個操作上,這往往由于某個外部請求超時導致 - mysql壓力
通過show processlist命令檢查mysql正在進行操作處理的線程數
lnmpcheck的檢查是多維度的,例如為了檢查I/O是否達到了瓶頸,不但檢查I/O使用率數值,也會關心 I/O總共花費時間與實際I/O操作所花費時間比(await/svctm),如果這個比值過大,說明I/O請求在隊列中等待的時間過長,達到了I/O處理的瓶頸。
使用方法
lnmpcheck用php開發,下載所有php文件,命令行下執行start.php腳本文件即可:
[root@xsl1x-nova ~/lnmpcheck]# php start.php
checking......sda1 : 20.00, percentage of CPU time during which I/O requests were issued to the device, the IO is too high
------------------------------*******************
check completed
*******************
執行完畢會將檢查到的問題一項項打印出來。最好以root用戶執行,有些檢測項需要root權限,用其它帳號會導致這些檢測項無效。
添加新的檢測項
目前已有的檢測項只是最常需要檢測的問題,還有許多其它問題需要檢測,這只需要添加一個php文件放到checkitems目錄下即可,以檢查cpu負載的代碼為例,在checkitems/linuxCpuLoad.php 文件中實現,基本代碼結構如下:
class linuxCpuLoad extends LnmpCheck { public function check(){ $arrRes = Utils::get_cmd_res(' mpstat -P ALL | wc -l'); $cpu_num = $arrRes[0] - 4; $arrRes = Utils::get_cmd_res_split('uptime'); $load_one_minute = trim($arrRes[0][7],' ,'); if($load_one_minute > 2*$cpu_num) { $msg = "cpu number: {$cpu_num}, load in 1 minute: {$load_one_minute}"; Utils::print_error($msg); } } }
新的檢測項需要繼承LnmpCheck類,并在check函數中實現自己的檢查邏輯即可。另外可以定義問題檢測的優先級,代表了檢測的順序,在類中聲明$priority變量即可,值越小,優先級越高,默認是最低檢測優先級。