CentOS 5.2安裝nagios筆記1——郵件簡訊飛信告警
nagios,難過死,難走死。反正不管咋叫,就是個難!自從上星期開始,折騰nagios快兩個禮拜了,就想實現簡訊告警。東找找西找找,發現天下文章一大抄,一個人寫的東西被N多人轉來轉去,甚至有的人還不知羞恥地把別人的東西弄成自己的原創了。唉,世風日下人心不古啊。而且多數的說明都很籠統,一邊找,一邊自己琢磨。整個過程中,前面2/3的時間最難熬,有無數次撞牆的衝動......後面1/3基本開竅了,終於差不多了。貼一把,給自己點鼓勵。
主要參考資料:http://nagios-cn.sourceforge.net/nagios-cn/
軟體如下:
CentOS 5.2,安裝時怕又出現這依賴那依賴的,把develop tools選上,省事,硬碟也有地方。
nagios-3.0.3
nagios-plugin-1.4.13
gnokii,一個gnokii-0.6.28cvs,另一個0.6.12,分別測試的。
CentOS自帶的httpd-2.2,看網上好多介紹都是用源碼裝httpd,我嫌麻煩。
gd-devel,如果需要nagios繪製圖表,這個東西就得有。
一.建組建帳號groupadd nagcmd
useradd apache
useradd nagios
usermod -G nagcmd nagios
usermod -G nagcmd apache二.編譯nagios-3.0.3./configure --with-command-group=nagcmd
make all
make install
make install-init
make install-commandmode
make install-config三.配置WEB介面make install-web
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin ;創建一個登錄WEB的帳號四.裝nagios-plugin-1.4.13./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install五.將nagios加入服務並啟動,同時啟動apachechkconfig --add nagios
chkconfig nagios on驗證nagios的安裝/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg如果出現下面的提示就OK了......
Total Warnings: 0
Total Errors: 0
Things look okay - No serious problems were detected during the pre-flight check
#啟動nagios和apache服務service nagios start
service httpd start六.禁用selinux
我登錄WEB頁面好幾次都無法通過驗證,仔細看了一下說明發現是selinux的問題。#setenforce 0這麼改完不需要重啟系統就可生效,Getenforce可看到permissive。但一重啟就又得來一次,我的CentOs上也沒別的,直接disable吧# more /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=disabled現在可以用http://IP/nagios來登錄了,用戶名nagiosadmin。不過這時什麼設備、服務都沒監控,就是個花架子。
我第一次安裝成功時直接用http://ip登錄的,之後再裝,每次打開都是apache的默認頁面,後來在論壇里「不是神不會猜的」jerrywjl指導了一下,才登錄成功。不過百思不得其解,第一次裝的時候就老老實實地把步驟記下來了,以後都是把命令copy到屏幕上裝的,為啥就不一樣了?還是jerrywjl說了,肯定有不一樣的地方,機器不會騙我們。不管如何,能用就行。
七.定義聯繫人和聯繫人組。我定義了三個人,兩個組。前兩個人在第一組裡,第三個人在第二組裡。#### 定義第一個聯繫人
define contact{ ;
contact_name user1
use generic-contact
alias Nagios Admin
service_notification_commands service-by-sms,notify-service-by-email ;簡訊和郵件告警。
##service-by-sms是我用來發簡訊的命令,默認情況下,這個命令是commands.cfg里沒有的。
##所以加完這個配置后,在commands.cfg定義這個命令之前,nagios是無法正常restart的。
## 當然如果沒有service-by-sms和host-by-sms,nagios還是隨便restart的。廢話真多。^_^
host_notification_commands host-by-sms,notify-host-by-email
email
[email protected] pager 133 ;手機號碼
}
### 定義第二個聯繫人
define contact{ ;
contact_name user2
use generic-contact
alias Nagios Admin
service_notification_commands service-by-sms,notify-service-by-email
host_notification_commands host-by-sms,notify-host-by-email
email
[email protected] pager 137xxxxxxxx
}
#### 定義第三個聯繫人
define contact{ ;
contact_name user3
use generic-contact
alias Nagios Admin
service_notification_commands service-by-sms,notify-service-by-email
host_notification_commands host-by-sms,notify-host-by-email
email
[email protected] pager 139
}
#### 定義聯繫人組
define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members user1,user2
}
define contactgroup{
contactgroup_name test_group
alias Test
members user3
}八.設置被監控的windows伺服器。
找了個NSClient++-Win32-0.3.5.msi的安裝包,直接裝上,服務里就帶了NSC++的服務,登錄方式允許與桌面交互。
又照著網上的把文件註釋都去掉。只有CheckWMI.dll和RemoteConfiguration.dll前面的註釋保留。
網上N多資料都寫著建議加password,可是加完了怎麼用一直沒人說,每個文章連標點符號都一樣,shit!!!天下文章一大抄害死人啊!
password=123456 ;這個密碼在nagios的主機配置文件中這麼用,check_command xxxxxx -s 123456
allowed_hosts=192.168.0.0/16 ;允許nagios伺服器訪問,也可以定義主機,比如:allow_hosts=192.168.1.250/32
port=12489啟動服務。windows伺服器圖標右下角出現有兩個重疊的加號,當然有的伺服器沒出來,不知道為啥,反正12489埠通了,能用就行!
九.修改nagios參數,註釋本機配置文件,取消註釋 windows.cfg。要是有多個主機配置文件就繼續在nagios里加,主機配置文件的格式跟windows.cfg一樣就行了。vi /usr/local/nagios/etc/nagios.cfg
#cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
cfg_file=/usr/local/nagios/etc/objects/windows.cfg
cfg_file=/usr/local/nagios/etc/objects/test/winhosts.cfg ;配置文件路徑自定義,隨便!nagios.cfg里有一行配置command_check_interval=-1,據說這個值是nagios根據自身情況自定義檢查時間,儘可能快地檢查。但我沒發現,我把它改成10s,20s都沒用,我最後只好在windows.cfg和其他hosts.cfg里自己加了。看看哪位有空幫忙解答一下。
修改/user/local/nagios/etc/objects/windows.cfg。監控CPU、監控內存,監控進程。看了網上N多2.9的資料,發現3.0.3省了很多東西,真慶幸。裡面有很多參數都省略了,但是想用到怎麼辦,也是自己加了。我在測試時就加了normal_check_interval、max_check_attempts和congtact_groups這三個define host{
use windows-server ; Inherit default values from a template
host_name 192.168.0.1 ; 因為我們平時工作交流時描述主機都用IP地址描述,這裡就懶得改了,一招燴了吧!
alias sunfeng's laptop ; A longer name associated with the host
address 192.168.0.1 ; IP address of the host
}
define service{
use generic-service
host_name 192.168.0.1
max_check_attempts 5 ;檢查多少次,依然有問題時告警。nagios3.0.3配置里是沒有這行的,默認就是3。好像2.x版本的有,不過我沒用過2.x。
normal_check_interval 15 ;監控周期。有的文檔里描述這行的單位是秒,但我試出來的是分鐘。這行默認配置里也沒有,默認好像是10分鐘。
service_description Uptime
check_command check_nt!UPTIME -s 123456 ;嘿嘿,windows的NSC++密碼用上了!
}
define service{
use generic-service
host_name 192.168.0.1
max_check_attempts 3
normal_check_interval 15
service_description CPU Load
check_command check_nt!CPULOAD!-l 5,80,90 -s 123456
}
define service{
use generic-service
host_name 192.168.0.1
service_description CMD
normal_check_interval 1 ; ;每分鐘檢查一次進程。我就是為了試驗,一般時候用不著這麼短的間隔
max_check_attempts 1 ;我覺得進程這個東西要是沒了,馬上就出事了,所以寧可誤報也不能讓它自己慢悠悠地查3次再告警。但有資料說不建議這麼做,我忘了具體原因了。
contact_groups admins ;這行也是默認情況下沒有的。可填可不填,我只是為了區分下面那個組。;出錯就給test_group組裡的user3發簡訊發郵件。
check_command check_nt!PROCSTATE!-d SHOWALL -l CMD.EXE -s 123456 ;監控cmd.exe我照著網上的文檔試著監控explorer.exe,全小寫,或者寫成Explorer.exe都能監控到,但是CMD或者firefox等用戶進程,不管資源管理器里顯示的大小寫如何,這裡必須寫成大寫,否則就檢測失敗。
}
define service{
use generic-service
host_name 192.168.0.1
service_description firefox
normal_check_interval 1
max_check_attempts 1
contact_groups test_group ;出錯就給test_group組裡的user3發簡訊發郵件。
check_command check_nt!PROCSTATE!-d SHOWALL -l FIREFOX.EXE -s 123456
}十.配置sendmail,這部分除了郵箱地址,我基本是完全copy的,就是CU里一個兄弟貼的,管用。編輯/etc/sendmail/access。# by default we allow relaying from localhost...
Connect:localhost.localdomain RELAY
Connect:localhost RELAY
Connect:127.0.0.1 RELAY
### add by me
connect:http://mail.xxxx.cn RELAY
connect:nagios@localhost RELAY
connect:192.168.0 RELAY
connect:user1@localhost RELAY
connect:user2@localhost RELAY
connect:user3@localhost RELAY
connect:
[email protected] RELAY
connect:
[email protected] RELAY
connect:
[email protected] RELAY 我後來發現個問題,範例都是Connect,而我抄的時候都寫成connect了,照樣能用。我不熟悉sendmail,不知道啥原因,本來打算測試一下,沒倒出空來。
不好意思,沒寫完就誤點發帖了,繼續編輯中......makemap hash access < access
chmod 777 /var/spool/mqueue 測試sendmail# /usr/lib/sendmail -bp
/var/spool/mqueue is empty
Total requests: 0
#OK!# echo testing | /usr/sbin/sendmail -v
[email protected]收到郵件,又成功!
十一.簡訊貓安裝。接簡訊貓到串口,我接的串口2。
先安裝光碟里的minicom的rpm包。
運行minicom -s,彈出個圖形界面。圖形界面截圖放這裡沒法排序,文字不好描述,網上文章一大堆,都管用,抄吧。^_^
選擇: Serial port setup 后出現下級界面。按A,修改埠為ttyS1,按E,修改埠速率9600。選擇exit,初始化簡訊貓,進入at指令界面。
輸入at,彈出OK,表示簡訊貓工作正常。
at+cmgs=13912345678 (輸入后命令行多出「>」前綴)
>Test by user1……
輸入完后按ctrl+z 退出, 界面顯示OK,手機上應該能收到簡訊。
十二 gnokii工具,發簡訊用的。我從http://www.gnokii.org下載的rpm包,這個網站沒有源碼包,不知道為啥。直接rpm -ivh gnokii-0.6.28cvs-20081209.i386.rpm就安裝完了。
vi /etc/gnokiirc
port = /dev/ttyS1
model = AT
##同時需要註釋掉mode = 6510
serial_baudrate = 9600
use_locking = no ;據說這個為yes時無法同時給多人發送簡訊,沒試過。
#### use_locking執行gnokii --identify有些網站不知道從哪抄來的,中間都是一個「-」,看了幫助才知道又被誤導了。唉,懶點都不行。附個圖吧,估計都貼在後面了。
第一遍裝忘了註釋mode=6510,結果沒成功,以為RPM包有問題,卸載!從別的網站弄了個源碼,gnokii-0.6.12。好多網站又是make、make install,好在我這次先看文檔了,沒被誤導。是gmake&gmake install。tar xvf gnokii-0.6.12.tar.bz2
cd gnokii-0.6.12
./configure --prefix=/usr/local/gnokii/ --without-x --disable-xdebug ;我沒有x,跟x有關的都不要!
gmake
gmake install把源碼包下的gonkiirc複製到/etc目錄下,修改內容跟RPM包的一樣。
注意:rpm包安裝后gnokii的可執行文件在/usr/bin目錄下,可以在任何路徑下執行gnokii。而源碼安裝后的可執行文件在/usr/local/gnokii/目錄下,用時必須指定絕對路徑。echo -n "test by user 16:10" |/usr/local/gnokii/bin/gnokii --sendsms 133xxxxxx注意修改gnokii的路徑,別copy。
我用源碼包和rpm包分別安裝后,都成功收到簡訊。我自己的觀察,rpm包的版本高,執行速度看起來好像也快一點。
十三.把gnokii功能綁定到nagios
vi /usr/local/nagios/etc/objects/commands.cfg,添加如下代碼define command{
command_name host-by-sms ; ;這就是用到前面編輯congtacts.cfg里的那個簡訊告警名
command_line /bin/echo -n "$NOTIFICATIONTYPE$ $HOSTNAME$/$HOSTADDRESS$ : host is $HOSTSTATE$ $SHORTDATETIME[ DISCUZ_CODE_22 ]quot; | /usr/bin/gnokii –sendsms $CONTACTPAGER$ 2>&1 > /dev/null
}
define command{
command_name service-by-sms ;這個也是
command_line /bin/echo -n "$NOTIFICATIONTYPE$ $HOSTNAME$/$HOSTADDRESS$ : Service is $SERVICEDESC$ $SERVICESTATE$ $SHORTDATETIME[ DISCUZ_CODE_22 ]quot; | /usr/bin/gnokii –sendsms $CONTACTPAGER$ 2>&1 > /dev/null
}這個最初是從一個不知道從哪翻出來的網站copy過來的,結果那位大哥最後一行少了個「}」,害得我找了20分鐘。而且裡面的gnokii的路徑不對,帶的參數也不對......我又琢磨了半小時,最後從../nagios/etc/var/nagios.log里看出來的。copy害死人啊,不過不copy我就撞牆了,不管怎麼說還是得感謝人家。因為我最後還是用rpm包裝的gnokii,所以懶一把,配置文件里沒指定絕對路徑。
折騰完這一小時,發現還是無法下發簡訊,後來還是在../nagios.log里看到是許可權的問題。用ll命令看一下,都是root有許可權/dev/ttyS1 root uucp
/usr/bin/gnokii root rootnagios服務和依賴的工具都以nagios帳戶許可權執行,必須對串口可讀寫,必須可執行gnokii。據說有人裝完這些許可權就正常,可我的不正常,不知道咋據說的,改。chown –R nagios:nagios /usr/bin/gnokii
chown –R nagios:nagios /dev/ttyS1切換到nagios帳戶下執行echo -n "test by user 16:10" |/usr/local/gnokii/bin/gnokii --sendsms 133xxxxxx收到簡訊,成功!
service nagios restart
登錄后關閉CMD.EXE,給user1和user2發郵件+簡訊,關掉firefox給user3發郵件+簡訊。Congratulation!!!
郵件內容如下:***** Nagios *****
Notification Type: PROBLEM
Service: C:\ Drive Space
Host: user's notebook
Address: 192.168.0.11
State: WARNING
Date/Time: Thu Dec 11 18:15:21 CST 2008
Additional Info:
c:\ - total: 7.81 Gb - used: 6.66 Gb (85%) - free 1.15 Gb (15%)簡訊的內容也差不多。nagios3.0.3默認情況下,在unknow、critical、warning、recovery都會發簡訊和郵件。
再貼張圖。中間那個橙色的unkonwn狀態的目標是因為我監控的一個進程名中間有空格!!!誰知道怎麼寫?幫忙解答一下。check_command check_nt!PROCSTATE!-d SHOWALL -l ABCD PQRS.EXE -s 123456還有個問題,nagios的頁面多久自動刷新一次?是有狀態更新后再刷么?
此外,我點左面的那個3-D Status Map時老提示我下載statuswrl.cgi,不知道是不是因為apache不是用源碼包裝的原因。
還剩兩項工作:
網上還有用飛信的說明,結果我註冊了一下午飛信愣是沒註冊上,老是系統繁忙.....明天看看情況,爭取把飛信搞定,省點簡訊費吧!
第二個是監控Linux伺服器,我還沒騰出空來去看,繼續努力!!!
再廢話一句:../nagios/bin/nagios -v ../nagios/etc/nagios.cfg這個命令真管用,出錯看得最明白的一個了!!好使。
寫完了想起來,我要是都弄好了,今年過年要是再出現2001年時簡訊擁塞,我的nagios+簡訊貓不就成了孬狗+死貓了么?繼續祈禱吧.......
------------------------------------------------
還有個關於htpasswd命令的用法,還是照抄惹的禍,據說用htpasswd -c htpasswd.users可以增加數個帳號,結果我添一個就把前面填過的給清掉了,添來添去只有一個帳號。後來看了一下幫助,用參數n、m、d、p都可以增加。增加完以後,在../nagios/etc/cgi配置文件中,在nagiosadmin後面填上新的帳號,restart nagios服務就O了。
2008-12-12,搞定飛信!
今天把飛信告警給搞定了!又小有成果。
下載飛信客戶端,最新版的飛信客戶端讓我裝了40多個依賴庫文件,折騰一上午,最後還是沒搞定。繼續找其他版本,皇天不負苦心人啊,我終於找到了一個舊版本,很輕鬆的就搞定了
解壓文件,只有一個可執行文件,sms,將其移動到/usr/bin目錄下,並允許其他用戶(主要是nagios)可執行。
tar zxvf fetion_linux_20080402.tar.gz
mv ./sms /usr/bin
chmod 755 /usr/bin/sms
下載sms依賴的庫文件,並解壓。解壓完畢后將這些文件複製到/usr/lib目錄下
tar zxvf lib_lin_32.tar.gz
cp ./lib_lin_32/* /usr/lib
測試發送簡訊。
sms –f 139xxxx –p abc123 –t 138xxxxx –m 「test by user1」 –a test –d
OK,搞定!!
sms的幫助文件直接敲sms命令就出來了,很簡單就不貼了。
在commands.cfg
添加飛信的命令。因為我還用簡訊貓給非移動的手機發簡訊,所以host-notify-by-sms用於簡訊貓了,飛信就用host-notify-by-fei了。
define command {
command_name host-notify-by-fei ;如果有簡訊貓的話,注意命名要有區別
command_line /usr/bin/sms -f 13412345678 -p abc123 -t $CONTACTPAGER$ -m "Host $HOSTSTATE$ alert for $HOSTNAME$! on '$LONGDATETIME$' " $CONTACTPAGER$
}
#service notify by sms
define command {
command_name service-notify-by-fei
command_line /usr/bin/sms -f 13412345678 -p abc123 -t $CONTACTPAGER$ -m "'$HOSTADDRESS$' $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ on '$LONGDATETIME$' " $CONTACTPAGER$
}
修改聯繫人,把原來那些用簡訊貓發送的移動手機聯繫人的命令都改成notify-host-by-fei了,弄一個不存在的服務去監控,讓我周圍同事的移動手機叮叮噹噹的響了一下午,最後有人都無法忍受了。我的不是移動手機,佔便宜了...... 後來想想,還是小心為妙,萬一叫多了狼來了,狼真來了人家不信了。
2008-12-16,搞定statusmap.cgi,鬱悶!
nagios頁面左面有兩個status map和3D status map,老是顯示不出來。
status map這個東西,網上有人這麼說的:
Cortona (Parallel Graphics)
Cosmo Player (Computer Associates and NIST)
FreeWRL和OpenVRML
好像最後兩個沒有windows版本,所以如果是用windows機器看的話,需要裝前兩個軟體之一.
我的客戶端是windows的裝了第一個,cortona。安裝選項有directx和opengl,我都試了一遍。裝完的效果附圖,真爛!除了圖標啥也看不清,基本沒多大用途
剩下那個客戶端軟體Cosmo我也試了一下,更爛,具體效果忘了。
還有個3D status map,這個試試,找了一頓發現需要gd-devel,虛擬機上rpm一把,發現10多個依賴包,翻來覆去地rpm,裝不上。乾脆上伺服器上yum一把得了,小心翼翼地把所有的配置文件備份了一遍,重新用源碼編譯了一邊nagios,這回裝上了。要是原來的配置文件沒保存,名稱都變成原來的文件名加個「~」,不會丟,只是改起來麻煩。
裝完了看到../nagios/sbin目錄下出來了個statusmap.cgi,大喜,打開一看想哭。附圖。失敗的一天
有沒有人有好的解決辦法幫忙解答一下。
2008-12-18 WEB帳號授權問題
系統中有N多設備,不同的設備指定到不同的聯繫人,現在想給這些聯繫人分配WEB帳號,並只允許瀏覽自己負責的設備。
百思不得其解,用htpasswd添加帳號,並在cgi.cfg中添加新增帳號,但每次這個新增帳號的許可權都是管理員許可權。
後來終於想起來,那麼多聯繫人,但我每次添加的帳號都是一個不在contacts.cfg里的帳號。這回添加一個contacts.cfg里已經存在的帳號試試
添加完畢后,test一把,OK!!成功!
這麼簡單的問題困擾我數天。鄙視自己一把。
MRTG繪製歷史數據
這個是我無意中做完的。我開始沒想怎麼用mrtg繪製圖表,只是想需要裝個mrtg看網卡流量,RPM完了沒配置呢,有事就忘了。結果過了兩天無意中發現歷史數據圖怎麼出來了,我的MRTG沒工作呢。
虛擬機下試了幾次,要用MRTG繪製圖表,必須有statusmap.cgi,也就是安裝nagios之前必須有gd-devel。看來這個默認的statusmap看起來丑點,倒也不是一點用沒有。
當有statusmap.cgi后,安裝光碟上的mrtg*.rpm后,就可以繪製nagios的歷史數據了,至於MRTG是否工作正常無關緊要。源碼MRTG裝完啥樣我倒不清楚,沒來得及試。
2009-7-16 用PNP繪製歷史數據的曲線圖。
N半年沒去琢磨nagios的繪圖功能,雖然我早就知道我的MRTG只能畫方塊而不能畫曲線。這幾天終於搞定了,不過由於文字超標了,不能寫在這裡了,只好寫回復里去了。
前幾天翻nagios 的資料時,發現我的這篇筆記被好幾個地方給轉貼了,有厚顏無恥的乾脆就給弄成自己的原創了。不過我的也不是原創,只是個筆記而已。天下文章一大抄,抄吧。^_^
[ 本帖最後由 dbsrv 於 2009-7-17 12:25 編輯 ]
《解決方案》
沙發一個,慢慢看
《解決方案》
回復 #1 dbsrv 的帖子
此外,我點左面的那個3-D Status Map時老提示我下載statuswrl.cgi,不知道是不是因為apache不是用源碼包裝的原因。
這個據說需要裝個插件
《解決方案》
很詳細 贊一個 我是通過139郵箱發簡訊 嘿嘿不用做什麼簡訊貓什麼的了
《解決方案》
誰知道ABCD PQR.EXE這樣的進程怎麼寫?請教一下。
不標準的文件名還是個明白人幫忙提醒:"ABCD\ PQR.EXE"、"ABC(1).EXE"
[ 本帖最後由 dbsrv 於 2008-12-24 10:10 編輯 ]
《解決方案》
回復 #1 dbsrv 的帖子
呵呵,好的經驗可以借鑒呀
《解決方案》
真的是好複雜啊 ...
真的是好複雜啊 ...
《解決方案》
原帖由 wiliiwin 於 2008-12-12 09:32 發表 http://linux.chinaunix.net/bbs/images/common/back.gif
很詳細 贊一個 我是通過139郵箱發簡訊 嘿嘿不用做什麼簡訊貓什麼的了
我也是用139郵箱,免費就是好:mrgreen:
《解決方案》
這個不錯,收藏了,改天好好研究一下,非常感謝,正需要。
《解決方案》
以前都是自己寫的腳本監控,現在也打算使用nagios了