1、Nagios安装

yum install -y nagios.i686

yum install -y nagios-plugins-all.i686

安装完后会在apache的配置文件目录下/etc/httpd/conf.d/产生一个外部的配置文件nagios.conf

service httpd start

service nagios start

default user nagiosadmin password nagiosadmin

2.配置文件生成器

Django前期的收集主机信息代码

优化后:

 #!/usr/bin/env python

 import urllib,urllib2
from subprocess import Popen,PIPE
import pickle
import json def getIfconfig():
p = Popen(['ifconfig'],stdout=PIPE)
data = p.stdout.read()
return data def getDmi():
p = Popen(['dmidecode'],stdout=PIPE,stderr=PIPE)
data_out = p.stdout.read()
data_err = p.stderr.read()
if data_err:
return {'vendor':'container','product':'container','sn':'XXX'}
return data_out def parseData(data):
if isinstance(data,dict):
return data
parsed_data = []
new_line = ''
data = [i for i in data.split('\n') if i]
for line in data:
if line[0].strip():
parsed_data.append(new_line)
new_line = line +'\n'
else:
new_line += line+'\n'
parsed_data.append(new_line)
return [i for i in parsed_data if i] def parseIfconfig(parsed_data):
parsed_data = [i for i in parsed_data if not i.startswith('lo')]
for lines in parsed_data:
line_list = lines.split('\n')
devname = line_list[0].split()[0]
macaddr = line_list[0].split()[-1]
ipaddr = line_list[1].split()[1].split(':')[1]
break
dic['ip'] =ipaddr
return dic def parseDmi(parsed_data):
if isinstance(parsed_data,dict):
return parsed_data
dic = {}
parsed_data = [i for i in parsed_data if i.startswith('System Information')]
parsed_data = [i for i in parsed_data[0].split('\n')[1:] if i]
dmi_dic = dict([i.strip().split(':') for i in parsed_data])
dic['vendor'] = dmi_dic['Manufacturer'].strip()
dic['product'] = dmi_dic['Product Name'].strip()
dic['sn'] = dmi_dic['Serial Number'].strip()[:15]
return dic def getHostname(f):
with open(f) as fd:
for line in fd:
if line.startswith('HOSTNAME'):
hostname = line.split('=')[1].strip()
break
return {'hostname':hostname} def getOsver(f):
with open(f) as fd:
for line in fd:
osver = line.strip()
break
return {'osver':osver} def getCpu(f):
num = 0
with open(f) as fd:
for line in fd:
if line.startswith('processor'):
num +=1
if line.startswith('model name'):
cpu_model = line.split(':')[1].split()
cpu_model = cpu_model[0]+' '+cpu_model[-1]
return {'cpu_num':num,'cpu_model':cpu_model} def getMemory(f):
with open(f) as fd:
for line in fd:
if line.startswith('MemTotal'):
mem = int(line.split()[1].strip())
break
mem = "%d" % int(mem/1024.0)+'M'
return {'memory':mem} if __name__ == '__main__':
dic = {}
data_ip = getIfconfig()
parsed_data_ip = parseData(data_ip)
ip = parseIfconfig(parsed_data_ip)
data_dmi = getDmi()
parsed_data_dmi = parseData(data_dmi)
dmi = parseDmi(parsed_data_dmi)
hostname = getHostname('/etc/sysconfig/network')
osver = getOsver('/etc/issue')
cpu = getCpu('/proc/cpuinfo')
mem = getMemory('/proc/meminfo')
dic.update(ip)
dic.update(dmi)
dic.update(hostname)
dic.update(osver)
dic.update(cpu)
dic.update(mem)
#data = urllib.urlencode(dic)
#data = pickle.dumps(dic)
data = json.dumps(dic)
req = urllib2.urlopen('http://192.168.1.120:8000/hostinfo/collect/',data)
print req.read()

在nagios上分组

vim gen.py

 #!/usr/bin/env python

 import os
