Fluentd 数据收集入门
作者:社区 / 产品, 用例
2022 年 11 月 09 日
导航至
本文由 Thinus Swart 撰写。向下滚动查看作者简介。
Fluentd 是一个开源数据收集器,能够从多个来源检索和接收事件数据,然后将数据过滤、缓冲和路由到不同的兼容目标。它利用插件系统帮助您快速设置特定的输入,应用任何需要的过滤,并将数据发送到您首选的数据摄取平台。
Fluentd 支持多个来源和目标,并且可以部署到包括 Windows、Linux 和 macOS 在内的多个操作系统。
在本文中,您将了解 Fluentd 以及如何在 Ubuntu Linux 系统上安装它,从 syslog 来源接收数据,然后将 syslog 事件数据发送到 InfluxDB 实例。
Fluentd 概述
除了支持多个来源和目标之外,Fluentd 还具有一些使其在其他数据收集工具中脱颖而出的优势,包括以下几点:
统一日志记录层
Fluentd 致力于成为您所有数据来源和目标之间的中间人。通过将所有日志视为 JSON,Fluentd 让您可以对不同的数据来源应用相同的规则,并确保您的目标系统可以读取结果,无论该系统是 MongoDB 实例还是 OpenSearch 集群。
它还具有水平可扩展性,并且已被组织用于从 数千台机器 收集数据,因此您应该能够安全地将其部署为组织的集中式日志事件路由引擎。
来源和目标无关
统一日志记录层之所以能够实现,是因为 Fluentd 支持从数十种不同的来源接收数据。然后,可以将这些相同的来源事件进行过滤、格式化、修改,并发送到数十个受支持的目标之一。
这一点通过 Fluentd 使用的强大的插件系统突出显示,该系统用于接收、转换数据并将其发送到多种目标类型。这些插件支持从 NGINX 等特定工具到 MQTT 或 HTTP 等通用网络协议的所有内容。
低内存占用
Fluentd 是使用 C 编程语言和 Ruby 的组合开发的,这反过来使其在系统上安装和运行时可以使用非常少的内存(约 40 MB)。
Fluentd 声称,在其默认配置中,Fluentd 实例应该能够 处理大约 13,000 个事件/秒/核心。它还有一个轻量级事件转发器版本,称为 Fluent Bit,以防您的内存需求小于 40 MB。
强大的社区
在选择任何工具时,您都想知道它是否会得到长期支持。Fluentd 是一个 毕业的 CNCF 项目,许多公司都在生产环境中贡献和使用 Fluentd。该项目的 Fluent Bit 组件最近突破了 30 亿次下载,并且增长实际上正在迅速加速,每日下载量从 2022 年初的每天约 300 万次增加到当年 10 月的每天约 1400 万次。
所有这一切只是为了表明,如果您选择使用 Fluentd 作为应用程序架构的一部分,您可以放心。
InfluxDB 概述
InfluxDB 是一个开源时序数据库,专为存储和查询时序数据而构建。
与更通用的时序数据数据库相比,使用 InfluxDB 的一些优势:
- 性能针对写入大量数据和根据时间戳查询数据范围进行了优化
- 由于面向列的存储,数据压缩得到改进,从而降低了存储成本
- 用于处理时序数据的内置工具,可提高开发人员的生产力
- 灵活的部署选项,可以针对边缘计算和物联网环境、混合架构或纯云部署进行优化
使用 InfluxDB 实施 Fluentd
在本教程中,您将使用 InfluxDB 的 基于云的实例来简化 InfluxDB 数据库的设置。您可以在本地桌面或笔记本电脑上设置 InfluxDB 的开源实例,但这不是本教程的重点。
您可以在 此 GitHub 存储库 中查看配置文件的内容。
创建 InfluxDB Cloud 实例
首先,您需要创建一个 InfluxDB Cloud 实例。如果您还没有实例,请访问 InfluxDB 网站 注册一个
填写完详细信息并输入安全密码后,系统会要求您选择要将数据存储在哪里
在选择提供商和区域时,请尝试找到最靠近您地理位置的组合。记下您选择的区域和提供商,因为稍后您将需要此信息。
接下来,系统会询问您要注册哪个计划。就本教程而言,免费计划就足够了
选择计划后,您将被重定向到 InfluxDB Cloud 实例的仪表板。从这里,您将能够监控您的数据源、创建仪表板以可视化您的数据等等
创建存储桶
查看仪表板后,是时候设置一个存储桶来存储您的数据了。存储桶是一个逻辑存储,类似于数据库,您可以在其中存储性质相似的事件。通常,个人选择将不同的应用程序日志拆分到不同的存储桶中。在免费层级中,您总共可以拥有两个存储桶。
现在您需要创建一个存储 syslog 数据的存储桶。首先在左侧导航菜单中选择 加载数据
然后选择 存储桶 > 创建存储桶
为您的存储桶命名并设置保留期(默认的 30 天即可)。完成后选择 创建
现在您应该看到您新创建的存储桶与另外两个内置系统存储桶一起列出
生成 API 令牌
接下来,您需要创建一个 API 令牌,以便 Fluentd 可以进行身份验证并将数据发送到您新创建的存储桶。再次导航到 加载数据 屏幕,然后单击 API 令牌 > 生成 API 令牌。然后您需要选择 所有访问 API 令牌
请注意: 在生产环境中,您需要更加谨慎地配置,遵循 最小权限原则。
为您的令牌添加描述,然后单击 保存
最终屏幕将显示您的令牌。在继续之前,将令牌复制并粘贴到安全的地方
请记住,您不必注册基于云的 InfluxDB 实例。如果您可以轻松地在自己的机器上安装自己的实例,请继续执行此操作。如果您决定安装 InfluxDB 的本地副本,则其余说明不应有太大差异。
安装和配置 Fluentd
使用 RubyGems 安装方法应该适用于几乎所有主流 Linux 发行版。RubyGems 是 Ruby 的包管理器,也是分发 Ruby 库的标准方法。
以下命令都输入到您选择的终端应用程序中。例如,在 Ubuntu 中,大多数人会使用操作系统自带的 GNOME 终端。
在继续之前,您需要在您的操作系统上安装 Ruby。如果由于某种原因您尚未安装它,则可以 按照这些说明 进行安装。
此外,您还需要可用的 ruby-dev
包
sudo apt install ruby ruby-dev
安装 Ruby 后,使用它通过以下命令安装 Fluentd 代理
gem install fluentd --no-doc --user-install
这将为当前用户将 Fluentd 代理安装为 Ruby gem。
根据您的 shell,您可能需要将 RubyGems 目录添加到您的路径,以便可以从任何位置运行可执行文件
export PATH="~/.local/share/gem/ruby/3.0.0/bin:$PATH"
确保您在 $PATH
变量中指定的 Ruby 版本与系统上安装的 Ruby 版本相对应。如果您有一个新的 Ubuntu 系统,则需要安装 Ruby 3.0。
现在您需要使用用户主目录中的默认配置配置 Fluentd 代理,然后进行测试以确保其正常工作
fluentd --setup ~/fluent
fluentd -c ~/fluent/fluent.conf -vv &
echo '{"json":"message"}' | fluent-cat debug.test
之前的命令将在 ./fluent
目录内使用干净的配置设置 Fluentd。然后,它们将使用裸配置文件在守护程序模式下运行 Fluentd,并将测试消息发送到 Fluentd 守护程序。
如果您收到错误,则表示您的 $PATH
变量仍然存在问题。
如果配置顺利进行,您应该在控制台中看到以下测试消息
您可能会注意到来自守护程序的各种消息正在淹没您的控制台。您可以使用 CTRL-C
或来自另一个终端进程的 killall fluentd
来停止它。守护程序将正常退出,您可以继续进行所有设置。
现在您需要获取 InfluxDB 输出插件。方便的是,Fluentd 有自己的类似于 RubyGems 的系统,称为 fluent-gem
,用于管理和下载插件。您需要 InfluxDB 插件的 v2
版本,因为您托管的 InfluxDB 实例使用较新版本。
使用以下命令安装插件
fluent-gem install influxdb-plugin-fluent --user-install
然后使用干净的配置配置 Fluentd,使其仅执行您需要它执行的操作。使用您选择的文本编辑器编辑您的 .conf
文件。示例使用 vi
vi ~/fluent/fluent.conf
将文件内容替换为以下内容
在此处,<source>
部分在 UDP 端口 41514 上设置侦听器。您可以在配置中使用任何高编号的可用端口。
然后添加一个名为 source_address_key
的字段,并获取发送 syslog 事件的源 IP 的值。添加了另外两个名为 facility_key
和 severity_key
的字段,这些值从 syslog 消息中检索。
接下来,<parse>
部分确定 syslog 消息中使用的 RFC 规范,并相应地对其进行解析。最后,有一个名为 influxdb2
的内部标签,以便您稍后可以在 <match>
部分中定位它。
在 <match>
部分中,节标题匹配所有标记为 influxdb2
的事件。
@type
告诉 Fluentd 要使用哪个插件,url
可能因您最初设置 InfluxDB 帐户时选择托管实例的位置而异。查看 InfluxDB 文档 以获取实例的正确 URL。
org
是您之前设置的组织。但是,该值不是字符串。如果您查看 InfluxDB Cloud 实例的 URL,则 URL 中 .../orgs/
后面的 16 个字符代码是您需要放入配置文件的组织代码
然后 token
是您之前在 InfluxDB Cloud 前端创建的令牌,bucket
值引用您在前端创建的存储桶。最后,flush_interval 30s
告诉 Fluentd 它应该缓冲事件,但每 30 秒发送缓冲区中的任何内容。
现在您需要保存此文件,然后使用新的 fluentd -c ./fluent/fluent.conf -vv
配置文件在守护程序模式下启动 Fluentd。然后 Fluentd 将在您指定的端口上设置侦听器,并建立与 InfluxDB Cloud 实例的连接。
配置 Syslog 以发送到 Fluentd
您的 Linux 发行版很有可能已经安装了某个版本的 syslog。Ubuntu 预装了 rsyslog
,这是 syslog 服务器的常用选择。如果您没有安装 syslog 包,您可能需要 查找特定 Linux 版本的安装文档。
安装 syslog 后,您可以继续编辑默认的 rsyslog
配置文件
sudo vi /etc/rsyslog.conf
在文件底部,添加以下内容
# forward everything to fluentd
*.* @127.0.0.1:41514
这将设置 rsyslog
以将接收到的每个 syslog 消息发送到 Fluentd 正在侦听的端口。
保存文件后,继续并重新启动 rsyslog
守护程序
sudo systemctl restart rsyslog
发送测试 Syslog 消息
如果幸运的话,您可能已经看到一些系统级 syslog 消息到达您的存储桶。
如果没有,您可以运行测试消息以查看它是否正常工作。为此,请在终端中输入以下命令
logger -d -p local0.debug "Testing Syslog to Influxdb cloud"
确认您的数据已到达
要确认您的数据已到达,请导航到您的 InfluxDB Cloud 主页,然后在左侧导航菜单中选择 数据浏览器
为了加快速度,请从默认的 查询构建器 视图切换到 脚本编辑器
在 脚本编辑器 窗口中,复制并粘贴以下查询
此脚本以 Flux 编写,Flux 是 InfluxDB 的查询和脚本语言,可用于简单查询以及构建复杂的数据转换和操作脚本。InfluxDB 最近还增加了对使用 SQL 查询数据的支持。
然后切换到 查看原始数据 开关
最后,单击 提交
现在,您应该看到查询结果
虽然此示例查询可能看起来并不令人兴奋,但它确实表明您已收到 syslog 事件,并且此时,您已成功设置 Fluentd 以将消息转发到 InfluxDB Cloud 实例!
结论
在本教程中,您成功注册并配置了 InfluxDB Cloud 实例,安装并配置了 Fluentd 以侦听 syslog 消息,配置了 syslog 以将消息转发到 Fluentd,并确认数据正在从您的系统流向您的 InfluxdB Cloud 实例。
您可以在 此 GitHub 存储库 上查看配置文件的内容。
存储数据只是第一步,一旦数据存储在 InfluxDB 中,您还可以对数据进行更多操作以从中获取价值。查看以下其他资源,了解接下来可以做什么
关于作者
Thinus Swart 是一位长期的数据极客。最近,Thinus 一直专注于 Splunk,但对任何与大数据相关的事物都感到兴奋。