在實際生産運維過程中,我們會經常遇到,不是所有的研發人員都會去思考"我開發的這個應用該如何優雅的被監控系統所監控?"這樣一個問題。都是需求一出,排期開始撸代碼,最後是異常場景未考慮周全(bug那是不可能沒有滴),日志定義不規範(研發自己定位日志都難找到問題,還要線上發包調試),焦頭爛額,哪有功夫考慮運維人員如何去監控呢!但面對這樣一堆應用,運維人員仍然需要想方設法做全方位監控(運維不想做背鍋俠)。
站在運維的角度上看,要監控到一個應用是否正常,除了系統、網絡層級的監控外,需要對應用的程序、端口、HTTP響應狀态、日志、資源的使用率(cpu、記憶體)等多個層面來監控。而當一個應用隻有程序可以用來被監控時,那監控應用的程序就顯得非常有必要,可及時甩鍋(你看,不是我不監控,目前應用隻能監控到程序和日志),本篇文章将介紹使用Zabbix的key "proc.num[,,,,]"來實作程序的監控,傳回的值是程序的個數,如傳回1,則表示程序數為1,傳回0則表示程序不存在。官方文檔(https://www.zabbix.com/documentation/current/manual/config/items/itemtypes/zabbix_agent)對proc.num中各字段解釋如下。
表示程序名,預設是所有程序名,配置時留白即可
表示程序所屬使用者,預設為所有使用者,可以改為程序所屬使用者,比如root
表示程序運作狀态,預設為所有狀态,按預設即可。
表示過濾程序的正規表達式或指令行,需根據程序啟動的實際路徑來寫正規表達式比對
該參數隻在Solaris系統上有效,Linux上直接忽略。詳細見如下圖所示。
接下來,将描述如何在Zabbix上添加程序監控,具體操作步驟如下:
1、為應用程序建立一個模闆,此處以node_exporter程序為例。
在Zabbix控制台,選擇 "Configuration" --> "Templates" ,然後點選右上角的"Create template",建立一個名為"Template node_exporters"的模闆,如下圖所示。
2、為應用建立Application,在上在建立好的"Template node_exporters"模闆上點選"Applications",如下圖所示。
建立建一個名為"node_exporters"的Applications,點選"Add"完成建立。
3、在名為"node_exporters"Applications下建立對應的程序item和trigger,如下圖所示,點選"Create item"。
注意key的寫法:proc.num[,root,all,/usr/local/node_exporter/node_exporter]
proc.num中的通常是先在系統上執行ps -ef|grep 指令後過濾得出,如下圖所示
完成item添加後,接下來是建立觸發器,觸發器表達式應定義為所監控的程序數目與我們期望值不符時即告警,我們上面要監控的node_exporter程序數為1,是以觸發器不等于1就要告警(程序個數為0,或者超出1個,多啟動了程序等情況)。
{Template node_exporters:proc.num[,root,all,/usr/local/node_exporter/node_exporter].last()}<>1
4、最後将模闆應用到主機。因為像node_exporter這種采集應用通常是部署在每台機器上的,有了模闆就可以快速應用到多台主機上。
如下圖所示,将模闆添加到需要的主機上
最後,我們在Latest data中檢視監控程序的狀态是否符合預期。
總結:應用全方位的監控并非運維人員獨立完成,需要有研發人員的鼎立配合才行,這樣技術背鍋的可能性就變小了,産品也會變得更加成熟穩定bug少。