跳到主要内容

使用Syslog监控事件

您可以使用 syslog 日志机制来监控 Solace PubSub+ 事件代理事件。

Solace PubSub+ 软件生成符合 RFC 3164 定义的 syslog 消息,以记录事件代理上发生的事件,例如:

  • 常规操作:如客户端连接和断开、命令模式更改
  • 故障和错误条件:如冗余电源故障
  • 紧急或关键条件:如因温度过高而将刀片置于离线状态

每条 syslog 消息都标识生成该消息的软件进程或事件代理子系统,并简要描述发生的操作或错误。

如图“Syslog 消息流”所示,syslog 系统提供了将 syslog 事件消息记录到事件代理本地文件的功能,以及通过标准协议将 syslog 事件消息通过网络转发到远程主机的功能。

有关与事件代理事件相关的 syslog 消息的描述,请参阅 Syslog 事件参考。

Syslog消息格式和组件

Syslog 消息 ASCII 字符串由以下部分组成:

  • 消息优先级(设施和严重性)
  • 标头(时间戳和主机)
  • 消息字符串

每条 syslog 消息都属于一个设施,该设施是一组由相同软件进程生成的消息,或者与类似的事件代理子系统条件或活动相关(例如,调试尝试)。

事件代理上定义并保留了四个可配置的设施目的地,用于将相关消息分组到设施日志文件中:命令、调试、事件和系统(参见下表“Syslog 设施”)。来自这四个非可配置目的地的 syslog 消息文件都被定向到本地 syslog 消息主机上的文件。

此外,还提供了三个可配置的设施目的地,供用户配置,用于将相关消息从设施分组到日志文件中,以便转发到远程 syslog 主机。

Syslog 消息流

img

本地 Syslog 设施关联日志事件或错误类型
local0调试调试进程执行的操作或遇到的错误。
local1命令在事件代理命令行界面(CLI)提示符或 CLI 脚本文件中执行的命令,或通过 SEMP 执行的操作或遇到的错误。
local3事件事件代理进程执行的操作或遇到的错误,例如,与发布者和订阅者相关的事件代理事件、与物理链路/LAG 相关的事件代理事件、与路由协议相关的事件代理事件、与物理硬件相关的事件代理事件。
local4系统与事件代理健康相关的事件代理进程执行的操作或遇到的错误。
系统日志是事件日志的一个子集,其中复制了用于监控系统的重要日志。大多数 SYSTEM_* 事件都被复制,以及许多值得注意的 VPN_* 事件(例如,HIGH 和_CLEAR 事件)。注意,没有 CLIENT* 事件被复制。

Syslog 设施

每条 syslog 消息还预分配了一个严重性级别,该级别指示触发事件对事件代理功能的影响程度。这些消息事件严重性级别被定义为一个有序列表。下面列出的 Syslog 消息严重性级别从最高级别到最低级别定义了消息事件严重性级别。

关联的设施和严重性级别一起被称为 syslog 消息的优先级。

严重性级别描述
crit导致系统中许多或所有服务宕机的故障。
err一个服务宕机。一个意外的服务故障,影响少数或单个服务。
warning一个服务降级或超出预期的操作阈值。
notice正常但重要的条件;例如,影响服务的配置更改。
info清除之前已提升的条件,无需采取任何措施。

Syslog 消息严重性级别

监控事件以确定事件代理的健康状况

Solace 建议运维团队监控系统 syslog(system.log 或系统设施)中包含的事件,因为此 syslog 包含了与事件代理健康相关的所有事件。根据消息网络的部署方式,运维团队可能还想监控 event.log 文件中的一些事件。有关可能事件的详细列表和每个事件的描述,请参阅 Syslog 事件参考。

配置Syslog以转发消息

您可以使用事件代理上的 syslog 设施目的地,将相关消息从设施分组到日志文件中,以便转发到远程 syslog 消息主机。每个事件代理最多允许三个用户配置的 syslog 目的地。

来自用户配置目的地的 syslog 消息文件在指定和配置主机之前不会被远程 syslog 消息主机(即客户端)接收。您可以为每个用户配置的 syslog 目的地配置多达三个 syslog 消息主机。

  • 要创建新的 syslog 设施目的地,请输入以下命令:

    solace(configure)# create syslog <name>
  • 要编辑现有 syslog 设施目的地的属性,请输入以下命令:

    solace(configure)# syslog <name>

    其中:

    • <name> 是用户配置的 syslog 目的地的名称。syslog 名称可以包含最多 31 个字母数字字符,并且在所有创建的 syslog 目的地中必须是唯一的。

    此命令的 no 版本(no syslog)将从事件代理中移除给定的 syslog 目的地。

    对于 syslog 目的地,您可以配置以下参数:

    • 设施
    • 主机

