[comment]: # ({8afcd82f-8afcd82f})
# 3 MIB文件

[comment]: # ({/8afcd82f-8afcd82f})

[comment]: # ({80a94110-f224bb08})
#### 介绍

MIB 是管理信息库（Management Information Base）的缩写。MIB 文件允许使用 OID（object 标识符）的文本表示形式。
在使用 Zabbix 监控 SNMP 设备时，可以使用原始的 OID，但如果您更习惯使用文本表示形式，则需要安装 MIB 文件。

例如，

    ifHCOutOctets

是以下 OID 的文本表示形式：

    1.3.6.1.2.1.31.1.1.1.10

[comment]: # ({/80a94110-f224bb08})

[comment]: # ({7b2aa063-5aed9e1b})
#### 安装MIB文件

在基于 Debian 的系统上：

    apt install snmp-mibs-downloader
    download-mibs

在基于 RedHat 的系统上：

    dnf install net-snmp-libs

[comment]: # ({/7b2aa063-5aed9e1b})

[comment]: # ({02b2b423-5346f669})
#### 启用 MIB 文件

在基于 RedHat 的系统上，MIB 文件默认情况下应已启用。
在基于 Debian 的系统上，你需要编辑 file `/etc/snmp/snmp.conf` 并注释掉包含 `mibs :` 的行。

    # 由于许可原因，snmp 软件包不包含 MIB 文件，默认情况下
    # MIB 的加载已被禁用。如果你已添加 MIB 文件，可以通过
    # 注释掉以下行来重新启用它们的加载。
    mibs :

[comment]: # ({/02b2b423-5346f669})

[comment]: # ({4bbacb8e-bb4c3c1f})
#### 测试MIB文件

可以使用 `snmpwalk` 工具测试 SNMP MIB。如果尚未安装该工具，请按照以下说明操作。

在基于Debian的系统上：

    `apt install snmp`

在基于 RedHat 的系统上：

    `dnf install net-snmp-utils`

然后，当您query a时，以下命令不得给出错误
网络设备:

    $ snmpwalk -v 2c -c public <NETWORK DEVICE IP> ifInOctets
    IF-MIB::ifInOctets.1 = Counter32: 176137634
    IF-MIB::ifInOctets.2 = Counter32: 0
    IF-MIB::ifInOctets.3 = Counter32: 240375057
    IF-MIB::ifInOctets.4 = Counter32: 220893420
    [...]

[comment]: # ({/4bbacb8e-bb4c3c1f})

[comment]: # ({9e9f20b6-87dbd7d4})
#### 在Zabbix中使用MIB

需要牢记的最重要一点是，Zabbix 进程不会get
获知对 MIB 文件所做的更改。因此每次更改后，都必须重启 Zabbix server 或 proxy，例如：

    systemctl restart zabbix-server

此后，对 MIB 文件所做的更改才会生效。

[comment]: # ({/9e9f20b6-87dbd7d4})

[comment]: # ({2a393106-efd836b8})
#### 使用自定义 MIB 文件

每个GNU/Linux发行版都附带标准MIB文件。
但某些设备供应商会提供他们自己的MIB文件。

假设您希望使用
[CISCO-SMI](ftp://ftp.cisco.com/pub/mibs/v2/CISCO-SMI.my) MIB file。
以下指令将下载并安装该文件：

    wget ftp://ftp.cisco.com/pub/mibs/v2/CISCO-SMI.my -P /tmp
    mkdir -p /usr/local/share/snmp/mibs
    grep -q '^mibdirs +/usr/local/share/snmp/mibs' /etc/snmp/snmp.conf 2>/dev/null || echo "mibdirs +/usr/local/share/snmp/mibs" >> /etc/snmp/snmp.conf
    cp /tmp/CISCO-SMI.my /usr/local/share/snmp/mibs

现在您应该可以使用它了。尝试将MIB file中的
object *ciscoProducts* 名称翻译为OID：

    snmptranslate -IR -On CISCO-SMI::ciscoProducts
    .1.3.6.1.4.1.9.1

如果收到错误而非OID，请确保之前所有
命令均未返回错误。

object名称翻译成功，您现在可以使用自定义MIB
file。注意query中使用的MIB名称前缀(*CISCO-SMI::*)。
在使用命令行工具及Zabbix时都需要这个前缀。

在Zabbix中使用此MIB file前，
请勿忘记重启Zabbix server/proxy。

::: noteimportant
请注意MIB文件可能存在依赖关系。
即一个MIB可能需要另一个MIB。为满足这些
依赖关系，您必须安装所有相关MIB
文件。

:::

[comment]: # ({/2a393106-efd836b8})
