SNMP 代理协议监控

免费使用此 InfluxDB 集成

SNMP(简单网络管理协议) 是一种应用层协议,用于管理和监控网络设备。SNMP 提供了一种通用方式,使得网络上的设备(如路由器、交换机、WiFi 接入点、打印机以及任何连接到 IP 网络的设备)可以共享监控指标。几乎任何网络设备都配备了 SNMP 代理,提供了一种无需额外配置即可在局域网(LAN)和广域网(WAN)上监控设备的方法。SNMP 也被一些物联网(IoT)设备厂商所采用。

SNMP 拉取模式与推送模式

SNMP 监控可以以两种模式实现:拉取或推送(陷阱)。

  • 在拉取模式下,监控代理在预定的时间间隔内向目标设备上的 SNMP 代理发送 SNMP 请求。设备上的 SNMP 代理响应以请求的特定指标。
  • 在推送模式下,即 SNMP 陷阱,通信从另一端开始。被监控设备(通过 SNMP 代理)向监控系统的陷阱接收器发送状态消息(陷阱)。在陷阱的情况下,没有调度,陷阱消息在生成时发送,提供了对系统和网络性能问题的实时视图。

通过使用 SNMP 拉取和 SNMP 陷阱,客户可以在尝试捕获微妙变化时平衡由短拉取间隔造成的资源消耗影响(系统和网络),而当陷阱是一个更好且更经济的选择时。例如,当电源单元或磁盘发生故障时,Telegraf 会接收到 SNMP 陷阱并将其发送到输出插件。然后,您可以配置一个警报来通知您或您的团队有关故障的信息。

InfluxDB 平台支持 SNMP 监控的两种模式:拉取和陷阱,通过两个 Telegraf 插件 实现: Telegraf SNMP 输入插件(input.snmp)和 Telegraf SNMP 陷阱输入插件(inputs.snmp_trap)。

Telegraf SNMP 和 SNMP 陷阱输入插件提供的网络和系统监控解决方案

Telegraf SNMP 和 SNMP 陷阱插件提供了一种全面的方法来监控来自网络设备的 SNMP 数据。通过 SNMP 监控可以监控设备资源利用率、负载状态和健康检查以及网络性能指标。

Telegraf 是 InfluxData 时间序列平台的数据收集代理(见下图表)。InfluxData 时间序列平台允许收集、可视化和分析所有传入和监控的指标和事件。InfluxDB —— 针对时间序列数据设计的 时间序列数据库 是平台的核心开源组件。Telegraf 是 InfluxDB 的代理,具有数百个插件,适用于最常见的应用程序和协议,可随时激活并开始收集指标和事件。Telegraf 同样是开源的,并在社区中拥有自己的项目。

采用时间序列平台的主要用例之一是系统和网络监控。收集感兴趣的数据是任何监控解决方案的关键部分。这可以通过多种方式实现。

为了简化流程,Telegraf 被设计为一个轻量级的、插件驱动的收集代理,可以在您的宿主上运行(收集有关您系统和应用程序的数据)或远程操作(通过应用程序暴露的端点抓取数据)。

请参阅以下 TICK 栈架构

SNMP integration InfluxData architecture

SNMP 优点

SNMP 通过允许系统管理员集中管理和监控同一网络上的多个设备,为任何网络管理设置提供了关键好处。通过使用 SNMP,提供了一个可以远程访问的有序信息层次结构,以便快速识别和解决问题。这个层次结构通过一系列管理对象来管理,这些对象在 MIB(管理信息库)中进行了记录。

兼容性是 SNMP 的另一个优点。SNMP 可以与各种设备集成,无论制造商如何。这使得系统管理员可以同时监控和配置多个设备,这可以大大减少设置网络监控的时间和成本。

SNMP 还被用作解决网络环境各个方面的重要工具,它允许管理员识别瓶颈和潜在问题。例如,系统管理员可以使用 SNMP 测量设备的带宽使用情况,然后确定需要改进或升级的区域。这有助于确保网络以最佳性能运行,并消除因系统故障导致的昂贵停机时间。

