配方:rsyslog + Kafka + Logstash

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

这个秘诀类似于之前的 rsyslog + Redis + Logstash 秘诀,除了我们将使用 Kafka 作为中央缓冲区和连接点而不是 Redis。您将拥有更多相同的优势:

  • rsyslog 轻便且速度快得惊人,包括当您希望它跟踪文件和解析非结构化数据时(请参阅 Apache 日志 + rsyslog + Elasticsearch 配方
  • Kafka 非常擅长缓冲事物
  • Logstash 可以转换您的日志并将它们轻松连接到 N 个目的地

不过,Redis 配方有几个不同之处:

  • rsyslog 已经有 Kafka 输出包,所以更容易设置
  • 在队列和扩展方面,Kafka 与 Redis 有一组不同的特性(试图避免在这里发生口水战)

与其他方法一样,我将向您展示如何安装和配置所需的组件。最终结果将是本地系统日志(和尾文件,如果你想尾它们)将在 Elasticsearch 或 像 Logsene 这样的日志记录 SaaS (它 公开用于索引和搜索的 Elasticsearch API )中结束。当然,您也可以选择更改 rsyslog 配置以解析日志(如我们 之前 所示),并更改 Logstash 以执行其他操作(例如 添加 GeoIP 信息 )。

获取成分

首先,您可能需要更新 rsyslog。大多数发行版都带有旧版本,并且没有您需要的插件。您可以从 官方软件包 中安装:

如果您还没有 Kafka,您可以通过 下载二进制 tar 来设置它。然后您可以按照 快速入门指南 进行操作。基本上你必须先启动 Zookeeper(假设你还没有想要重复使用的 Zookeeper):


 bin/zookeeper-server-start.sh config/zookeeper.properties

然后启动 Kafka 本身并创建一个简单的 1 分区主题,我们将使用该主题将日志从 rsyslog 推送到 Logstash。我们称它为 rsyslog_logstash


 bin/zookeeper-server-start.sh config/zookeeper.properties

最后,您将拥有 Logstash。在写这篇文章时,我们有一个 2.0 测试版,其中有 很多改进 (包括我之前提到的 GeoIP 过滤器的巨大性能提升)。下载并解压后,您可以通过以下方式启动它:


 bin/zookeeper-server-start.sh config/zookeeper.properties

尽管您也有 packages ,在这种情况下,您会将配置文件放在 /etc/logstash/conf.d/ 中并使用 init 脚本启动它。

配置 rsyslog

使用 rsyslog,您需要先加载所需的 模块


 bin/zookeeper-server-start.sh config/zookeeper.properties

如果你想拖尾文件,你必须为每组文件添加定义,如下所示:


 bin/zookeeper-server-start.sh config/zookeeper.properties

然后你需要一个 模板 来从你的日志中构建 JSON 文档。您会将这些 JSON 发布到 Kafka 并使用 Logstash 使用它们。这是一个适用于 通过 mmnormalize 解析的普通系统日志和尾文件的文件:


 bin/zookeeper-server-start.sh config/zookeeper.properties

默认情况下,rsyslog 有一个 10K 消息的内存 队列 ,并且有一个线程可以处理最多 16 条消息的批次(您可以 在此处找到所有队列参数 )。您可能想要更改:
– batch size,它也控制一次发送给Kafka的最大消息数
– 线程数,这也将并行发送到 Kafka
– 队列的大小及其性质:内存中(默认)、磁盘或磁盘辅助

在 rsyslog->Kafka->Logstash 设置中,我假设你想保持 rsyslog 轻,所以这些数字会很小,比如:


 bin/zookeeper-server-start.sh config/zookeeper.properties

最后,要发布到 Kafka,您主要指定要连接的代理(在此示例中,我们有一个监听 localhost:9092)和我们刚刚创建的主题的名称:


 bin/zookeeper-server-start.sh config/zookeeper.properties

假设 Kafka 已启动,rsyslog 将继续推送给它。

配置 Logstash

这是我们选择 JSON 日志(如先前模板中定义的)并将它们转发到首选目的地的部分。首先,我们有输入,它将用于我们创建的 Kafka 主题。为了连接,我们将 Logstash 指向 Zookeeper,它将从那里获取关于 Kafka 的所有信息:


 bin/zookeeper-server-start.sh config/zookeeper.properties

此时,您可能希望在推送到 Logsene 或 Elasticsearch 之前使用各种过滤器来更改日志。对于最后一步,您将使用 Elasticsearch 输出:


 bin/zookeeper-server-start.sh config/zookeeper.properties

就是这样!现在 您可以使用 Kibana (或者,对于 Logsene ,Kibana 或 Logsene 自己的 UI)来搜索您的日志!