概述
Fess 具有自动捕获 ERROR 和 WARN 级别日志事件并通知管理员的功能。 通过此功能,可以迅速检测系统异常,尽早开始故障处理。
主要特点:
支持的通知渠道: 邮件、Slack、Google Chat
目标进程: 主应用程序、爬虫、建议生成、缩略图生成
默认禁用: 采用选择加入方式,需要明确启用
工作原理
日志通知按以下流程运行。
Log4j2 的
LogNotificationAppender捕获达到或超过设定级别的日志事件。捕获的事件存储在内存缓冲区中(默认最多 1,000 条)。当缓冲区超过上限时,将从最旧的事件开始依次丢弃。
定时器每隔 30 秒将缓冲区中的事件写入 OpenSearch 的索引(
fess_log.notification_queue)。“Log Notification”调度任务每隔 5 分钟从 OpenSearch 读取事件,按日志级别分组后,逐级发送通知。
通知发送后,已处理的事件将从索引中删除。
Note
每个节点仅以自身记录的日志为通知对象(事件按 hostname 进行筛选)。 在集群配置中,会为每个节点分别发送独立的通知。
Note
为防止无限循环,与通知功能自身相关的日志记录器 (LogNotificationAppender、LogNotificationHelper、LogNotificationTarget、 LogNotificationJob、NotificationHelper,以及用于 HTTP 通信的 org.codelibs.curl)产生的日志将从通知对象中排除。
设置
启用
从管理页面启用
登录管理页面。
从”系统”菜单选择”通用”。
启用”Log Notification”复选框。
在”Log Notification Level”中选择通知对象级别(
ERROR、WARN、INFO、DEBUG、TRACE)。点击”更新”按钮。
Note
默认情况下仅 ERROR 级别为通知对象。 选择 WARN 时,``WARN`` 和 ERROR 都会被通知。
通过系统属性启用
也可以直接设置在管理页面的”通用”设置中保存的系统属性(system.properties)。
通知目标设置
通知目标(邮件收件地址、Slack / Google Chat 的 Webhook URL)均可在管理页面的 “系统”→”通用”设置中进行配置。请至少设置一个通知目标。 如果未设置任何通知目标,日志通知任务将不发送任何内容直接结束。
邮件通知
要使用邮件通知,需要进行以下设置。
邮件服务器设置(
fess_env.properties):在管理页面的”通用”设置的”通知邮件”中输入邮件地址。 多个地址可以用逗号分隔指定。
Slack 通知
在管理页面的”通用”设置的”Slack Webhook URLs”中输入 Slack 的 Incoming Webhook URL。 多个 URL 可以用逗号或空格分隔指定。 此值将作为系统属性 slack.webhook.urls 保存。
Google Chat 通知
在管理页面的”通用”设置的”Google Chat Webhook URLs”中输入 Google Chat 的 Webhook URL。 多个 URL 可以用逗号或空格分隔指定。 此值将作为系统属性 google.chat.webhook.urls 保存。
Note
如果未设置”通知邮件”而仅设置了 Slack 或 Google Chat 的 Webhook URL, 则不会发送邮件,仅向 Slack / Google Chat 发送通知。 Slack / Google Chat 将收到与邮件通知相同的主题和正文作为消息。
配置属性
可以在 fess_config.properties 中设置以下属性。
Note
log.notification.flush.interval 的变更将在 Fess 重启后生效。 其他属性将从下一个通知周期开始生效。
Note
log.notification.interval 是用于通知消息内”过去 N 秒间”显示文本的值, 并不会改变任务的执行频率。实际的执行间隔由”Log Notification”调度任务的 cron 设置(默认每隔 5 分钟)决定。若要更改任务的执行间隔,请从 “系统”→”调度器”更改此任务的 cron 表达式,并同时调整 log.notification.interval 使显示与实际情况保持一致。
通知消息格式
邮件通知
邮件通知以以下格式发送。
主题:
正文:
Note
ERROR 和 WARN 的事件按级别分别作为独立的通知发送。
Note
当显示的事件数超过 log.notification.max.display.events 时,详细部分的开头将变为 Total: N event(s) (showing M),并在末尾附加 ... and X more。 每条日志消息超过 log.notification.max.message.length 时,末尾将以 ... 截断; 整个详细部分超过 log.notification.max.details.length 时,后续内容将被截断。
Slack / Google Chat 通知
Slack 和 Google Chat 的通知也以相同的内容作为消息发送。
运维指南
推荐设置
| 环境 | 推荐级别 | 理由 |
|---|---|---|
| 生产环境 | ERROR | 仅通知重要错误,减少噪音 |
| 演示环境 | WARN | 包含潜在问题一并通知 |
| 开发环境 | 禁用 | 直接查看日志文件 |
OpenSearch 索引
日志通知功能使用 fess_log.notification_queue 索引临时存储事件 (索引名为 index.log 的值(默认 fess_log)加上 .notification_queue 而成)。 该索引在功能首次使用时自动创建。 由于通知发送后事件会被删除,通常索引大小不会变大。
Note
单次任务执行处理的事件数以 log.notification.search.size``(默认 1,000 条)为上限。 超过此上限累积的事件,将在通知发送后被一并丢弃,不会延续到此后的执行中。 在短时间内产生大量日志的环境中,请根据需要提高 ``log.notification.search.size。
故障排除
通知未发送
确认启用状态
在管理页面的”通用”设置中确认”Log Notification”是否已启用。
确认通知目标
确认是否已设置至少一个通知目标(“通知邮件”、”Slack Webhook URLs”、 “Google Chat Webhook URLs”中的任意一个)。如果均未设置,任务将输出
No notification targets configured.而不发送任何内容。确认邮件服务器设置
使用邮件通知时,确认
fess_env.properties中邮件服务器是否正确配置。确认调度任务
在”系统”→”调度器”中确认”Log Notification”任务是否已启用。 如果此任务被禁用,将不会发送通知。
确认日志
在
fess.log中确认通知相关的错误消息。
通知过多
提高日志级别
将通知级别从
WARN更改为ERROR。处理根本原因
如果频繁发生错误,请调查错误的根本原因。
通知内容被截断
请调整以下属性。
log.notification.max.details.length: 详细部分的最大字符数log.notification.max.display.events: 显示事件的最大数量log.notification.max.message.length: 每条消息的最大字符数