入门Logstash(下)
整合多输入,输出插件
你所需要管理的信息通常有不同的来源,同时收集到的数据也可能需要传输到不同的地点.你的Logstash管道可以使用多输入,输出插件来♂满足你.
在本文中,你讲创建一个从Twitter推送以及Filebet客户端中读取数据的Logstash实例,并且将数据发送到Elasticsearch集群的同时写入文件.
从Twitter推送中读取数据
对于大陆的用户,这部分内容应该需要vpn的支持
为了添加Twitter推送,你需要使用到twitter
输入插件.为了设置插件,你需要做好以下准备:
- consumer key,你的Twitter app独有的标识
- consumer secret,作为你的Twitter app密码
- 至少一个keywords用来搜索推送来的消息.示例中使用"cloud"作为关键词,你可以使用其他的啦~
- oauth token,一个认证token.
- oauth secret,认证token对应的密码
访问 https://dev.twitter.com/apps里设置一个Twitter账户并且生成consumer key以及secret,以及token和secret.如果懵逼的话可以看这里:twitter
如果经常做对接的同学应该不会陌生这部分内容
像之前一样创建一个配置文件(这次叫做second-pipeline.conf
),同样包括之前的骨架内容.如果你想的话也可以将之前的配置文件直接拷贝过来,只要注意在启动Logstash的时候要置顶正确的配置文件
在second-pipeline.conf
文件的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"
}
在Twitter申请这些内容很简单,只要设置了自己的手机号就行
设置Filebeat推送日志给Logstash
根据之前文章所描述的,Filebeat是一个轻量级,资源友好的从文件中收集日志并推送给Logstash实例的工具
安装完Filebeat后,打开filebeat.yml
进行配置,该文件在filebeat的安装目录,替换如下内容,要保证paths
指向你的系统日志目录syslog:
filebeat.prospectors:
- type: log
paths:
- /var/log/*.log [^path]
fields:
type: syslog [^type]
output.logstash:
hosts: ["localhost:5043"]
保存
为了方便测试,就不指定TLS/SSL了,生产环境是一定要的哦
配置你的Logstash将Filebeat作为输出:
beats {
port => "5043"
}
将Logstash中的数据写进文件
你可以直接将Logstash管道中的数据写入文件,配置file
作为输出组件即可
如下配置你的second-pipeline.conf
文件:
file {
path => "/path/to/target/file"
}
写入多个Elasticsearch节点
向多个Elasticsearch节点写入数据可以减轻每个节点的资源占用,同时也能在某个节点失效时为集群提供额外的写入入口.
为了配置多个Elasticsearch节点,在second-pipeline.conf
文件中这样设置你的output
:
output {
elasticsearch {
hosts => ["IP Address 1:port1", "IP Address 2:port2", "IP Address 3"]
}
}
在host一行中使用在Elasticsearch集群中三个无主节点的ip地址,当hosts
参数配置了多个IP地址时,Logstash会负载均衡的请求这些节点.同时要注意如果端口是9200的话是可以省略的
测试你的管道
现在你的second-pipeline.conf
应该是这样的:
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 => "5043"
}
}
output {
elasticsearch {
hosts => ["IP Address 1:port1", "IP Address 2:port2", "IP Address 3"]
}
file {
path => "/path/to/target/file"
}
}
Logstash从你设置的Twitter推送中以及Filebeat中获取数据,并将这些数据传输给Elasticsearch集群的三个节点中,同时也会写入文件
在提供数据的机器上,运行Filebeat:
sudo ./filebeat -e -c filebeat.yml -d "publish"
Filebeat将会尝试连接5043端口,直到Logstash与Beats插件启动前都不会有响应,请忽略之前看到的连接失败的报错.
为了测试你的配置,执行:
bin/logstash -f second-pipeline.conf --config.test_and_exit
--config.test_and_exit
选项将会解析你的配置并提供错误信息.当配置文件通过测试后,运行Logstash:
bin/logstash -f second-pipeline.conf
用grep
命令来确认目标文件是否存在:
grep syslog /path/to/target/file
执行一个Elasticsearch的搜索来查找集群中相同的信息:
curl -XGET 'localhost:9200/logstash-$DATE/_search?pretty&q=fields.type:syslog'
讲$DATE替换成YYYY.MM.DD格式的当前日期.
如果想看Twitter的信息,用这条命令:
curl -XGET 'http://localhost:9200/logstash-$DATE/_search?pretty&q=client:iphone'
同样替换$DATE即可
网友评论