SNMP 集成插件编辑

  • 插件版本:v4.0.0
  • 发布时间:2024 年 5 月 3 日
  • 更新日志

此功能处于技术预览阶段,可能会在未来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。

描述编辑

SNMP 集成插件包括

  • SNMP 输入插件
  • SNMPtrap 输入插件

新的 logstash-integration-snmp 插件将 logstash-input-snmplogstash-input-snmptrap 插件组合到一个 Ruby gem 中。这个集成的插件包提供了更好的 SNMP 处理行为一致性、改进的资源管理、更轻松的包维护和更小的安装空间。各个插件现在共享相同的代码库,并且已经过重构以利用最新版本的 SNMP4j

从单个插件迁移到 logstash-integration-snmp编辑

您将保留现有独立插件的功能,但体验更加一致,功能也得到了扩展。在本节中,我们将说明映射和行为更改,并解释如何在需要时保留当前行为。

迁移说明:logstash-input-snmp编辑

作为新的 logstash-integration-snmp 插件的一个组件,logstash-input-snmp 插件提供了与独立的 logstash-input-snmp 相同的功能。

鉴于底层代码重构是为了更好地协调 snmp 和 snmptrap 插件的行为,您可能需要根据您的用例以及如何通过管道处理摄入的数据来解决一些更改。

映射和错误日志记录的更改:logstash-input-snmp编辑
  • 无此类实例错误 映射为 错误:此 OID 字符串当前不存在此类实例,而不是 noSuchInstance
  • 无此类对象错误 映射为 错误:此 OID 字符串当前不存在此类对象,而不是 noSuchObject
  • MIB 视图结束错误 映射为 错误:MIB 视图结束,而不是 endOfMibView
  • 未知变量类型 回退到 字符串 表示形式,而不是像在独立的 logstash-input-snmp 中那样记录错误。此更改不应影响现有管道,除非它们具有依赖于特定错误消息的自定义错误处理程序。

迁移说明:logstash-input-snmptrap编辑

作为新的 logstash-integration-snmp 插件的一个组件,logstash-input-snmptrap 插件提供了与独立的 logstash-input-snmp 插件*几乎相同的功能*。

您可能需要根据您的用例以及如何通过管道处理摄入的数据来解决一些行为更改。

映射和错误日志记录的更改:logstash-input-snmptrap编辑
  • PDU 变量绑定 使用定义的数据类型映射到 Logstash 事件中。默认情况下,独立的 logstash-input-snmptrap 插件会将所有数据转换为 字符串,而忽略原始类型。如果这不是您想要的行为,则可以使用过滤器来保留原始类型。
  • SNMP TimeTicks 变量 映射为 Long 时间戳,而不是格式化的日期字符串(%d 天,%02d:%02d:%02d.%02d)。
  • null 变量值 使用字符串 null 映射,而不是 Null(大写字母 N)。
  • 无此类实例错误 映射为 错误:此 OID 字符串当前不存在此类实例,而不是 noSuchInstance
  • 无此类对象错误 映射为 错误:此 OID 字符串当前不存在此类对象,而不是 noSuchObject
  • MIB 视图结束错误 映射为 错误:MIB 视图结束,而不是 endOfMibView
  • 上一代(独立)input-snmptrap 插件将 message 字段 格式化为 ruby-snmp SNMP::SNMPv1_Trap 对象表示形式。

    <SNMP::SNMPv1_Trap:0x6f1a7a4 @varbind_list=[#<SNMP::VarBind:0x2d7bcd8f @value="teststring", @name=[1.11.12.13.14.15]>], @timestamp=#<SNMP::TimeTicks:0x1af47e9d @value=55>, @generic_trap=6,  @enterprise=[1.2.3.4.5.6], @source_ip="127.0.0.1", @agent_addr=#<SNMP::IpAddress:0x29a4833e @value="test">, @specific_trap=99>

    新的集成的 input-snmptrap 插件使用 JSON 格式化 message 字段

    {"error_index":0, "variable_bindings":{"1.3.6.1.6.3.1.1.4.1.0":"SNMPv2-MIB::coldStart", "1.3.6.1.2.1.1.3.0":0}, "error_status":0, "type":"TRAP", "error_status_text":"Success", "community":"public", "version":"2c", "request_id":1436216872}
保持与先前实现的最大兼容性编辑

如果需要,您可以配置新的 logstash-integration-snmp 插件以保持与先前(独立)版本的 input-snmp 插件的最大兼容性。

input {
   snmptrap {
    use_provided_mibs => false
    oid_mapping_format => 'ruby_snmp'
    oid_map_field_values => true
   }
}

导入 MIB编辑

SNMP 插件已经包含 IETF MIB(管理信息库),不需要导入这些 MIB。要禁用捆绑的 MIB,请将 use_provided_mibs 选项设置为 false

任何其他 MIB 都需要手动导入,以便在生成的事件中提供数字 OID 到 MIB 字段名称的映射。

要导入 MIB,需要 OSS libsmi 库。libsmi 在大多数操作系统上都可用并可安装。

要导入 MIB,您需要首先使用 libsmi smidump 命令行实用程序将 ASN.1 MIB 文件转换为 .dic 文件。

示例(使用 RFC1213-MIB 文件)

$ smidump --level=1 -k -f python RFC1213-MIB > RFC1213-MIB.dic

请注意,smidump 输出的结果文件必须具有 .dic 扩展名。

防止出现 无法找到 MIB 模块 错误编辑

smidump 函数在其预先配置的路径列表中查找 MIB 依赖项。为避免出现 无法找到 MIB 模块 错误,您可能需要在特定环境中提供 MIB 位置。

提供其他路径配置的推荐方法是

  • 环境变量,或
  • 配置文件以提供其他路径配置。

有关更多信息,请参阅 smi_config 文档 中的“模块位置”部分。

选项 1:使用环境变量编辑

使用 MIB 的路径设置 SMIPATH 环境变量。请确保为路径包含前置冒号(:)。

$ SMIPATH=":/path/to/mibs/" smidump -k -f python CISCO-PROCESS-MIB.mib > CISCO-PROCESS-MIB_my.dic 

请注意路径定义前面的冒号。

选项 2:提供配置文件编辑

另一种方法是使用 path 选项创建一个配置文件。例如,您可以创建一个名为 smi.conf 的文件

path :/path/to/mibs/

并使用 smidump 使用该配置

$ smidump -c smi.conf -k -f python CISCO-PROCESS-MIB.mib > CISCO-PROCESS-MIB_my.dic