ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ### 多个输入和输出插件的混合使用 通常你管理的信息会来自于不同的地方,你的用例也可能要求将数据存储到不同的目的地。你的Logstash管道可以使用多个input和output插件来满足这些需求。 在本章节,你将创建一个Logstash管道同时从Twitter和Filebeat客户端获取信息,然后将这些信息存储到Elasticsearch集群的同时直接写入文件。 #### 从Twitter读取 要添加一个Twitter输入,你可以使用[twitter](http://www.elastic.co/guide/en/logstash/6.4/plugins-inputs-twitter.html)input插件。要配置这个插件,你需要下面几条信息: + 一个用来唯一标示您的Twitter应用程序的用户密钥。 + 一个用来充当Twitter应用密码的秘密。(不知道怎么翻译这一句,原文:A consumer secret, which serves as the password for your Twitter app.) + 要在传入的Feed中搜索的一个或多个关键字。在这个例子中使用“Cloud”作为关键字,你可以自定义你想要搜索的任何东西。 + 一个认证令牌,使此应用可以识别一个Twitter帐号。 + 一个认证令牌秘密,用作Twitter帐号密码。(原文:An oauth token secret, which serves as the password of the Twitter account.) 访问[https://dev.twitter.com/apps](https://dev.twitter.com/apps)来设置Twitter帐号和生成你的用户密钥和秘密,以及你的认证令牌和秘密。如果你不确定如何生成这些信息,查看[twitter](http://www.elastic.co/guide/en/logstash/6.4/plugins-inputs-twitter.html)input插件的文档来获取更多信息。 > <font color=#1E90FF size=4>注</font>:这个Twitter app似乎有些类似在微信或者其他什么开发平台申请的一个自己创建的应用,并非Twitter应用本身,至于那什么用户密钥,秘密,认证令牌什么的应该于此有关。鉴于Twitter属于404网站,不好研究。自己感受下吧。 和之前一样创建一个配置文件(命名为`second-pipeline.conf`)并且使用同样的配置框架。如果你懒,还可以复制一份刚才的,只是运行的时候确保使用的是正确的配置文件。 将下面的内容填写到`input`配置段中,并根据自己的情况替换其中的内容: ```json twitter { consumer_key => "enter_your_consumer_key_here" consumer_secret => "enter_your_secret_here" keywords => ["cloud"] oauth_token => "enter_your_access_token_here" oauth_token_secret => "enter_your_access_token_secret_here" } ``` #### 配置Filebeat将日志发送到Logstash 正如之前了解的,Filebeat是一个轻量级,资源友好的工具用来从服务器文件上收集日志并将其转发给Logstash实例进行处理。 在安装Filebeat之后,你需要进行一些配置。在本地安装目录中打开`filebeat.yml`文件,并用下面的内容替换其中内容。确保`path`指向你的系统日志: ```yaml filebeat.prospectors: - type: log paths: - /var/log/*.log ① fields: type: syslog ② output.logstash: hosts: ["localhost:5044"] ``` ① 指定一个或多个文件的绝对路径 *** ② 向事件添加一个`type`字段,值为`syslog` 保存设置。 同样,为了简单,这里你不需要配置TLS/SSL,但在生产中可能并非如此。 通过向`second-pipeline.conf`文件的`input`配置段添加以下信息来使用Filebeat input 插件。 ```json beats { port => "5044" } ``` #### 把Logstash数据写入文件 使用`file`output插件,可以配置你的Logstash管道直接将数据写入文件。 通过向`second-pipeline.conf`文件的`output`配置段添加如下信息来使用`file`output插件: ```json file { path => "/path/to/target/file" } ``` #### 写入多个Elasticsearch节点 写入多个Elasticsearch节点可以减轻特定节点的负载,并且可以在主节点不可用时提供冗余入口。 要配置此功能,在`second-pipeline.conf`文件的`output`配置段中添加如下信息: ```json output { elasticsearch { hosts => ["IP Address 1:port1", "IP Address 2:port2", "IP Address 3"] } } ``` 在hosts行配置三个非主节点的Elasticsearch节点IP地址。当hosts中配置多个IP地址的时候,Logstash会在地址列表中进行负载均衡,如果Elasticsearch使用的是默认的9200端口,你可以在上面的配置中省略它。 #### 测试 通过上面的配置,`second-pipeline.conf`内容应该如下: ```json input { twitter { consumer_key => "enter_your_consumer_key_here" consumer_secret => "enter_your_secret_here" keywords => ["cloud"] oauth_token => "enter_your_access_token_here" oauth_token_secret => "enter_your_access_token_secret_here" } beats { port => "5044" } } output { elasticsearch { hosts => ["IP Address 1:port1", "IP Address 2:port2", "IP Address 3"] } file { path => "/path/to/target/file" } } ``` Logstash现在同时从你配置的Twitter feed和Filebeat中接收数据,将数据存储到Elasticsearch集群的三个节点的同时将数据写入到一个文件。 在数据源主机上使用下面的命令启动Filebeat: ```shell sudo ./filebeat -e -c filebeat.yml -d "publish" ``` Logstash启动之前,Filebeat会收到连接5044失败的错误信息,这是正常的。 要验证你的配置,使用下面的命令: ```shell bin/logstash -f second-pipeline.conf --config.test_and_exit ``` `--config.test_and_exit`选项检查你的配置文件并向你报告其中的错误。当配置文件通过检查之后,使用下面的命令启动Logstash: ```shell bin/logstash -f second-pipeline.conf ``` 使用`grep`工具在目标文件中搜索来验证是否存在信息: ```shell grep syslog /path/to/target/file ``` 然后运行一个Elasticsearch查询来搜索同样的内容: ```shell curl -XGET 'localhost:9200/logstash-$DATE/_search?pretty&q=fields.type:syslog' ``` 用当前的时间替换其中的$DATE,时间使用YYYY.MM.DD格式。 使用下面的查询语句从Twitter feed,中查询数据: ```shell curl -XGET 'localhost:9200/logstash-$DATE/_search?pretty&q=fields.type:syslog' ``` 同样的,记得用当前的时间替换其中的$DATE变量,格式依然是YYYY.MM.DD