SNMP 提供的最后一个好处是易于管理。通过提供有序的信息层次结构,SNMP 使管理员更容易管理和监控大型网络。这减少了解决问题所需的时间,并提高了网络的整体效率。SNMP 还允许自动化过程,例如设备配置更改,这可以进一步减少系统管理员所需的时间。

SNMP 缺点

与大多数技术一样,SNMP 也有一些缺点。这种技术的首要缺点是设置和维护 SNMP 系统的复杂性。为了有效地使用 SNMP,管理员必须彻底了解其工作原理以及其底层协议。

潜在的安全漏洞长期以来一直是 SNMP 的缺点。SNMP V3 通过允许适当的加密和认证添加了一些功能来缓解这些担忧,但它仍然可能在旧系统中成为一个问题。

SNMP 的最后一个缺点与可伸缩性有关,这主要归因于协议主要基于轮询的性质。对于需要非常高的数据收集粒度以避免停机的网络,SNMP 设备可能会因频繁的轮询请求而超载。在生产环境中,通常有多个 SNMP 管理员轮询每个设备以实现冗余,这进一步复杂化情况并增加被轮询设备的负载。

因此,许多旧系统不得不只以每分钟或更长的间隔进行轮询,这可能导致他们对系统的洞察力不足。在发生故障的情况下,不仅他们的响应会延迟,而且他们可能没有数据来识别问题的根本原因。因此,许多现代监控系统已经转向基于推送的方法,以便允许更频繁的指标收集。

SNMP 应用场景

网络管理

SNMP 最常见的用例之一是网络管理。SNMP 可以用于监控网络设备,如路由器、交换机和服务器,以确保它们正常运行。SNMP 可以用于监控网络性能,以确定潜在的瓶颈和其他问题。

安全监控

SNMP 还用于安全监控。通过 SNMP 监控的网络活动可用于检测可能表明安全漏洞的异常活动。SNMP 还可用于监控防火墙和入侵检测系统等安全设备的健康状况。

容量规划

SNMP 的另一个常见用途是容量规划。通过监控网络上的设备,可以确定何时需要升级或添加更多硬件,以保持足够的性能水平。

故障排除

SNMP 常用于故障排除。通过监控网络上的设备,可以在它们造成重大中断之前识别潜在问题。SNMP 可用于追踪已发生问题的根源。

报告

通过 SNMP 收集的数据可用于报告目的。通过收集网络设备上的数据,可以生成提供网络使用和性能洞察的报告。

为什么需要监控 SNMP?

监控 SNMP 对于确保网络的性能和可用性至关重要。SNMP 监控有助于在问题变得关键之前识别潜在问题,使管理员在必要时采取纠正措施。

此外,它可以帮助诊断问题,并通过提供对网络基础设施当前状态的可见性来降低运营成本。最后,SNMP 可在性能阈值超过或流量模式改变时提供实时警报,从而允许快速响应。通过监控 SNMP,管理员可以确保其网络的可用性和性能,并防止昂贵的中断。

Telegraf SNMP 插件配置

Telegraf SNMP 输入插件使用轮询从 SNMP 代理收集指标。该插件还包括收集单个 OID 以及完整 SNMP 表的支持。

配置 Telegraf 以进行 SNMP 收集

以下配置用于使用 Telegraf 运行 SNMP 插件。有关配置 Telegraf 的详细信息,请参阅我们的文档

