ubuntu net-snmp,ubuntu netplan

很多朋友对于ubuntu net-snmp和ubuntu netplan不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

SNMP Exporter详细解析(1)

SNMP协议

SNMP协议,在此不做过多介绍,详情可参阅华为对SNMP协议的介绍。

support.huawei.com/ente...

具体RFC文档如下:SNMP相关的RFC很多,可根据实际需求查看,但在本文中不需要深入探讨。

rfc2cn.com/rfc3416.html

SNMP的组织结构

SNMP由三部分组成:SNMP内核、管理信息结构SMI和管理信息库MIB。

SNMP内核负责协议结构分析,根据分析结果执行网管动作;SMI是一种通用规则,用于命名对象、定义对象类型,以及编码对象和对象值;MIB在被管理实体中创建命名对象,即一个实例。SMI规定游戏规则,在规则基础上由MIB实现实例化,而SNMP则是实例化的终极执行BOSS。

常见术语:

企业码:组成OID对象的厂商遵守的标识

iana.org/assignments/en...

比如华为的企业码:2011

SMI编号结构

iana.org/assignments/sm...

如果需要深入研究SNMP协议,建议阅读TCP/IP详解卷1:协议

MIB介绍

MIB全称Management Information Base,其主要负责为所有的被管理网络节点建立一个接口,本质上类似于IP地址的一串数字。例如,在使用SNMP时,我们经常看到这样一组数字串:

在这串数字中,每个数字都代表一个节点,其含义可参考下表:

显然,这个数字串可以直接理解为系统的名字。在实际使用中,我们将其作为参数读取该节点的值,如果有写权限的话还可以更改该节点的值,因此,SNMP为系统管理员提供了一套极为便利的工具。但在一般使用中,我们一般不使用这种节点的表达方式,而是使用更为容易理解的方式,对于上面的例子,其往往可以使用SNMPv2-MIB::sysName.0所替代。你可能会想,系统能理解它的含义吗?那你就多虑了,一般在下载SNMP工具包的时候还会下载一个MIB文件包,其提供了所有节点的树形结构。在该结构中可以方便地查找对应的替换表达。

NetSNMP介绍

NetSNMP是一个简单的SNMP协议library库,提供支持SNMP的一套应用程序和开发库,包括代理端软件和管理端查询工具。通俗地理解,SNMP可以看作是一个C/S结构。在客户机中,一般会部署一个snmpd的守护进程,而在服务端(管理端)会下载一个SNMP工具包,这个包中包含了许多用于管理客户端网络节点的工具,例如get、set、translate等等。下图可能会帮助你更清晰地理解这个概念:

上图中,161表示的是双方进行通信时所用的默认端口号,被管理端会打开一个守护进程,负责监听161端口发来的请求;管理端会提供一个SNMP工具包,利用工具包中的命令可以向被管理端的161端口发送请求包,以获取响应。除此之外,管理端还会开启一个SNMPTrapd守护进程,用于接受被管理端向自己的162端口发送来的snmptrap请求,这一机制主要用于被管理端的自动报警中,一旦被管理端的某个节点出现故障,系统会自动发送snmptrap包,从而远端的系统管理员可以及时得知问题。

我们在Linux中,针对SNMP协议的操作(解析MIB文件)主要依赖这个NetSNMP库,相当于中间代理人的角色,下面我简单画出关于NetSNMP和SNMP Exporter以及配置生成器之间的关系。Telegraf默认支持NetSNMP和gosmi,默认使用gosmi,而SNMP Exporter默认使用NetSNMP的库,暂不支持gosmi。

SNMP Exporter读取snmp.yml配置文件信息,snmp.yml配置文件中定义了需要采集指标的OID信息和数据类型以及结构,但是有一点需要明确,手写snmp.yml是一个吃力不讨好的事情,对工程师非常不友好,那工具开发者其实也是想到了这一点,故提供了一套SNMP Exporter配置文件生成器工具,可以通过配置文件生成器生成自己需要的自定义的snmp.yml配置文件,通过自己自定义指标可以得到相关指标数据,然后在通过数据做可视化和监控告警。

SNMP Exporter默认使用GET BULK遍历数据,NetSNMP有实现对给定管理树进行遍历的工具,如snmpbulkwalk、snmpbulkget等等。

snmpbulkwalk和snmpwalk的区别:

