之前在http://blog.51cto.com/chenx1242/2048014 裏面,我畫的那個架構圖裏說了整個架構可以加入redis,但是在文章裏我沒有寫到redis怎麼加進去。爲了讓整個系統更好的分層,是非常建議引入 Redis 的,畢竟Redis 服務器是logstash官方推薦的broker選擇。Redis 作爲一個緩存,能夠幫助我們在主節點上屏蔽掉多個從節點之間不同日誌文件的差異,負責管理日誌端(從節點)的人可以專注於向 Redis 裏生產數據,而負責數據分析聚合端的人則可以專注於從 Redis 內消費數據。所以這一次實驗要把redis加進去,同時也要部署一個nginx,讓elk再去採集nginx的日誌。
整個架構圖圖下:
部署redis
安裝redis的方法請去看http://blog.51cto.com/chenx1242/1793895 ,我這裏使用的redis版本是4.0.6,在執行#make test的時候可能會有如下的錯誤:
那就安裝新一點的tcl吧,方法如下:
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就會看到成功的字樣,如圖:
現在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的安裝這裏就不寫了,直接看http://www.runoob.com/linux/nginx-install-setup.html 這個就行了。
安裝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 list x-pack [root@chen-elk-001 bin]# ./kibana-plugin list [email protected]
如果kibana-plugin要卸載x-pack,那就是:
./kibana-plugin remove x-pack
重啓服務即可登錄,默認的登錄用戶名: elastic 密碼:changeme。
這裏注意一下,#./logstash-plugin install x-pack 的時候可能是出現ruby源的錯誤,如圖:
這是因爲中國特色社會主義的網絡限制訪問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文件夾裏,然後安裝:
[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.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 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之後,看到顯示如下:
再到nginx的日誌看一下,因爲logstash裏沒有做日誌的切割,所以是整個一個類似字符串的形式發送了過來:
果然有這樣的日誌,可見logstash與nginx的redis已經正確連接。在elasticsearch裏,使用#curl -u 賬號密碼 'localhost:9200/_cat/indices?v' 查詢索引的時候,就會看到那個"nginxlogstash",如圖:
參考資料:https://doc.yonyoucloud.com/doc/logstash-best-practice-cn/input/redis.html
最後的最後,如果您覺得本文對您升職加薪有幫助,那麼請不吝贊助之手,刷一下下面的二維碼,贊助本人繼續寫更多的博文!