简化nagios监控部署ansible+shell方案
来自:网络
一: 关于nagios的原理和nagios core、nagios plugin、nrpe、ansible的安装的这边就不讲了,搜索下还是比较多的,这边提供安装的脚本。 1: nagios core的安装脚本: nagios培训 [ /zhuangweihong/blog/425327#]?
| 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” #下载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#]?
| 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 #下载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#]?
| 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 #下载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#]?
| 1 2 | rpm -ivh [ /fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm]fedora-e ... ease-6-8.noarch.rpm yum install ansible –y #安装ansible |
二: 由于nagios被监控机器有时候还是比较多的,因此我们要设置远程无密码登录,使用密钥去登录机器。首先,我们需要在一台跳板机上创建密钥(输入命令,两次回车就行了)。 监控软件
[ /zhuangweihong/blog/425327#]?
| 1 | ssh-keygen -t rsa |
然后使用sh-copy-id -i /root/.ssh/id_rsa.pub 输入密码后,后续就可以免密码登录了。但是这样子的话,如果有多台,还是会有点不方便。因此,下列提供个python程序用来批量添加, [ /zhuangweihong/blog/425327#]?
| 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#]?
| 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#]?
| 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#]?
| 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#]?
| 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#]?
| 1 | echo "alias nagioscheck='/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg'" > /root/.bashrc |
2: 除了可以用脚本批量添加被监控的主机以外,我们还可以使用脚本来添加一些service的监控,脚本如下: [ /zhuangweihong/blog/425327#]?
| 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#]?
| 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