snmpwalk是一个逐步遍历的工具,它会从指定的根OID(对象标识符)开始,按照字典序逐步获取下一个OID的值,直到遍历完整个MIB树或者达到指定的终止条件。这意味着snmpwalk逐步获取每个OID的值,一个接一个。

snmpbulkwalk是一种更为高效的遍历工具,它使用了SNMP的BulkWalk操作,允许一次性获取多个OID的值,减少了往返的SNMP请求次数。这使得snmpbulkwalk在获取大量数据时更为高效。

SNMP Exporter如果使用SNMP v1版本,默认使用的是snmpwalk,如果使用的是SNMP v2c版本或v3,默认使用snmpbulkwalk。

SNMP Exporter部署

SNMP Exporter采集器目前只支持snmpd 161端口,暂不支持snmptrapd即162端口,端口可自行修改哦,建议使用默认端口。

SNMP Exporter推荐使用源码包编译安装使用,在这里我主要介绍两种部署安装方式,源码编译安装和Docker Compose部署。

Docker Compose部署

新建初始化挂载目录:

创建compose.yml,并启动SNMP Exporter,Docker引擎安装可前往改篇文章查看具体步骤:

启动

源码编译安装

主要介绍CentOS 7.9系统和Ubuntu 22.04.2 LTS中部署SNMP Exporter

到此就完成了SNMP Exporter源码编译安装。

添加systemd服务管理

如果为了安全,需要使用普通用户执行,可以新建普通用户snmp_exporter

SNMP Exporter配置生成器部署

上面已经完成SNMP Exporter的部署,前面说了,手写snmp.yml是非常不友好的。

故我们需要一款配置生成工具进行配置生成,只需要我们填写一些关键的信息即可得到我们想要的配置文件,比如想要采集交换机的指标,采集无线网络AC和AP的指标,其他SNMP协议设备指标。

SNMP Exporter提供了一套这样的配置生成器工具,接下来就来看下如何部署,其实SNMP Exporter主要难点就是在处理配置生成工具和协调mib库上。

部署SNMP Exporter配置生成器

CentOS 7.9系统会出现curl版本太低导致make generator mibs错误的问题

运行过程说明:

配置生成器从generator.yml中读取简化的收集指令并把相应的配置写入snmp.yml。snmp_exporter可二进制执行文件仅使用snmp.yml文件从开启了snmp的设备收集数据。

示例01:

args参数解析

示例02:

flags参数解析

--snmp.mibopts的作用:

这个参数具体什么作用呢?主要解决的是有些mib库文件中,某些厂商并没有按照默认标准来,而是在MIB文件中使用了特殊符号,我们应该指定MIB解析的参数,比如某些MIB文件描述中有下划线_,那么如果使用某个指标去解析这个库应该是失败的,需要添加--snmp.mibopts=u,允许使用下划线。

目录规划

建议不同类型的设备都有一个目录,其中包含不同设备类型的mibs目录、生成器可执行文件和generator.yml配置文件。这是为了避免MIB定义中的名称空间冲突。仅在设备的mibs目录中保留所需的MIB文件。

下一篇以实际案例讲解具体场景,包括如何规划目录,如何生成配置,上述参数如何具体使用。

如何在Ubuntu CentOS和Cisco系统中配置SNMPv3

简单网络管理协议(SNMP)是一种广泛使用的协议,用于收集设备内部正在进行中的信息。比如说,CPU和RAM的使用率,服务器的负载率,网络接口的流量状态,和的设备的很多其他性能都可以用SNMP来查询。

当前,SNMP有3个版本:v1, v2c and v3。SNMP

v1和v2c,可方便地进行配置,这在以前的文章中讨论过。SNMPv3增加了一些额外的功能,包括身份验证和加密方案(例如,MD5,SHA,AES和

DES)。这使得我们在Internet上运行SNMP查询时,SNMPv3的更安全,更可取的。

同SNMP v1或v2c相比,SNMPv3的配置有一点不同。下面详细解释了配置是如何进行的。

在Ubuntu和Debian配置SNMPv3

使用net-snmp-config tool工具进行配置。下面的例子中创建了一个只读权限的SNMPv3账户,用户名为“snmpv3user”密码为“snmpv3pass”。默认身份验证方法是MD5加密,默认DES使用。这些设定也可根据需要改变。

root@server:~# apt-get install snmp snmpd

root@server:~# service snmpd stop

root@server:~# net-snmp-config--create-snmpv3-user-ro-A snmpv3pass snmpv3user

## OUTPUT##

adding the following line to/var/lib/snmp/snmpd.conf:

createUser snmpv3user MD5"snmpv3pass" DES

adding the following line to/usr/share/snmp/snmpd.conf:

rouser snmpv3user

root@server:~# service snmpd start

SNMPv3测试

使用snmpwalk测试SNMP的配置。成功的测试结果应当有大量的输出数据。下面的例子使用上文建立的V3账户演示了snmpwalk的使用。Ubuntu和Debian的本地服务器IP地址192.168.1.1。

### SAMPLE OUTPUT###

iso.3.6.1.2.1.1.1.0= STRING:"Linux server 3.5.0-23-generic#35~precise1-Ubuntu SMP Fri Jan 25 17:13:26 UTC 2013 x86_64"

iso.3.6.1.2.1.1.2.0= OID: iso.3.6.1.4.1.8072.3.2.10

iso.3.6.1.2.1.1.3.0= Timeticks:(68028) 0:11:20.28

iso.3.6.1.2.1.1.7.0= INTEGER: 72

iso.3.6.1.2.1.1.8.0= Timeticks:(0) 0:00:00.00

iso.3.6.1.2.1.1.9.1.2.1= OID: iso.3.6.1.6.3.10.3.1.1

iso.3.6.1.2.1.1.9.1.2.2= OID: iso.3.6.1.6.3.11.3.1.1

iso.3.6.1.2.1.1.9.1.2.3= OID: iso.3.6.1.6.3.15.2.1.1

iso.3.6.1.2.1.1.9.1.2.4= OID: iso.3.6.1.6.3.1

iso.3.6.1.2.1.1.9.1.2.5= OID: iso.3.6.1.2.1.49

iso.3.6.1.2.1.1.9.1.2.6= OID: iso.3.6.1.2.1.4

iso.3.6.1.2.1.1.9.1.2.7= OID: iso.3.6.1.2.1.50

iso.3.6.1.2.1.1.9.1.2.8= OID: iso.3.6.1.6.3.16.2.2.1

iso.3.6.1.2.1.1.9.1.3.1= STRING:"The SNMP Management Architecture MIB."

iso.3.6.1.2.1.1.9.1.3.2= STRING:"The MIB for Message Processing and Dispatching."

iso.3.6.1.2.1.1.9.1.3.3= STRING:"The management information definitions for the SNMP User-based Security Model."

iso.3.6.1.2.1.1.9.1.3.4= STRING:"The MIB module for SNMPv2 entities"

iso.3.6.1.2.1.1.9.1.3.5= STRING:"The MIB module for managing TCP implementations"

iso.3.6.1.2.1.1.9.1.3.6= STRING:"The MIB module for managing IP and ICMP implementations"

iso.3.6.1.2.1.1.9.1.3.7= STRING:"The MIB module for managing UDP implementations"

iso.3.6.1.2.1.1.9.1.3.8= STRING:"View-based Access Control Model for SNMP."

iso.3.6.1.2.1.1.9.1.4.1= Timeticks:(0) 0:00:00.00

iso.3.6.1.2.1.1.9.1.4.2= Timeticks:(0) 0:00:00.00

iso.3.6.1.2.1.1.9.1.4.3= Timeticks:(0) 0:00:00.00

iso.3.6.1.2.1.1.9.1.4.4= Timeticks:(0) 0:00:00.00

iso.3.6.1.2.1.1.9.1.4.5= Timeticks:(0) 0:00:00.00

### And the walk goes on and on###

删除SNMPv3账户

当net-snmp-config tool运行过程中,该账户的有关信息会存储在var/lib/snmp/snmpd.conf和/usr/share/snmp/snmpd.conf.两个文件之中。删除账户即删除这个文件中的信息即可。

root@server:~# service snmpd stop

root@server:~# vim/var/lib/snmp/snmpd.conf

## there should be a similar encrypted line that contains information on the user##

## this line is removed##

usmUser 1 3 0x80001f8880056e06573a1e895100000000 0x736e6d7076337573657200 0x736e6d7076337573657200 NULL.1.3.6.1.6.3.10.1.1.2 0x945ed3c9708ea5493f53f953b45a4513.1.3.6.1.6.3.10.1.2.2 0x945ed3c9708ea5493f53f953b45a4513""

root@server:~# vim/usr/share/snmp/snmpd.conf

## The following line is removed##

rouser snmpv3user

之后不要忘记重启snmpd

root@server:~# service snmpd start

