[comment]: # ({03437da9-03437da9})
# 4 SNMP OID 发现

[comment]: # ({/03437da9-03437da9})

[comment]: # ({cf8bf5a8-cf8bf5a8})
#### 概述

本节我们将在一台交换机上执行SNMP
[discovery](/manual/discovery/low_level_discovery)操作。

[comment]: # ({/cf8bf5a8-cf8bf5a8})

[comment]: # ({48556d91-d8452a6a})
#### 监控项键

与file系统和网络接口发现不同，监控项并不强制要求包含"snmp.discovery"键值 - 只要监控项属于SNMPagent类型即可满足条件。

配置发现规则的步骤如下：

-   前往：*配置* → *模板*
-   在对应模板行中点击*发现*

![](../../../../../assets/en/manual/discovery/low_level_discovery/templates_snmp.png)

-   点击屏幕右上角的*创建发现规则*
-   按照
    screenshot below

中的要求填写发现规则表单
![](../../../../../assets/en/manual/discovery/low_level_discovery/lld_rule_snmp.png)

所有必填字段均以红色星号标记。

待发现的OID在SNMP OID字段中按以下格式定义：`discovery[{#MACRO1}, oid1, {#MACRO2}, oid2, …,]`

其中*{\#MACRO1}*、*{\#MACRO2}*...是有效的LLD宏名称，而*oid1*、*oid2*...是能为这些宏生成有效值的OID。系统会为发现的实体应用内置宏*{\#SNMPINDEX}*（包含被发现OID的索引值），发现的实体按*{\#SNMPINDEX}*宏值进行分组。

为便于理解，我们在交换机上执行几个snmpwalk命令：

    $ snmpwalk -v 2c -c public 192.168.1.1 IF-MIB::ifDescr
    IF-MIB::ifDescr.1 = STRING: WAN
    IF-MIB::ifDescr.2 = STRING: LAN1
    IF-MIB::ifDescr.3 = STRING: LAN2

    $ snmpwalk -v 2c -c public 192.168.1.1 IF-MIB::ifPhysAddress

    IF-MIB::ifPhysAddress.1 = STRING: 8:0:27:90:7a:75
    IF-MIB::ifPhysAddress.2 = STRING: 8:0:27:90:7a:76
    IF-MIB::ifPhysAddress.3 = STRING: 8:0:27:2b:af:9e

并将SNMP OID设置为：
`discovery[{#IFDESCR}, ifDescr, {#IFPHYSADDRESS}, ifPhysAddress]`

现在该规则将发现以下实体：{\#IFDESCR}宏设为**WAN**、**LAN1**和**LAN2**，{\#IFPHYSADDRESS}宏设为**8:0:27:90:7a:75**、**8:0:27:90:7a:76**和**8:0:27:2b:af:9e**，{\#SNMPINDEX}宏设为被发现OID的索引值**1**、**2**和**3**：

```{.java}
[
    {
        "{#SNMPINDEX}": "1",
        "{#IFDESCR}": "WAN",
        "{#IFPHYSADDRESS}": "8:0:27:90:7a:75"
    },
    {
        "{#SNMPINDEX}": "2",
        "{#IFDESCR}": "LAN1",
        "{#IFPHYSADDRESS}": "8:0:27:90:7a:76"
    },
    {
        "{#SNMPINDEX}": "3",
        "{#IFDESCR}": "LAN2",
        "{#IFPHYSADDRESS}": "8:0:27:2b:af:9e"
    }
]
```
若实体不包含指定的OID，则该实体会省略对应宏。例如以下数据：

    ifDescr.1 "Interface #1"
    ifDescr.2 "Interface #2"
    ifDescr.4 "Interface #4"

    ifAlias.1 "eth0"

    ifAlias.2 "eth1"
    ifAlias.3 "eth2"
    ifAlias.5 "eth4"

此时SNMP发现
`discovery[{#IFDESCR}, ifDescr, {#IFALIAS}, ifAlias]`将返回以下结构：

```{.java}
[
    {
        "{#SNMPINDEX}": 1,
        "{#IFDESCR}": "Interface #1",
        "{#IFALIAS}": "eth0"
    },
    {
        "{#SNMPINDEX}": 2,
        "{#IFDESCR}": "Interface #2",
        "{#IFALIAS}": "eth1"
    },
    {
        "{#SNMPINDEX}": 3,
        "{#IFALIAS}": "eth2"
    },
    {
        "{#SNMPINDEX}": 4,
        "{#IFDESCR}": "Interface #4"
    },
    {
        "{#SNMPINDEX}": 5,
        "{#IFALIAS}": "eth4"
    }
]
```

[comment]: # ({/48556d91-d8452a6a})

[comment]: # ({96106d89-cc4d2566})
#### 监控项原型

以下截图展示了如何在监控项原型中使用这些宏:

![](../../../../../assets/en/manual/discovery/low_level_discovery/item_prototype_snmp.png)

您可以根据需要create任意数量的监控项原型:

![](../../../../../assets/en/manual/discovery/low_level_discovery/item_prototypes_snmp.png){width="600"}

[comment]: # ({/96106d89-cc4d2566})

[comment]: # ({da4e62e5-042beac9})
#### 触发器原型

以下截图展示了如何在触发器原型中使用这些宏:

![](../../../../../assets/en/manual/discovery/low_level_discovery/trigger_prototype_snmp.png){width="600"}

![](../../../../../assets/en/manual/discovery/low_level_discovery/trigger_prototypes_snmp.png){width="600"}

[comment]: # ({/da4e62e5-042beac9})

[comment]: # ({29d1b142-fbe4f4fa})
#### 图形原型

以下截图展示了如何在图形原型中使用这些宏:

![](../../../../../assets/en/manual/discovery/low_level_discovery/graph_prototype_snmp.png){width="600"}

![](../../../../../assets/en/manual/discovery/low_level_discovery/graph_prototypes_snmp.png){width="600"}

我们的发现规则摘要:

![](../../../../../assets/en/manual/discovery/low_level_discovery/lld_rules_snmp.png){width="600"}

[comment]: # ({/29d1b142-fbe4f4fa})

[comment]: # ({16927fe4-76c066a2})
#### 发现的实体

当服务器运行时，它将create基于SNMP发现规则返回的值创建真实的监控项、触发器和图形。在主机配置中，它们会带有指向来源发现规则的橙色链接前缀。

![](../../../../../assets/en/manual/discovery/low_level_discovery/discovered_items_snmp.png){width="600"}

![](../../../../../assets/en/manual/discovery/low_level_discovery/discovered_triggers_snmp.png){width="600"}

![](../../../../../assets/en/manual/discovery/low_level_discovery/discovered_graphs_snmp.png){width="600"}

[comment]: # ({/16927fe4-76c066a2})
