Skip to content

告警

注意

告警是 EMQX 企业版功能。

EMQX 提供内置的监控和告警功能,用于监视内部状态变化,如 CPU 占用率、系统和进程内存占用率、进程数量、规则引擎资源状态以及集群分区和治理。当这些状态超过阈值或偏离预期时,EMQX 会触发并记录这些变化,并在恢复正常后将其从列表中移除。

本页面介绍了 EMQX 提供的告警信息、如何获取和查看详细的告警信息,以及如何在 EMQX 中配置告警设置和阈值。监控和告警功能可帮助您在运行过程中及时发现潜在问题。通过配置告警并设置适当的阈值,您可以确保EMQX 保持安全、稳定和可靠。

告警列表

告警列表详细描述了 EMQX 在监控和处理系统状态变化时可能触发的不同告警类型及其级别。

提示

根据对系统的严重性和影响,告警可分为三个级别:

  • 错误(Error):由用户预设引起的错误。客户端可以感知到错误并重试。
  • 警告(Warning):偶发性错误,如果频繁发生则需要认真对待。
  • 严重(Critical):客户端和服务器之间不可逆的数据丢失,导致通信和业务中断。

这些级别是从开发角度定义的,仅供参考。您可以根据业务需求定义自己的告警级别。

EMQX 开源版告警列表:

告警级别描述详情阈值
high_system_memory_usage警告系统内存使用过高"系统内存使用高于 ~p%"os_mon.sysmem_high_watermark = 70%
high_process_memory_usage警告单个 Erlang 进程内存使用过高(占系统内存的百分比)进程内存使用高于 ~p%os_mon.procmem_high_watermark = 5%
high_cpu_usage警告CPU 使用率过高~p% CPU 使用率os_mon.cpu_high_watermark = 80% os_mon.cpu_low_watermark = 60%
too_many_processes警告进程过多~p% 进程使用率vm_mon.process_high_watermark = 80% vm_mon.process_low_watermark = 60%
partition严重节点发生分区节点发生分区 ~s-
resource严重资源断开连接资源 ~s(~s)已断开连接-
conn_congestion严重连接过程拥塞连接拥塞-

EMQX 企业版告警列表:

告警级别描述详情阈值
high_system_memory_usage警告系统内存使用过高"系统内存使用高于 ~p%"os_mon.sysmem_high_watermark = 70%
high_process_memory_usage警告单个 Erlang 进程内存使用过高(占系统内存的百分比)进程内存使用高于 ~p%os_mon.procmem_high_watermark = 5%
high_cpu_usage警告CPU 使用率过高~p% CPU 使用率os_mon.cpu_high_watermark = 80% os_mon.cpu_low_watermark = 60%
too_many_processes警告进程过多~p% 进程使用率vm_mon.process_high_watermark = 80% vm_mon.process_low_watermark = 60%
license_quota警告License 超过配额License:连接数超过 %license.connection_high_watermark_alarm = 80% license.connection_low_watermark_alarm = 75%
license_expiry严重License 过期License 将于 % 过期-
partition严重节点发生分区节点发生分区 ~s-
resource严重资源断开连接资源 ~s(~s)已断开连接-
conn_congestion严重连接过程拥塞连接拥塞-

获取告警信息

EMQX 提供多种方式获取告警并查看详细信息。其中一种方式是通过 EMQX Dashboard 查看告警,您可以在此查看已触发的活动或历史告警列表,然而 Dashboard 仅作为一个便于查看告警概览信息的中心。另一种方式是通过 MQTT 订阅系统主题,实时接收带有详细告警信息的通知。告警也可以通过日志或 REST API 访问。

在 Dashboard 中查看告警

在 EMQX Dashboard 上,点击监控 -> 告警。选择当前告警历史告警页签,您可以查看当前活动的告警和历史告警列表。

view-alarms

订阅系统主题获取告警

当告警被激活或取消,EMQX 会发布一条主题为 $SYS/brokers/<Node>/alarms/activate$SYS/brokers/<Node>/alarms/deactivate 的 MQTT 消息,用户可以通过订阅对应主题来获取告警通知。

