21.10. 使用 SNMP 监控目录服务器

第 21 章 监控服务器和数据库活动 中描述的服务器和数据库活动监控日志设置特定于目录服务器。您还可以使用简单网络管理协议(SNMP)监控目录服务器,这是用于监控网络活动的管理协议,可用于实时监控各种设备。
通过 AgentX 子代理可以通过 SNMP 监控目录服务器。SNMP 监控收集有关目录服务器的有用信息,如绑定信息、服务器上执行的操作和缓存信息。Directory Server SNMP 子代理支持 SNMP 陷阱来发送有关服务器实例运行状态更改的通知。

21.10.1. 关于 SNMP

SNMP 已经成为了其广泛的流行性。这是这种互操作性,以及 SNMP 可以处理特定于整个不同设备类的许多作业,这使得 SNMP 成为全局网络控制和监控的理想标准机制。SNMP 允许网络管理员统一所有网络监控活动,以及更广泛的目录服务器监控部分。
SNMP 用于交换网络活动的数据。使用 SNMP 时,数据在受管设备与网络管理应用程序(NMS)之间传输,用户远程管理网络。受管设备是运行 SNMP 的任何内容,如主机、路由器和目录服务器。NMS 通常是安装一个或多个网络管理应用程序的强大工作站。网络管理应用程序以图形方式显示有关受管设备的信息,该设备是启动或关闭的设备,以及接收多少错误消息等。
NMS 和受管设备之间通过使用两种类型的代理传输信息:子代理和 主代理。子代理收集有关受管设备的信息,并将信息传递给主代理。目录服务器具有子代理。主代理在各种子代理和 NMS 之间交换信息。master 代理通常在与它与之通信的子代理相同的主机上运行,尽管它可以在远程计算机上运行。
SNMP 属性的值(其他称为变量)保存在受管设备上,并根据需要报告到 NMS。每个变量称为 受管对象,这是代理可访问的任何内容,并发送到 NMS。所有受管对象都在管理信息基础(MIB)中定义,这是具有类似树结构的数据库。层次结构的顶级包含有关网络的最常规信息。每个分支都更具体,处理单独的网络区域。
SNMP 以协议数据单元(PDU)的形式交换网络信息。PDU 包含有关存储在受管设备上的变量的信息。这些变量(也称为受管对象)具有根据需要向 NMS 报告的值和标题。NMS 和受管设备之间的通信由 NMS 发送更新或请求信息,或者在服务器关闭时发送通知或警告(称为 trap )或警告(称为 trap )。

21.10.2. 启用和禁用 SNMP 支持

默认情况下,在 Directory 服务器中启用了 SNMP 协议,在配置子代理后,您可以使用它。
要在实例中启用或禁用 SNMP,请将 nsSNMPEnabled 参数设置为 onoff。例如,在 Directory 服务器实例中禁用 SNMP:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x

dn: cn=SNMP,cn=config
changetype: modify
replace: nsSNMPEnabled
nsSNMPEnabled: on

21.10.3. 设置参数以使用 SNMP 识别实例

目录服务器提供以下属性,可帮助识别使用 SNMP 的实例:
  • nsSNMPOrganization
  • nsSNMPLocation
  • nsSNMPContact
  • nsSNMPDescription
有关参数的详情,请查看红帽目录服务器 配置、命令和文件参考 中的 cn=SNMP 部分中的描述。
例如,要将 nsSNMPLocation 参数设置为 Munich,请
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x

dn: cn=SNMP,cn=config
changetype: modify
replace: nsSNMPLocation
nsSNMPLocation: Munich, Germany

21.10.4. 为目录服务器设置 SNMP 代理

