美文网首页Elk技术栈程序员
从零开始在你的服务器集群上搭建elk-stack(日志系统)(二

从零开始在你的服务器集群上搭建elk-stack(日志系统)(二

作者: 章鱼奇Josefa | 来源:发表于2017-11-30 22:04 被阅读27次

上一篇点这里浏览

入门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即可

相关文章

网友评论

    本文标题:从零开始在你的服务器集群上搭建elk-stack(日志系统)(二

    本文链接:https://www.haomeiwen.com/subject/cpbbbxtx.html