[comment]: # ({382ff618-7d35b712})
# 10 使用 Zabbix 监控网络交换机或路由器

[comment]: # ({/382ff618-7d35b712})

[comment]: # ({f468c639-aea68f1a})
## 简介

本指南将引导您完成使用 Zabbix 开始对网络交换机或路由器进行基础监控所需的步骤。
本文以 Cisco 路由器为例，但该流程适用于任何启用了 SNMP 的网络设备。

**本指南适用对象**

本指南面向 Zabbix 新用户以及希望快速为网络设备启用基础监控的网络管理员。
如果您需要深度自定义或高级配置选项，请参阅 [SNMP agent](/manual/config/items/itemtypes/snmp) 页面或 Zabbix 手册中的 [Configuration](/manual/config) 部分。

**前提条件**

在继续本指南之前，请确保您已具备以下条件：

-   已安装 Zabbix 服务器和 Zabbix 前端：请根据您的操作系统安装说明进行安装（参见 [Installation from packages](https://www.zabbix.com/download) 和 [Web interface installation](/manual/installation/frontend)）。
-   如果需要监控本地网络指标，已安装 Zabbix agent。
-   已启用 SNMP 的设备：启用了 SNMP 的网络交换机或路由器（例如 Cisco 路由器）。
-   已安装 [MIB files](/manual/config/items/itemtypes/snmp/mibs)：安装 MIB 文件可使 Zabbix 将数字 OID 转换为便于阅读的名称和描述。  
如果没有正确的 MIB 支持，您可能只能看到数字值，这会使监控项配置和问题排查更加困难。

在 Ubuntu 上安装 MIB 文件：

1\. 安装 MIB 下载器软件包：

```bash
sudo apt-get update
sudo apt-get install snmp-mibs-downloader
```

如果您需要添加厂商特定的 MIB（例如来自 Cisco、Juniper 的 MIB），请将其放置到相应的 MIB 目录中：

-   对于基于 Linux 的系统，常见位置包括 /usr/share/snmp/mibs/ 或 /usr/local/share/snmp/mibs/。
-   对于 Zabbix 安装，MIB 文件可存储在 /var/lib/zabbix/mibs/。

请确保 MIBDIRS 环境变量或 snmp.conf 文件中包含正确的路径。

要验证系统是否识别了新的 MIB，请使用：

```bash
snmptranslate -IR -On <MIB-NAME>::<object>
```

有关详细说明，请参阅您的 SNMP 库文档：

-   [Cisco MIBs](https://github.com/cisco/cisco-mibs)
-   [Juniper MIBs](https://apps.juniper.net/mib-explorer/)

2\. 编辑 ``/etc/snmp/snmp.conf``，并将以 `mibs :` 开头的行注释掉，以允许系统加载所有可用的 MIB。

3\. 通过运行 ``snmpwalk`` 进行验证（例如，``snmpwalk -v 2c -c <your_community_string> <device_IP>``），并检查 OID 是否以描述性名称显示。

根据您的环境，本指南中的某些步骤可能会略有不同。
本指南基于 Ubuntu 环境以及被监控的 Cisco Catalyst 3750V2-24FS 网络设备编写。

假设您的网络设备已经完成物理安装并已连接。

[comment]: # ({/f468c639-aea68f1a})

[comment]: # ({aea0a787-703f62e1})
## 配置网络设备（Cisco 路由器示例）

要通过 SNMP 进行监控，您必须配置网络设备以允许 SNMP 查询。  
以下示例适用于 SNMPv2，且未考虑现有设置。  
注意：应用这些命令可能会覆盖当前的 SNMP 配置。

对于 Cisco 路由器，配置通常包括以下步骤。

[comment]: # ({/aea0a787-703f62e1})

[comment]: # ({08cfb265-e36b1d35})
### SNMPv2 示例

1\. 启用 SNMP 并设置团体字串。

[登录](https://www.cisco.com/c/en/us/support/docs/smb/switches/cisco-small-business-300-series-managed-switches/smb4982-access-an-smb-switch-cli-using-ssh-or-telnet.html)到 Cisco 路由器的控制台并进入配置模式：

```default
configure terminal
```

然后，通过指定只读团体字串来[启用 SNMP](https://www.cisco.com/c/en/us/support/docs/ip/simple-network-management-protocol-snmp/7282-12.html)。
例如：

```default
snmp-server community <your_community_string> RO
```

将 ``<your_community_string>`` 替换为您的安全团体字串。
注意：RO（只读）选项允许 SNMP 从设备检索数据，但会阻止任何配置更改。

出于安全原因，建议将 SNMP 访问限制为仅必要的设备。
有关配置访问控制列表（ACL）的更多指导，请参阅 [Cisco 官方文档](https://www.cisco.com/c/en/us/td/docs/switches/datacenter/nexus3000/sw/security/503_u2_2/Cisco_n3k_security_cg_503_u2_2_chapter7.html?dtid=osscdc000283)。

2\. 保存配置。

保存您的更改，以确保 SNMP 设置在重启后仍然保留：

```default
write memory
```

[comment]: # ({/08cfb265-e36b1d35})

[comment]: # ({5c8aa85b-87017956})
### SNMPv3 示例

SNMPv3 通过身份验证和加密提供增强的安全性。  
其配置比 SNMPv2 更安全，应根据设备特定的文档进行核实。

1\. 创建一个 SNMP 组。

配置一个启用了 privacy（加密）的 SNMPv3 组：

```default
configure terminal
snmp-server group <your_group> v3 priv
```

2\. 创建一个 SNMP 用户。

添加一个启用了身份验证和 privacy 的 SNMPv3 用户。  
请将占位符替换为所需的值：

```default
snmp-server user <your_user> <your_group> v3 auth md5 <auth_password> priv aes 128 <priv_password>
```

3\. 保存配置：

```default
write memory
```

有关更多详细信息或特定型号的说明，可参考外部 [Cisco SNMP 配置教程](https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/snmp/configuration/xe-16/snmp-xe-16-book/nm-snmp-cfg-snmp-support.html)。  
不过，本指南提供的是启用 SNMP 监控的基本步骤。

[comment]: # ({/5c8aa85b-87017956})

[comment]: # ({9891bde8-8df5d064})
## 配置 Zabbix 前端

[comment]: # ({/9891bde8-8df5d064})

[comment]: # ({1cae7e5e-3dc3ccce})
### 在 Zabbix 前端中创建主机

1\. 登录 Zabbix 前端。

2\. 添加新主机。

导航到 *Data collection > Hosts*，然后点击 *Create host*。

-   *Host name*: 为您的设备输入一个名称（例如，“Cisco Router”）。
-   Host groups: 选择一个现有组，或创建一个新组，例如“Network Devices”。
-   Interfaces:
    -   在 Interfaces 下点击 *Add*。
    -   选择 *SNMP* 作为接口类型。
    -   输入您的 Cisco 路由器的 IP 地址或 DNS 名称。
    -   设置默认 SNMP 端口（通常为 161）。
    -   使用下拉菜单选择合适的 SNMP 版本（例如 SNMPv2）。
    -   对于 SNMPv1/v2，在 *SNMP community* 字段中输入 community 字符串。
    对于 SNMPv3，将提示输入其他凭据（*Context name*、*Security name* 和 *Security level* 等）。

3\. 关联模板

在 *Templates* 字段中，选择最适合您设备的 SNMP 模板。
Zabbix 为许多设备系列提供了一系列预置的 [SNMP templates](/manual/config/templates_out_of_the_box/network_devices#devices)。
例如，如果您正在监控 Cisco 设备，请选择与您的设备操作系统或型号相对应的模板（例如 Cisco IOS SNMP 或 Cisco Catalyst 3750\<device model\> SNMP）。

4\. 点击 *Add* 保存主机。

![](../../../assets/en/manual/guides/switch_host.png){width="600"}

![](../../../assets/en/manual/guides/switch_host1.png){width="600"}

[comment]: # ({/1cae7e5e-3dc3ccce})

[comment]: # ({95c1af51-a35d4c3a})
## 查看已收集的监控指标

恭喜！Zabbix 现已完成设置，可用于监控您的网络设备。

最新数据：

-   在 Zabbix 前端中，导航到 Monitoring > Latest data。

![](../../../assets/en/manual/guides/switch_hosts.png){width="600"}

-   选择您的 "Cisco Router" 主机（或已发现的主机），以查看硬件和网络运行时间、ICMP 丢包、ping 以及响应时间等监控指标。

![](../../../assets/en/manual/guides/switch_data.png){width="600"}

-   图形和屏幕：

要可视化性能数据，请点击 SNMP 监控项旁边的 *Graphs*，以查看详细指标。

下一步，您可以：

-   [添加自定义 SNMP 监控项](#create-snmp-items)，以监控更多指标。
-   [设置问题告警](#set-up-problem-alerts)，以接收潜在问题的通知。

[comment]: # ({/95c1af51-a35d4c3a})

[comment]: # ({9cbc3034-ff776e8a})
### 创建 SNMP 监控项

主机设置完成后，您可以创建监控项来监控特定指标。  
注意：如果您使用的是模板，这一步是可选的，因为模板中已经包含默认的监控项集合。

1\. 确定 SNMP OID：

使用 ``snmpwalk`` 命令列出设备上可用的 OID。  
例如：

```bash
snmpwalk -v 2c -c <your_community_string> <device_IP> .
```

找到您希望监控的指标对应的 OID（例如，IF-MIB::ifHCInOctets.3 表示端口 3 的入站流量）。  
要获取数值形式的 OID，您可以使用：

```bash
snmpget -v 2c -c <your_community_string> -On <device_IP> IF-MIB::ifHCInOctets.3
```

2\. 创建 SNMP 监控项：

-   导航到 *数据采集 > 主机*，然后在您的 SNMP 主机上点击 *监控项* 选项卡，并点击 *创建监控项*。
-   *名称*：输入一个描述性名称（例如，“端口 3 入站流量”）。
-   *类型*：选择 *SNMP agent*。
-   *键值*：提供一个有意义的键值（例如，``cisco.ifHCInOctets.3``）。
-   *主机接口*：确保已选择 SNMP 接口。
-   *SNMP OID*：使用支持的格式之一输入 OID，例如：
    -   ``get[1.3.6.1.2.1.31.1.1.1.6.3]`` 用于获取单个值；
    -   ``walk[1.3.6.1.2.1.31.1.1.1.6.3]`` 用于异步检索一个值子树。

![](../../../assets/en/manual/guides/switch_item.png){width="600"}

-   *预处理*（如需要）：如果该监控项返回的是累积计数器（例如接口流量），请切换到 *预处理* 选项卡，并添加类似“每秒变化”的预处理步骤来计算速率。

![](../../../assets/en/manual/guides/switch_preprocessing.png){width="600"}

要在一次 SNMP 事务中检索多个值，您可以使用 ``walk[OID1,OID2,...]`` 语法指定多个 OID。

[comment]: # ({/9cbc3034-ff776e8a})

[comment]: # ({53a42dcd-1b28232c})
### 在数字 OID 与 MIB 名称之间进行转换

使用 SNMP 时，您可能需要在数字 OID 与其对应的 MIB 名称之间进行转换。
这种转换有助于更轻松地识别和排查指标。

-   将 MIB 名称转换为数字 OID：使用带有 ``-On`` 选项的 ``snmptranslate`` 命令。
例如，要将 MIB 名称 ``IF-MIB::ifHCInOctets.3`` 转换为其数字 OID，请运行：

```bash
snmptranslate -On IF-MIB::ifHCInOctets.3
```

此命令可能输出：

```bash
.1.3.6.1.2.1.31.1.1.1.6.3
```

-   将数字 OID 转换为 MIB 名称：使用带有 ``-IR``（或 ``-m ALL``）选项的 ``snmptranslate`` 命令进行反向转换。
例如，要将数字 OID ``.1.3.6.1.2.1.31.1.1.1.6.3`` 转换回其 MIB 名称，请运行：

```bash
snmptranslate -IR -On .1.3.6.1.2.1.31.1.1.1.6.3
```

此命令可能输出：

```bash
IF-MIB::ifHCInOctets.3
```

[comment]: # ({/53a42dcd-1b28232c})

[comment]: # ({675e2b28-c98bb7b1})
## 设置问题告警

本指南提供了发送电子邮件告警的基本配置步骤。

1\. 导航到 [*用户设置 > 个人资料*](/manual/web_interface/user_profile)，切换到 *介质* 选项卡并[添加您的电子邮件](/manual/installation/quick_guides/basic_config/login#adding-user)。

![](../../../assets/en/manual/quickstart/new_media.png){width="600"}

2\. 按照[接收问题通知](/manual/installation/quick_guides/basic_config/notification)指南进行操作。

下次当 Zabbix 检测到问题时，您应该会通过电子邮件收到告警。

[comment]: # ({/675e2b28-c98bb7b1})

[comment]: # ({1be06fac-a0c24d90})
## 测试您的配置

为确保 Zabbix 能正确检测网络性能问题，可通过提高 ICMP ping 响应时间阈值来模拟一个真实问题。

1\. 在 Zabbix 中打开您的“Cisco Router”主机配置。

2\. 导航到 *Macros* 选项卡，并选择 *Inherited and host macros*。

3\. 找到 ``{$ICMP_RESPONSE_TIME_WARN}`` 宏（或类似的响应时间阈值宏）。

4\. 将其设置为一个非常低的值（例如 0.001），以便在 ping 响应超过该值时触发告警。

5\. 单击 *Update* 以应用更改。

6\. 稍等片刻，让 Zabbix 检测到这个模拟的问题。

7\. 导航到 *Monitoring > Problems*，确认是否出现告警（例如“High ICMP ping response time”）。

![](../../../assets/en/manual/guides/switch_problem.png){width="600"}

如果已[配置](#set-up-problem-alerts)告警，您还应收到一条问题告警。

8\. 将宏值恢复为原始设置，然后单击 *Update* 保存更改。

9\. 确认问题已解决，并从 *Problems* 部分中消失。

[comment]: # ({/1be06fac-a0c24d90})

[comment]: # ({28c7c206-d7537870})
## SNMP 监控故障排查

如果您发现 Zabbix 前端中的 SNMP 图标显示为红色，或者未采集到任何数据，请尝试以下步骤：

1\. 检查 SNMP 连通性。

对于 SNMPv2，请在您的 Zabbix 服务器上运行以下命令：

```bash
snmpwalk -v 2c -c <community_string> <device_IP> .
```

此命令用于验证设备是否会响应 SNMP 查询。

对于 SNMPv3，请包含相应的 SNMPv3 凭据：

```bash
snmpwalk -v3 -u <your_user> -l authPriv -a MD5 -A <auth_password> -x AES -X <priv_password> <device_IP> .
```

这可验证 SNMPv3 凭据是否正确，以及设备是否正在安全地响应。

2\. 确保已按照[先决条件](#prerequisites)中的说明安装并启用 MIB 文件。  
为确保这一点，在查询网络设备时，以下命令不应返回错误：

```bash
snmpwalk -v 2c -c <your_community_string> <device_IP> ifInOctets
```

这应返回已翻译的 OID，且不出现错误。

3\. 确认 Zabbix 中配置的 SNMP 版本和凭据与设备上设置的一致。  
例如，检查 Zabbix 主机配置中的 SNMP 设置，并将其与设备配置进行核对。  
在 Cisco 设备上，您可以通过运行以下命令检查 SNMP 设置：

```default
show running-config | include snmp
```

这可确保 community string（对于 SNMPv2）或 SNMPv3 用户详细信息正确无误。

4\. 验证您的网络设备上是否已正确启用 SNMP。  
在 Cisco 路由器上，登录控制台并运行：

```default
show running-config | include snmp
```

此命令会显示当前生效的 SNMP 配置，并帮助确认 SNMP 是否已正确配置。

5\. 确保 Zabbix 服务器与设备之间没有防火墙或网络问题阻止 SNMP 流量（通常使用端口 161）。  
您可以使用以下命令测试连通性：

nc -zv <device_IP> 161

``nc -zv`` 用于检查设备上的 161 端口是否已打开并处于监听状态。

此外，如果您在 Ubuntu 上使用 UFW，请检查防火墙状态：

```bash
sudo ufw status
```

或者，对于 iptables：

```bash
sudo iptables -L -n
```

6\. 查看 Zabbix 服务器日志文件中是否存在任何与 SNMP 相关的错误，以帮助定位问题：

```bash
tail -f /tmp/zabbix_server.log
```

``tail -f`` 可让您实时监控日志更新。

[comment]: # ({/28c7c206-d7537870})

[comment]: # ({20664b64-aeb05d60})
**另请参阅：**

- [创建监控项](/manual/config/items/item) - 了解如何添加额外的指标。
- [SNMP agent](/manual/config/items/itemtypes/snmp) - 有关使用 Zabbix 进行 SNMP 监控的更多信息。
- [网络设备的标准化模板](/manual/config/templates_out_of_the_box/network_devices) - 有关可用 SNMP 模板的信息。
- [发现 SNMP OID](/manual/discovery/low_level_discovery/examples/snmp_oids_walk) - 有关在交换机上进行 SNMP 发现的更多信息。
- [配置网络发现规则](/manual/discovery/network_discovery/rule) - 有关如何配置 Zabbix 用于发现主机和服务的网络发现规则的更多信息。

[comment]: # ({/20664b64-aeb05d60})
