将redis加入到elk日志系统里

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

整个架构图图下:
paradin

部署redis

安装redis的方法请去看http://blog.51cto.com/chenx1242/1793895,我这里使用的redis版本是4.0.6,在执行make test的时候可能会有如下的错误:
paradin

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

1
2
3
4
5
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
tar xzvf tcl8.6.1-src.tar.gz -C /usr/local/
cd /usr/local/tcl8.6.1/unix/
./configure
make && make install

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

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

1
2
3
4
5
6
7
8
9
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的安装这里就不写了,直接看http://www.runoob.com/linux/nginx-install-setup.html这个就行了。

安装x-pack

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

1
2
3
./elasticsearch-plugin install x-pack --batch 
./logstash-plugin install x-pack
./kibana-plugin install x-pack

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

1
2
3
4
[root@chen-elk-001 bin]# ./elasticsearch-plugin list
x-pack
[root@chen-elk-001 bin]# ./kibana-plugin list
x-pack@5.6.4

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

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

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

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

1
2
3
[root@chen-logstash-001 bin]# ./logstash-plugin install file:///root/x-pack-5.6.4.zip
Installing file: /root/x-pack-5.6.4.zip
Install successful

配置filebeat

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

1
2
3
4
5
6
7
8
9
10
11
[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,它的写法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
input {
redis {
host => "10.168.173.181"
type => "redis-input"
data_type => "list"
key => "logindexer_list"
port => 6379
password => "ChenRedi$"
}
}

# filter configration here
output {
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之后,看到显示如下:
paradin

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

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

参考资料

https://doc.yonyoucloud.com/doc/logstash-best-practice-cn/input/redis.html

感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------