[[inputs.snmp]]
  ## Agent addresses to retrieve values from.
  ##   format:  agents = ["<scheme://><hostname>:<port>"]
  ##   scheme:  optional, either udp, udp4, udp6, tcp, tcp4, tcp6.  
  ##            default is udp
  ##   port:    optional
  ##   example: agents = ["udp://127.0.0.1:161"]
  ##            agents = ["tcp://127.0.0.1:161"]
  ##            agents = ["udp4://v4only-snmp-agent"]
  agents = ["udp://127.0.0.1:161"]

  ## Timeout for each request.
  # timeout = "5s"

  ## SNMP version; can be 1, 2, or 3.
  # version = 2

  ## SNMP community string.
  # community = "public"

  ## Agent host tag
  # agent_host_tag = "agent_host"

  ## Number of retries to attempt.
  # retries = 3

  ## The GETBULK max-repetitions parameter.
  # max_repetitions = 10

  ## SNMPv3 authentication and encryption options.
  ##
  ## Security Name.
  # sec_name = "myuser"
  ## Authentication protocol; one of "MD5", "SHA", or "".
  # auth_protocol = "MD5"
  ## Authentication password.
  # auth_password = "pass"
  ## Security Level; one of "noAuthNoPriv", "authNoPriv", or "authPriv".
  # sec_level = "authNoPriv"
  ## Context Name.
  # context_name = ""
  ## Privacy protocol used for encrypted messages; one of "DES", "AES", "AES192", "AES192C", "AES256", "AES256C", or "".
  ### Protocols "AES192", "AES192", "AES256", and "AES256C" require the underlying net-snmp tools 
  ### to be compiled with --enable-blumenthal-aes (http://www.net-snmp.org/docs/INSTALL.html)
  # priv_protocol = ""
  ## Privacy password used for encrypted messages.
  # priv_password = ""

  ## Add fields and tables defining the variables you wish to collect.  This
  ## example collects the system uptime and interface variables.  Reference the
  ## full plugin documentation for configuration details.
  [[inputs.snmp.field]]
    oid = "RFC1213-MIB::sysUpTime.0"
    name = "uptime"

  [[inputs.snmp.field]]
    oid = "RFC1213-MIB::sysName.0"
    name = "source"
    is_tag = true

  [[inputs.snmp.table]]
    oid = "IF-MIB::ifTable"
    name = "interface"
    inherit_tags = ["source"]

    [[inputs.snmp.table.field]]
      oid = "IF-MIB::ifDescr"
      name = "ifDescr"
      is_tag = true

有关更多信息,请参阅文档。

项目 URL   文档

Telegraf SNMP Trap 配置

与大多数 Telegraf 插件一样,SNMP Trap 输入插件不需要太多配置。需要安装来自 net-snmp 项目的工具,有些先决条件。此外,在许多操作系统中,在特权端口(端口号小于 1024)上监听需要额外权限。由于默认的 SNMP Trap 端口 162 属于此类,因此使用 Telegraf 接收 SNMP Trap 可能需要提升权限。

[[inputs.snmp_trap]]
  ## Transport, local address, and port to listen on.  Transport must
  ## be "udp://".  Omit local address to listen on all interfaces.
  ##   example: "udp://127.0.0.1:1234"
  ##
  ## Special permissions may be required to listen on a port less than
  ## 1024.  See README.md for details
  ##
  # service_address = "udp://:162"
  ## Timeout running snmptranslate command
  # timeout = "5s"

从 Telegraf SNMP Trap 插件收集哪些指标?

标签

标签 描述
source
陷阱源 IP 地址
name
来自 SNMPv2-MIB::snmpTrapOID.0 PDU 的值
mib
来自 SNMPv2-MIB::snmpTrapOID.0 PDU 的管理信息库 (MIB)
oid
来自 SNMPv2-MIB::snmpTrapOID.0 PDU 的对象标识符 (OID) 字符串
version
版本 "1" 或 "2c" 或 "3"

字段

字段映射自陷阱中的变量。字段名称是在 MIB 查找后陷阱变量名称。字段值是陷阱变量值。(示例字段:sysUpTimeInstance(整数),snmpTrapEnterprise (字符串))

有关更多信息,请参阅文档。

项目网址   文档

SNMP组件和架构

SNMP MIB(管理信息库)

SNMP MIB是一个可以通过SNMP访问的分层信息结构,其中包含有关设备和它们的设置的信息。包含设备的对象标识符(OID)以及附加的易读信息。

SNMP代理

SNMP代理(也称为SNMP客户端)是运行在受管理设备上的应用程序,它响应SNMP管理器的请求。代理存储有关设备状态的信息,当被轮询时,将传递这些信息给SNMP管理器。

