轻量级日志监控工具LoggiFly
简介
什么是 LoggiFly ?
LoggiFly是一个轻量级工具,用于监控Docker容器日志中的预定义关键字或正则表达式模式,并发送通知。它可以帮助用户及时获取安全漏洞、系统错误或自定义模式的实时警报。
主要功能
- 日志检测:支持简单关键词、正则表达式及多行日志检测。
- 通知发送:可以通过
Ntfy或Apprise将通知发送到100多种服务(如Slack、Discord、Telegram)。 - 容器控制:可以在检测到特定关键字时触发容器的重启或停止。
- 日志附加:自动将日志文件包含在通知中,以提供上下文。
- 自动重载:当配置文件发生变化时,自动重新加载。
- 可配置警报:可以过滤日志行并使用模板定制消息和通知标题。
- 支持远程主机:可以连接多个远程
Docker主机。 - 多平台支持:兼容
Docker、Docker Swarm和Podman。
应用场景
- 安全监控:捕捉安全漏洞,例如
Vaultwarden中的失败登录尝试。 - 崩溃调试:附加日志上下文以帮助调试应用程序崩溃。
- 容器管理:在检测到特定错误时重启或停止容器,确保系统稳定运行。
- 行为监测:监控应用程序的自定义行为,例如用户在
Audiobookshelf服务器上下载有声书时的日志。

LoggiFly 是一个理想的容器日志监控解决方案,适用于需要实时监控和响应的各种 Docker 环境。
准备
安装 Apprise
LoggiFly 支持 Ntfy 和 Apprise 两种通知方式,之前老苏都介绍过
文章传送门:
因为现在的 Apprise 已经支持 WxPusher,所以老苏选择了使用 Apprise 做日志通知
1 | # 新建文件夹 apprise 和 子目录 |
详细的使用可以参考官方的详细说明: https://github.com/caronc/apprise/wiki/Notify_wxpusher
老苏采用的是 wxpusher://{app_token}@{userid} 格式
示例:wxpusher://AT_123456/UID_789012
config.yaml
老苏没采用环境变量方式,而是用了挂载 config.yaml 的方式,这也是官方推荐的方式,因为这种方式能进行精细控制并访问所有功能,如正则表达式、容器操作、消息格式等。
以监控 bitwarden(vaultwarden) 容器的登录为例

记得需要采用
utf-8格式保存;
1 | containers: |
其中:
login:是关键字,用于捕捉和登录相关的日志;erroe:也是关键字,用于捕捉和error相关的日志;
| 参数 | 描述 | 默认值 | 选项/备注 |
|---|---|---|---|
| settings | |||
| log_level | 日志级别 | INFO | DEBUG, INFO, WARNING, ERROR |
| notification_cooldown | 相同关键字的通知冷却时间(每个容器) | 5 秒 | |
| attachment_lines | 附件中包含的日志行数 | 20 | |
| multi_line_entries | 是否监控跨多行的日志条目 | true | |
| disable_restart | 检测到配置更改时是否禁用重启 | false | |
| disable_start_message | 是否抑制启动通知 | false | |
| disable_shutdown_message | 是否抑制关闭通知 | false | |
| disable_restart_message | 是否抑制配置重载通知 | false | |
| notifications | |||
| ntfy | Ntfy 通知配置 | ||
| - url | Ntfy 服务器的 URL | ||
| - topic | Ntfy 的主题 | ||
| - token | Ntfy 令牌(如果需要身份验证) | ||
| - username | Ntfy 用户名(如果需要身份验证) | ||
| - password | Ntfy 密码(如果需要身份验证) | ||
| - priority | Ntfy 通知的优先级(1-5) | 3 | |
| - tags | Ntfy 标签/表情符号 | ||
| apprise | Apprise 通知配置 | ||
| - url | Apprise 兼容的 URL | ||
| containers | |||
| container-name | 要监控的容器名称,必须与实际容器名称匹配 | ||
| - ntfy_topic | 针对特定容器的 Ntfy 主题 | ||
| - ntfy_tags | 针对特定容器的 Ntfy 标签 | ||
| - ntfy_priority | 针对特定容器的 Ntfy 优先级 | ||
| - attachment_lines | 针对特定容器的日志附件行数 | ||
| - notification_cooldown | 针对特定容器的通知冷却时间 | ||
| global_keywords | 应用于所有监控容器的关键字 | ||
| - keywords | 监控的简单文本匹配关键字 | ||
| - keywords_with_attachment | 触发通知时附加日志文件的关键字 |
更详细的说明,请参考官方文档: https://clemcer.github.io/loggifly/guide/config-structure.html
安装
在群晖上以 Docker 方式安装。
本文写作时,
latest版本对应为v1.4.1;

docker cli 安装
如果你熟悉命令行,可能用 docker cli 更快捷
1 | # 新建文件夹 loggifly |
docker-compose 安装
也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件
1 | version: "3" |
然后执行下面的命令
1 | # 新建文件夹 loggifly |

运行
软件启动后, WxPusher 会收到一条消息,显示开始监控容器 bitwarden

打开 bitwarden 界面,故意输入错误的密码

日志中能看到错误日志

WxPusher 中收到了两条关于 login 的通知

点开分别是

和

因为采用了 login 关键字,所以登录成功也一样会有日志

参考文档
clemcer/loggifly: Monitor Docker Logs and send Notifications
地址:https://github.com/clemcer/loggiflyLoggiFly
地址:https://clemcer.github.io/loggifly/几乎每个平台都可以使用的推送通知apprise | 老苏的blog
地址:https://laosu.tech/2021/09/06/几乎每个平台都可以使用的推送通知apprise