这个秘诀类似于之前的 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。大多数发行版都带有旧版本,并且没有您需要的插件。您可以从 官方软件包 中安装:
- 系统日志。这将更新基础包,包括 文件拖尾模块
- rsyslog-kafka。这将为您提供 Kafka 输出模块
如果您还没有 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)来搜索您的日志!