之前在 里面,我画的那个架构图里说了整个架构可以加入redis,但是在文章里我没有写到redis怎么加进去。为了让整个系统更好的分层,是非常建议引入 Redis 的,毕竟Redis 服务器是logstash官方推荐的broker选择。Redis 作为一个缓存,能够帮助我们在主节点上屏蔽掉多个从节点之间不同日志文件的差异,负责管理日志端(从节点)的人可以专注于向 Redis 里生产数据,而负责数据分析聚合端的人则可以专注于从 Redis 内消费数据。所以这一次实验要把redis加进去,同时也要部署一个nginx,让elk再去采集nginx的日志。

整个架构图图下:

image.png

部署redis

安装redis的方法请去看  ,我这里使用的redis版本是4.0.6,在执行#make test的时候可能会有如下的错误:

image.png

那就安装新一点的tcl吧,方法如下:

wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gztar xzvf tcl8.6.1-src.tar.gz  -C /usr/local/cd  /usr/local/tcl8.6.1/unix/./configuremake && make install

然后重新去#make test就会看到成功的字样,如图:

image.png

现在redis的漏洞比较多,大多数就是因为密码太简单导致的,所以把redis密码改一下,在redis.conf里,改成如下的样子:

bind 内网IP地址 127.0.0.1              ###仅允许内网和本机访问protected-mode yes                   ###保护模式开启port 6379                          ###端口默认为6379,按需修改daemonize yes                        ###守护模式开启pidfile /usr/local/redis/redis.pid               ###指定pid文件路径和文件名logfile "/usr/local/redis/redis.log"             ###指定日志文件路径和文件名dbfilename redis.rdb                     ###指定数据文件RDB文件名dir /usr/local/redis/                    ###指定数据文件RDB文件的存放路径requirepass 『YOURPASSWORD』              ###设置访问密码,提升密码强度

保存之后启动redis即可。

如果redis是主从配置,若master配置了密码则slave也要配置相应的密码参数否则无法进行正常复制的。需要在slave的redis.conf里找到“#masterauth  mstpassword”,去掉注释,也改成跟master一样的密码,重启一下即可。 

nginx的安装这里就不写了,直接看 这个就行了。

安装x-pack

x-pack是elk官方提供的认证授权插件,安装方法很简单,分别找到下面三个文件,然后后面加上“install x-pack”即可:

./elasticsearch-plugin install x-pack --batch ./logstash-plugin install x-pack ./kibana-plugin install x-pack

如果要查看已经安装的插件,那就是:

[root@chen-elk-001 bin]# ./elasticsearch-plugin listx-pack[root@chen-elk-001 bin]# ./kibana-plugin listx-pack@5.6.4

如果kibana-plugin要卸载x-pack,那就是:

./kibana-plugin remove x-pack

重启服务即可登录,默认的登录用户名: elastic 密码:changeme。

image.png       image.png

这里注意一下,#./logstash-plugin install x-pack 的时候可能是出现ruby源的错误,如图:

image.png

这是因为中国特色社会主义的网络限制访问  ,一般来说,可以把它更改成阿里的ruby源  ,不过如果你的服务器无法跨越长城的话,那么更改也是不好使的,所以在这一步,我选择离线安装x-pack。也就是先把 这个文件下载到本地上传到服务器的root文件夹里,然后安装:

[root@chen-logstash-001 bin]# ./logstash-plugin install file:///root/x-pack-5.6.4.zipInstalling file: /root/x-pack-5.6.4.zipInstall successful

配置filebeat

由于这个nginx我们需要先让filebeat把nginx.log和error.log先推到redis存储,然后再由redis推到logstash。配置filebeat.yml的具体信息如下: 

[root@iZbp10hw6wezxmrvrcjyhlZ filebeat]# grep -iv '#' /etc/filebeat/filebeat.yml | grep -iv '^$'filebeat.prospectors:- input_type: log  paths:    - /usr/local/nginx/logs/*.log    #这里是nginx的日志文件夹    output.redis:                #以下这部分都是新加的  enabled: true  hosts: ["127.0.0.1:6379"]  key: logindexer_list            #与redis配置文件里的key遥相呼应  password: 『YOURPASSWORD』    #跟上面的密码遥相呼应

配置完毕之后,启动filebeat,命令语句:#/etc/init.d/filebeat start -c /etc/filebeat/filebeat.yml

配置logstash

由于这台logstash已经开启了一个logstash进程,那么再收集nginx的日志需要新开一个logstash进程,也需要新写一个conf文件,假设新的conf文件是nginx-logstash.conf,它的写法如下:

input {    redis {        host => "10.168.173.181"        type => "redis-input"        data_type => "list"        key => "logindexer_list"        port => 6379        password => "ChenRedi$"    }}# filter configration hereoutput {     elasticsearch {        hosts => [ "10.162.80.192:9200" ]        user => elastic        password => changeme        index => "nginxlogstash-%{+YYYY.MM.dd}"        #这个是新的索引    }stdout {    codec => rubydebug       }}

现在logstash不支持多个实例共享一个path.data,所以要在在启动不同实例的时候,命令行里增加"--path.data PATH " ,为不同实例指定不同的路径。启动logstash之后,看到显示如下:

image.png

再到nginx的日志看一下,因为logstash里没有做日志的切割,所以是整个一个类似字符串的形式发送了过来:

image.png

果然有这样的日志,可见logstash与nginx的redis已经正确连接。在elasticsearch里,使用#curl -u 账号密码 'localhost:9200/_cat/indices?v' 查询索引的时候,就会看到那个"nginxlogstash",如图:

image.png

参考资料:

最后的最后,如果您觉得本文对您升职加薪有帮助,那么请不吝赞助之手,刷一下下面的二维码,赞助本人继续写更多的博文!