import urllib,urllib2
import json CUR_DIR = os.path.dirname(__file__)
CONF_DIR = os.path.join(os.path.abspath(CUR_DIR),'hosts') HOST_TEMP="""define host{
use linux-server
host_name %(hostname)s
alias %(hostname)s
address %(ip)s
}
"""
HOSTGROUP_TEMP="""define hostgroup{
hostgroup_name %(groupname)s
alias %(groupname)s
members %(members)s
}
"""
def initDir():
if not os.path.exists(CONF_DIR):
os.mkdir(CONF_DIR) def getData():
url = 'http://192.168.1.120:8000/hostinfo/getjson/'
req = urllib2.urlopen(url)
data = json.loads(req.read())
return data def writeConf(f,data):
with open(f,'w') as fd:
fd.write(data) def parseData(data):
host_conf = ''
hostgroup_conf = ''
for hg in data:
groupname = hg['groupname']
members = []
for h in hg['members']:
hostname = h['hostname']
members.append(hostname)
host_conf += HOST_TEMP % h
hostgroup_conf += HOSTGROUP_TEMP % {'groupname':groupname, 'members':','.join(members)}
fp_hostconf = os.path.join(CONF_DIR,'hosts.cfg')
fp_hostgroupconf = os.path.join(CONF_DIR,'hostgroup.cfg')
writeConf(fp_hostconf,host_conf)
writeConf(fp_hostgroupconf,hostgroup_conf) if __name__ == '__main__':
initDir()
data = getData()
parseData(data)

gen.py

同步配置文件sync_gen.sh

 #!/bin/bash

 cur=`dirname $0`
cd $cur
python gen.py
md5=`find hosts/ -type f -exec md5sum {} \;|md5sum`
cd /etc/nagios/conf.d
conf_md5=`find hosts/ -type f -exec md5sum {} \;|md5sum`
if [ "$md5" != "$conf_md5" ];then
cd -
cp -rp hosts/ /etc/nagios/conf.d
/etc/init.d/nagios restart
fi

如果两个分组都有一样的信息,即一样的主机名,则需加判断条件:

 #!/usr/bin/env python

 import os
import urllib,urllib2
import json CUR_DIR = os.path.dirname(__file__)
CONF_DIR = os.path.join(os.path.abspath(CUR_DIR),'hosts') HOST_TEMP="""define host{
use linux-server
host_name %(hostname)s
alias %(hostname)s
address %(ip)s
}
"""
HOSTGROUP_TEMP="""define hostgroup{
hostgroup_name %(groupname)s
alias %(groupname)s
members %(members)s
}
"""
def initDir():
if not os.path.exists(CONF_DIR):
os.mkdir(CONF_DIR) def getData():
url = 'http://192.168.1.120:8000/hostinfo/getjson/'
req = urllib2.urlopen(url)
data = json.loads(req.read())
return data def writeConf(f,data):
with open(f,'w') as fd:
fd.write(data) def countDict(k,d):
if k in d:
d[k] += 1
else:
d[k] = 1 def parseData(data):
dic = {}
host_conf = ''
hostgroup_conf = ''
for hg in data:
groupname = hg['groupname']
members = []
for h in hg['members']:
hostname = h['hostname']
members.append(hostname)
countDict(hostname,dic)
if dic(hostname) < 2:
host_conf += HOST_TEMP % h
hostgroup_conf += HOSTGROUP_TEMP % {'groupname':groupname, 'members':','.join(members)}
fp_hostconf = os.path.join(CONF_DIR,'hosts.cfg')
fp_hostgroupconf = os.path.join(CONF_DIR,'hostgroup.cfg')
writeConf(fp_hostconf,host_conf)
writeConf(fp_hostgroupconf,hostgroup_conf) if __name__ == '__main__':
initDir()
data = getData()
parseData(data)

