ansible+shell簡化nagios監控部署方案

一: 關於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)

 

最後附上本人的網絡課堂地址,若有興趣請點擊: 實踐哥

相關文章
相關標籤/搜索