在CentOS或者RHEL中配置SNMPv3

相比Ubuntu,在 CentOS和 RHEL中配置SNMP v3用户的过程有点不同,但基本是相同的。

首先,使用yum安装必要的软件

[root@server~]# yum install net-snmp-utils net-snmp-devel

安装完成之后,先停止snmpd,再创建具有只读属性的SNMP账户。.

[root@server~]# service snmpd stop

[root@server~]# net-snmp-create-v3-user-ro-A snmpv3pass-a MD5-x DES snmpv3user

## OUTPUT##

adding the following line to/var/lib/net-snmp/snmpd.conf:

createUser snmpv3user MD5"snmpv3pass" DES

adding the following line to/etc/snmp/snmpd.conf:

rouser snmpv3user

[root@server~]# service snmpd start

SNMPv3测试

snmpwalk是测试SNMP配置和输出出色的工具。成功的测试结果应当有大量的输出数据。

[root@server~]# snmpwalk-u snmpv3user-A snmpv3pass-a MD5-l authnoPriv 192.168.1.2-v3

### OUTPUT###

SNMPv2-MIB::sysDescr.0= STRING: Linux server.example.tst 2.6.32-71.el6.i686#1 SMP Fri Nov 12 04:17:17 GMT 2010 i686

SNMPv2-MIB::sysObjectID.0= OID: NET-SNMP-MIB::netSnmpAgentOIDs.10

DISMAN-EVENT-MIB::sysUpTimeInstance= Timeticks:(28963) 0:04:49.63

SNMPv2-MIB::sysORLastChange.0= Timeticks:(1) 0:00:00.01

SNMPv2-MIB::sysORID.1= OID: SNMP-MPD-MIB::snmpMPDMIBObjects.3.1.1

SNMPv2-MIB::sysORID.2= OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance

SNMPv2-MIB::sysORID.3= OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance

SNMPv2-MIB::sysORID.4= OID: SNMPv2-MIB::snmpMIB

SNMPv2-MIB::sysORID.5= OID: TCP-MIB::tcpMIB

SNMPv2-MIB::sysORID.6= OID: IP-MIB::ip

SNMPv2-MIB::sysORID.7= OID: UDP-MIB::udpMIB

SNMPv2-MIB::sysORID.8= OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup

SNMPv2-MIB::sysORDescr.1= STRING: The MIB for Message Processing and Dispatching.

SNMPv2-MIB::sysORDescr.2= STRING: The MIB for Message Processing and Dispatching.

SNMPv2-MIB::sysORDescr.3= STRING: The SNMP Management Architecture MIB.

SNMPv2-MIB::sysORDescr.4= STRING: The MIB module for SNMPv2 entities

SNMPv2-MIB::sysORDescr.5= STRING: The MIB module for managing TCP implementation

## and the output continues##

删除SNMPv3账户

SNMPv3账户信息被包含在两个文件之中。删除账户即删除这个文件中的信息即可。

root@server:~# service snmpd stop

root@server:~# vim/var/lib/net-snmp/snmpd.conf

## there should be a similar encrypted line that contains information on the user##

## this line is removed##

usmUser 1 3 0x80001f8880056e06573a1e895100000000

0x736e6d7076337573657200 0x736e6d7076337573657200 NULL

.1.3.6.1.6.3.10.1.1.2 0x945ed3c9708ea5493f53f953b45a4513

.1.3.6.1.6.3.10.1.2.2 0x945ed3c9708ea5493f53f953b45a4513""

root@server:~# vim/etc/snmp/snmpd.conf

## The following line is removed##

rouser snmpv3user

root@server:~# service snmpd start

防火墙调节(可选)

下面的例子中的防火墙规则可以被用于限制被允许进行SNMP查询的源IP地址。两个IP地址(例如,192.168.1.100/101)被置于白名单中。

root@server:~# iptables-A INPUT-s 192.168.1.100/32-p udp–dport 161-j ACCEPT

root@server:~# iptables-A INPUT-s 192.168.1.101/32-p udp–dport 161-j ACCEPT

root@server:~# iptables-A INPUT-p udp–dport 161-j DROP

思科交换机和路由器配置SNMPv3

思科交换机和路由器同样支持SNMPv3。下面的例子将创建一个访问控制列表(ACL)限制允许做SNMP查询的源IP地址。但是,这步被跳过了。

设置访问控制列表(ACL)(可选)

## global config mode##

ip access-list standard SNMP_ACL

