1. 程式人生 > WINDOWS開發 >Zabbix監控在windows的程序(非程序數)

Zabbix監控在windows的程序(非程序數)

場景介紹:

小Z同學最近遇到個專案需求,需求是用zabbix監控執行在windows的程序。然鵝,當小Z同學在網上搜了一大堆,發現基本上都是使用官方的proc.num(***.exe)鍵值拿到程序數量,很顯然,這並不符合客戶實際的需求,如果是隻執行1個的還好,若是運行了3到6個,例如java,就特別的dan疼,在工作管理員發現全是java.exe的。也許,你可以找到有些文章的說可以使用工作管理員可以看到命令列(圖一),tasklist /V檢視程序詳情(圖二)等等,然鵝,對於java來說還是看不到的。

當然了拿到java.exe和pid也可以,但作為運維人員最關注的是要知道是誰停了,而不是PID,況且人家也不知道PID對應的程序是啥。所以,本著上進負責的精神,在查閱了幾天的資料後,終於實現了!!!在這裡記錄下來,為熱愛zabbix的小夥伴做個參考,也可以自行拓展結合指令碼等其他技術實現。教程不復雜,多做幾次就上手了。

技術分享圖片

技術分享圖片

方法:

  1. 對於非java的程序,確實使用tasklist可以監控到具體的程序名,例如監控郵箱伺服器程式,方法是開啟cmd,輸入 tasklist | findstr “mailServer.exe” 這裡只輸出具體的程序名 或者 tasklist | find “mailServer.exe” 這裡會輸出程序,使用的資源,PID等等。然後再zabbix_agentd.conf後面加上 UserParameter=mailServer,tasklist | findstr “mailServer.exe” 儲存重啟agent;在zabbix做監控時,資訊型別選擇字元或者文字即可。

  2. 重點來了,對於java程序亦或者是在工作管理員只看到運行了一堆相同的程序名,但看不到具體的例項名可以利用windows自帶的 WMIC命令來獲取!開啟cmd,輸入 wmic process 回車,會輸出目前在執行的所有程序,比tasklist還詳細,輸出的結果包含命令列、執行路徑、PID、使用的資源、所有者等等。有興趣的小夥伴可以到官網多多瞭解,拓展一下其他的WMIC引數。

當然了,對於封裝好的jar包程式,常規的執行命令也就是java –jar ****.jar,是可以用wmic拿到的,命令是 wmic process where name=”java.exe” 就可以輸出當前正在執行的所有java程序,但結果不太美觀,所以可以指定一下要找的jar包名,例如: wimc process where name=”java.exe” | find “jar包名” ,這樣出來的結果就是客戶想要的了。
技術分享圖片

以下是agent配置示例:

UserParameter=java_jar,WMIC.exe process where name=”java.exe” | find “jar包名”

這裡保險一點,寫上完整的WMIC.exe就不會報命令找不到的錯。監控項照上一步。

  1. 觸發器

在給非數值的監控配置觸發器時,要注意型別要選擇紅框的 str()
技術分享圖片

因為返回的結果是字串,所以在V這裡填上jar包程序名即可。可以只寫包名+版本,不用整行都寫。
技術分享圖片

問題和恢復的表示式:監控項是每60s檢測一次,觸發器這裡也是每60s檢測一次,發現和取值不符則傳送告警資訊。如果發現亂報警,那就多注意調整下。
技術分享圖片

完成後,可以停止程式檢測下是否符合需求。

教程結束!!!本文是針對不帶引數啟動的java程序的監控,帶引數啟動的後面有空會出一篇,當然了,其實也比較簡單。