告警通知消息的 Payload 为 JSON 格式,包含以下字段:

字段类型说明
namestring告警名称
detailsobject告警详情
messagestring可读的告警说明
activate_atintegerUNIX 时间戳,表示告警激活时间,单位:微秒
deactivate_atinteger / stringUNIX 时间戳,表示告警取消的时间,单位:微秒 ;该字段在激活告警中的值为 infinity
activatedboolean告警是否处于激活状态

以系统内存占用率过高告警为例,您将收到以下格式的消息:

alarms_activate_msg

告警不会重复产生,即如果 CPU 占用率过高告警已经激活,则在其激活期间,不会出现第二个 CPU 占用率过高告警。告警会在被监控项恢复正常后自动取消,也支持用户手动取消激活。

通过日志获取告警

告警的启用和禁用可以记录到日志(控制台或文件)。当消息传输或事件处理发生故障时,可以记录详细信息,并且日志系统还可以通过日志分析捕获警报。以下示例显示了打印在日志中的详细告警信息: 日志级别为 warningmsg 字段为 告警已激活告警已取消

view-alarms-log

通过 REST API 获取告警

您可以通过 API 查询和管理告警。在 UI 的左侧导航菜单中点击 Alarms 来执行此 API 请求。有关如何使用 EMQX API,请参阅 REST API 文档

view-alarms-api

告警配置

告警配置包括配置告警设置和告警阈值。告警设置确定如何显示和存储告警消息,而告警阈值配置将设置当检测到潜在问题时触发告警的限制或值。告警配置功能允许您根据业务需求自定义告警设置和阈值。

配置告警设置

告警的设置只能通过修改 emqx.conf 文件中的配置项来进行。以下表格列出了用于告警设置配置的可用配置项。

配置项描述默认值可选值
alarm.actions将告警写入日志(控制台或文件)并将告警作为 MQTT 消息发布到系统主题 $SYS/brokers/<node_name>/alarms/activate$SYS/brokers/<node_name>/alarms/deactivate 的操作。这些操作在告警激活或取消时触发。["log", "publish"]-
alarm.size_limit已取消告警的最大总数。当超过此限制时,最早取消的告警将被删除。10001-3000
alarm.validity_period已取消告警的保留时间。告警在取消后不会立即删除,而是在一段时间后删除。24h-

通过这些配置项,您可以灵活地管理和定制 EMQX 发出的各类告警设置,以便更好地满足您的业务运营需求。

通过 Dashboard 配置告警阈值

您可以在 EMQX Dashboard 上配置告警阈值。有两种方法可以打开用于配置告警阈值的监控页面:

  1. 告警页面,点击设置按钮,将会跳转到监控页面。
  2. 在左侧导航菜单中,点击管理 -> 监控

监控 -> 系统页签中,点击 Erlang 虚拟机 标签,您可以为 Erlang 虚拟机的系统性能配置以下项目:

monitoring-system
  • 进程限制检查时间:指定周期性检查进程限制的时间间隔。默认值为 30 秒。
  • 进程数高水位线:指定可以同时存在于本地节点的进程的阈值百分比。当超过指定数值时,会触发告警。默认值为 80%。
  • 进程数低水位线:指定可以同时存在于本地节点的进程的阈值百分比。当降低到指定数值时,告警将被清除。默认值为 60%。
  • 启用长垃圾回收 监控:默认禁用。启用后,当 Erlang 进程执行长时间垃圾回收时,将发出警告级别的日志 long_gc,并发布 MQTT 消息到系统主题 $SYS/sysmon/long_gc
  • 启用长调度监控:默认启用,意味着当 Erlang VM 检测到任务调度时间过长时,会发出警告级别的日志 long_schedule。您可以在文本框中设置任务的适当调度时间。默认值为 240 毫秒。
  • 启用大 heap 监控:默认启用,意味着当 Erlang 进程为其堆空间消耗大量内存时,会发出警告级别的日志 large_heap,并发布 MQTT 消息到系统主题 $SYS/sysmon/large_heap。您可以在文本框中设置空间字节大小的限制。默认值为 32 MB。
  • 启用分布式端口过忙监控:默认启用,意味着当用于与集群中其他节点通信的远程过程调用(RPC)连接过载时,会发出警告级别的日志 busy_dis_port,并发布 MQTT 消息到系统主题 $SYS/sysmon/busy_dis_port
  • 启用端口过忙监控:默认启用,意味着当端口过载时,会发出警告级别的日志 busy_port,并发布 MQTT 消息到系统主题 $SYS/sysmon/busy_port