设施

要将命令、事件或系统 syslog 设施添加到用户配置的 syslog 目的地,请输入以下命令:

solace(configure)# create syslog <name>
solace(configure/syslog)# facility {command | event | system}

其中:

  • command 表示将命令 syslog 设施添加到用户配置的目的地
  • event 表示将事件 syslog 设施添加到用户配置的目的地
  • system 表示将系统 syslog 设施添加到用户配置的目的地

此命令的 no 版本将从用户配置的目的地中删除指定的设施。

主机

要指定远程 syslog 消息主机作为 syslog 文件的接收者,请输入以下命令:

solace(configure)# create syslog <name>
solace(configure/syslog)# host <hostname-or-address> [transport {tcp | udp | tls}]

其中:

  • <hostname-or-address> 是远程主机的名称,或者是以点分十进制表示法 nnn.nnn.nnn.nnn[:nnn] 指定的 IP 地址和可选端口号。如果未提供端口号,则默认使用 UDP 端口 514。
  • transport {tcp | udp | tls} 设置用于将 syslog 文件转发到远程主机的传输模式,分别为 TCP、UDP 或 TLS。如果未提供此参数,则默认使用 UDP。如果传输模式设置为 TLS,则使用全局 SSL CLI 命令指定远程 rsyslogd TLS 连接中要信任的 CA 证书、允许的协议版本和可接受的密码套件。有关更多信息,请参阅 TLS/SSL 加密。

此命令的 no 版本(no host)将从用户配置的目的地中移除指定的主机。

配置Syslog设施的消息格式

为了使您更容易理解日志消息的内容,事件代理允许事件和系统日志消息以 JSON 格式从代理发出,消息参数作为独立的 JSON 属性。

要配置事件和系统 syslog 设施的消息格式,请输入以下命令:

solace(configure)# logging
solace(configure/logging)# facility
solace(configure/logging/facility)# {event | system} message-format {text | json}

其中:

  • event 表示配置事件 syslog 设施的消息格式。
  • system 表示配置系统 syslog 设施的消息格式。
  • text 表示以非结构化文本格式记录消息。这是默认值。
  • json 表示以 JSON 格式记录消息。

此命令的 no 形式 no {event | system} message-format 将值恢复为默认值。

更新格式时,日志文件不会轮转,因此在切换时日志文件将包含混合格式。

JSON 格式

启用 JSON 格式时,日志消息将格式化为 JSON(全部在一行上),并将该 JSON 传递给 syslog()。Solace PubSub+ Syslog 事件中的日志消息参数是属性的名称。此外,按照以下顺序在对象开头添加以下元数据属性:

time — RFC 3339 时间戳。

solFacility — syslog 设施的 Solace 名称。可以是 eventsystem

severity — syslog 严重性。

host — 主机名。

tag — 事件标签。

scope — 可以是 VPNCLIENTSYSTEM

event — 事件名称,例如 CLIENT_CLIENT_DISCONNECT

vpn — VPN 的名称。仅当范围是 VPNCLIENT 时添加。

client — 客户端的名称。仅当范围是 CLIENT 时添加。

raise — 用于关联提升和清除事件的标识符;还表示此事件是提升事件。仅添加到提升事件中。

clear — 用于关联提升和清除事件的标识符;还表示此事件是清除事件。仅添加到清除事件中。

在元数据之后,按照定义的顺序跟随参数。在末尾添加一个 msg 属性,其中包含事件文本(带替换)。

设置JSON格式Syslog消息的最大大小

您可以设置 JSON 格式 syslog 消息的最大大小。如果完整的 JSON 超过该大小,则从消息末尾删除或截断属性,直到值适合在指定大小内,并添加一个额外的属性 logIncomplete,其值为 1。仅截断 msg 属性,如果完整值不适合,则删除所有其他属性。

设置最大大小很有用,因为事件代理将删除属性或截断 msg 属性的值,但仍然会产生有效的 JSON。下游进程通常会直接截断日志行,导致 JSON 无效。

要设置 JSON 格式 syslog 消息的最大大小,请输入以下命令:

solace(configure)# logging
solace(configure/logging)# max-json-message-size <max-size>

其中:

  • <max-size> 是 JSON 格式 syslog 消息的最大字节大小。如果配置了远程 syslog 目的地,则包括 syslog 标头。有效值范围为 1024 到 8192。默认值为 8192。

