SNMP 代理协议监控

强大的性能和简易的集成,由 InfluxData 构建的开源数据连接器 Telegraf 提供支持。

50 亿+

Telegraf 下载量

#1

时间序列数据库
来源:DB Engines

10 亿+

InfluxDB 下载量

2,800+

贡献者

目录

强大的性能,无限的扩展能力

收集、组织和处理海量高速数据。当您将任何数据视为时间序列数据时,它会更有价值。借助 InfluxDB,这是排名第一的时间序列平台,旨在与 Telegraf 一起扩展。

查看入门方法

SNMP(简单网络管理协议)是一种应用层协议,用于管理和监控网络设备。SNMP 为您网络上的设备(例如路由器、交换机、WiFi 接入点、打印机以及 IP 网络中连接的任何设备)共享监控指标提供了一种通用方法。SNMP 代理几乎随任何网络设备一起提供,提供了一种开箱即用的方式来监控局域网 (LAN) 和广域网 (WAN) 上的设备。SNMP 也已被一些物联网 (IoT) 设备供应商采用。

SNMP 拉取与推送模型

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

  • 在拉取模型中,监控代理以计划的固定间隔向目标设备上运行的 SNMP 代理发送 SNMP 请求。设备上的 SNMP 代理使用特定的请求指标进行响应。
  • 在推送模式(又名 SNMP 陷阱)中,通信从相反的一端开始。受监控的设备(通过 SNMP 代理)向监控系统中的陷阱接收器发送状态消息(陷阱)。在陷阱的情况下,没有调度,陷阱消息在生成时发送,从而实时查看系统和网络性能问题。

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

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

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

Telegraf SNMP 和 SNMP 陷阱插件为监控来自联网设备的 SNMP 数据提供了全面的解决方案。设备指标资源利用率、负载状态和运行状况检查以及网络性能指标都可以通过 SNMP 监控进行监控。

Telegraf 是 InfluxData 时间序列平台(参见下图)的收集代理。InfluxData 时间序列平台允许收集、可视化和分析所有摄取和监控的指标和事件。InfluxDB — 专门构建的 时间序列数据库 是该平台的核心开源组件。Telegraf 是 InfluxDB 的代理,它拥有数百个插件,适用于最常见的应用程序和协议,可以激活并开始收集指标和事件。Telegraf 也是开源的,在社区中拥有自己的项目。

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

为了简化该过程,Telegraf 被设计为轻量级、插件驱动的收集代理,它既可以在您的主机上运行(收集有关您的系统和应用程序的数据),也可以远程运行(通过您的应用程序公开的端点抓取数据)。

请参阅下面的 TICK Stack 架构

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 陷阱配置

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

[[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 陷阱插件收集哪些指标?

标签

标签 描述
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 (字符串))

有关更多信息,请查看文档。

项目 URL   文档

SNMP 组件和架构

SNMP MIB(管理信息库)

SNMP MIB 是一种可以通过 SNMP 访问的层级信息结构,其中包含有关设备及其设置的信息。包含设备的对象标识符 (OID) 和其他人类可读的信息。

SNMP 代理

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

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

SNMP 管理器

SNMP 管理器(也称为 SNMP 服务器)用于轮询网络设备以收集信息。SNMP 管理器还处理 SNMP 陷阱,这些陷阱是从 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 的改进。它增加了对加密的支持,并通过使用基于 community 的身份验证系统提高了安全性。

SNMP V3

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

SNMP 安全性详解

SNMP 安全性是为了保护简单网络管理协议 (SNMP) 网络免受恶意访问和其他威胁而采取的一系列措施。SNMP 安全性包括身份验证、授权、加密和访问控制。

身份验证是验证用户或设备是否合法的过程。这可以使用密码或数字证书来完成。授权是授予用户或设备访问某些资源(例如网络组件和服务)的过程。加密是加扰数据的过程,以便只有授权用户和设备才能读取它。最后,访问控制是根据各种参数允许或拒绝特定请求的过程。

SNMP 安全性还包括网络访问控制、身份验证陷阱和对象级安全性等功能。网络访问控制用于限制对 SNMP 网络某些部分的访问。身份验证陷阱是 SNMP 设备在检测到恶意用户或设备尝试获取访问权限时发送的通知。最后,对象级安全性可防止用户更改给定设备上的设置

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

SNMP 命令/PDU

SNMP Get 命令

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

SNMP Set 命令

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

SNMP GetNext 命令

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

SNMP Walk 命令

SNMP Walk 命令类似于 GetNext 命令,但它允许您检索 OID 的所有信息,而无需为每个 OID 运行唯一的 GetNext 命令。

SNMP Trap 命令

SNMP Trap 是一种消息类型,可以异步发送到 SNMP 管理器,而无需轮询。Trap 通常用于指示错误或失败等问题。

SNMP Inform 命令

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

SNMP Response 命令

Response 命令用于确认收到 SNMP 消息。这可用于确保远程设备或管理站已成功收到消息。

SNMP Traps 与 Informs

在 SNMP 的上下文中,traps 是从所有远程设备发送到中央收集器(称为管理器)的警报消息。这与 informs 或 inform 请求的概念略有不同,后者是一种功能,允许路由器在发生错误情况等特定事件时向 SNMP 管理器发送 informs。

SNMP 轮询与 Traps

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

SNMP 轮询是一种理想的拉取机制,用于定期收集监控数据,而 SNMP traps 是一种理想的推送机制,用于通知事件并避免监控消息淹没网络。

关于 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,这是排名第一的时间序列平台,旨在与 Telegraf 一起扩展。

查看入门方法

相关集成