要使用 SNMP 协议从目录服务器查询信息,请设置 SNMP 代理:
  1. 安装 389-ds-base-snmpnet-snmp 软件包:
    # yum install 389-ds-base-snmp net-snmp
  2. 要配置 SNMP master 代理,请编辑 /etc/snmp/snmpd.conf 文件,添加以下条目来启用代理可扩展性(AgentX)协议:
    master agentx
    有关 AgentX 协议的详情,请参考 RFC 2741
  3. 要配置 SNMP 子代理,请编辑 /etc/dirsrv/config/ldap-agent.conf 文件,为要监控的每个目录服务器实例添加一个 server 参数。例如:
    server slapd-instance_name
  4. 另外,还可创建一个 SNMP 用户帐户:
    1. 停止 snmpd 服务:
      # systemctl stop snmpd
    2. 创建 SNMP 用户帐户。例如:
      # net-snmp-create-v3-user -A authentication_password -a SHA \
           -X private_password -x AES user_name
      有关命令中使用的参数的详情,请查看 net-snmp-create-v3-user(1) man page。
    3. 启动 snmpd 服务:
      # systemctl start snmpd
  5. 另外,还可设置目录服务器描述性属性。详情请查看 第 21.10.3 节 “设置参数以使用 SNMP 识别实例”
  6. 启动 dirsrv-snmp 服务:
    # systemctl start dirsrv-snmp
  7. 另外,验证配置:
    1. 安装 net-snmp-utils 软件包:
      # yum install net-snmp-utils
    2. 查询目录服务器对象标识符(OID)。例如:
      # snmpwalk -v3 -u user_name -M /usr/share/snmp/mibs:/usr/share/dirsrv/mibs/ \
           -l AuthPriv -m +RHDS-MIB -A authentication_password -a SHA
           -X private_password -x AES server.example.com .1.3.6.1.4.1.2312.6.1.1

21.10.5. 配置 SNMP Traps

SNMP 陷阱基本上是一个阈值,它会在被监控的服务器遇到通知时触发通知。要使用陷阱,必须将 master 代理配置为接受陷阱并与其执行。例如,对于目录服务器实例的管理员,陷阱可以触发电子邮件通知。
子代理仅负责将陷阱发送到 master 代理。master 代理和陷阱处理器必须根据您使用的 SNMP master 代理的文档进行配置。
陷阱通过 实体表 的信息相关联,其中包含特定于目录服务器实例的信息,如名称和版本号。实体表第 21.10.6.3 节 “实体表” 中进行了描述。这意味着,当主代理收到陷阱时执行的操作是灵活的,例如向一个实例的 dsEntityContact 变量中定义的电子邮件地址发送电子邮件,同时向另一个实例的 dsEntityContact 变量中的页面号发送通知。
subagent 支持两个陷阱:
  • DirectoryServerDown.每当子代理检测到目录服务器可能没有运行时,都会生成此陷阱。此陷阱将发送有目录服务器实例描述、版本、物理位置和联系信息,这些信息在 dsEntityDescrdsEntityVersdsEntityLocationdsEntityContact 变量中详细介绍。
  • DirectoryServerStart.每当子代理检测到目录服务器已启动或重启时,都会生成此陷阱。此陷阱将发送有目录服务器实例描述、版本、物理位置和联系信息,这些信息在 dsEntityDescrdsEntityVersdsEntityLocationdsEntityContact 变量中详细介绍。

21.10.6. 使用管理信息基础

目录服务器的 MIB 是存储在 /usr/share/dirsrv/mibs 目录中的名为 redhat-directory.mib 的文件。此 MIB 包含与目录的网络管理相关的变量定义。这些变量称为受管对象。使用目录 MIB 和 Net-SNMP,您可以像网络上的所有其他受管设备一样监控您的目录。有关使用 MIB 的详情,请参考 第 21.10.4 节 “为目录服务器设置 SNMP 代理”
客户端工具需要加载目录服务器 MIB,以使用以下部分中列出的变量名称。
使用目录 MIB 可让管理员使用 SNMP 查看目录的管理信息,并实时监控服务器。目录 MIB 分为四个不同的受管对象表:
注意
SNMP 监控的所有目录服务器属性对计数器使用 64 位整数,即使在 32 位系统上也是如此。

21.10.6.1. 操作表

Operations Table 提供有关目录服务器访问、操作和错误的统计信息。表 21.1 “操作表:受管对象和描述” 描述存储在 redhat-directory.mib 文件 的操作 表中的受管对象。

表 21.1. 操作表:受管对象和描述

