#-*- coding:utf-8 -*-
import netsnmp
class SnmpClass(object):
"""
SNMP
"""
def __init__(self, oid="sysDescr", version=2, destHost="localhost", community="aaa"):
self.oid = oid
self.version = version
self.destHost = destHost
self.community = community @property
def query(self):
"""
snmpwalk
"""
try: result = netsnmp.snmpwalk(self.oid,
Version=self.version,
DestHost=self.destHost,
Community=self.community)
except Exception, err:
print err
result = None
return result def getflow():
x = SnmpClass(oid="ifInOctets", destHost="218.205.104.1")
y = SnmpClass(oid="ifDescr", destHost="218.205.104.1")
datakey = y.query
datavaule = x.query
data = {}
for z in range(len(datakey)):
data[datakey[z]] = datavaule[z]
print data getflow()

community:为团体字

运用多线程获取多台主机网卡信息,写入数据库。

多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理(Multithreading)”。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程(台湾译作“执行绪”),进而提升整体处理性能。

#coding:utf-8
import threading
import time
import netsnmp
import Queue
import logging
import logging.config
import MySQLdb
import datetime
from flask_sqlalchemy import SQLAlchemy start_time = time.time()
#tm = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
#start_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
#start_time = datetime.datetime.now()
hosts = ["218.205.104.3", "218.205.104.8"]
myq = Queue.Queue()
rq = Queue.Queue()
conn = MySQLdb.connect(host='218.205.104.27', user='admin',passwd='7758258', port=12306, db='yxjs')
cursor = conn.cursor()
logging.config.fileConfig("/root/tmp/logger.ini")
logger = logging.getLogger("status_domain")
#
#把host和oid组成任务 def list_sum(x):
for i in range(len(x)):
try:x[i] = int(x[i])
except:x[i] = 0
return sum(x) def insert_DB_flow_mul( dt,**other):
while True:
try:
MysqlDB = MysqldbClass("localhost", "admin", "7758258", "WCMSS", "utf8" )
MysqlDB.getCurs()
MysqlDB.insert(insert_sql_cache_domain, [(dt, domain, sum, hit, miss, size,resptime, s_code_000, s_code_20x, s_code_30x, s_code_40x, s_code_50x, othercode, svrname)])
print 'insert success'
logger.debug(((dt, domain, sum, hit, miss, size,resptime, s_code_000, s_code_20x, s_code_30x, s_code_40x, s_code_50x, othercode, svrname), "insert_sql OK."))
MysqlDB.freeCurs()
MysqlDB.commit()
MysqlDB.close()
break
except:
time.sleep(10)
logger.debug(('retry: ', (datetime, svrname), sys.exc_info())) for host in hosts:
myq.put(host) def poll_one_host():
while True:
try:
#死循环从队列中获取任务,直到队列任务为空
host = myq.get(block=False)
session = netsnmp.Session(Version=2, DestHost=host, Community="dnion",Timeout=3000000,Retries=0)
oid0 = netsnmp.Varbind('.1.3.6.1.2.1.1.5.0') #0 get 主机名
oid1 = netsnmp.Varbind('.1.3.6.1.2.1.2.2.1.2') #1 walk 网卡信息
oid2 = netsnmp.Varbind('.1.3.6.1.2.1.2.2.1.10') #2 walk 网卡接收的字节数
oid3 = netsnmp.Varbind('.1.3.6.1.2.1.2.2.1.16') #3 walk 网卡流出字节数
oid4 = netsnmp.Varbind('.1.3.6.1.4.1.2021.11.11.0') #4 空闲cpu百分比
oid5 = netsnmp.Varbind('.1.3.6.1.4.1.2021.10.1.3.1') #5 5分钟系统负载
oid6 = netsnmp.Varbind('.1.3.6.1.4.1.2021.10.1.3.2') #6 10分钟系统负载
oid7 = netsnmp.Varbind('.1.3.6.1.4.1.2021.10.1.3.3') #7 15分钟系统负载
oid8 = netsnmp.Varbind('.1.3.6.1.4.1.2021.4.5.0') #8 机器内存总数
oid9 = netsnmp.Varbind('.1.3.6.1.4.1.2021.4.6.0') #9 机器已用内存
oid10 = netsnmp.Varbind('.1.3.6.1.4.1.2021.9.1.6') #10 walk 系统盘总容量
oid11 = netsnmp.Varbind('.1.3.6.1.4.1.2021.9.1.8') #11 walk 系统盘已用容量
var_list = netsnmp.VarList(oid0,oid4,oid5,oid6,oid7,oid8,oid9)
var_list1 = netsnmp.VarList()
var_list1.append(oid1)
var_list2 = netsnmp.VarList()
var_list2.append(oid2)
var_list3 = netsnmp.VarList()
var_list3.append(oid3)
var_list10 = netsnmp.VarList()
var_list10.append(oid10)
var_list11 = netsnmp.VarList()
var_list11.append(oid11)
ret = session.get(var_list)
ret1 = session.walk(var_list1) # 网卡信息
ret2 = list(session.walk(var_list2)) # 网卡流入流量
ret3 = list(session.walk(var_list3)) # 网卡流出流量
ret10 = list(session.walk(var_list10))# 系统盘总容量
ret11 = list(session.walk(var_list11))# 系统盘已用容量
print ret1
print ret2 tm = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
hostname = str(ret[0])
cpu_ret = str(float(ret[1])/100)+'%' #CPU使用率
ll_1 = float(ret[2])
ll_5 = float(ret[3])
ll_15 = float(ret[4])
ipaddr = str(host)
ram_ret = str(round((float(ret[6])/float(ret[5]))*100,2))+'%' #内存使用率
disk_ret = str(round(float(list_sum(ret11))/float(list_sum(ret10))*100,2))+'%' #磁盘使用率 value = (ll_1, ll_5, ll_15, ipaddr, tm)
#print value
me = Mondata(ll_1, ll_5, ll_15, ipaddr, tm)
# db.session.add(me)
# db.session.commit()
#cursor.execute("insert into mondata (ll_1, ll_5, ll_15, ipaddr, datetime)values (%s, %s, %s, %s, %s)", (ll_1, ll_5, ll_15, ipaddr, tm))
#cursor.close()
#conn.commit()
#conn.close() rq.put((host, ret, start_time)) except Queue.Empty: break thread_arr = []
#开启多线程
num_thread = 200
for i in range(num_thread):
t = threading.Thread(target=poll_one_host, kwargs={})
t.setDaemon(True)
t.start()
thread_arr.append(t)
#等待任务执行完毕
for i in range(num_thread):
thread_arr[i].join() while True:
try:
info = rq.get(block=False)
#print info
except Queue.Empty:
#print time.time() - start_time break