代理通常收集的常用指标包括CPU利用率、带宽使用率和磁盘空间使用率。

SNMP管理器

SNMP管理器(也称为SNMP服务器)是轮询网络设备以收集信息的东西。SNMP管理器还处理SNMP Traps,这些Traps是由SNMP代理发送的,无需轮询。

SNMP OID(对象标识符)

SNMP OID是一串数字,它唯一标识了MIB监控的特定设备。

SNMP共同体字符串

SNMP共同体字符串是SNMP代理配置的一部分,充当密码,允许解码SNMP消息。代理通常有三个不同的共同体字符串,允许进行读取、读写和陷阱。

SNMP端口

SNMP主要使用UDP端口161和162进行消息传输。端口161由SNMP代理用于接收请求,请求被发送回SNMP管理器。端口162由管理器用于接收SNMP Trap和InformRequests通知。

当使用TLS或DTLS时,SNMP使用10161和10162端口以类似的方式发送和接收消息。

SNMP版本

SNMP V1

SNMP版本1是协议的原始版本,设计于20世纪80年代。它是一个简单的协议,使用明文密码进行身份验证,不提供任何加密。这使得它不安全且容易受到窃听。

SNMP V2

SNMP版本2是在20世纪90年代中期开发的,是SNMP版本1的改进。它增加了对加密的支持,并通过使用基于共同体的身份验证系统增加了安全性。

SNMP V3

SNMP版本3是在20世纪90年代末开发的,是协议的最新版本。它增加了对进一步安全增强的支持,例如数据完整性检查、消息加密和身份验证。

SNMP安全性解释

SNMP安全性是一组措施,旨在保护简单网络管理协议(SNMP)网络免受恶意访问和其他威胁。SNMP安全性包括身份验证、授权、加密和访问控制。

身份验证是验证用户或设备合法性的过程。这可以通过密码或数字证书来实现。授权是授予用户或设备访问特定资源(如网络组件和服务)的过程。加密是将数据打乱的过程,以便只有授权的用户和设备才能读取。最后,访问控制是基于各种参数允许或拒绝特定请求的过程。

SNMP安全性还包括网络访问控制、认证陷阱和对象级安全等特性。网络访问控制用于限制对SNMP网络特定部分的使用。认证陷阱是在SNMP设备检测到恶意用户或设备试图获取访问时发送的通知。最后,对象级安全防止用户更改特定设置。

SNMP版本3为协议带来了额外的安全特性,例如基于用户的安全和基于视图的访问控制。基于用户的安全通过要求用户在访问SNMP网络之前提供用户名和密码来添加额外的认证层。基于视图的访问控制允许管理员限制其网络上某些用户和设备可见的信息。

SNMP命令/PDUs

SNMP获取命令

SNMP获取命令用于从远程设备检索信息。这些信息可以包括设备的当前配置、状态和统计信息。获取命令可以用来从设备获取单个值或多个值。

SNMP设置命令

设置命令用于更改远程设备的配置。可以一次更改多个值,并且代理将它们视为原子操作。然后,包含更改变量的新值的响应被发送回SNMP管理器。

SNMP获取下一个命令

获取下一个命令用于以顺序方式从远程设备检索信息。这意味着如果您使用获取下一个命令检索有关SNMP代理密码的信息,您还将接收到有关该代理其他参数的信息,这些参数按设备MIB中存储的顺序排列。获取下一个可以用来获取设备的所有可用信息。

SNMP遍历命令

SNMP遍历命令与获取下一个命令类似,但它允许您检索OID的所有信息,而无需为每个OID运行唯一的获取下一个命令。

SNMP陷阱命令

SNMP陷阱是一种可以异步发送到SNMP管理器而不需要轮询的消息。陷阱通常用于指示错误或故障等问题。

SNMP通知命令

通知命令是陷阱命令的扩展。它允许管理站向SNMP代理发送信息,并接收确认消息已被接收。通知命令可以用来确保SNMP代理已接收到关键的配置更改或其他重要通知。这允许SNMP管理器知道消息已保证被发送到SNMP代理。

