--
最簡化的網頁監控方案
出社會之後後來因為都找程式設計師的工作,因此就比較少在公司負責 MIS 相關工作。
可是一直都還是有遇到 Linux 使用問題,例如連線出問題是因為記憶體還是頻寬不足,或是 CPU 負載 100% 無法處理。可是沒有一個影響主機運作最少的監控工具,目前市面上的工具大多要資料庫儲存數據,這樣光是監控就要耗費效能,所以 Hoyo 只能自己設計一套不使用資料庫的監控方案。
此原始碼分享到 GitHub (linux-monitor-no-database)
--
思路
- 由網頁前端定時詢問主機獲取數值
- 獲取數值必須盡可能使用最基本的程式,減低獲取數值時系統負擔
- 將數值儲存在 JavaScript 陣列
- 使用陣列數值繪製圖表
--
特色
- 不需要資料庫
- 不需要設定定期執行
- 不需要執行服務
- 可以得到 CPU 負載、記憶體空間、硬碟空間即時百分比
- 可以得到即時網路流量以及最近一分鐘流量圖表
- 手動釋放記憶體快取 CACHE
--
取得硬體資訊
1 2 3 4 5 6 7 8 9 10 11 |
// cpu $command = "grep -m1 'model name' /proc/cpuinfo"; $cpu_name = explode(':', shell_exec($command))[1]; // 記憶體大小 $command = " free -m | grep Mem: | awk '{print $2}' "; $ram_usage_total = shell_exec($command); // 硬碟大小 $command = "fdisk -l | grep 'Disk /dev/sdb' | awk '{print $3 $4}'"; $hdd_size = shell_exec($command); |
硬碟大小是需要取得真實大小不是分割後大小,所以使用 fdisk
預設 fdisk -l 列出的資訊是:
1 2 3 4 5 6 7 8 9 10 11 12 |
Disk /dev/sda: 300 GiB, 322122547200 bytes, 629145600 sectors Disk model: VBOX HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x5ecf7957 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 627144703 627142656 299G 83 Linux /dev/sda2 627146750 629143551 1996802 975M 5 Extended /dev/sda5 627146752 629143551 1996800 975M 82 Linux swap / Solaris |
--
取得使用數據
網站連線數
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 網站 $command = ' ss -tan | grep ":80 " | grep -v grep | wc -l '; $netstat_80 = trim(shell_exec($command)); $command = ' ss -tan | grep ":443 " | grep -v grep | wc -l '; $netstat_443 = trim(shell_exec($command)); $command = ' ss -tan | grep ":3306 " | grep -v grep | wc -l '; $netstat_3306 = trim(shell_exec($command)); // time wait $command = ' ss -tan | grep TIME-WAIT | grep -v grep | wc -l '; $netstat_time_wait = trim(shell_exec($command)); |
網卡流量
1 2 3 4 5 6 |
// RX $command = ' cat /proc/net/dev | grep '. NetCode .' | tr : " " | awk \'{print $2}\' '; $net_rx = number_format(((int)shell_exec($command) / 1024/1024), 2, '.', ''); $command = ' cat /proc/net/dev | grep '. NetCode .' | tr : " " | awk \'{print $10}\' '; $net_tx = number_format(((int)shell_exec($command) / 1024/1024), 2, '.', ''); |
硬碟空間
1 2 3 4 |
$a = exec('df /'); $a = preg_replace('/\s(?=\s)/', '', $a); $b = explode(' ', $a); $hdd_usage = $b[4]; |
CPU 使用負載
1 2 |
$command = "grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage \"%\"}'"; $cpu_usage = number_format((float)shell_exec($command), 2, '.', '').'%'; |
記憶體空間
記憶體主要區分有 used, shared, buff/cache 等數值
1 2 3 4 5 6 7 8 |
$command = " free -m | grep Mem: | awk '{print $2}' "; $ram_total = trim(shell_exec($command)); $command = " free -m | grep Mem: | awk '{print $3}' "; $ram_used = trim(shell_exec($command)); $command = " free -m | grep Mem: | awk '{print $5}' "; $ram_shared = trim(shell_exec($command)); $command = " free -m | grep Mem: | awk '{print $6}' "; $ram_buffer = trim(shell_exec($command)); |
回傳後在網頁上還原成
--
背景執行
關閉終端還可以運作
1 |
nohup php -S 0.0.0.0:8888 & |
--
687 total views, 1 views today