使用 syslog-ng 实现可靠的 IoT 事件日志记录

使用 syslog-ng 增强型日志记录守护程序监控您的物联网设备正在执行的操作。
342 位读者喜欢这篇文章。
open network

Opensource.com

对于任何连接到互联网或网络的设备,记录事件至关重要,这样您就可以了解设备正在做什么,并解决任何潜在问题。这些设备越来越多地包括物联网 (IoT) 设备和嵌入式系统。

可以考虑的监控工具之一是开源的 syslog-ng 应用程序,这是一种增强型日志记录守护程序,专注于可移植性和中央日志收集。它可以从许多不同的来源收集日志,处理和过滤它们,并将它们存储或路由以进行进一步分析。syslog-ng 的大部分代码是用高效且高度可移植的 C 代码编写的。它适用于各种场景,无论您需要足够简单的东西在功率不足的设备上以非常小的占用空间运行,还是需要足够强大的解决方案来驻留在您的数据中心并从数万个设备收集日志。

您可能注意到我在那段话中写了很多流行语。为了澄清这一切意味着什么,让我们更慢、更深入地回顾一下它们。

日志记录

首先,日志记录是在计算机上记录事件。在典型的 Linux 机器上,您可以在 /var/log 目录中找到这些日志消息。例如,如果您通过 SSH 登录到您的机器,您将在其中一个文件中找到类似于以下内容的消息

Jan 14 11:38:48 linux-0jbu sshd[7716]: Accepted publickey for root from 127.0.0.1 port 48806 ssh2

它可能是关于您的 CPU 运行温度过高、通过 HTTP 下载的文档,或者只是您的应用程序认为重要的任何内容。

syslog-ng

正如我在上面写到的,syslog-ng 应用程序是一个增强型日志记录守护程序,专注于可移植性中央日志收集。守护程序意味着 syslog-ng 是一个在后台持续运行的应用程序;在这种情况下,它正在收集日志消息。

虽然当今许多应用程序的 Linux 测试仅限于 x86_64 机器,但 syslog-ng 也适用于许多 BSD 和商业 UNIX 变体。从嵌入式/IoT 的角度来看,更重要的是它可以在许多不同的 CPU 架构上运行,包括 32 位和 64 位 ARM、PowerPC、MIPS 等。(有时我只是通过阅读 syslog-ng 的使用方式来了解新的架构。)

为什么中央日志收集如此重要?一个原因是易于使用,因为它创建了一个单一的位置进行检查,而不是数万个设备。另一个原因是可用性——即使设备因任何原因不可用,您也可以检查设备的日志消息。第三个原因是安全性;当您的设备被黑客入侵时,检查日志可以发现黑客入侵的痕迹。

syslog-ng 的四个角色

Syslog-ng 有四个主要角色:收集、处理、过滤和存储日志消息。

收集消息: syslog-ng 可以从各种 平台特定来源 收集,例如 /dev/logjournalsun-streams。作为中央日志收集器,它支持传统 (rfc3164) 和新 (rfc5424) syslog 协议及其所有变体,通过用户数据报协议 (UDP)、TCP 和加密连接。您还可以从管道、套接字、文件甚至应用程序输出中收集日志消息(或任何类型的文本数据)。

处理日志消息: 这里的可能性几乎是无限的。您可以使用内置的解析器对日志消息进行分类、规范化和结构化。如果没有可用的解析器适合您的需求,您甚至可以用 Python 编写自己的解析器。您还可以使用地理位置数据或基于消息内容的附加字段来丰富消息。可以重新格式化日志消息以满足处理日志的应用程序的要求。您还可以重写日志消息——当然不是为了伪造消息——而是为了诸如匿名化日志消息等,这是许多合规性法规所要求的。

过滤日志: 过滤日志主要有两个用途:丢弃多余的日志消息(如调试级别消息)以节省存储空间,以及用于日志路由——确保正确的日志到达正确的目的地。后者的一个例子是将所有与身份验证相关的消息转发到安全信息和事件管理 (SIEM) 系统。