python通过snmp协议运用多线程获取多台主机网卡信息,写入数据库的更多相关文章

  1. 关于zabbix利用snmp协议从交换机获取的端口带宽数据的概念问题

    关于zabbix利用snmp协议从交换机获取的端口带宽数据的概念问题:使用端口OID号获得的数据实际是即时的端口总数据量,而在计算带宽时,需要选择一个时间段,在时间段的结束点获得的总数据量减去在时间段 ...

  2. linux c做服务端使用多线程接收图片并且将图片写入数据库

    #include<sys/socket.h> #include<sys/types.h> #include<sys/stat.h>//包含文件的全部结构,属性 #i ...

  3. SNMP协议交互学习-获取udp的udpindatagrams

    MIB的组织结构,如下左图,对于udp来说1.3.6.1.2.1.7,组织如下右图,包括4个标量和1个表格 udp节点在LwIP中的定义如下: ] = { , , , , }; ] = { (stru ...

  4. 通过python基于netconf协议获取网络中网元的配置数据,助力企业网络控制自动化轻松实现!

    摘要:在当今信息化时代,大多数企业都需要网络支撑企业的ICT运行,提升企业运行效率,针对企业网络中的网元设备(包括交换机,路由器,防火墙等),很多企业希望根据自身的业务特点定制网络管理,比如可以实现网 ...

  5. python第九周:paramiko多线程、队列

    1.paramiko模块 用处:连接远程服务器并执行相关操作 使用方法: SSHClient:连接远程服务器并执行基本命令 import paramiko #创建SSH对象 ssh = paramik ...

  6. 深入浅析python中的多进程、多线程、协程

    深入浅析python中的多进程.多线程.协程 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源 ...

  7. Python 封装SNMP调用接口

    PySNMP 是一个纯粹用Python实现的SNMP,用PySNMP的最抽象的API为One-line Applications,其中有两类API:同步的和非同步的,都在模块pysnmp.entity ...

  8. 浅议SNMP安全、SNMP协议、网络管理学习

    相关学习资料 tcp-ip详解卷1:协议.pdf(重点看25章SNMP部分) http://www.rfc-editor.org/rfc/rfc1213.txt http://www.rfc-edit ...

  9. [置顶] SNMP协议详解<二>

    上一篇文章讲解了SNMP的基本架构,本篇文章将重点分析SNMP报文,并对不同版本(SNMPv1.v2c.v3)进行区别! 四.SNMP协议数据单元 在SNMP管理中,管理站(NMS)和代理(Agent ...

随机推荐

  1. 使用PYTHON完成排序(堆排序)

    class HeapStructure: def __init__(self, ls): self.ls = ls def shift_up(self, index): # 上移使符合堆要求 if i ...

  2. appium java 滑动(js滑动和swipe滑动)

    最近有一个页面的内容很多,有的元素需要滑动到底部才能看到,所以就研究一下滑动,下面是我学习到的两种滑动方式 一:用js滑动 用js滑动的思路是很简单,首先是先定位到这个元素,定位到之后不做任何操作,然 ...

  3. Python Day 6

    阅读目录:   内容回顾:   深浅拷贝:   元组:   字典   集合 ##内容回顾 #1.数字类型 int | float | bool | complex #2.字符串 #常规操作: -- 索 ...

  4. 运用PIL库 用来美白,磨皮,瘦脸等操作!

    1.安装pillow库: 在cmd下,输入简单的命令: pip install pillow  即可安装pillow库. 2.PIL库的简介: 1. PIL库主要有2个方面的功能: (1) 图像归档: ...

  5. excel支持正则表达式提取字符函数(支持RegExp捕获分组)

    一.要让excel脚本支持Microsoft VBScript Regular Expressions 5.5 ,按快捷键alt+F11,出现下图界面,操作如图示: 二.添加VBA代码: 代码添加完毕 ...

  6. Win7 VS2017 Boost Python入门

    闲来无事想练习下用Python作为游戏脚本绑定到C++,网上搜了下,Python文档有些例子,但是太过复杂,gayhub无意中看到有人用Boost Python绑定,简单粗暴,省时省力,记录备忘. 写 ...

  7. ffmpeg源码编译安装(Compile ffmpeg with source) Part 2 : 扩展安装

    在Ubuntu,Debian,Mint上编译ffmpeg 本文主要为在Ubuntu,Debian和Mint上编译安装ffmpeg和库文件以及一些扩展的编解码器.当然这与从源中安装无关. 请首先看一下通 ...

  8. python装饰器同时支持有参数和无参数的练习题

    ''' 预备知识: …… @decorator def f(*args,**kwargs): pass # 此处@decorator  等价于 f = decorator(f) @decorator2 ...

  9. 1.Float精度在JS的解决方法

    最近做了一个有关折扣价的计算的功能,所有的运算都是在前台通过js来做,做完之后经过手工核算发现了一个问题,当时做的一个例子是10*0.94,按照我们正常的思维,这个结果应该是9.4,但是在js中的计算 ...

  10. RPC知识

    说明:RPC框架的目标就是让远程服务调用更加简单.透明,RPC框架负责屏蔽底层的传输方式(TCP或UDP).序列化(XML/json/二进制)和通信细节.服务调用者可以像调用本地接口一样调用远程的服务 ...