#contents *一個簡單的範例 service裡有很多的選項,為了更貼近現實,假設我們現在有兩台機器,一台win1,一台win2,這兩台機器上都運行了web server。 我們想要在運行nagios的機器上,進行設定,使得nagios能夠認識這兩台機器上所運行的服務,並且讓nagios來對這兩台機器的web server進行監視的工作: 首先定義第一個服務: define service { use generic-service host_name win1 service_description test check_command check_http max_check_attempts 5 normal_check_interval 10 retry_check_interval 20 check_period 24x7 notification_interval 60 notification_period 24x7 notification_options w,u,c,r contact_groups contact_g1 } 看到這麼大串的設定檔,是否有點感到無法吞的下去。如果你會這麼覺得,那你是正常的。老實說,很多人都與你有同樣的想法。其實你在這裡所看到的,只是用來定義service屬性的一部份而已。不過這些屬性都很常用,所以先列出這些。如果你很趕時間想要把設定完成,那你可以先把這幾個項目弄懂,在百分之八十你所遇到的情況裡,都可以派得上用場。 其實這裡的設定檔與關連式資料庫有很多異曲同功之妙,所以也有些幫助你設定的軟體,是將設定先寫到資料庫裡,然後在從資料庫裡將檔案給輸出到文字檔。 我們先一項一項的從上往下看: **host_name win1 故名思義,這裡定義了主機的名稱。不過請不要誤解,這裡的主機名稱,並不是直接對應到真正機器的主機名稱,乃是對應到在主機設定檔裡所設定的主機名。 以資料庫的概念來講,這裡的win1是一個ForeignKey,它對應到另外一個table的primary key,如下圖所示: **service_description test 這一行比較無關緊要,主要是用來描述這一個service的詳細內容,以供將來後人維護時作參考之用 **check_command check_http 這一行是用來設定用來監視之時,所使用的命令。不過同樣的,請不要誤解,這裡的命令並不是真正的對應到server裡頭的那一個可以執行的命令,而是對應到命令的設定檔。在另外一個設定檔裡,有關於這個命令的真正的路徑,要帶入的參數,以及實行時的細節。 以資料庫的概念來講,這裡的check_http是一個ForeignKey,它對應到另外一個table的primary key,如下圖所示: **max_check_attempts 5 這一個選項的值被設為5。這個值代表最大的檢查次數,講的更白話一點,也就是nagios利用上面的check_http的命令,來檢查win1這一台server。當檢查時發現server異常時,因為有可能只是一時網路太擁擠,或是一些風吹草動,讓server受到了一點影響,所以不要馬上把server判斷為狀況危急,而是多試(retry)幾次,這裡的5就是至少試5次的意思。 這個值的設定要看現場的真正情況。比方說筆者目前所擔當的網站,由於訪問的流量非常的大,所以常常會發生server反應遲緩,而讓nagios判斷為緊急的情況,此時為了防止狼來了的場景一直發生,所以我會把這裡的值給設的高一點。當然這樣設會有一些問題,如果server真正發生問題,查覺得時間會比較晚,甚至客戶會比我們先查覺,所以為了防止這個情況,在將retry的次數調高的同時,也最好將每個retry之間的時間間隔縮短一點。不過,還是要強調,一切都需要看現場的情況。 **normal_check_interval 10 **retry_check_interval 20 **check_period 24x7 **notification_interval 60 **notification_period 24x7 **notification_options w,u,c,r **contact_groups contact_g1