【问题标题】:How can i get a live view of syslog-ng logs in a webfrontend?如何在 Web 前端获得 syslog-ng 日志的实时视图?
【发布时间】:2021-11-21 08:11:08
【问题描述】:
我目前设置了 Syslog-ng 来汇总我的日志。我想向我的 Web 前端用户实时显示这些日志。但是我不知道如何做到这一点,是否可以使用 WebSockets 直接连接到 Syslog-ng?还是我需要先将其传递给 elasticsearch 之类的东西,如果需要,我如何从 elasticsearch 获取我的数据?
我在 Syslog-ng 文档中找到了 this 表,但我找不到任何可以解决我的问题的输出目标。
【问题讨论】:
标签:
elasticsearch
logging
websocket
syslog
syslog-ng
【解决方案1】:
很遗憾,目前没有为通用目标导出实时日志流量的机制。但是,您可以编写配置以放置日志信息供前端读取。
例如,如果您有一条日志语句将消息传递给弹性:
log {
source(s_network);
destination(d_elastic);
};
您可以在同一日志语句中添加一个替代目标,该目标仅用作导出实时日志数据的缓冲区。例如:
log {
source(s_network);
destination(d_elastic);
destination { file("/var/log/buffers/elastic_snapshot.$SEC" overwrite-if-older(59)); };
};
请注意上面日志语句中的第二个目的地,用花括号告诉 syslog-ng 使用内联目的地而不是预定义的目的地(或者您可以使用完整的目的地声明,但我省略了简洁)。
这个新的文件目的地会将弹性接收到的所有消息写入文件。该文件包含基于时间的宏 $SEC,这意味着您将获得一系列文件:每分钟一个文件。
您的前端可以尝试查找具有最新时间戳的文件并将其显示为实时流量(从最后一秒开始)。
overwrite-if-older() 选项告诉 syslog-ng 如果文件超过 59 秒,那么它应该覆盖它而不是附加到它。
这有点老套,我什至打算以通用的方式实现你所要求的东西,但即使在今天它也是可行的,只要你可以控制 syslog-ng 配置。