前段時間,一個朋友咨詢我怎麼監控Windows程序的重新開機。生産環境有監控程序的啟動和關閉,但重新開機還沒想過。經過一番思考和摸索後成功完成了監控,下面把監控思路和方法分享給大家。
我首先想到的是通過Zabbix自帶的程序數監控(proc.num)來做,但有兩個難點:一、程序數從1變為0再變為1,算是一次重新開機。觸發器要判斷三次連續的監控資料,不太好做;二、程序從關閉到下次啟動,中間間隔多長時間算是一次重新開機呢?
然後想到了zabbix監控作業系統的重新開機,比如Windows系統重新開機的觸發器:{Template OS Windows:system.uptime.change(0)}<0,zabbix是通過監控系統運作時長來判斷的,即系統運作時長的變化小于0就可以斷定伺服器重新開機了。同樣的,如果我們監控了程序的運作時長,那麼重新開機就很好判斷了。
下一步着手監控Windows程序的運作時長。想到了zabbix原生支援監控Windows performance counters(Windows性能螢幕),可以從Windows性能螢幕裡面查找是否有對程序運作時長的監控。登入一台Windows Server 2008伺服器,上去檢視一下性能螢幕,還真找到了,見下圖:
<a href="https://s5.51cto.com/wyfs02/M02/96/BF/wKioL1klGrTgRb43AAGrAlpJ8eM644.png-wh_500x0-wm_3-wmp_4-s_1266831990.png" target="_blank"></a>
從Process類别裡找到了“Elapsed Time”,這就是程序總運作時間的意思。再從下面一欄選擇一個程序(比如zabbix_agentd,不帶.exe字尾)。
添加好後,右鍵選擇“屬性”:
<a href="https://s5.51cto.com/wyfs02/M02/96/BE/wKiom1klGuzC5z1QAAAz7F6QKCg286.png-wh_500x0-wm_3-wmp_4-s_4000984218.png" target="_blank"></a>
可以看到我們剛才添加的計數器為:\Process(zabbix_agentd)\Elapsed Time
<a href="https://s4.51cto.com/wyfs02/M00/96/BE/wKiom1klGwWwNFkzAADGEDPW4go666.png-wh_500x0-wm_3-wmp_4-s_4294421823.png" target="_blank"></a>
退出設定,然後檢視計數器的資料,程序目前運作時長14349806秒:
<a href="https://s4.51cto.com/wyfs02/M00/96/BF/wKioL1klGzHCz2yOAADtxh2g8W0200.png-wh_500x0-wm_3-wmp_4-s_618326459.png" target="_blank"></a>
重新開機程序zabbix_agentd,再觀察一下,最新計數從0開始了:
<a href="https://s4.51cto.com/wyfs02/M01/96/BE/wKiom1klG06Q3EsYAAAV5SBccAA566.png-wh_500x0-wm_3-wmp_4-s_200081473.png" target="_blank"></a>
方法找到了,我們建立監控項和觸發器。部落格位址:http://qicheng0211.blog.51cto.com/
先建立監控項:
<a href="https://s2.51cto.com/wyfs02/M00/96/BF/wKioL1klG5igLvl2AAFJviy7PL8131.png-wh_500x0-wm_3-wmp_4-s_2956208003.png" target="_blank"></a>
監控項名稱:zabbix_agentd程序運作時間
監控項類型:Zabbix agent
監控項Key:perf_counter["\Process(zabbix_agentd)\Elapsed Time"]
資料類型:float
機關:s
監控間隔:30
注:perf_counter的參數就是上面添加的性能計數器。
建立觸發器:
<a href="https://s1.51cto.com/wyfs02/M02/96/BF/wKioL1klG7GQ8qzPAADENYlMhhM484.png-wh_500x0-wm_3-wmp_4-s_3775184160.png" target="_blank"></a>
觸發器名字:zabbix_agentd程序重新開機!
觸發器表達式:{windows.60.61:perf_counter["\Process(zabbix_agentd)\Elapsed Time"].change()}<0
表達式含義:監控項最新監控資料和上一個資料的內插補點小于0,則觸發器觸發。
下面我們測試一下,重新開機程序後觀察是否産生告警:
<a href="https://s3.51cto.com/wyfs02/M00/96/BF/wKiom1klG93gzBvgAAD8VFTIoTU288.png-wh_500x0-wm_3-wmp_4-s_1915317560.png" target="_blank"></a>
等待一會,觸發器成功被觸發,觸發狀态持續30秒。
<a href="https://s5.51cto.com/wyfs02/M02/96/BF/wKiom1klG_bAEUdjAACBpY5Y-dw813.png-wh_500x0-wm_3-wmp_4-s_2421563041.png" target="_blank"></a>
到這我們對Windows程序重新開機的監控就完成了。
原創文章,轉載請注明出處,尊重部落客勞動成果,感謝。
本文轉自 張斌_青島 51CTO部落格,原文連結:http://blog.51cto.com/qicheng0211/1928947