python+Django实现Nagios自动化添加监控项目

最近机房刚上了一批机器(有100台左右),需要使用Nagios对这一批机器进行监控。领导要求两天时间完成所有主机的监控。从原来的经验来看,两天时间肯定完成不了。那怎么办?按照之前的想法,香港服务器,肯定是在nagios配置文件逐一添加每台客户端的监控信息,工作量巨大。突然,想到一个想法,是否可以通过脚本来实现批量对主机进行监控,也就是运维自动化。

写脚本,最重要的就是思路。思路压倒一切,经过思考最终决定就这么做了。先贴出来一张网路拓扑图:

整个过程可以分为三部分。

这三部分最重要的应该是CMDB端。接下来通过安装django和编写API接口实现cmdb可以正常工作。可以将cmdb端分为三个步骤来完成:

首先来进行安装django:

在安装django之前首先应该安装python(版本建议2.7.)

1.下载django软件包 可以到django官方网站下载最新django软件包(https://www.djangoproject.com).2.解压缩并安装软件包tar -zxvf Django-1.5.1.tar.gzcd Django-1.5.1python setup.py install

创建项目和应用:

1.创建一个项目python startproject simplecmdb2.创建一个应用python startapp hostinfo

配置django:

1.修改setting.py

2.修改urls.py

3.修改项目hostinfo下的views.py

代码如下:

# Create your views here.#包含以下模块from django.shortcuts import render_to_responsefrom django.http import HttpResponsefrom models import Host, HostGroup#包含json模块try:import jsonexcept ImportError,e:import simplejson as json#用来接收客户端服务器发送过来的数据def collect(request):req = requestif req.POST:vendor = req.POST.get(‘Product_Name’)sn = req.POST.get(‘Serial_Number’)product = req.POST.get(‘Manufacturer’)cpu_model = req.POST.get(‘Model_Name’)cpu_num = req.POST.get(‘Cpu_Cores’)cpu_vendor = req.POST.get(‘Vendor_Id’)memory_part_number = req.POST.get(‘Part_Number’)memory_manufacturer = req.POST.get(‘Manufacturer’)memory_size = req.POST.get(‘Size’)device_model = req.POST.get(‘Device_Model’)device_version = req.POST.get(‘Firmware_Version’)device_sn = req.POST.get(‘Serial_Number’)device_size = req.POST.get(‘User_Capacity’)osver = req.POST.get(‘os_version’)hostname = req.POST.get(‘os_name’)os_release = req.POST.get(‘os_release’)ipaddrs = req.POST.get(‘Ipaddr’)mac = req.POST.get(‘Device’)link = req.POST.get(‘Link’)mask = req.POST.get(‘Mask’)device = req.POST.get(‘Device’)host = Host()host.hostname = hostnamehost.product = producthost.cpu_num = cpu_numhost.cpu_model = cpu_modelhost.cpu_vendor = cpu_vendorhost.memory_part_number = memory_part_numberhost.memory_manufacturer = memory_manufacturerhost.memory_size = memory_sizehost.device_model = device_modelhost.device_version = device_versionhost.device_sn = device_snhost.device_size = device_sizehost.osver = osverhost.os_release = os_releasehost.vendor = vendorhost.sn = snhost.ipaddr = ipaddrshost.save()#将客户端传过来的数据通过POST接收,存入数据库return HttpResponse(‘OK’) #如果插入成功,返回’ok’else:return HttpResponse(‘no post data’)#提供给NAGIOS 的APIdef gethosts(req):d = []hostgroups = HostGroup.objects.all()for hg in hostgroups:ret_hg = {‘hostgroup’:hg.name,’members’:[]}members = hg.members.all()for h in members:ret_h = {‘hostname’:h.hostname, #API接口返回的数据’ipaddr’:h.ipaddr}ret_hg[‘members’].append(ret_h)d.append(ret_hg)ret = {‘status’:0,’data’:d,’message’:’ok’}return HttpResponse(json.dumps(ret))

4.修改model.py 文件

代码如下:

from django.db import models# Create your models here.#插入数据库的Host表,主要存储客户端主机的信息class Host(models.Model):”””store host information”””vendor = models.CharField(max_length=30,null=True)sn = models.CharField(max_length=30,null=True)product = models.CharField(max_length=30,null=True)cpu_model = models.CharField(max_length=50,null=True)cpu_num = models.CharField(max_length=2,null=True)cpu_vendor = models.CharField(max_length=30,null=True)memory_part_number = models.CharField(max_length=30,null=True)memory_manufacturer = models.CharField(max_length=30,null=True)memory_size = models.CharField(max_length=20,null=True)device_model = models.CharField(max_length=30,null=True)device_version = models.CharField(max_length=30,null=True)device_sn = models.CharField(max_length=30,null=True)device_size = models.CharField(max_length=30,null=True)osver = models.CharField(max_length=30,null=True)hostname = models.CharField(max_length=30,null=True)os_release = models.CharField(max_length=30,null=True)ipaddr = models.IPAddressField(max_length=15)def __unicode__(self):return self.hostname#主机组表,用来对主机进行分组class HostGroup(models.Model):name = models.CharField(max_length=30)members = models.ManyToManyField(Host)

5.修改admin.py文件

#from models import Host, IPaddrfrom models import Host, HostGroupfrom django.contrib import admin#设置在django在admin后天显示的名称class HostAdmin(admin.ModelAdmin):list_display = [‘vendor’,’sn’,’product’,’cpu_model’,’cpu_num’,’cpu_vendor’,’memory_part_number’,’memory_manufacturer’,’memory_size’,’device_model’,’device_version’,’device_sn’,’device_size’,’osver’,’hostname’,’os_release’]#在django后台amdin显示的组名称class HostGroupAdmin(admin.ModelAdmin):list_display = [‘name’,]#将如上两个类的数据展示到django的后台admin.site.register(HostGroup,HostGroupAdmin)admin.site.register(Host, HostAdmin)

6.创建数据库

python manager.py syncdb #创建数据库

7.启动应用

python manager.py runserver 0.0.0.0:8000

8.测试

:8000/admin

通过上图可以看到,网站空间,django已经配置成功。

接下来可以在客户端编写收集主机信息的脚本了,主要抓取cpu、内存、硬盘、服务器型号、服务器sn、ip地址、主机名称、操作系统版本等信息,共7个脚本:

在乎的是沿途的风景以及看风景的心情,让心灵去旅行!

python+Django实现Nagios自动化添加监控项目

相关文章:

你感兴趣的文章:

标签云: