前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >教程|监控项类型—SNMP客户端

教程|监控项类型—SNMP客户端

作者头像
Zabbix
发布2022-12-12 09:22:40
4.8K0
发布2022-12-12 09:22:40
举报
文章被收录于专栏:Zabbix中国官方Zabbix中国官方

概 述

您可能希望在打印机、网络交换机、路由器或UPS等设备上使用SNMP监控,这些设备通常启用SNMP,在这些设备上尝试设置完整的操作系统和Zabbix代理是不切实际的。

为了能够监控SNMP代理在这些设备上提供的数据,Zabbix服务器初始化配置时必须支持SNMP数据源。

SNMP 检查只支持 UDP 协议。

Zabbix 服务器和代理守护进程向 SNMP 设备一个请求中查询多个值时,这会影响所有SNMP监控项(常规 SNMP监控项、具有动态索引的 SNMP 监控项和 SNMP 自动发现)同时可以使 SNMP 处理更加高效。见批量处理技术部分内部如何运作的详细信息。对于无法使用“批量请求”的接口可以通过设置可以关闭。

如果Zabbix服务器和代理守护程序收到错误的SNMP响应,则它们的日志行与以下类似:

SNMP response from host "gateway" does not contain all of the requested variable bindings

虽然它们并没有涵盖所有有问题的情况,但它们对于识别应禁用批量请求的单个SNMP设备非常有用。

Zabbix服务器/代理在查询尝试失败后将始终或至少重试一次:通过SNMP库的重试机制或通过内部批量处理机制。

配 置 S N M P 监 控

要通过SNMP开始监控设备,必须执行以下步骤:

步骤1

找出您要监控的项目的 SNMP 字符串(或 OID)。

要获取SNMP字符串列表,请使用 snmpwalk 命令(net-snmp的部分软件应该在Zabbix安装时同时安装)或等效工具:

代码语言:javascript
复制
shell> snmpwalk -v 2c -c public <主机 IP> 。

此处的“2c”代表 SNMP 版本,您也可以将其替换为“1”,表示设备上的 SNMP 版本v1。

它会返回给你一个SNMP字符串及其最后一个值的列表。如果不是,那么SNMP 'community' 可能与标准的'public'不同,在这种情况下,请找出它是什么。

然后,您可以遍历列表,直到找到要监控的字符串,例如:如果要监视通过端口3进入交换机的字节,你将使用此行中的IF-MIB :: ifInOctets.3字符串:

代码语言:javascript
复制
IF-MIB::ifInOctets.3 = Counter32: 3409739121

你现在可以使用 snmpget 命令找出'IF-MIB :: ifInOctets.3'的数字OID:

代码语言:javascript
复制
shell> snmpget -v 2c -c public -On 10.62.1.22 IF-MIB::ifInOctets.3

请注意,字符串中的最后一个数字是您需要监控的端口号。另请参阅:动态索引。效果如下:

.1.3.6.1.2.1.2.2.1.10.3 = Counter32: 3472126941

同样,OID 中的最后一个数字是端口号。

3COM似乎使用端口号在100以上,例如端口1=端口101,端口3=端口103,但Cisco使用常规数字,例如端口3=3。

一些最常用的SNMP OID,Zabbix将自动转换为数字表示

在上面的例子中,值类型是“Counter32”它在内部对应于ASN_COUNTER类型。完整的支持类型包括 ASN_COUNTER, ASN_COUNTER64, ASN_UINTEGER, ASN_UNSIGNED64, ASN_INTEGER, ASN_INTEGER64, ASN_FLOAT, ASN_DOUBLE, ASN_TIMETICKS, ASN_GAUGE, ASN_IPADDRESS, ASN_OCTET_STR 和 ASN_OBJECT_ID (从2.2.8, 2.4.3之后). 这些类型大致对应于snmpget 输出的 "Counter32", "Counter64", "UInteger32", "INTEGER", "Float", "Double", "Timeticks", "Gauge32", "IpAddress", "OCTET STRING", "OBJECT IDENTIFIER", 但也有可能显示为 "STRING", "Hex-STRING", "OID" 或者其它, 这取这取决于显示提示的表达方式。

步骤2

为设备创建一台主机

为主机添加 SNMP 接口:

  • 输入 IP 地址/DNS 名称和端口号
  • 从下拉列表中选择 SNMP 版本
  • 根据所选 SNMP 版本添加接口凭据:
    • SNMPv1、v2 只需要community凭据(默认值是"'public'")
    • SNMPv3 需要更具体的选项(见下文)
  • 将使用批量请求复选框标记为允许批量 处理 SNMP 请求

SNMPv3参数

说明

上下文名称

输入上下文名称以识别 SNMP 子网上的监控项。自 Zabbix 2.2 起,SNMPv3 监控项支持上下文名称。在此字段中解析用户宏。

安全名称

输入安全名称。用户宏在此字段中解析。

安全级别

选择安全级别:noAuthNoPriv - 不使用身份验证或隐私协议AuthNoPriv - 使用身份验证协议,不使用隐私协议AuthPriv - 使用身份验证和隐私协议

身份验证协议

选择身份验证协议 - MD5、SHA1、SHA224、SHA256、SHA384 或 SHA512。

身份验证密码

输入身份验证密码。用户宏在此字段中解析。

隐私协议

选择隐私协议 - DES、AES128、AES192、AES256、AES192C (Cisco) 或 AES256C (Cisco)。

隐私密码

输入隐私密码。用户宏在此字段中解析。

如果SNMPv3凭据(安全名称,验证协议/口令,隐私协议)错误,Zabbix会从net-snmp收到错误,如果 私钥 错误,在这种情况下,Zabbix会从net-snmp收到TIMEOUT错误。

您可以使用zabbix提供的任意 SNMP 模板(SNMP 设备模板和其他模板),该模板将自动添加监控项。但是,那模板可能与主机不兼容。点击 Add 保存主机。

步骤3

创建一个监控项。

所以现在回到Zabbix并点击前面创建的SNMP主机的 监控项 。如果你在创建主机时选择使用模板,你将拥有与主机相关联的SNMP监控项列表。我们假设你要使用snmpwalk和snmpget采集的信息创建监控项,单击 创建监控项。在新的监控项表单中:

  • 输入监控项"名称"。
  • 将"类型"字段更改为"SNMP客户端"
  • 输入“键值”为有意义的内容,例如,SNMP-InOctets-Bps。
  • 确保“主机接口”字段中有你的交换机/路由器
  • 将你之前检索到的文本或数字OID输入到'SNMP OID'字段中,例如:.1.3.6.1.2.1.2.2.1.10.3
  • 将“信息类型”设置为 浮点数
  • 如果你希望“更新间隔”和“历史数据保留时长”与默认值不同,请选择一个自定义乘数(如果需要),并输入数值
  • 在进程预处理选项卡中,添加 Change per second 步骤(重要!,否则您将从 SNMP 设备获取累积值,而不是差异值)。

所有必填字段都标有红色星号。

现在保存监控项,进入 监测中 → 最新数据 来获取你的SNMP数据!

01

示 例 1

通用示例:

参数

描述

OID

1.2.3.45.6.7.8.0 (or .1.2.3.45.6.7.8.0)

键值

用作触发器引用的唯一字符串>例如, "my_param".

请注意,OID 可以以数字或字符串形式给出。但是,在某些情况下,必须将字符串 OID 转换为数字表示。实用程序 snmpget 可用于此目的:

shell> snmpget -On localhost public enterprises.ucdavis.memory.memTotalSwap.0

在配置Zabbix源时指定了 --with-net-snmp 标志,可以监视SNMP参数

02

示 例 2

监控正常运行时间:

参数

说明

OID

MIB::sysUpTime.0

Key

router.uptime

Value type

浮点数

Units

uptime

Multiplier

0.01

批量处理的内部工作原理

从 Zabbix server和proxy 2.2.3 版本开始查询 SNMP 设备开始在一个请求获取多个值。这会影响几种类型的 SNMP监控项:

· 常规 SNMP 监控项

· SNMP监控项带动态索引

· SNMP 低级别自动发现规则

具有相同参数的单个接口上的所有SNMP监控项都将同时进行查询。前两种类型的监控项由轮询器分批采集,最多128个监控项,而低级发现规则如前所述单独处理。

在较低级别上,执行查询值的操作有两种:获取多个指定对象和游历OID树。

对于"getting",GetRequest-PDU最多使用128个变量绑定。对于"walking",GetNextRequest-PDU用于SNMPv1和GetBulkRequest,"max-repetitions"字段最多128个用于SNMPv2和SNMPv3。

因此,每个SNMP监控项类型的批量处理的优势如下:

· 常规SNMP监控项受益于“getting” 的改进;

· 具有动态索引的SNMP监控项受益于“getting”和“walking”改进:“getting”用于索引验证,“walking”用于构建缓存;

· SNMP低级发现规则受益于“walking”的改进。然而,有一个技术问题,并非所有设备都能够根据请求返回128个值。有些总是给出正确的回应,其它情况则会以“tooBig(1)”错误做出回应,或者一旦潜在的回应超过了一定的限度,则一律不回应。

为了找到最佳数量的对象来查询给定的设备,Zabbix使用以下策略。它在请求中查询“值1”时谨慎开始。如果成功,它会在请求中查询“值2”。如果再次成功,则查询请求中的“值3”,并通过将查询对象的数量乘以1.5来继续,导致以下请求大小的顺序:1, 2, 3, 4, 6, 9, 13, 19, 28, 42, 63, 94, 128。

然而,一旦设备拒绝给出适当的响应(例如,对于42个变量),Zabbix会做两件事情:

· 首先,对于当前批量监控项,它将单个请求中的对象数减半,并查询21个变量。如果设备处于活动状态,那么查询应该在绝大多数情况下都有效,因为已知28个变量可以工作,21个变量明显少于此。但是,如果仍然失败,那么Zabbix会逐渐回到查询值。如果此时仍然失败,那么设备肯定没有响应,请求大小也不是问题。

· Zabbix为后续批量监控项做的第二件事是它从最后成功的变量数量开始(在我们的示例中为28),并继续将请求大小递增1,直到达到限制。例如,假设最大响应大小为32个变量,后续请求的大小为29,30,31,32和33。最后一个请求将失败,Zabbix将永远不再发出大小为33的请求。从那时起,Zabbix将为该设备查询最多32个变量。

· 如果大型查询因此数量的变量而失败,则可能意味着两件事之一。设备用于限制响应大小的确切标准无法知晓,但我们尝试使用变量数来近似。因此,第一种可能性是,在一般情况下,此数量的变量大约是设备的实际响应大小限制:有时响应小于限制,有时它大于限制。第二种可能性是任何方向的UDP数据包都丢失了。由于这些原因,如果Zabbix查询失败,它会减少最大数量的变量以尝试深入到设备的舒适范围,但(从2.2.8开始)最多只能达到两次。

在上面的示例中,如果包含32个变量的查询失败,Zabbix会将计数减少到31.如果发生这种情况也会失败,Zabbix也会将计数减少到30。但是,Zabbix不会将计数减少到30以下, 因为它会假设进一步的失败是由于UDP数据包丢失,而不是设备的限制。

但是,如果设备由于其他原因无法正确处理批量请求,并且上述启发式方法不起作用,Zabbix 2.4版本之后每个接口都有“使用批量请求”设置,允许禁用该设备的批量请求。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Zabbix开源社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档