monicazhang 发表于 2016-1-31 16:00:08

简化nagios监控部署ansible+shell方案

来自:网络


一: 关于nagios的原理和nagios core、nagios plugin、nrpe、ansible的安装的这边就不讲了,搜索下还是比较多的,这边提供安装的脚本。
    1: nagios core的安装脚本:         nagios培训 ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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 “ ... 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的安装脚本(一般在被监控端安装)

?

1
2
3
4
5
6
7
8
9
useradd nagios #添加nagios用户
usermod -s /sbin/nologin nagios #让nagios无法登录
cd /usr/local
wget 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安装的地址):                   nagios实施
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
useradd nagios #添加nagios用户
usermod -s /sbin/nologin nagios #让nagios无法登录
cd /usr/local
wget h... 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安装:

?

1
2
rpm -ivh fedora-e ... ease-6-8.noarch.rpm
yum install ansible –y #安装ansible





二: 由于nagios被监控机器有时候还是比较多的,因此我们要设置远程无密码登录,使用密钥去登录机器。首先,我们需要在一台跳板机上创建密钥(输入命令,两次回车就行了)。                        监控软件
?

1
ssh-keygen -t rsa




    然后使用sh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.0.2输入密码后,后续就可以免密码登录了。但是这样子的话,如果有多台,还是会有点不方便。因此,下列提供个python程序用来批量添加,

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/python import sysimport pexpect

ip = sys.argv

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,
      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来批量上传插件到被监控的机器上。                     nagios配置     我们知道nagios远程监控linux机器是使用nrpe来监控的,因此如果有新的插件,我们需要把插件拷贝到所有的远程主机上,借助ansible使得这一过程变得简单。

    1: 把被监控的ip列成一组在/etc/ansible/hosts文件上,例如:

   
    192.168.1.1

    192.168.1.2

    借助(二)的方法,上述的机器已经可以远程无密码登录了,因此可以直接使用ansible WWW -m ping来查看是否成功,成功截图如下:


    2: 接下来我们就可以把插件下载在跳板机上,然后通过跳板机远程传插件给被监控的主机。使用ansible的copy模块完成这个功能。(backup=yes代表如果有文件,帮忙备份,其实没用也没事)


?

1
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模块传递过去。

?

1
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模块在远程机器上执行本地的命令。       开源监控软件
?

1
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上。因此添加被监控的主机的脚本可以编写如下:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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.sh192.168.1.1就可以先监控192.168.1.1是否存活和ssh的状况。

    一般更改配置文件我们都需要检查下nagios的配置,把/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg这条检查命令alias成nagiocheck,这样我们就可以使用nagioscheck来检查了。

?

1
echo "alias nagioscheck='/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg'" > /root/.bashrc




    2: 除了可以用脚本批量添加被监控的主机以外,我们还可以使用脚本来添加一些service的监控,脚本如下:


?

1
2
3
4
5
6
7
8
9
10
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上看会清晰一点。例如:       nagios安装

    脚本如下:


?

1
2
3
4
5
6
7
8
9
10
11
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)



想做Nagios, Zabbix,Cacti,iTop各种交流的,可以进入开源监控工具Nagios交流QQ群号 :476809427
页: [1]
查看完整版本: 简化nagios监控部署ansible+shell方案