f Nagios Core 監控MSSQL Server ~ 迪貝之家

Pages

Nagios Core 監控MSSQL Server

我自己對監控的定義為,以一定的頻率,對標的進行某個動作,再來判斷標的給的回應狀況。

在這裡我要我想談的是,我怎麼在Nagios
 Core 裏,實施上述動作,也就是我怎麼寫
我的plugin。



首先來看我的service定義,也就是對標的物進行的動作
nagios service



紅色框框所示就是定義針對SQL Server所要進行的動作,以Nagios的術語來說,check_command是所謂的directive,check_mssql_slow_query 就是你要求Nagios Core幫你執行的動作。


check_mssql_slow_query這個動作在Nagios 裡頭,是被定義出來的,也就是你在作業系統裡要執行的命令列,接下來我們來看command的設定檔
Nagios Command cfg






如圖所示,它所對應的是/usr/lib/nagios/plugins/check_mssql_slow_query.sh這隻shell script。它是透過sqlcmd進到sql server 查詢request DMV 來抓取slow query。但為了彈性,你就得去想,要怎麼把在Nagios 裡的設定,帶成不同的參數值,丟進sqlcmd 所執行的sql file裡。

其實坦白說,除了sqlcmd是由微軟所提供的binary,沒辦法變更,命令列其他的都是參數,sqlcmd 本身的參數我就只提,要執行的sql file怎麼在Nagios裡做指定,我是定義在我的service template裡頭,請見下圖
Nagios Service Template




如紅色框框所示,sqlcmd 要執行的sql file的位置為 /home/dbaadmin/plugin_sql/mssql/slow_query.sql。
那在Nagios裡頭,針對標的所要執行的動作會變成甚麼? 
我們回頭看一下Nagios Command的設定
Nagios Plugin Variable




前後兩個$,是Nagios自身的設計。
如果您有仔細看這篇文章的話,您應該會留
意到,我定義了兩個slow query的門檻,一
是10分鐘,一是15分鐘。為了t-sql程式的撰
寫彈性,我總不能讓sqlcmd 去執行不同的
sql file吧!!那我又得生出不同的shell
script,當你的服務監控越來越多時,就會
造成未來在管理上的不便。所以接下來我要
給各位看的是,相關參數的設定。

我們也回頭看一下對標的本身的設定
Nagios Plugin Variable




藍色與紫色框框分別表示兩個不同的參數,elapsed_time及wait_time。我們再次回頭看一下Nagios Command的設定



圖示裡,藍色框框ARG2是elapsed_time的值,ARG3是wait_time的值。這樣就OK了嗎?? 當然不是!! 相應的shell script及t-sql要做出調整
Nagios Plugin

圖示是shell script所做的調整。
t-sql variable


圖示是T-SQL要進行的修改

你如果真的想了解這中間怎麼串起來的,那就得去研究Nagios Plugin的撰寫、SQLCMD怎麼用、Linux Shell 變數怎麼帶入T-SQL 等。

有人一定會講說,屁那麼多,是真的可行嗎?
來我們來看看透過mail發出來的alert
Nagios Core