完成配置后,点击保存更改

点击操作系统标签,您可以为系统性能配置以下项目:

monitoring-operating-system-ee
  • 定期 CPU 检查的时间间隔:指定检查 CPU 使用率的时间间隔。默认值为 60 秒。
  • CPU 高水位线:指定系统 CPU 使用率的阈值百分比。当超过指定值时,会触发相应的告警。默认值为 80%。
  • CPU 低水位线:指定系统 CPU 使用率的阈值百分比。当降低到指定值时,相应的告警将被解除。默认值为 60%。
  • 内存检查间隔:默认启用。您可以指定周期性内存检查的时间间隔。默认值为 60 秒。
  • 系统内存高水位线:指定系统内存分配的阈值百分比。当超过指定值时,会触发相应的告警。默认值为 70%。
  • 进程内存高水位线:指定单个 Erlang 进程所分配的系统内存的阈值百分比。当超过指定值时,会触发相应的告警。默认值为 5%。

完成配置后,点击保存更改

通过配置项配置告警阈值

您还可以通过修改告警阈值的配置项来配置告警阈值。以下配置项目前可在 emqx.conf 文件中进行修改:

配置项描述默认值
sysmon.os.cpu_check_intervalCPU 使用率检查间隔。60s
sysmon.os.cpu_high_watermarkCPU 使用率的高水位标记,超过此阈值将触发告警。80%
sysmon.os.cpu_low_watermarkCPU 使用率的低水位标记,低于此阈值将解除告警。60%
sysmon.os.mem_check_interval内存使用率检查间隔。60s
sysmon.os.sysmem_high_watermark系统内存使用率的高水位标记。当总内存占用达到此值时将触发告警。70%
sysmon.os.procmem_high_watermark进程内存使用率的高水位标记。当单个进程占用内存达到此值时将触发告警。5%
sysmonn.vm.process_check_interval进程数检查间隔。30s
sysmon.vm.process_high_watermark进程占用率的高水位标记。当达到此阈值时将触发告警。以创建进程数/最大限制数的比率来衡量。80%
sysmon.vm.process_low_watermark进程占用率的低水位标记。当低于此阈值时将解除告警。以创建进程数/最大限制数的比率来衡量。60%
sysmonn.vm.long_gc是否启用长 GC 监控。disabled
sysmon.vm.long_schedule是否启用长调度监控。disabled
sysmon.vm.large_heap是否启用大 Heap 监控。disabled
Sysmon.vm.busy_dist_port是否启用分端口过忙监控。true
sysmon.vm.busy_port是否启用分布式端口过忙监控。true
sysmonn.top.num_items每个监控组的前进程数。10
sysmon.top.sample_interlval顶级进程的检查间隔。2s
sysmon.top.max_procs当 VM 中的进程数超过此值时停止收集数据。1000000

在 EMQX 企业版中,当 License 在不到 30 天内过期或连接数超过高水位标记时,会触发告警。您可以通过修改以下配置项在 emqx.conf 文件中调整连接数的高/低水位标记。有关如何配置 License 设置的更多信息,请参阅 License

配置项描述默认值
license.connection_high_watermark_alarmLicense 支持的最大连接数的高水位标记。当达到此阈值时触发告警。以活跃连接数/最大连接数的比率来衡量。80%
license.connection_low_watermark_alarmLicense 支持的最大连接数的低水位标记。当低于此阈值时解除告警。以活跃连接数/最大连接数的比率来衡量。75%