permit 192.168.1.100

permit 192.168.1.100

SNMPv3配置

下面的配置创建一个名为v3Group与认证AuthNoPriv安全级别v3的组。前面定义的可选访问列表也支持设定。

## global config mode##

## With ACL##

snmp-server group v3Group v3 auth access SNMP_ACL

## Without ACL##

snmp-server group v3Group v3 auth

用户v3user被创建并添加在v3Group下。 MD5的密码和AES加密密钥也被定义。

snmp-server user v3user v3Group v3 auth md5 snmpv3pass priv aes 128 snmpv3pass

SNMPv3测试

SNMP用户和相关组可以在Cisco设备中查看。

### privileged EXEC mode##

show snmp user

User name: v3user

Engine ID:************************

storage-type: nonvolatile active

Authentication Protocol: MD5

Privacy Protocol: AES128

Group-name: v3Group

任何Linux设备中的snmpwalk的都可以用来验证配置和检查输出。

snmpwalk-u snmpv3user-A snmpv3pass-a MD5-l authnoPriv 192.168.1.3-v3

iso.3.6.1.2.1.1.1.0= STRING:"Cisco IOS Software”

Technical Support:

Copyright(c) 1986-2012 by Cisco Systems, Inc.

iso.3.6.1.2.1.1.2.0= OID: iso.3.6.1.4.1.9.1.1166

iso.3.6.1.2.1.1.7.0= INTEGER: 78

iso.3.6.1.2.1.1.8.0= Timeticks:(0) 0:00:00.00

iso.3.6.1.2.1.2.1.0= INTEGER: 54

iso.3.6.1.2.1.2.2.1.1.1= INTEGER: 1

iso.3.6.1.2.1.2.2.1.1.2= INTEGER: 2

iso.3.6.1.2.1.2.2.1.1.3= INTEGER: 3

## output truncated##

在Linux系统上配置SNMP的方法

在Debian或Ubuntu上配置SNMP

要在基于Debian的系统上安装SNMP代理(snmpd),请运行以下命令:

代码如下:

root@server:~# apt-get install snmpd

然后,如下编辑配置文件。

代码如下:

root@server:~# vim/etc/snmp/snmpd.conf

#使snmpd监听再所有接口上

agentAddress udp:161

#定义一个只读的 community'myCommunity'和源网络

rocommunity myCommunity 172.17.1.0/24

sysLocation Earth

sysContact email@domain.tld

在编辑完配置文件后,重启snmpd。

代码如下:

root@server:~# service snmpd restart

在CentOS或RHEL上配置SNMP

要安装SNMP工具和库,请运行以下命令。

代码如下:

root@server:~# sudo yum install net-snmp

然后,如下编辑SNMP配置文件。

代码如下:

root@server:~# vim/etc/snmp/snmpd.conf

#定义一个使用 community'myCommunity'和源网络 172.17.1.0/24的用户'myUser'

com2sec myUser 172.17.1.0/24 myCommunity

#将 myUser加到'myGroup'组,定义组权限

group myGroup v1 myUser

group myGroup v2c myUser

view all included.1

access myGroup"" any noauth exact all all none

root@server:~# service snmpd restart

root@server:~# chkconfig snmpd on

重启snmpd服务,然后添加到启动服务列表。

测试SNMP

SNMP可以通过运行snmpwalk命令进行测试。如果SNMP已经配置成功,该命令会生成大量输出。

代码如下:

root@server:~# snmpwalk-c myCommunity 172.17.1.44-v1

iso.3.6.1.2.1.1.1.0= STRING:"Linux mrtg 3.5.0-17-generic#28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64"

iso.3.6.1.2.1.1.2.0= OID: iso.3.6.1.4.1.8072.3.2.10

iso.3.6.1.2.1.1.3.0= Timeticks:(2097) 0:00:20.97

~~输出截断~~

iso.3.6.1.2.1.92.1.1.2.0= Gauge32: 1440

iso.3.6.1.2.1.92.1.2.1.0= Counter32: 1

iso.3.6.1.2.1.92.1.2.2.0= Counter32: 0

iso.3.6.1.2.1.92.1.3.1.1.2.7.100.101.102.97.117.108.116.1= Timeticks:(1) 0:00:00.01

iso.3.6.1.2.1.92.1.3.1.1.3.7.100.101.102.97.117.108.116.1= Hex-STRING: 07 DD 0B 12 00 39 27 00 2B 06 00

阅读剩余
THE END