查看源代码 代理配置文件的定义
所有配置数据必须包含在位于配置目录中的配置文件中。此目录的名称在 config_dir
配置参数中给出。这些文件在启动时读取,并用于初始化 SNMPv2-MIB 或 STANDARD-MIB、SNMP-FRAMEWORK-MIB、SNMP-MPD-MIB、SNMP-VIEW-BASED-ACM-MIB、SNMP-COMMUNITY-MIB、SNMP-USER-BASED-SM-MIB(根据 SNMP-USM-HMAC-SHA2-MIB 调整)、SNMP-TARGET-MIB 和 SNMP-NOTIFICATION-MIB(有关 MIB 的描述,请参阅 代理的管理)。
这些文件是
agent.conf
:请参阅 代理信息standard.conf
:请参阅 系统信息context.conf
:请参阅 上下文community.conf
:请参阅 团体target_addr.conf
:请参阅 目标地址定义target_params.conf
:请参阅 目标参数定义vacm.conf
:请参阅 VACM 的 MIB 视图usm.conf
:请参阅 USM 的安全数据notify.conf
:请参阅 通知定义
找到配置文件的目录作为参数传递给代理。
所有文件中的条目格式都是 Erlang 术语,用 '.' 和换行符分隔。在以下部分中,将描述这些术语的格式。注释可以指定为普通的 Erlang 注释。
这些文件中的语法错误在启动时通过错误报告模块的函数 config_err/2
发现并报告。
代理信息
代理信息应存储在名为 agent.conf
的文件中。
每个条目都是大小为 2 的元组
{AgentVariable, Value}。
AgentVariable
是 SNMP-FRAMEWORK-MIB 中的变量之一,或者是内部变量intAgentUDPPort
(定义代理侦听的 UDP 端口)或intAgentTransports
(定义代理的传输域和地址)之一。Value
是变量的值。
以下示例显示了 agent.conf
文件
{intAgentUDPPort, 4000}.
{intAgentTransports,
[{transportDomainUdpIpv4, {141,213,11,24}},
{transportDomainUdpIpv6, {0,0,0,0,0,0,0,1}}]}.
{snmpEngineID, "mbj's engine"}.
{snmpEngineMaxMessageSize, 484}.
这些是支持的条目及其值类型
{snmpEngine, string()}. % Mandatory
{snmpEngineMaxMessageSize, snmp_framework_mib:max_message_size()}. % Mandatory
{intAgentUDPPort, inet:port_number()}. % Optional
{intAgentTransports, [snmpa_conf:intAgentTransport()]}. % Mandatory
如果为传输域指定了“传统”传输(没有显式的 Kind
,同时处理请求和陷阱),则不能为该域指定具有特定 Kind
的传输。例如,不允许这样做
[{transportDomainUdpIpv4, {{141,213,11,24}, 4000}},
{transportDomainUdpIpv4, {{141,213,11,24}, 4001}, trap_sender}].
请注意,每个传输域只能配置每个 kind 的一个传输。
PortInfo
system
用于指示“系统”应该选择(端口号“0”(零)的正常使用方式)。端口信息“0”(零)不能用于此,因为它(在内部)用于表示“默认”端口号。
在传统的传输条目中,当 Addr
值不包含端口号时,将使用 intAgentUDPPort
的值。
请注意,(新的)扩展传输条目(包括 Kind
和 Opts
)必须指定端口信息,因为它们会忽略 intAgentUDPPort
指定的任何值。
Opts
与 net-if 进程的相同,如果存在,则优先(对于该传输)。重点是每个传输都可以有自己的套接字选项。
snmpEngineID
的值是一个字符串,对于已部署的代理,它应该具有非常特定的结构。有关详细信息,请参阅 RFC 2271/2571。
注意
仍支持旧版和中间变量
intAgentIpAddress
和intAgentTransportDomain
,因此旧的agent.conf
文件将可以工作。但是它们不能与 intAgentTransports 结合使用。
上下文
上下文信息应存储在名为 context.conf
的文件中。默认上下文 ""
不需要存在。
每行定义代理中的一个上下文。此信息在 SNMP-VIEW-BASED-ACM-MIB 的 vacmContextTable
表中使用。
每个条目都是一个术语
ContextName。
ContextName
是一个字符串。
系统信息
系统信息应存储在名为 standard.conf
的文件中。
每个条目都是大小为 2 的元组
{SystemVariable, Value}。
SystemVariable
是系统组中的一个变量,或snmpEnableAuthenTraps
。Value
是变量的值。
以下示例显示了一个有效的 standard.conf
文件
{sysDescr, "Erlang SNMP agent"}.
{sysObjectID, [1,2,3]}.
{sysContact, "(mbj,eklas)@erlang.ericsson.se"}.
{sysName, "test"}.
{sysServices, 72}.
{snmpEnableAuthenTraps, enabled}.
必须为所有在 MIB 中缺少默认值的变量提供值。
团体
团体信息应存储在名为 community.conf
的文件中。如果代理配置为 SNMPv1 或 SNMPv2c,则必须存在该文件。
SNMP团体是 SNMP 代理和一组 SNMP 管理器之间的关系,它定义了身份验证、访问控制和代理特性。
相应的表是 SNMP-COMMUNITY-MIB 中的 snmpCommunityTable
。
每个条目都是一个术语
{CommunityIndex, CommunityName, SecurityName, ContextName, TransportTag}。
CommunityIndex
是一个非空字符串。CommunityName
是一个字符串。SecurityName
是一个字符串。ContextName
是一个字符串。TransportTag
是一个字符串。
VACM 的 MIB 视图
有关 VACM 的 MIB 视图的信息应存储在名为 vacm.conf
的文件中。
相应的表是 SNMP-VIEW-BASED-ACM-MIB 中的 vacmSecurityToGroupTable
、vacmAccessTable
和 vacmViewTreeFamilyTable
。
每个条目都是一个术语,一个条目对应于其中一个表中的一行。
{vacmSecurityToGroup, SecModel, SecName, GroupName}。
{vacmAccess, GroupName, Prefix, SecModel, SecLevel, Match, ReadView, WriteView, NotifyView}。
{vacmViewTreeFamily, ViewIndex, ViewSubtree, ViewStatus, ViewMask}。
SecModel
是any
、v1
、v2c
或usm
。SecName
是一个字符串。GroupName
是一个字符串。Prefix
是一个字符串。SecLevel
是noAuthNoPriv
、authNoPriv
或authPriv
Match
是prefix
或exact
。ReadView
是一个字符串。WriteView
是一个字符串。NotifyView
是一个字符串。ViewIndex
是一个整数。ViewSubtree
是一个整数列表。ViewStatus
是included
或excluded
ViewMask
是null
或由 1 和 0 组成的列表。1 表示此子标识符使用精确匹配。0 是通配符,匹配任何子标识符。如果掩码短于子树,则尾部被视为全部为 1。null
是全部为 1 的掩码的简写。
USM 的安全数据
有关 USM 安全数据的信息应存储在名为 usm.conf
的文件中,如果代理配置为 SNMPv3,则必须存在该文件。
相应的表是 SNMP-USER-BASED-SM-MIB(根据 SNMP-USM-HMAC-SHA2-MIB 调整)中的 usmUserTable
。
每个条目都是一个术语
{EngineID, UserName, SecName, Clone, AuthP, AuthKeyC, OwnAuthKeyC, PrivP, PrivKeyC, OwnPrivKeyC, Public, AuthKey, PrivKey}。
EngineID
是一个字符串。UserName
是一个字符串。SecName
是一个字符串。Clone
是zeroDotZero
或一个整数列表。AuthP
是usmNoAuthProtocol
、usmHMACMD5AuthProtocol
、usmHMACSHAAuthProtocol
、usmHMAC128SHA224AuthProtocol
、usmHMAC192SH256AuthProtocol
、usmHMAC256SHA384AuthProtocol
或usmHMAC384SHA512AuthProtocol
。AuthKeyC
是一个字符串。OwnAuthKeyC
是一个字符串。PrivP
是usmNoPrivProtocol
、usmDESPrivProtocol
或usmAesCfb128Protocol
。PrivKeyC
是一个字符串。OwnPrivKeyC
是一个字符串。Public
是一个字符串。AuthKey
是一个(整数)列表。这是用户的秘密本地化身份验证密钥。它在 MIB 中不可见。此密钥的长度(八位字节数)必须为- 如果
usmHMACMD5AuthProtocol
,则为 16。 - 如果
usmHMACSHAAuthProtocol
,则为 20。 - 如果
usmHMAC128SHA224AuthProtocol
,则为 28。 - 如果
usmHMAC192SHA256AuthProtocol
,则为 32。 - 如果
usmHMAC256SHA384AuthProtocol
,则为 48。 - 如果
usmHMAC384SHA512AuthProtocol
,则为 64。
- 如果
PrivKey
是一个(整数)列表。这是用户的秘密本地化加密密钥。它在 MIB 中不可见。如果使用usmDESPrivProtocol
或usmAesCfb128Protocol
,则此密钥的长度必须为 16。
通知定义
有关通知定义的信息应存储在名为 notify.conf
的文件中。
相应的表是 SNMP-NOTIFICATION-MIB 中的 snmpNotifyTable
。
每个条目都是一个术语
{NotifyName, Tag, Type}。
NotifyName
是一个唯一的非空字符串。Tag
是一个字符串。Type
是trap
或inform
。
目标地址定义
关于目标地址定义的信息应存储在名为 target_addr.conf
的文件中。
对应的表是 SNMP-TARGET-MIB 中的 snmpTargetAddrTable
和 SNMP-COMMUNITY-MIB 中的 snmpTargetAddrExtTable
。
每个条目都是一个术语
{TargetName, Domain, Addr, Timeout, RetryCount, TagList, ParamsName, EngineId}。
或{TargetName, Domain, Addr, Timeout, RetryCount, TagList, ParamsName, EngineId, TMask, MaxMessageSize}。
TargetName
是一个唯一的非空字符串。Domain
是以下原子之一:transportDomainUdpIpv4
|transportDomainUdpIpv6
。Addr
可以是IpAddr
或{IpAddr, IpPort}
元组。IpAddr
是一个常规的 Erlang/OTPip_address()
或一个传统的 SNMP 整数列表,而IpPort
是一个整数。如果省略
IpPort
,则使用162
。Timeout
是一个整数。RetryCount
是一个整数。TagList
是一个字符串。ParamsName
是一个字符串。EngineId
是一个字符串或原子discovery
。TMask
的指定方式与Addr
相同,或指定为[]
。请特别注意,对于 IPv4 使用 6 个字节的列表,对于 IPv6 使用 8 个字加 2 个字节仍然是有效的地址格式,因此旧的配置仍然可以使用。MaxMessageSize
是一个整数 (默认值: 2048)。
旧配置中使用的带有 Ip
地址和 Udp
端口号的旧元组格式仍然有效。
请注意,如果 EngineId
的值为 discovery
,则代理在与该管理器执行发现过程之前,无法向该管理器发送 inform
消息。
目标参数定义
关于目标参数定义的信息应存储在名为 target_params.conf
的文件中。
对应的表是 SNMP-TARGET-MIB 中的 snmpTargetParamsTable
。
每个条目都是一个术语
{ParamsName, MPModel, SecurityModel, SecurityName, SecurityLevel}。
ParamsName
是一个唯一的非空字符串。MPModel
是v1
,v2c
或v3
。SecurityModel
是v1
,v2c
, 或usm
。SecurityName
是一个字符串。SecurityLevel
是noAuthNoPriv
、authNoPriv
或authPriv
。