開源監控利器nagios實戰
作者:田逸([email][email protected][/email]) from: [url]http://net.it168.com/a2009/0309/267/000000267878.shtml[/url]
(5)、定義服務配置文件 services.cfg
define service {
host_name nagios-server
service_description check-host-alive
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups sagroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_command check-host-alive
}
define service {
host_name nagios-server
service_description check_tcp 80
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups sagroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_command check_tcp!80
}
define service{
host_name nagios-server
service_description check-disk
check_command check_nrpe!check_df
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
check_period 24x7
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups sagroup
}
define service{
host_name nagios-server
service_description check-load
check_command check_nrpe!check_load
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
check_period 24x7
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups sagroup
}
define service{
host_name nagios-server
service_description total_procs
check_command check_nrpe!check_total_procs
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
check_period 24x7
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups sagroup
}
說明:
● 主機名 host_name,必須是主機配置文件hosts.cfg中定義的主機。
● 檢查用的命令 check_command,在命令配置文件中定義或在nrpe配置文件中有定義。
● 最大重試次數 max_check_attempts 一般設置爲3-4次比較好,這樣不會因爲網絡閃斷片刻而發生誤報。
● 檢查間隔和重試檢查間隔的單位是分鐘。
● 通知間隔指探測到故障以後,每隔多少時間發送一次報警信息。 它的單位是分鐘。
● 通知選項跟服務定義配置文件相同。
● 聯繫組contact_groups由配置文件contactgroup.cfg定義。
● 檢查主機資源需要安裝和配置nrpe,這個過程在後面完成。
五、部署nrpe
(一)安裝nrpe
tar zxvf nrpe-2.8.1 .tar.gz
cd nrpe-2.8.1
./configure –prefix=/usr/local/nrpe
make
make install
注:如果在其他被監控機安裝nrpe,需要添加系統用戶nagios.
(二)複製文件
安裝完nrpe後,在安裝目錄/usr/local/nrpe/libexec只有一個文件check_nrpe,而在nagios插件目錄,卻缺少這個文件,因此需要把這個文件複製到nagios插件目錄;同樣,因爲nrpe需要調用的諸如check_disk等插件在自己的目錄沒有,可是這些文件確是nagios插件所存在的,所以也需要從nagios目錄複製一份過來。我們把複製過程列舉出來:
cp /usr/local/nrpe/libexec/check_nrpe /usr/local/nagios/libexec
cp /usr/local/nagios/libexec/check_disk /usr/local/nrpe/libexec
cp /usr/local/nagios/libexec/check_load /usr/local/nrpe/libexec
cp /usr/local/nagios/libexec/check_ping /usr/local/nrpe/libexec
cp /usr/local/nagios/libexec/check_procs /usr/local/nrpe/libexec
(三)配置nrpe
安裝完nrpe以後,在安裝目錄並沒有可用的配置文件,但我們只需把解壓目錄的樣例文件複製到安裝目錄,然後修改這個文件.
1、 mkdir /usr/local/nrpe/etc
2、 cp sample-config/nrpe.cfg /usr/local/nrpe/etc
3、 修改配置文件/usr/local/nrpe/etc/nrpe.cfg.改過的地方用粗體顯示:
pid_file=/var/run/nrpe.pid
server_port=5666
#以單獨的守護進程運行
server_address=59.26.240.63
nrpe_user=nagios
nrpe_group=nagios
allowed_hosts=127.0.0.1,59.26.240.63
dont_blame_nrpe=0
debug=0
command_timeout=60
connection_timeout=300
# The following examples use hardcoded command arguments...
command[check_users]=/usr/local/nrpe/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nrpe/libexec/check_load -w 15,10,5 -c 30,25,20
#command[check_hda1]=/usr/local/nrpe/libexec/check_disk -w 20 -c 10 -p /dev/hda1
command[check_df]=/usr/local/nrpe/libexec/check_disk -w 20 -c 10
command[check_zombie_procs]=/usr/local/nrpe/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nrpe/libexec/check_procs -w 150 -c 200
command[check_ips]=/usr/local/nrpe/libexec/ip_conn.sh 8000 10000
說明:
● allowed_hosts=127.0.0.1,59.26.240.63 必須允許nagios監控服務器可以訪問。
● command[check_df]=/usr/local/nrpe/libexec/check_disk -w 20 -c 10 檢查整個服務器的磁盤利用率;如果是freebsd系統,因爲其/dev分區爲100%,需要排除這個分區,因此其命令行應該爲 “command[check_df]=/usr/local/nrpe/libexec/check_disk -x /dev -w 20 -c 10” 。
● command[check_ips]=/usr/local/nrpe/libexec/ip_conn.sh 8000 10000 ip連接數,ip_conn.sh腳本需要自己寫,下面給出腳本的內容:
我在nrpe配置文件nrpe.cfg把腳本所需的兩個參數寫上了,因此這個腳本就不需判 斷兩個參數輸入值的情況。只要當前ip連接數大於8000,系統就發warning報警,超過10000,則發“critical”報警信息。把這個腳本放在目錄/usr/local/nrpe/libexec下,並給於執行權限。
(四)、啓動nrpe服務並檢驗其配置
1、以獨立守護進程啓動nrpe服務 /usr/local/nrpe/bin/nrpe –c /usr/local/nrpe/etc/nrpe.cfg –d
2、通過察看系統日誌,正常啓動可以看到如下輸出:
六、啓動nagios
1、檢查配置: nagios的驗證非常準確,凡是不能正確啓動nagios,皆可以從錯誤輸出找到答案.
2、啓動nagios
3、檢驗監控效果。現在我們監控了本機的web服務,但由於apache服務還沒有被啓動起來,所以等待片刻後,正常情況下會收到郵件和手機短信報警信息;等後面我們把apache服務起來後,應該能夠收到服務已經恢復的報警短信和郵件。
4、創建web驗證用戶。我們根據前面apache配置文件的驗證方法來創建用戶:
5、啓動apache服務,然後在別的機器的瀏覽器地址欄輸入 [url]http://59.26.240.63/nagios[/url] ,再輸入第“4” 產生的用戶名及設定的密碼,即可通過web方式察看監控系統當前的狀態(瀏覽器自動刷新屏幕),如下圖所示:
監控mysql服務器
監控mysql需要在nagios和mysql服務器這兩個部分做處理:mysql服務器安裝nrpe、創建mysql監控用戶;配置nagios及用htpasswd創建瀏覽器驗證帳號。下面分步描述。
一、在mysql服務器安裝nrpe.
這個操作與nagios服務器安裝nrpe基本相同,唯一不同的是nrpe.cfg文件server_address,把它改成mysql服務器的ip地址即可。檢查無誤後啓動nrpe服務.
二、創建mysql訪問用戶nagios。這個賬號僅僅是nagios監控程序用來訪問mysql數據庫所用,與其它帳號毫無關係。爲了安全起見,nagios這個賬號的權限應該特別低,僅僅有數據庫的select權限即可。再進一步,我們創建一個空的數據庫nagdb,然後讓nagios賬號訪問這個空庫,就可以通過check_mysql插件測試和監控mysql數據庫。
1、創建空的數據庫(需mysql root權限): mysql > create database nagdb;
2、創建mysql賬號nagios: mysql > GRANT select . nagdb.* TO ‘nagdb@’%’;
3、用插件檢查配置:
[root@mysql /usr/local/nrpe/libexec]# ./check_mysql -H 192.168.0.102 -u nagios -d nagdb
Uptime: 189145 Threads: 2 Questions: 3501834 Slow queries: 0 Opens: 67 Flush tables: 1 Open tables: 57 Queries per second avg: 18.514
4、從nagios服務器上再檢查一次:
[root@nagios /usr/local/nagios/libexec]# ./check_mysql -H 192.168.0.102 -u nagios -d nagdb
Uptime: 189664 Threads: 2 Questions: 3501836 Slow queries: 0 Opens: 67 Flush tables: 1 Open tables: 57 Queries per second avg: 18.463
一切正常以後,mysql服務器這邊的配置和測試就算完成了。
三、nagios服務器上的操作.即在nagios配置文件後面追加內容。
(一)、主機配置文件追加mysql主機定義,聯繫組contactgroups 的值爲sagroup,dbgroup,具體步驟參照前面的操作。
(二)、聯繫人配置文件(contacts.cfg)追加數據庫管理員定義(dba1),具體步驟參照前面的操作。
(三)、聯繫組配置文件(contactgroups.cfg)追加數據庫管理員組定義(dbgroup),其成員爲聯繫人配置文件(contacts.cfg)定義的數據庫管理員(dba1)。
(四)、服務配置文件(services.cfg)追加mysql服務監控,除了mysql服務監控而外,其他幾個對象都於前面的類似,只不過聯繫組多了一個dbgroup。這裏列出mysql服務這個定義:
define service {
host_name nagios-server
service_de.ion check_mysql
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups sagroup,dbgroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_command check_mysql
}
(五)、命令配置文件(command.cfg)追加檢查mysql的定義,其追加內容爲:
define command {
command_name check_mysql
command_line $USER1$/check_mysql –H $HOSTADDRESS$ -u nagios –d nagdb
}
(六)、檢查並啓動nagios
cd /usr/local/nagios
bin/nagios –v etc/nagios.cfg
bin/nagios –d etc/nagios.cfg
(七)增加apache驗證帳號
/usr/local/apache/bin/htpasswd /usr/local/nagios/etc/htpasswd db1
輸入兩次密碼後,從別的計算機的瀏覽器地址欄輸入 [url]http://59.26.240.63/nagios[/url] ,再輸入用戶名db1及剛纔設定的密碼,進入頁面後,點擊左上方的鏈接“Service Detail”,就可以看到mysql服務器當前的運行狀態(db1用戶只能看到mysql服務器狀態,而管理員sery賬號則可以看所有被監控對象的狀態)。
監控其他服務器
操作步驟跟監控mysql差不多,不再贅敘。
操作步驟跟監控mysql差不多,不再贅敘。
服務器監控的一些策略
前段時間有人問我怎麼用nagios監控linux內存使用情況,以及怎麼設置報警閾值?linux運行時,是最大可能的利用內存,監控這個對象沒有現實意義,明顯屬於無效的監控策略.另有一人說:”晚上沒完沒了的收到監控系統的發送的報警短信,受不了…”。不言而喻,這也是一個不好的監控策略,實際上監控已經失去了它的意義。所以要讓監控平臺更有效的發揮作用,好的策略是必須的。那麼怎麼才能算是好的策略,這裏我結合我的實際情況,談談我的一些看法,希望對大家有所幫助。
前段時間有人問我怎麼用nagios監控linux內存使用情況,以及怎麼設置報警閾值?linux運行時,是最大可能的利用內存,監控這個對象沒有現實意義,明顯屬於無效的監控策略.另有一人說:”晚上沒完沒了的收到監控系統的發送的報警短信,受不了…”。不言而喻,這也是一個不好的監控策略,實際上監控已經失去了它的意義。所以要讓監控平臺更有效的發揮作用,好的策略是必須的。那麼怎麼才能算是好的策略,這裏我結合我的實際情況,談談我的一些看法,希望對大家有所幫助。
策略一:監控對象選擇
在一個規模較大的網絡中,監控的對象可能包括服務器、防火牆、交換機、路由器等等設備,以及運行在各對象上的服務。但是,我們沒必要把所有的對象都放到這個監控系統中來。比如把某些測試系統放到監控中,就會產生如上那位老兄整個晚上收到報警短信的麻煩。因此,選擇正確的監控對象是實施有效監控的前提,個人建議,只有那些重要級別高的,不能隨便停止服務的對象――如在線交易系統――纔是值得監控的對象。當然,服務器的使用者總希望你把它監控上,哪怕它不是那麼重要。
在一個規模較大的網絡中,監控的對象可能包括服務器、防火牆、交換機、路由器等等設備,以及運行在各對象上的服務。但是,我們沒必要把所有的對象都放到這個監控系統中來。比如把某些測試系統放到監控中,就會產生如上那位老兄整個晚上收到報警短信的麻煩。因此,選擇正確的監控對象是實施有效監控的前提,個人建議,只有那些重要級別高的,不能隨便停止服務的對象――如在線交易系統――纔是值得監控的對象。當然,服務器的使用者總希望你把它監控上,哪怕它不是那麼重要。
策略二:故障報警方式選擇
老闆非常希望我們不知疲倦的坐在計算機旁,但是他只是一廂情願而已。對監控系統而言,一定要有合適的故障告警機制。目前常用的告警機制包括:郵件、短信、msn、web頁面顯示等幾種手段,這幾種手段中,短信報警最佳。因爲在夜間睡夢中,我們沒辦法隨時收郵件,但是短信去能喚醒我們,通知我們發生故障了,而且在老闆和用戶發現這個故障以前。對於沒有通道的機構來說,租用sp提供的服務是比較穩妥的方式,其他如用移動飛信等方式都不怎麼考譜,不適合關鍵性業務運營。另外我使用了一個小技巧,讓監控平臺每天下午給我發一條短信,不管有沒有故障都發,這樣以便讓我知道短信接口是否正常。
老闆非常希望我們不知疲倦的坐在計算機旁,但是他只是一廂情願而已。對監控系統而言,一定要有合適的故障告警機制。目前常用的告警機制包括:郵件、短信、msn、web頁面顯示等幾種手段,這幾種手段中,短信報警最佳。因爲在夜間睡夢中,我們沒辦法隨時收郵件,但是短信去能喚醒我們,通知我們發生故障了,而且在老闆和用戶發現這個故障以前。對於沒有通道的機構來說,租用sp提供的服務是比較穩妥的方式,其他如用移動飛信等方式都不怎麼考譜,不適合關鍵性業務運營。另外我使用了一個小技巧,讓監控平臺每天下午給我發一條短信,不管有沒有故障都發,這樣以便讓我知道短信接口是否正常。
策略三:故障報警時效和間隔的選擇
由於網絡通信等不可控因素,因此可能存在故障誤報的情況。如果把報警發送設置成一次探測不成功就發送報警信息就不是個好策略。經驗表明:探測3-4次都失敗再發送信息,並不耽誤我們去處理故障。假如探測一次失敗就報警,即可以很快把手機短信空間塞滿,又會讓你睡不好覺。
故障報警開始發送以後,一般會沒完沒了的發送,直到故障排除恢復正常,纔會發一條類似“*** is ok!”的短信。報警發送間隔設置,也是需要費一番心思,設短了,不停的消耗你的短信費用,設長了,恐怕不足以喚醒沉睡的人;如果沒有人去處理故障,也沒有人去停止這個通知,報警信息就會一直髮送下去。
那怎麼樣是一個合適的範圍呢?我的做法是:探測4次失敗開始報警,報警間隔10分鐘,總共發送8次,然後停止發送,假如第3次沒有人去處理,我會電話通知,沒回應則取消該對象的監控,並記錄該次事件。
由於網絡通信等不可控因素,因此可能存在故障誤報的情況。如果把報警發送設置成一次探測不成功就發送報警信息就不是個好策略。經驗表明:探測3-4次都失敗再發送信息,並不耽誤我們去處理故障。假如探測一次失敗就報警,即可以很快把手機短信空間塞滿,又會讓你睡不好覺。
故障報警開始發送以後,一般會沒完沒了的發送,直到故障排除恢復正常,纔會發一條類似“*** is ok!”的短信。報警發送間隔設置,也是需要費一番心思,設短了,不停的消耗你的短信費用,設長了,恐怕不足以喚醒沉睡的人;如果沒有人去處理故障,也沒有人去停止這個通知,報警信息就會一直髮送下去。
那怎麼樣是一個合適的範圍呢?我的做法是:探測4次失敗開始報警,報警間隔10分鐘,總共發送8次,然後停止發送,假如第3次沒有人去處理,我會電話通知,沒回應則取消該對象的監控,並記錄該次事件。
策略四:監控平臺地點的選擇
對於一個規模比較大的網絡,爲了解決南北互聯問題而採取多個地點建立數據中心的辦法。這時需要對不同地理位置的服務器進行監控,也會遇到訪問慢的問題。解決這個問題有幾種方式:1、選擇一個到各個位置訪問都順暢的數據機房;2、採取分步是監控平臺,各處自己收集監控信息,然後到一處彙總;3、各數據中心單獨建監控平臺。各人可以根據自己的實際情況自行選擇。
對於一個規模比較大的網絡,爲了解決南北互聯問題而採取多個地點建立數據中心的辦法。這時需要對不同地理位置的服務器進行監控,也會遇到訪問慢的問題。解決這個問題有幾種方式:1、選擇一個到各個位置訪問都順暢的數據機房;2、採取分步是監控平臺,各處自己收集監控信息,然後到一處彙總;3、各數據中心單獨建監控平臺。各人可以根據自己的實際情況自行選擇。
策略五:流量控制和安全
有不少商業解決方案採取snmp和客戶端軟件來監控各個對象,這會引起額外的流量和帶來安全問題。因此儘量不要使用snmp這樣比較佔資源的協議(具稱snmp v3似乎有所改進)。開源解決方案Nagios在這方面做得比較完美,值得推薦一下。它可以以插件方式先收集到各監控對象的信息,然後再傳送到監控服務器上,大大節省網絡帶寬。
有不少商業解決方案採取snmp和客戶端軟件來監控各個對象,這會引起額外的流量和帶來安全問題。因此儘量不要使用snmp這樣比較佔資源的協議(具稱snmp v3似乎有所改進)。開源解決方案Nagios在這方面做得比較完美,值得推薦一下。它可以以插件方式先收集到各監控對象的信息,然後再傳送到監控服務器上,大大節省網絡帶寬。
2009/3/3