Logstash:Logstash-to-Logstash 通信

Logstash 是一个很强大的 ETL 工具。它在很多时候很方便地让我们把数据导入到 Elasticsearch 中。如果你想对 Logstash 有比较深入的了解,请参阅我之前的文章:

在有些时候,我们甚至可以建立 Logstash-to-Logstash 之间的通信。这样可以使得我们让不同的 Logstash 处理不同的 pipeline,从而进行分工合作。你可以通过将 Lumberjack 输出连接到 Beats 输入来设置两台 Logstash 计算机之间的通信。 例如,如果数据路径跨越网络或防火墙边界,则可能需要此配置。 如果你对 Logstash 到 Logstash 的通信没有迫切的需求,请不要实施它。

如果要查找有关在一个 Logstash 实例中连接多个管道的信息,请参阅管道到管道通信。在我之前的文章中 “Logstash:Pipeline-to-Pipeline 通信 - 一个实例处理多种日志” 有详细的描述。

 

概述编辑配置

使用 Lumberjack 协议连接两台 Logstash 计算机。

  • 生成受信任的 SSL 证书(Lumberjack 协议要求)。
  • 将 SSL 证书复制到上游 Logstash 计算机。
  • 将 SSL 证书和密钥复制到下游 Logstash 计算机。
  • 将上游 Logstash 机器设置为使用 Lumberjack 输出发送数据。
  • 将下游 Logstash 机器设置为通过 Beats 输入侦听传入的 Lumberjack 连接。
  • 测试一下。

在今天的练习中,我使用如下的系统配置:

 

生成自签名 SS L证书并进行密钥编辑

使用 openssl req 命令生成自签名证书和密钥。 openssl req 命令在某些操作系统中可用。你可能需要为其他操作系统安装 openssl 命令行程序。

在 Ubuntu OS 上运行以下命令:

 openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout lumberjack.key -out lumberjack.cert -subj /CN=192.168.0.4

关于如何使用 openssl 生成证书,我们可以参考链接。如果上面的命令没有任何错误的话,我们会看到如下的结果:

$ openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout lumberjack.key -out lumberjack.cert -subj /CN=192.168.0.4
Generating a RSA private key
...................+++++
............+++++
writing new private key to 'lumberjack.key'

我们可以在当前的目录下看到两个生成的文件:

$ ls
CONTRIBUTORS  NOTICE.TXT  jdk                       lumberjack.cert  vendor
Gemfile       bin         lib                       lumberjack.key   x-pack
Gemfile.lock  config      logstash-core             modules
LICENSE.txt   data        logstash-core-plugin-api  tools

在上面我们看到 lumberjack.cert 及 lumberjack.key。其中 lumberjack.cert 将被用于 Upstream 的 Logstash 的运行中,以确保安全的数据传输。

 

拷贝 SSL 证书及 key 文件

将 SSL 证书复制到上游 Logstash 计算机中。我们将文件置于 Logstash 的安装目录中。将 SSL 证书和密钥复制到下游 Logstash 计算机中。同样地,我们将文件置于 Logstash 的安装目录中。

 

启动 downstream Logstash 实例

我们在 downstream 机器上(Ubuntu OS 机器上)运行如下的命令:

bin/logstash -e 'input { beats { codec => json port => 5000 ssl => true ssl_certificate => "lumberjack.cert" ssl_key => "lumberjack.key"} }'

启动 upstream Logstash 实例

bin/logstash -e 'input { generator { count => 5 } } output { lumberjack { codec => json hosts => "192.168.0.4" ssl_certificate => "lumberjack.cert" port => 5000 } }'

当我们运行完上面的命令后,我们可以在当前的 console 中看到如下的输出:

由于我们使用了 generator,并使用了 count = 5,也就是说生成5个事件。

我们回到 downstream,也就是 Ubuntu OS 上面的屏幕上看输出的信息:

在上面,我们可以看到有5条 Hello world! 的信息。它清楚地表明我们的 Logstash-to-Logstash 的通信是成功的。

相关推荐