SNMP响应命令

响应命令用于确认接收SNMP消息。这可以用来确保消息已被成功接收远程设备或管理站。

SNMP陷阱与通知

在SNMP的上下文中,陷阱是从所有远程设备发送到称为管理器的中央收集器的警报消息。这与通知或通知请求略有不同,这是一个允许路由器在特定事件(如错误条件)发生时向SNMP管理器发送通知的特性。

SNMP轮询与陷阱

在SNMP轮询中,管理信息库(MIB)对象从远程站点部署的代理请求和接收数据,而不是反过来。

SNMP轮询是一种拉机制,非常适合定期收集监控数据,而SNMP陷阱则是一种推机制,非常适合通知事件,以避免监控消息淹没网络。

关于SNMP的常见问题

SNMP是在什么时候被创建的?

SNMP协议最初于1988年首次提出,旨在更好地满足网络中IP设备管理标准的日益增长的需求——这在当时是非常受欢迎的。SNMP的部分目的是为用户提供一组“简单”的操作员,以便这些设备可以有效地远程管理,从而开辟了一个全新的可能性世界。

哪个SNMP版本最好?

自1988年以来,已经开发和部署了三个主要的SNMP版本供公众使用。SNMPv1是原始版本。SNMPv2在性能、安全性和管理器之间通信方面进行了重大改进。这个版本还引入了64位数据计数器的选项。

SNMPv3很有趣,因为它实际上没有对协议进行任何更改(唯一的例外是添加了加密安全)——只是由于许多新的文本约定、概念和术语,它看起来非常不同。增加了对更多安全模型的支持,因为这是早期版本中存在的重大批评之一。

由于安全性一直被认为是SNMP前两个版本的主要弱点,因此SNMPv3无疑会被行业专业人士认为是最好的。请注意,前两个版本中的身份验证几乎只是发送在管理器和代理之间以明文消息发送的密码。这在当今时代是极其不足的,所以如果您想同时保护您的网络设备并创建更有效的管理方式,那么SNMPv3无疑是最佳选择。

为什么SNMP如此重要?

请注意,SNMP的创建是为了帮助人们以最简单的方式监控和管理他们的网络。不仅如此,它还与许多制造商的产品和服务协同工作——所有这些都是使用简单、易于理解的方式。

如果您认为1988年网络管理很困难,那么几十年来情况已经变得更加复杂。今天,网络上可能有无数设备,从移动设备到工作站、打印机等等。随着物联网的兴起,这种情况只会变得更加复杂。

不要忘记,我们即将进入一个时期,届时将有数十亿的设备连接到全球的网络,不仅与用户共享信息,还相互之间共享信息。由于弱安全性的存在,即将暴露的大量个人信息将很快证明是灾难性的。很快,SNMP在允许管理员在特定时刻了解其网络状况方面的价值将比现在更大,这样他们就可以持续采取最佳措施来保护和维护。

今天拥有类似SNMP的部署不仅可以让人们应对今天的挑战,而且还能更好地准备应对未来的问题。

SMTP和SNMP之间有什么区别?

SMTP是“简单邮件传输协议”的缩写。换句话说,它是一种用于计算机网络中电子邮件通信的协议。除了它们的缩写词相对相似之外,SMTP和SNMP是两个完全不同的概念,应该被视为不同的。

RMON和SNMP之间的区别是什么?

RMON和SNMP的主要区别在于,前者用于“基于流”的监控,而后者用于“基于设备”的监控和管理。它们也服务于不同的目的。

SNMP可以用来确保您的网络在最佳效率下运行。另一方面,RMON可以帮助确保即使在用户离线的情况下,这一点仍然成立。它们各自为桌面带来了独特的优势,并且都在您的网络管理堆栈中占有一席之地。

相关资源

InfluxDb-cloud-logo

最强大的时间序列
数据库作为服务

免费开始
Influxdbu

开发者教育

为时间序列应用程序开发者提供培训。

查看所有教育