關於在zabbix監測腳本中使用ps命令監控進程CPU使用率和內存使用率,獲得數據爲0的情況描述

前提:想自己編寫zabbix監測腳本,然後通過配置模板的方式,實現對資源(cpu和內存)使用率高的進程進行監控。

過程描述:
zabbix版本爲2.2.21,被監控主機操作系統爲CentOS 6.4。
腳本中主要命令如下:
percent=0;

#通過腳本輸入參數
process=$1;

#通過ps aux參數,獲取CPU%和MEM%值,使用awk將第四行的MEM%值篩選出來
percent=ps aux | grep $process | grep -v grep | head -1 | awk '{print $4}';

echo $percent

問題描述:
發現在cli中運行上述腳本命令可以獲取到進程資源使用率對應的數值。
但是腳本中包含相同命令條件下,執行腳本,卻經常獲得的數值爲0.0,而僅僅只更改了腳本輸入的$1,也就是輸入進程名,腳本執行後,獲得的數值往往不爲0.0,而爲正常數據。

影響:
由於在zabbix的web頁面中,配置了關於該項數據的dataview,直接導致了dataview的數據展示不準確。

解決方法(請見後記2):
1.使用內置的zabbix變量proc.cpu.util[<name>,<user>,<type>,<cmdline>,<mode>,<zone>] 和proc.mem.util[<name>,<user>,<type>,<cmdline>,<mode>,<zone>]。(zabbix2.2.21中沒有該內置變量,只有zabbix3.0以上版本才添加了proc.cpu.util)

2.修改腳本中的命令,改用如下方法:
首先獲取進程名對應的pid,再結合top運行如下命令:
top -b -n 1 -p $pid 2>&1 | awk -v pid=$pid '{if ($1 == pid)print $9}'

3.修改腳本中的命令,改用如下方法:
首先獲取進程名對應的pid,再從/proc/$pid/目錄下讀取相關數據,進行計算獲得。

後記1:沒有對以上三種解決方法進行驗證,但是個人覺得還是使用zabbix內置變量配置模板爲比較好的解決辦法,畢竟個人能力有限,還是選擇相信專業的zabbix吧。

後記2:是我在腳本中沒有對執行腳本的進程排除掉,給原有的代碼添加grep -v bash,問題解決。(看來寫腳本還是不夠嚴謹啊……)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章