×

微信扫一扫,快捷登录!

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

标签: 监控
来自:网络



一: 关于nagios的原理和nagios core、nagios plugin、nrpe、ansible的安装的这边就不讲了,搜索下还是比较多的,这边提供安装的脚本。
    1: nagios core的安装脚本:         nagios培训
[  /zhuangweihong/blog/425327#]?[/url]
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 “[  /project/nagios/nagios-4.x/nagios-4.0.8/nagios-4.0.8.tar.gz] ... nagios-4.0.8.tar.gz[/url]” #下载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的安装脚本(一般在被监控端安装)

[  /zhuangweihong/blog/425327#]?[/url]
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]download/nagios-plugins-2.0.3.tar.gz[/url] #下载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实施

[  /zhuangweihong/blog/425327#]?[/url]
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 [  /project/nagios/nrpe-2.x/nrpe-2.15/nrpe-2.15.tar.gz]h  ... 15/nrpe-2.15.tar.gz[/url] #下载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安装:

[  /zhuangweihong/blog/425327#]?[/url]
1
2
rpm -ivh [  /fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm]fedora-e ... ease-6-8.noarch.rpm[/url]
yum install ansible –y #安装ansible




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

[  /zhuangweihong/blog/425327#]?[/url]
1
ssh-keygen -t rsa



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

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

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

    [www]
    192.168.1.1

    192.168.1.2

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


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


[  /zhuangweihong/blog/425327#]?[/url]
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模块传递过去。

[  /zhuangweihong/blog/425327#]?[/url]
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模块在远程机器上执行本地的命令。         开源监控软件

[  /zhuangweihong/blog/425327#]?[/url]
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上。因此添加被监控的主机的脚本可以编写如下:

[  /zhuangweihong/blog/425327#]?[/url]
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.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来检查了。

[  /zhuangweihong/blog/425327#]?[/url]
1
echo "alias nagioscheck='/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg'" > /root/.bashrc



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


[  /zhuangweihong/blog/425327#]?[/url]
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安装

    脚本如下:


[  /zhuangweihong/blog/425327#]?[/url]
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





上一篇:nagios中mysql 主从备份监控slave状态
下一篇:监控平台——Nagios
monicazhang

写了 2297 篇文章,拥有财富 12859,被 21 人关注

您需要登录后才可以回帖 登录 | 立即注册
B Color Link Quote Code Smilies

成为第一个吐槽的人

Powered by IT 运维管理
返回顶部