此命令的 no 版本 no max-json-message-size 将值恢复为默认值。

查看Syslog状态

要查看事件代理上 syslog 的配置,请输入以下命令:

solace> show syslog [<name>]

其中:

  • <name> 是 syslog 设施目的地的名称。不输入名称将显示所有目的地。

管理本地Syslog文件

Syslog 记录文件是未压缩的文本文件,格式为 <filename>.log.[x],其中 <filename> 可以命名为命令、事件、系统或调试,x 是一个从 1 到 20 的整数,用于标识存档文件编号。活动文件命名为 <filename>.log,没有数字后缀。

检索Syslog记录文件

Syslog 记录文件作为未压缩的文本文件存储在事件代理的 /logs 子目录中。要检索和查看命令日志记录文件,请使用这些 CLI 命令:

  • copy — 将文本文件从 /logs 子目录传输到事件代理外部的 SFTP 或 SCP 服务器。

    示例:

    solace# copy /logs/command.log sftp://john@10.11.12.13/home/john/solacelogs/
  • more — 直接显示 /logs 子目录中文本文件的内容。

    示例:

    solace> more /logs/system.log

日志容量

当文件大小超过 50 MB 时,活动 syslog 记录文件将关闭。关闭后,将打开一个新文件,此循环重复进行。syslog 记录文本文件位于 /logs 目录中,可以从事件代理中检索。在任何给定时间,您可以查看每个本地 syslog 设施的多达 21 个 syslog 记录文本文件,包括活动日志文件。为了保持在 21 个文件的限制内,当创建新日志文件时,最旧的日志文件将被丢弃,以为新日志文件腾出空间。日志文件的保留取决于可用磁盘空间。PubSub+ 软件事件代理将分配给日志的空间限制为 1GB。

Syslog 记录文件可能包含个人信息。要了解如何保护这些数据,请参阅配置日志文件保留策略。

目录维护

由于 syslog 记录文件会轮转,因此不需要进行目录维护。

管理命令日志记录

命令日志记录设施用于捕获有关用户通过 Solace CLI 或 SEMP 接口发出的所有事件代理命令的信息。

命令日志记录数据示例:

2016-05-02T10:24:51.162-05:00 <local1.info> solace1 admin[12694]: CLI/2 192.168.1.217 admin 10:24:47 10:24:48 ok (configure/message-vpn)# max-connections 2000

每个命令日志记录中包含的信息依次为:

  • 日志日期和时间,例如 2016-05-02T10:24:51.162-05:00
  • syslog 目的地和级别,例如 <local1.info>
  • 事件代理的主机名,例如 solace1
  • 本地用户名和本地进程标识符编号(方括号内),例如 admin[12694]
  • 尝试命令的事件代理接口类型,例如 CLISEMP: CLI/2
  • 命令尝试来源的主机 IP 地址,例如 192.168.1.217
  • 分配给 CLI 或 SEMP 用户账户的用户名
  • 命令尝试开始的时间,例如 10:24:47
  • 命令尝试完成的时间,例如 10:24:48
  • 结果描述,即:ok、命令操作状态或失败原因
  • 尝试的命令操作:(configure/message-vpn)# max-connections 2000

配置命令日志记录

要配置事件代理上的命令日志记录功能,该功能将用户操作和命令记录到可查看的命令日志文件中,请输入以下 CLI 命令:

solace(configure)# logging
solace(configure/logging)# command {cli | semp-mgmt | semp-msgbus| all} mode {shutdown | config-cmds | all-cmds}

其中:

  • clisemp-mgmtsemp-msgbusall 指定要记录的事件代理接口
  • shutdown 关闭指定事件代理接口的命令日志记录设施
  • config-cmds 指定仅记录指定事件代理接口的配置命令(不记录 show 命令)
  • all-cmds 指定记录指定事件代理接口的所有命令,除了帮助命令(帮助命令永远不会被记录)

此命令的 no 版本(no command {cli \| semp \| all})将命令日志记录恢复为仅记录指定事件代理接口(即 clisemp-mgmtsemp-msgbusall)的配置命令的默认模式。

查看命令日志记录配置

要查看事件代理上命令日志记录设施的配置,请输入以下 CLI 命令:

solace> show logging command

解释客户端断开事件日志

每当客户端从事件代理断开连接时,事件代理都会通过断开事件日志报告断开的原因。此日志报告连接的最终统计摘要事件。

SMF 客户端断开事件日志示例