存储消息: 传统上,文件保存在本地或发送到中央 syslog 服务器;无论哪种方式,它们都会被发送到 平面文件。多年来,syslog-ng 开始支持 SQL 数据库,在过去的几年中,包括 HDFS、Kafka、MongoDB 和 Elasticsearch 在内的大数据目标被添加到 syslog-ng 中。

消息格式

当您查看 /var/log 目录下的日志消息时,您会看到(如上面的 SSH 消息中所示)大多数消息的格式为

日期 + 主机名 + 应用程序名称 + 几乎完整的英语句子

其中每个应用程序事件都由不同的句子描述,基于此数据创建报告是一项非常痛苦的工作。

解决这个混乱的方法是使用结构化日志记录。在这种情况下,事件表示为名称-值对,而不是自由格式的日志消息。例如,SSH 登录可以通过应用程序名称、源 IP 地址、用户名、身份验证方法等来描述。

您可以从一开始就对您的日志消息采用结构化方法。当处理旧版日志消息时,您可以使用 syslog-ng 中的不同解析器将非结构化(以及一些结构化)消息格式转换为名称-值对。一旦您的日志以名称-值对的形式提供,报告、警报以及简单地查找您正在寻找的信息就会变得容易得多。

IoT 日志记录

让我们从一个棘手的问题开始:哪个版本的 syslog-ng 最受欢迎?在您回答之前,请考虑以下事实:该项目始于 20 年前,Red Hat Enterprise Linux EPEL 具有 3.5 版本,当前版本为 3.14。当我在演示文稿中提出这个问题时,听众通常会建议他们最喜欢的 Linux 发行版中的版本。令人惊讶的是,正确的答案是 1.6 版本,几乎有 15 年的历史。那是因为它是包含在 Amazon Kindle 电子书阅读器中的版本,因此它在全球超过 1 亿台设备上运行。另一个运行 syslog-ng 的消费设备示例是 BMW i3 全电动汽车。

Kindle 使用 syslog-ng 收集有关用户在设备上执行的所有可能信息。在 BMW 上,syslog-ng 对日志消息执行非常复杂、基于内容的过滤,并且很可能只记录最重要的日志。

网络和存储是经常使用 syslog-ng 的其他设备类别。网络和存储是经常使用 syslog-ng 的其他设备类别。一些更知名的例子是 Turris Omnia 开源 Linux 路由器和 Synology NAS 设备。在大多数情况下,syslog-ng 最初是这些设备上的日志记录客户端,但在某些情况下,它已发展成为具有丰富 Web 界面的中央日志记录服务器。

您也可以在工业设备中找到 syslog-ng。它在 National Instruments 的所有实时 Linux 设备上运行,进行测量和自动化。它也用于从客户开发的应用程序收集日志。配置从命令行完成,但可以使用漂亮的 GUI 浏览日志。

最后,在一些大型项目中,例如汽车和飞机,syslog-ng 在客户端和服务器端都运行。这里的共同主题是 syslog-ng 收集所有日志和指标数据,将其发送到中央服务器集群,在集群中处理日志,并将其保存到支持的大数据目标之一,并在那里等待进一步分析。

IoT 的总体优势

在 IoT 环境中使用 syslog-ng 有几个好处。首先,它提供高性能和可靠的日志收集。其次,它简化了架构,因为系统和应用程序日志以及指标数据可以一起收集。第三,它使数据更易于使用,因为数据被解析并以随时可用的格式呈现。最后,syslog-ng 的高效路由和过滤可以显着降低处理负载。

Peter Czanik
Peter 是一位工程师,在 Balabit(One Identity 业务)担任开源布道师,该公司开发了 syslog-ng。他协助发行版维护 syslog-ng 软件包,跟踪错误跟踪器,帮助用户并在会议(SCALE、All Things Open、FOSDEM、LOADays 等)上定期谈论 sudo 和 syslog-ng。

评论已关闭。

© . All rights reserved.