python-Django监控系统二次开发Nagios的更多相关文章

  1. Epicor系统二次开发

    Epicor系统二次开发 一.获取或修改界面EpiDataView的字段数据(Get EpiDataView data) C# EpiDataView edv = (EpiDataView)oTran ...

  2. (dede)织梦系统二次开发笔记

    (dede)织梦系统二次开发记录 --soulsjie 一.模板常用文件说明 模板文件都在文件夹templets下,我们以默认模板(default)为例,对模板文件结构进行分析: 首页模板文件目录 \ ...

  3. 开源监控系统中 Zabbix 和 Nagios 哪个更好?

    监控平台的话,各有优劣,但基本都可以满足需求.等达到一定监控指标后,发现,最困难的是监控项目的管理. CMDB中小规模(服务器<=1k):Zabbix大规模(1k>=服务器<=10k ...

  4. IBOS云办公系统二次开发之功能介绍(PHP技术)

    IBOS自动化办公系统是我见到的功能.架构最好的开源自动化办公系统,功能与企业需求吻合度之高.架构之灵活,让我不得不将之介绍给大家,让跟多需要学习PHP开发的朋友来了解她,拥抱她! 如果您还没有很好的 ...

  5. Python Django 学习 (二) 【Django 模型】

    注: 由于自己排版确实很难看,本文开始使用markdown编辑,希望有所改善 官方定义 A model is the single, definitive source of information ...

  6. Ecshop系统二次开发教程及流程演示

      来源:互联网 作者:佚名 时间:03-01 16:05:31 [大 中 小] Ecshop想必大家不会觉得陌生吧,大部分的B2C独立网店系统都用的是Ecshop系统,很受用户的喜爱,但是由于Ecs ...

  7. python的Web框架,Django模型系统二,模型属性,及数据库进阶查询

    原始数据接上篇文章来操作.可能需要查看后才能懂.点击这里查看 1.常用的模型字段类型 官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fie ...

  8. 用Python+Django在Eclipse环境下开发web网站【转】

    一.创建一个项目如果这是你第一次使用Django,那么你必须进行一些初始设置.也就是通过自动生成代码来建立一个Django项目--一个Django项目的设置集,包含了数据库配置.Django详细选项设 ...

  9. 用Python+Django在Eclipse环境下开发web网站

    一.创建一个项目如果这是你第一次使用Django,那么你必须进行一些初始设置.也就是通过自动生成代码来建立一个Django项目--一个Django项目的设置集,包含了数据库配置.Django详细选项设 ...

随机推荐

  1. RabbitMQ集群安装配置+HAproxy+Keepalived高可用

    RabbitMQ集群安装配置+HAproxy+Keepalived高可用 转自:https://www.linuxidc.com/Linux/2016-10/136492.htm rabbitmq 集 ...

  2. js校验密码强度

    网上转载的一段代码,留着以后用, js文件: //判断输入密码的类型 function CharMode(iN){ if (iN>=48 && iN <=57) //数字 ...

  3. jquery获取页面iframe内容

    //取得整个HTML格式 var f = $(window.frames["ReportIFrame"].document).contents().html(); 或者 $(&qu ...

  4. 【HTML5开发系列】DOM及其相关

    对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.DOM把Javascript和HTML文档的结构和内容连接起来,通过DOM可以控 ...

  5. 九度OJ 1350:二叉树的深度 (二叉树)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1044 解决:614 题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长 ...

  6. 智能家居DIY-空气质量检测篇-获取空气污染指数

    前言 话说楼主终于升级当爸了,宝宝现在5个月了,宝宝出生的时候是冬天,正是魔都空气污染严重的时候,当时就想搞个自动开启空气净化器,由于种种原因一直没有时间搞,最近终于闲下来了这个事情终于提上议程了,现 ...

  7. apache虚拟主机配置: 设置二级目录访问跳转

    <VirtualHost *:> DocumentRoot "d:/www/abc" ServerName www.abc.com Alias /course &quo ...

  8. 【python】-- Redis简介、命令、示例

    Redis简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化 ...

  9. MySQL5.7.26 忘记Root密码小计

    以前直接修改mysql.user就ok了,现在不行了,正好虚拟机MySQL的root密码忘记了,就简单记录下:(本方法不适合互联网线上项目,除非你不在意这段时间的损失) PS:以UbuntuServe ...

  10. SAP文件夹的判断与创建

    [转自 http://blog.csdn.net/saphome/article/details/6956918] SAP文件夹存在的判断与创建 2010-08-29 20:15 相关函数:WS_QU ...