netsnmp centos(centos现在哪个版本最流行)
大家好,今天来为大家解答netsnmp centos这个问题的一些问题点,包括centos现在哪个版本最流行也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
如何在CentOS系统中安装配置SNMP服务
1、使用SNMP服务前需要在服务器上安装SNMP:使用ROOT用户登陆在服务器,输入:yuminstall net-snmp net-snmp-devel net-snmp-libs net-snmp-utils php-snmp进行下载。
2、上面的程序首先会校验需要升级的文件和需要下载安装的文件,然后列来,告诉你有多大,会提示您是不是这些,需要继续不,输入Y,就开始下载了。
3、下载完成后,会自动解包安装,整个过程是自动的,无需要人工操作。安装完成没有错误会提示:Complete!
4、安装完SNMP服务后,就需要进行相关配置了,SNMP的配置文件在:yum安装snmpd的配置文件为/etc/snmp/snmpd.conf
5、如果不会在命令模式下使用vi编辑器的话,建议把snmpd.conf配置文件下载到本地,然后用UE等文本编辑软件打开编辑更改。
如何在CentOS系统中安装配置SNMP服务
配置snmpd.conf文件需要更改五个地方(默认配置基础上):
1、配置snmp团体名(默认是public): com2secnotConfigUser default public建议更改public为您使用的团体名称
2、将accessnotConfigGroup"" any noauth exact systemview none none更改为accessnotConfigGroup"" any noauth exact all none none
3、将如下两行前面的注释去掉
## incl/excl subtree maskview all included.1 80##-or just the mib2 tree-view mib2 included.iso.org.dod.internet.mgmt.mib-2fc
4、将下面一行前面的注释去掉
#access notConfigGroup"" anynoauth exact roview rwview noneaccess notConfigGroup"" any noauthexact mib2 none none
注意以前您在复制搜索时请使用中间的关键搜索,因为配置文件中字符间隔长,
6、配置文件修改完后,保存,上传到服务器中。
然后输入:service snmpd restart重新启动snmp服务
最后还需要执行如下命令:chkconfig snmpd on意思是把服务加到开机启动中,开机自动运行。
可以使用一个简单命令判断snmp服务是否已经成功启动:
netstat-ln| grep 161
CentOS中net-snmpd的安装和基本配置教程
安装
复制代码
代码如下:
yum install net-snmp net-snmp-devel
net-snmp-config--create-snmpv3-user-a密码用户名
chkconfig snmpd on
service snmpd start
完工!
创建一个用户
复制代码
代码如下:
/usr/local/snmp/bin/net-snmp-create-v3-user
按提示输入用户名和密码,会自动在配置文件中添加用户
然后设置开机启动snmp
复制代码
代码如下:
vi/etc/rc.local
添加
复制代码
代码如下:
/usr/local/snmp/sbin/snmpd
即可可以在监控宝中添加
net-snmp的配置文件snmpd.conf配置说明
SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进行管理。snmpd.conf的配置项很多,但是真正常用的就那么几个,下面来逐个介绍。
com2sec命令,它的基本语法是com2sec NAME SOURCE COMMUNITY。这里要提一下SNMP的安全策略,其实SNMP的安全性并不好,在这个协议中使用COMMUNITY这个东西来做访问控制的。简单来理解就是现在有一个帮会的一个人找去了总舵,那么这个人怎么跟总舵相认呢?他们直接约定一个暗号,例如见面就说床前明月光,那么总舵的前台就会带你去床前明月光想对应的地方。现在回过头来看这行配置,假如有以下一句话
复制代码
代码如下:
com2sec magusu default magus
意思就是做一个映射,把magus这个COMMUNITY串和magusu这个名字做好一对映射,那么以后在调用SNMP的时候,只要你声明你就是magus,那么就可以获得相应的权限了。有了映射以后下面需要做的是建立一个从magusu到组的一个映射,用到的命令是group,它的基本语法是group NAME MODEL SECURITY
复制代码
代码如下:
group magusg v2c magusu
上面这句话的意思就是把magusu放到组magusg里面,用的协议是v2c,插一句,SNMP现在通常用的有3个版本。那好了,组建好了下来要做什么呢?就是要建立一个VIEW,VIEW的基本语法是view NAME TYPE SUBTREE [MASK]
复制代码
代码如下:
view magusv included.1.3.6.1.4.1.9129
像上面这句话的意思就是赋予magusv这个view能够查看1.3.6.1.4.1.9129下面所有节点的权限。最后要做的是设定哪些组的人,哪些view的用户可以做什么具体的事情,用access来设置,基本语法是access NAME CONTEXT MODEL LEVEL PREFX READ WRITE NOTIFY。
复制代码
代码如下:
access magusg any noauth exact magusv magusv none
由于例子中用的是v2c版本的协议,所以CONTEXT必须为空,MODEL也就是协议的版本号,在这里例子里面可以是any也可以是v2c,还是由于v2c的缘故,所以LEVEL是noauth;READ、WRITE和NOTIFY分别需要指定一个view或者什么都不指定;在这里的设置就是magusv这个view可以对前面设置好的节点进行读和写操作。
到此,服务端的配置已经完成,重启一下snmpd就可以了,下面看看如何通过SNMP得到我们想要的数据
复制代码
代码如下:
snmpwalk-v 2c-c magus localhost 1.3.6.1.4.1.9129.1.2.2
snmpwalk可以便利指定节点下的所有子节点,-v参数指定SNMP的协议版本,这个跟我们之前配置服务器的版本是要一致的,也就是2c,然后-c参数就指定了community的字符串,也就是刚才定义的magus,然后就是主机地址,由于我在本机测试,所以用的localhost,实际中可以填上IP,最后就是OID的值。搞定!
对于刚刚接触SNMP的朋友来说,理解community的作用是关键,其实说的通俗点就是接头暗号,而且还是个明文的暗号。
在新版本中,其配置文件增加了新的更加简便的配置方法,但是依然兼容以上的配置方法。
详解python并发获取snmp信息及性能测试方法
本篇文章主要介绍了详解python并发获取snmp信息及性能测试,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
python& snmp
用python获取snmp信息有多个现成的库可以使用,其中比较常用的是netsnmp和pysnmp两个库。网上有较多的关于两个库的例子。
本文重点在于如何并发的获取snmp的数据,即同时获取多台机器的snmp信息。
netsnmp
先说netsnmp。python的netsnmp,其实是来自于net-snmp包。
python通过一个c文件调用net-snmp的接口获取数据。
因此,在并发获取多台机器的时候,不能够使用协程获取。因为使用协程,在get数据的时候,协程会一直等待net-snmp接口返回数据,而不会像socket使用时那样在等待数据时把CPU切换给其他协程使用。从这点上来说,使用协程和串行获取没有区别。
那么如何解决并发获取的问题呢?可以使用线程,多线程获取(当然也可以使用多进程)。多个线程同时调用net-snmp的接口获取数据,然后cpu在多个线程之间不停切换。当一个线程获取一个结果后,可以继续调用接口获取下一个snmp数据。
这里我写了一个样例程序。首先把所有的host和oid做成任务放到队列里,然后启动多个线程,去执行获取任务。程序样例如下:
import threadingimport timeimport netsnmpimport Queuestart_time= time.time()hosts= ["192.20.150.109""192.20.150.110""192.20.150.111""192.20.150.112""192.20.150.113""192.20.150.114""192.20.150.115""192.20.150.116""192.20.150.117""192.20.150.118""192.20.150.119""192.20.150.120""192.20.150.121""192.20.80.148""192.20.80.149""192.20.96.59""192.20.82.14""192.20.82.15""192.20.82.17""192.20.82.19""192.20.82.12""192.20.80.139""192.20.80.137""192.20.80.136""192.20.80.134""192.20.80.133""192.20.80.131""192.20.80.130""192.20.81.141""192.20.81.140""192.20.82.26""192.20.82.28""192.20.82.23""192.20.82.21""192.20.80.128""192.20.80.127""192.20.80.122""192.20.81.159""192.20.80.121""192.20.80.124""192.20.81.151""192.20.80.118""192.20.80.119""192.20.80.113""192.20.80.112""192.20.80.116""192.20.80.115""192.20.78.62""192.20.81.124""192.20.81.125""192.20.81.122""192.20.81.121""192.20.82.33""192.20.82.31""192.20.82.32""192.20.82.30""192.20.81.128""192.20.82.39""192.20.82.37""192.20.82.35""192.20.81.130""192.20.80.200""192.20.81.136""192.20.81.137""192.20.81.131""192.20.81.133""192.20.81.134""192.20.82.43""192.20.82.45""192.20.82.41""192.20.79.152""192.20.79.155""192.20.79.154""192.25.76.235""192.25.76.234""192.25.76.233""192.25.76.232""192.25.76.231""192.25.76.228""192.25.20.96""192.25.20.95""192.25.20.94""192.25.20.93""192.24.163.14""192.24.163.21""192.24.163.29""192.24.163.6""192.18.136.22""192.18.136.23""192.24.193.2""192.24.193.19""192.24.193.18""192.24.193.11""192.20.157.132""192.20.157.133""192.24.212.232""192.24.212.231""192.24.212.230"]oids= ["1.3.6.1.4.1.2021.11.9.0""1.3.6.1.4.1.2021.11.10.0""1.3.6.1.4.1.2021.11.11.0""1.3.6.1.4.1.2021.10.1.3.1""1.3.6.1.4.1.2021.10.1.3.2""1.3.6.1.4.1.2021.10.1.3.3""1.3.6.1.4.1.2021.4.6.0""1.3.6.1.4.1.2021.4.14.0""1.3.6.1.4.1.2021.4.15.0"]myq= Queue.Queue()rq= Queue.Queue()#把host和oid组成任务for host in hosts: for oid in oids: myq.put((host,oid))def poll_one_host(): while True: try:#死循环从队列中获取任务,直到队列任务为空 host, oid= myq.get(block=False) session= netsnmp.Session(Version=2, DestHost=host, Community="cluster"Timeout=3000000,Retries=0) var_list= netsnmp.VarList() var_list.append(netsnmp.Varbind(oid)) ret= session.get(var_list) rq.put((host, oid, ret,(time.time()- start_time))) except Queue.Empty: breakthread_arr= []#开启多线程num_thread= 50for 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
netsnmp除了支持get操作之外,还支持walk操作,即遍历某个oid。
但是walk使用的时候需要谨慎,以免导致高延时等问题,具体可以参见之前的一篇snmpwalk高延时问题分析的博客。
pysnmp
pysnmp是用python实现的一套snmp协议的库。其自身提供了对于异步的支持。
import timeimport Queuefrom pysnmp.hlapi.asyncore import*t= time.time()myq= Queue.Queue()#回调函数。在有数据返回时触发def cbFun(snmpEngine, sendRequestHandle, errorIndication, errorStatus, errorIndex, varBinds, cbCtx): myq.put((time.time()-t, varBinds))hosts= ["192.20.150.109""192.20.150.110""192.20.150.111""192.20.150.112""192.20.150.113""192.20.150.114""192.20.150.115""192.20.150.116""192.20.150.117""192.20.150.118""192.20.150.119""192.20.150.120""192.20.150.121""192.20.80.148""192.20.80.149""192.20.96.59""192.20.82.14""192.20.82.15""192.20.82.17""192.20.82.19""192.20.82.12""192.20.80.139""192.20.80.137""192.20.80.136""192.20.80.134""192.20.80.133""192.20.80.131""192.20.80.130""192.20.81.141""192.20.81.140""192.20.82.26""192.20.82.28""192.20.82.23""192.20.82.21""192.20.80.128""192.20.80.127""192.20.80.122""192.20.81.159""192.20.80.121""192.20.80.124""192.20.81.151""192.20.80.118""192.20.80.119""192.20.80.113""192.20.80.112""192.20.80.116""192.20.80.115""192.20.78.62""192.20.81.124""192.20.81.125""192.20.81.122""192.20.81.121""192.20.82.33""192.20.82.31""192.20.82.32""192.20.82.30""192.20.81.128""192.20.82.39""192.20.82.37""192.20.82.35""192.20.81.130""192.20.80.200""192.20.81.136""192.20.81.137""192.20.81.131""192.20.81.133""192.20.81.134""192.20.82.43""192.20.82.45""192.20.82.41""192.20.79.152""192.20.79.155""192.20.79.154""192.25.76.235""192.25.76.234""192.25.76.233""192.25.76.232""192.25.76.231""192.25.76.228""192.25.20.96""192.25.20.95""192.25.20.94""192.25.20.93""192.24.163.14""192.24.163.21""192.24.163.29""192.24.163.6""192.18.136.22""192.18.136.23""192.24.193.2""192.24.193.19""192.24.193.18""192.24.193.11""192.20.157.132""192.20.157.133""192.24.212.232""192.24.212.231""192.24.212.230"]oids= ["1.3.6.1.4.1.2021.11.9.0""1.3.6.1.4.1.2021.11.10.0""1.3.6.1.4.1.2021.11.11.0""1.3.6.1.4.1.2021.10.1.3.1""1.3.6.1.4.1.2021.10.1.3.2""1.3.6.1.4.1.2021.10.1.3.3""1.3.6.1.4.1.2021.4.6.0""1.3.6.1.4.1.2021.4.14.0""1.3.6.1.4.1.2021.4.15.0"] snmpEngine= SnmpEngine()#添加任务for oid in oids: for h in hosts: getCmd(snmpEngine, CommunityData('cluster'), UdpTransportTarget((h, 161), timeout=3, retries=0,), ContextData(), ObjectType(ObjectIdentity(oid)), cbFun=cbFun)time1= time.time()- t#执行异步获取snmpsnmpEngine.transportDispatcher.runDispatcher()#打印结果while True: try: info= myq.get(block=False) print info except Queue.Empty: print time1 print time.time()- t break
pysnmp本身只支持最基础的get和getnext命令,因此如果想使用walk,需要自己进行实现。
性能测试
在同一个环境下,对两者进行了性能测试。两者对198个host,10个oid进行采集。
测试组耗时(sec)netsnmp(20线程)6.252netsnmp(50线程)3.269netsnmp(200线程)3.265pysnmp4.812
可以看到netsnmp的采集速度跟线程数有关。当线程数增大到一定程度,采集时间不再缩短。因为开辟线程同样会消耗时间。而已有的线程已经足够处理。
pysnmp性能较之略差一下。详细分析pysnmp在添加任务(执行getCmd时)消耗了约1.2s,之后的采集约消耗3.3秒。
在增加了oid数,在进行实验。host仍然是198个,oid是42个。
测试组耗时(sec)netsnmp(20线程)30.935netsnmp(50线程)12.914netsnmp(200线程)4.044pysnmp11.043
可以看到差距被进一步拉大。在线程足够多的情况下,netsnmp的效率要明显强于pysnmp。
因为二者都支持可以并行采集多个host,从易用性来说,netsnmp更为简单一些,且netsnmp支持walk功能。本文更加推荐netsnmp。
安装netsnmp需要安装net-snmp。如果centos,则使用yum会较为方便。