受管对象 描述
dsAnonymousBinds 从服务器启动以来匿名绑定到目录的绑定数量。
dsUnauthBinds 从服务器启动以来,未经身份验证的绑定到目录的数量。
dsSimpleAuthBinds 从服务器启动以来,绑定到使用简单身份验证方法(如密码保护)建立的目录数量。
dsStrongAuthBinds 从服务器启动以来,绑定到使用强身份验证方法(如 TLS 或 SASL 机制)建立的目录数量。
dsBindSecurityErrors 由于身份验证失败或服务器启动以来,目录被拒绝的绑定请求数。
dsInOps 从服务器启动以来,从另一个目录转发到此目录的操作数量。
dsReadOps 从应用程序启动以来此目录服务的读取操作数量。此对象的值始终为 0, 因为 LDAP 使用搜索操作间接实施读取操作。
dsCompareOps 从服务器启动以来此目录提供服务的比较操作数量。
dsAddEntryOps 从服务器启动以来此目录提供服务的添加操作数量。
dsRemoveEntryOps 从服务器启动以来此目录提供服务的删除操作数量。
dsModifyEntryOps 从服务器启动以来此目录提供服务的修改操作数量。
dsModifyRDNOps 从服务器启动以来此目录提供服务的修改 RDN 操作数量。
dsListOps 从服务器启动以来此目录提供服务的列表操作数。此对象的值始终为 0, 因为 LDAP 使用搜索操作间接实施列表操作。
dsSearchOps 从服务器启动以来此目录提供服务的搜索操作总数。
dsOneLevelSearchOps 从服务器启动以来此目录提供服务的一个级别的搜索操作数。
dsWholeSubtreeSearchOps 从服务器启动以来此目录提供服务的整个子树搜索操作数量。
dsReferrals 此目录返回的引用数量,以响应自服务器启动以来的客户端请求。
dsSecurityErrors 转发到没有满足安全要求的这个目录的操作数量。
dsErrors 因为错误(除了安全或引用错误)无法提供服务的请求数。错误包括名称错误、更新错误、属性错误和服务错误。部分服务请求不会计算为错误。

21.10.6.2. 条目表

Entries Table 提供有关目录条目内容的信息。表 21.2 “条目表:受管对象和描述” 描述存储在 redhat-directory.mib 文件中的 Entries 表中的受管对象。

表 21.2. 条目表:受管对象和描述

受管对象 描述
dsCopyEntries 此目录包含副本的目录条目数。此对象的值始终为 0 ( 因为当前没有执行任何更新)。
dsCacheEntries 目录中缓存的条目数。
dsCacheHits 从应用程序启动以来本地保存缓存的操作数量。

21.10.6.3. 实体表

Entity Table 包含有关目录服务器实例的识别信息。Entity Table 的值在 cn=SNMP,cn=config 条目中设置,如 第 21.10.3 节 “设置参数以使用 SNMP 识别实例” 所述。
表 21.3 “实体表:受管对象和描述” 描述存储在 redhat-directory.mib 文件 的实体 表中的受管对象。

表 21.3. 实体表:受管对象和描述

受管对象 描述
dsEntityDescr 为 Directory 服务器实例设置的描述。
dsEntityVers Directory 服务器实例的 Directory Server 版本号。
dsEntityOrg 负责 Directory 服务器实例的组织。
dsEntityLocation 目录服务器实例的物理位置。
dsEntityContact 负责 Directory 服务器实例的人员的名称和联系信息。
dsEntityName 目录服务器实例的名称。

21.10.6.4. 互动表

注意
subagent 不支持 Interaction 表。子代理可以查询表,但不会使用有效的数据进行更新。
表 21.4 “互动表:受管对象和描述” 描述存储在 redhat-directory.mib 文件的交互式表中的受管对象。

表 21.4. 互动表:受管对象和描述

受管对象 描述
dsIntTable 详情,在表的每一行中,与被监控目录服务器交互的历史记录相关。
dsIntEntry 包含目录服务器与对等目录服务器交互详情的条目。
dsIntIndex 唯一密钥的一部分以及 applIndex 来标识概念行,其中包含目录服务器(由 applIndex引用)和对等目录服务器之间的有用信息。
dsName 此条目所属的对等目录服务器的可分辨名称(DN)。
dsTimeOfCreation 创建此行时 sysUpTime 的值。如果在网络管理子系统初始化前创建了该条目,此对象将包含 0 的值。
dsTimeOfLastAttempt 最后一次尝试联系此目录服务器时,sysUpTime 的值。如果在网络管理子系统初始化前进行最后一次尝试,此对象将包含 0 的值。
dsTimeOfLastSuccess 最后一次尝试联系此目录服务器时,sysUpTime 的值成功。如果没有成功尝试,或者在网络管理子系统初始化前尝试上次成功尝试,则此条目将为零。
dsFailuresSinceLastSuccess 最后一次尝试联系此目录服务器成功后的失败次数。如果没有成功尝试,这个计数器将包含自创建此条目以来的失败次数。
dsFailures 创建此条目后累积失败。
dsSuccesses 创建此条目后累积成功。
dsURL 目录服务器应用程序的 URL。