轻量级日志监控工具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