7. Structured Data IDs (结构化数据标识符)
本节定义初始的 IANA 注册的 SD-ID。有关结构化数据元素的定义,请参见第 6.3 节。此处定义的所有 SD-ID 都是可选的 (OPTIONAL)。
在以下某些内容中,为参数值量化了最大长度。在每种情况下,Syslog 应用程序必须 (MUST) 准备好接收任何有效 UTF-8 代码点中定义数量的字符。由于每个字符可能多达 6 个八位字节,因此推荐 (RECOMMENDED) 每个 Syslog 应用程序准备好每个字符接收多达 6 个八位字节。
7.1. timeQuality (时间质量)
SD-ID "timeQuality" 可以 (MAY) 由发起者使用,以描述其对系统时间的概念。如果发起者未与可靠的外部时间源正确同步,或者它不知道其时区信息是否正确,则应该 (SHOULD) 写入此 SD-ID。此结构化数据元素的主要用途是提供有关其对第 6.2.3 节中描述的 TIMESTAMP 的信任级别的一些信息。所有参数都是可选的 (OPTIONAL)。
7.1.1. tzKnown (时区已知)
"tzKnown" 参数指示发起者是否知道其时区。如果知道,必须 (MUST) 使用值 "1"。如果时区信息有疑问,必须 (MUST) 使用值 "0"。如果发起者知道其时区但决定以 UTC 发出时间,则必须 (MUST) 使用值 "1"(因为时区是已知的)。
7.1.2. isSynced (是否同步)
"isSynced" 参数指示发起者是否与可靠的外部时间源同步,例如通过 NTP。如果发起者时间同步,必须 (MUST) 使用值 "1"。如果不是,必须 (MUST) 使用值 "0"。
7.1.3. syncAccuracy (同步精度)
"syncAccuracy" 参数指示发起者认为其时间同步的准确程度。它是一个整数,描述其时钟在同步间隔之间可能偏差的最大微秒数。
如果 "isSynced" 使用值 "0",则此参数禁止 (MUST NOT) 指定。如果 "isSynced" 使用值 "1" 但 "syncAccuracy" 参数不存在,收集器或中继可以假设提供的时间信息足够准确,可以被认为是正确的。只有当发起者实际了解外部时间源的可靠性时,才必须 (MUST) 写入 "syncAccuracy" 参数。在大多数情况下,它将通过操作员配置 (Operator Configuration) 获得这种深入的知识。
7.1.4. Examples (示例)
以下是不知道其时区或是否正在同步的发起者的示例:
[timeQuality tzKnown="0" isSynced="0"]
通过此信息,发起者指示其时间信息不可靠。这可能是一个提示,收集器或中继应使用其本地时间而不是消息提供的 TIMESTAMP 来关联来自不同发起者的多个消息。
以下是知道其时区并知道它与可靠外部源正确同步的发起者的示例:
[timeQuality tzKnown="1" isSynced="1"]
以下是知道其时区和外部同步的发起者的示例。它还知道外部同步的准确性:
[timeQuality tzKnown="1" isSynced="1" syncAccuracy="60000000"]
此示例与前一个示例的区别在于,发起者预期其时钟将保持在官方时间的 60 秒内。因此,如果发起者报告时间为 9:00:00,则不早于 8:59:00,不晚于 9:01:00。
7.2. origin (来源)
SD-ID "origin" 可以 (MAY) 用于指示 Syslog 消息的来源。可以使用以下参数。所有参数都是可选的 (OPTIONAL)。
指定这些参数中的任何一个主要是为了帮助日志分析器 (Log Analyzers) 和类似应用程序。
7.2.1. ip (IP地址)
"ip" 参数表示发起者在发起消息时知道它拥有的 IP 地址。它必须 (MUST) 包含第 6.2.4 节中概述的 IP 地址的文本表示。
此参数可用于提供除 HOSTNAME 字段中存在的信息之外的标识信息。如果主机的 IP 地址包含在消息中而 HOSTNAME 字段仍包含 FQDN,则它可能特别有用。它对于描述多宿主主机 (Multihomed Host) 的所有 IP 地址也很有用。
如果发起者有多个 IP 地址,它可以 (MAY) 在 "ip" 参数中列出其 IP 地址之一,或者它可以 (MAY) 在单个 "origin" 结构化数据元素中包含多个 "ip" 参数。
7.2.2. enterpriseId (企业标识符)
"enterpriseId" 参数必须 (MUST) 是由 IANA 维护的 'SMI Network Management Private Enterprise Code',其前缀为 iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)。后面的数字必须 (MUST) 是唯一的,并且必须 (MUST) 按照 RFC 2578 [RFC2578] 向 IANA 注册。企业仅被授权在 IANA 分配给该企业的 iso.org.dod.internet.private.enterprise.<private enterprise number> 子树内分配值。enterpriseId 必须 (MUST) 仅包含来自 iso.org.dod.internet.private.enterprise.<private enterprise number> 子树的值。通常,只需要 IANA 分配的私有企业编号(单个数字)。企业可能决定在其私有企业编号下使用子标识符。如果使用子标识符,它们必须 (MUST) 用句点分隔,并表示为十进制数。例如 "32473.1.2"。请注意,ID "32473.1.2" 只是一个示例,禁止 (MUST NOT) 使用。完整的最新私有企业编号 (Private Enterprise Numbers, PEN) 列表由 IANA 维护。
通过指定私有企业编号,供应商允许对消息进行更具体的处理。
7.2.3. software (软件)
"software" 参数唯一标识生成消息的软件。如果使用它,也应该 (SHOULD) 指定 "enterpriseId",以便可以识别特定供应商的软件。"software" 参数与 APP-NAME 报文头字段不同。它必须 (MUST) 始终包含生成软件的名称,而 APP-NAME 可以包含任何其他内容,包括操作员配置的值。
"software" 参数是一个字符串。它禁止 (MUST NOT) 超过 48 个字符。
7.2.4. swVersion (软件版本)
"swVersion" 参数唯一标识生成消息的软件版本。如果使用它,也应该 (SHOULD) 提供 "software" 和 "enterpriseId" 参数。
"swVersion" 参数是一个字符串。它禁止 (MUST NOT) 超过 32 个字符。
7.2.5. Example (示例)
以下是具有多个 IP 地址的示例:
[origin ip="192.0.2.1" ip="192.0.2.129"]
在此示例中,发起者指示它有两个 IP 地址,一个是 192.0.2.1,另一个是 192.0.2.129。
7.3. meta (元数据)
SD-ID "meta" 可以 (MAY) 用于提供有关消息的元信息 (Meta-Information)。可以使用以下参数。所有参数都是可选的 (OPTIONAL)。如果使用 "meta" SD-ID,则应该 (SHOULD) 指定至少一个参数。
7.3.1. sequenceId (序列ID)
"sequenceId" 参数跟踪发起者向 Syslog 传输提交消息以进行发送的顺序。它是一个整数,当 Syslog 函数启动时必须 (MUST) 设置为 1,并且必须 (MUST) 随着每条消息递增,最大值为 2147483647。如果达到该值,则必须 (MUST) 以 sequenceId 为 1 发送下一条消息。
7.3.2. sysUpTime (系统运行时间)
"sysUpTime" 参数可以 (MAY) 用于在消息中包含 SNMP "sysUpTime" 参数。其语法和语义如 [RFC3418] 中所定义。
由于 Syslog 不直接支持 SNMP "INTEGER" 语法,因此值必须 (MUST) 表示为十进制整数(无小数点),仅使用字符 "0"、"1"、"2"、"3"、"4"、"5"、"6"、"7"、"8" 和 "9"。
请注意,RFC 3418 中的语义是 "自网络管理部分最后一次重新初始化以来的时间(以百分之一秒为单位)"。这当然与系统的 SNMP 相关管理部分有关,它可能 (MAY) 与系统的 Syslog 相关管理部分不同。
7.3.3. language (语言)
"language" 参数可以 (MAY) 由发起者指定,以传达有关 MSG 内使用的自然语言 (Natural Language) 的信息。如果指定,它必须 (MUST) 包含 BCP 47 [RFC4646] 中定义的语言标识符 (Language Identifier)。