2013-05-06T18:18:56-0400 <local3.info> solace1 event: CLIENT: CLIENT_CLIENT_DISCONNECT: testVpn testHost/17879/#00010001 Client (82) testHost/17879/#00010001 username testUser WebSessionId (N/A) reason(Peer TCP Closed) final statistics - dp(103, 103, 0, 0, 103, 103, 1557, 2373, 0, 0, 1557, 2373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) conn(0, 0, 192.168.164.34:58214, CLSWT, 0, 0, 0) zip(0, 0, 0, 0, 0.00, 0.00, 0, 0, 0, 0, 0, 0, 0, 0) web(0, 0, 0, 0, 0, 0, 0), SslVersion(), SslCipher()

MQTT 客户端断开事件日志示例

2017-07-03T15:59:23+0800 <local3.info> sgdemo1 event: CLIENT: CLIENT_CLIENT_DISCONNECT_MQTT: plant_monitor #mqtt/PLANT_MONITOR_192.168.42.250/71841 Client (1141) #mqtt/PLANT_MONITOR_192.168.42.250/71841 username default ClientId (PLANT_MONITOR_192.168.42.250) reason(Client Disconnect Received) final statistics - dp(2, 1, 1, 0, 3, 1, 80, 4, 238, 0, 318, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) conn(0, 0, 192.168.42.1:20362, ESTAB, 0, 0, 0) mqtt(1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1), SslVersion(), SslCipher(), WillSent(0)

reason 条目描述了客户端断开的原因:

  • (Client Disconnect Received)—连接因收到断开通知而中断。
  • (Document Too Large)—连接因传入消息过大而中断。
  • (Forced Logout)—由客户端断开或在身份验证期间替换重复客户端连接触发的管理断开或关闭操作。

在身份验证期间替换重复客户端连接在事件代理上默认启用。要禁用,请输入以下命令:solace(configure)# no authentication replace-duplicate-client-connections

  • (Inactive Connection)—因网络连接不活跃而中断连接。
  • (Peer Draining Messages Too Slowly)—因事件代理处于压力下时吞吐量低而中断连接。在压力条件下,事件代理会丢弃移动过慢的连接,以释放系统资源。
  • (Peer Host Unreachable)—事件代理无法到达远程主机。
  • (Peer Refused TCP Connection)—对于事件代理发起的连接(例如,消息 VPN 桥接和事件代理到事件代理的连接),对等端拒绝了 TCP 连接。
  • (Peer TCP Closed)—远程端已优雅地关闭了 TCP 连接。
  • (Peer TCP Reset)—远程端已不优雅地关闭了 TCP 连接。
  • (SSL CTX has been expired)—事件代理中最旧的 TLS 上下文(从服务器证书派生的数据)已过期。使用该 TLS 上下文的客户端将被断开连接。
  • (TCP Keep-Alive Failure)—因远程端未能响应 TCP Keepalive 探测而中断连接。
  • (Too Many TCP Retransmissions)—因吞吐量差而中断连接。

dp 条目按顺序列出以下客户端数据平面统计信息:

  • 收到的控制消息
  • 传递的控制消息
  • 收到的主题消息
  • 传递的主题消息
  • 收到的总消息
  • 传递的总消息
  • 收到的控制字节
  • 传递的控制字节
  • 收到的主题字节
  • 传递的主题字节
  • 收到的总字节
  • 传递的总字节
  • 入口处的当前消息速率
  • 出口处的当前消息速率
  • 入口处的平均消息速率
  • 出口处的平均消息速率
  • 拒绝的重复客户端

(在入口处丢弃的消息:)

  • 无订阅匹配
  • 主题解析错误
  • 内部解析错误
  • 消息过大

(队列丢弃:)

  • 传输拥塞

conn 条目按顺序列出以下客户端连接统计信息:

  • 收到队列字节
  • 发送队列字节
  • 客户端地址:端口
  • 状态
  • 收到顺序错误
  • 快速重传
  • 定时重传

zip 条目按顺序列出以下客户端压缩统计信息:

  • 收到的压缩字节
  • 传递的压缩字节
  • 收到的未压缩字节
  • 传递的未压缩字节
  • 入口处的压缩比率
  • 出口处的压缩比率
  • 入口处的当前压缩字节速率
  • 出口处的当前压缩字节速率
  • 入口处的当前未压缩字节速率
  • 出口处的当前未压缩字节速率
  • 入口处的平均压缩字节速率
  • 出口处的平均压缩字节速率
  • 入口处的平均未压缩字节速率
  • 出口处的平均未压缩字节速率

