一: 關於nagios的原理和nagios core、nagios plugin、nrpe、ansible的安裝的這邊就不講了,搜索下仍是比較多的,這邊提供安裝的腳本。php
1: nagios core的安裝腳本:python
useradd nagios #添加nagios用戶 groupadd nagcmd #添加nagcmd用戶組 usermod -a -G nagcmd nagios #把nagios添加到nagcmd組 usermod -s /sbin/nologin nagios #讓nagios沒法登陸 yum install lrzsz –y #安裝個上傳下載用的 yum install httpd php –y #安裝httpd php支持 yum install gcc glibc glibc-common –y yum install gd gd-devel –y cd /usr/local #到/usr/local目錄去操做 wget 「http://cznic.dl.sourceforge.net/project/nagios/nagios-4.x/nagios-4.0.8/nagios-4.0.8.tar.gz」 #下載nagios最新版本 tar –zxvf nagios-4.0.8.tar.gz #解壓最新版本的 cd nagios-4.0.8 ./configure --prefix=/usr/local/nagios --with-command-group=nagcmd #編譯,安裝在/usr/local/nagios make all make install make install-init make install-commandmode make install-config make install-webconf #安裝web的配置文件 chkconfig --add nagios #把nagios給chkconfig支持 chkconfig --level 35 nagios on #35模式下自動開啓 htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin #爲nagios登陸設置密碼 service httpd restart #從新啓動httpd服務
2: nagios plugin的安裝腳本(通常在被監控端安裝)linux
useradd nagios #添加nagios用戶 usermod -s /sbin/nologin nagios #讓nagios沒法登陸 cd /usr/local wget http://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz #下載nagios plugin tar -zxvf nagios-plugins-2.0.3.tar.gz cd nagios-plugins-2.0.3 ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios #編譯 make #安裝 make install
3: nrpe的安裝(這邊須要改動的是allowed_hosts改成nagios core安裝的地址):ios
useradd nagios #添加nagios用戶 usermod -s /sbin/nologin nagios #讓nagios沒法登陸 cd /usr/local wget http://liquidtelecom.dl.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.15/nrpe-2.15.tar.gz #下載nrpe tar -zxvf nrpe-2.15.tar.gz cd nrpe-2.15 ./configure --prefix=/usr/local/nagios # --enable-command-args若是要傳遞參數用這個,測試不經過 make #安裝 make install make install-daemon make install-daemon-config #更改配置allow nagios core來監控: sed 's/allowed_hosts=127.0.0.1/allowed_hosts=192.168.1.1/' /usr/local/nagios/etc/nrpe.cfg /usr/local/nagios/bin/nrpe -d -c /usr/local/nagios/etc/nrpe.cfg #nrpe做爲守護進程啓動
4: ansible安裝:web
rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm yum install ansible –y #安裝ansible
二: 因爲nagios被監控機器有時候仍是比較多的,所以咱們要設置遠程無密碼登陸,使用密鑰去登陸機器。首先,咱們須要在一臺跳板機上建立密鑰(輸入命令,兩次回車就好了)。shell
ssh-keygen -t rsa
而後使用sh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.0.2輸入密碼後,後續就能夠免密碼登陸了。可是這樣子的話,若是有多臺,仍是會有點不方便。所以,下列提供個python程序用來批量添加,bash
#!/usr/bin/python import sys import pexpect ip = sys.argv[1] password = 'password' expect_list = ['(yes/no)', 'password:'] p = pexpect.spawn('ssh-copy-id %s' % ip) try: while True: idx = p.expect(expect_list) print p.before + expect_list[idx], if idx == 0: print "yes" p.sendline('yes') elif idx == 1: print password p.sendline(password) except pexpect.TIMEOUT: print >>sys.stderr, 'timeout' except pexpect.EOF: print p.before print >>sys.stderr, '<the end>'
上面python腳本用來自動發送yes和密碼的,能夠把機器的ip和密碼設置爲兩個參數,目前我設置的密碼是一致的。執行方法python addhost.py ip地址便可。網絡
三:使用ansible來批量上傳插件到被監控的機器上。ssh
咱們知道nagios遠程監控linux機器是使用nrpe來監控的,所以若是有新的插件,咱們須要把插件拷貝到全部的遠程主機上,藉助ansible使得這一過程變得簡單。tcp
1: 把被監控的ip列成一組在/etc/ansible/hosts文件上,例如:
[www]
192.168.1.1
192.168.1.2
藉助(二)的方法,上述的機器已經能夠遠程無密碼登陸了,所以能夠直接使用ansible WWW -m ping來查看是否成功,成功截圖以下:
2: 接下來咱們就能夠把插件下載在跳板機上,而後經過跳板機遠程傳插件給被監控的主機。使用ansible的copy模塊完成這個功能。(backup=yes表明若是有文件,幫忙備份,其實沒用也沒事)
ansible WWW -m copy -a "src=/root/check_cpu.sh dest=/usr/local/nagios/libexec/ owner=root group=root mode=0755 backup=yes"
3: 而後批量更改nrpe的配置文件,每一個被監控端的nrpe文件都差很少,所以,咱們能夠把nrpe的配置文件存在跳板機上,並用ansible的copy模塊傳遞過去。
ansible WWW -m copy -a "src=/root/nrpe.cfg dest=/usr/local/nagios/etc/ owner=nagios group=nagios mode=0644 backup=yes"
4" 而後把reload nrpe的命令寫在一個腳本上,調用ansible的command模塊在遠程機器上執行本地的命令。
ansible WWW -m script -a "/root/command.sh"
command.sh內容以下:
kill -HUP `ps auxf | grep nrpe | grep -v grep | awk '{print $2}'`
四:藉助shell來批量添加被監控的主機。
1: 咱們知道nagios要監控一臺主機得在object上寫監控一臺主機的配置,而後把這個配置寫入到nagio.cfg上。所以添加被監控的主機的腳本能夠編寫以下:
ip=$1 cat <<EOF >/usr/local/nagios/etc/objects/${ip}.cfg define host{ use linux-server host_name ${ip} address ${ip} } define service{ use generic-service host_name ${ip} service_description PING check_command check_ping!100.0,20%!500.0,60% } define service{ use generic-service host_name ${ip} service_description SSH check_command check_ssh } EOF echo "cfg_file=/usr/local/nagios/etc/objects/${ip}.cfg" >> /usr/local/nagios/etc/nagios.cfg
而後 使用sh addhost.sh 192.168.1.1就能夠先監控192.168.1.1是否存活和ssh的情況。
通常更改配置文件咱們都須要檢查下nagios的配置,把/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg這條檢查命令alias成nagiocheck,這樣咱們就可使用nagioscheck來檢查了。
echo "alias nagioscheck='/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg'" > /root/.bashrc
2: 除了能夠用腳本批量添加被監控的主機之外,咱們還可使用腳原本添加一些service的監控,腳本以下:
ip=$1 port=$2 cat <<EOF >>/usr/local/nagios/etc/objects/${ip}.cfg define service{ use generic-service host_name ${ip} service_description Check Port ${port} check_command check_tcp!${port} } EOF
以上腳本第一個參數爲ip,第二個參數爲port,經過上述腳本,就能夠監控某臺機器的某個端口是不是開着的。
3: 最後,再附加上歸組的腳本,機器太多的話,咱們在host groups上看會清晰一點。例如:
腳本以下:
group=$1 iplist=$2 cat <<EOF >/usr/local/nagios/etc/objects/${group}.cfg define hostgroup{ hostgroup_name ${group} alias ${group} members ${iplist} } EOF echo "cfg_file=/usr/local/nagios/etc/objects/${group}.cfg" >>/usr/local/nagios/etc/nagios.cfg
腳本的第一個參數爲組名,第二個參數爲主機列表(例如192.168.1.1,192.168.1.2,192.168.1.3)
最後附上本人的網絡課堂地址,若有興趣請點擊: 實踐哥