web 条目按顺序列出以下 Web 客户端数据平面统计信息:

  • Web 消息收到—事件代理为客户端会话收到的 HTTP 请求总数。
  • Web 消息传递—事件代理为客户端会话发送的 HTTP 响应总数。
  • Web 字节收到—事件代理为客户端会话收到的所有 HTTP 请求的消息体中的八位字节总数。
  • Web 字节传递—事件代理为客户端会话发送的所有 HTTP 响应的消息体中的八位字节总数。
  • Web 顺序错误—事件代理检测到的 TCP 顺序错误接收事件的近似数量,这些事件发生在客户端会话使用 TCP 连接期间。
  • Web 快速重传—事件代理在收到重复 TCP 确认后发起的 TCP 快速重传事件的近似数量,这些事件发生在客户端会话使用 TCP 连接期间。
  • Web 定时重传—事件代理在未收到 TCP 确认后发起的 TCP 定时重传事件的近似数量,这些事件发生在客户端会话使用 TCP 连接期间。

mqtt 条目按顺序列出以下 MQTT 客户端的控制包统计信息:

  • 收到的 CONNECT 数据包
  • 发送的 CONNACK 数据包
  • 发送的 CONNACK 错误
  • PUBREC—收到的发布确认响应
  • PUBLISH—发送的发布消息数据包
  • PUBACK—收到的发布确认
  • PUBACK—发送的发布确认
  • PUBREC—发送的发布确认数据包
  • PUBREL—收到的发布释放响应
  • PUBCOMP—发送的发布完成响应
  • SUBSCRIBE—收到的订阅主题数据包
  • SUBACK—发送的订阅确认
  • SUBACK—发送的订阅确认错误
  • UNSUBSCRIBE—收到的取消订阅主题数据包
  • UNSUBSCRIBE—发送的取消订阅主题数据包
  • PINGREQ—收到的 PING 请求
  • PINGRESP—发送的 PING 响应
  • DISCONNECT—收到的断开通知

有关各种 MQTT 控制包的信息,请参阅 MQTT 版本 3.1.1 协议一致性文档中的 3 MQTT 控制包。

其中 SslVersion 列出使用的 TLS/SSL 协议版本。

其中 SslCipher 列出使用的密码套件。

解释流事件日志

每当事件代理上的流关闭或从端点解绑时,事件代理都会通过流事件日志报告原因。此日志报告流关闭或解绑的最终统计摘要事件,视情况而定。

流关闭事件日志示例

2015-01-08T09:05:40+0000 <local3.info> lab-128-68 event: CLIENT: CLIENT_CLIENT_CLOSE_FLOW: solace dev214/9997/#00010001 Client (6119) dev214/9997/#00010001 username default Pub flow session flow name 99f5f4aa343a4e77bc45f6b3c4db2946 (8048), publisher id 5949, last message id 565, window size 50, final statistics - flow(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565)

flow 条目按顺序列出以下流关闭统计信息:

  • 消息池未就绪
  • 顺序错误的消息
  • 重复的消息
  • 无合格目的地
  • 消息池超出配额
  • 队列/主题端点超出
  • 回放日志超出配额
  • 最大消息使用量超出
  • 最大消息大小超出
  • 远程路由器消息池不支持
  • 消息池到 ADB 失败
  • 消息池到磁盘失败
  • 错误的消息
  • 未找到队列
  • 消息池关闭丢弃
  • 用户配置文件拒绝保证
  • 无本地传递丢弃
  • SMF TTL 超出
  • 发布 ACL 拒绝
  • 目的地组错误
  • 与转发模式不兼容
  • 低优先级消息拥塞丢弃
  • 消息池文件限制超出
  • 复制处于备用状态丢弃
  • 同步复制不合格丢弃
  • 收到的消息

这些流关闭统计信息的描述可以在详细消息池统计信息的描述中找到。

流解绑事件日志示例

CLIENT: CLIENT_CLIENT_UNBIND: RP dev3-185/30296/00030001/349CSHv5cC Client (66) dev3-185/30296/00030001/349CSHv5cC username solclient_1 Unbind to Flow Id (11), ForwardingMode(StoreAndForward), final statistics - flow(255, 0, 0, 0, 0, 2, 0, 0, 2, 0), isActive(No), Reason(Client issued unbind)

flow 条目按顺序列出以下流解绑统计信息:

  • 消息池窗口大小
  • 使用的窗口
  • 未确认的消息
  • 低消息 ID AckPending
  • 高消息 ID AckPending
  • 窗口关闭
  • 消息重新传递
  • 消息传输重传
  • 消息确认传递存储转发
  • 消息传递直通