一.架構一覽:
所謂ELK,分別指代的是Elasticsearch、Logstash、Kibana; 官網:https://www.elastic.co/products;
三者角色分明:Elasticsearch負責索引(創建索引,搜索數據),相當於數據庫;Logstash負責上傳日誌,在上傳日誌的過程中,可以對日誌做規整,將規整後的日誌塞進Elasticsearch中;Kibana負責可視化展現Elasticsearch中的數據。在實際應用中,如果實時上傳的日誌量過大,索引速度跟不上上傳速度,則需要在Logstash到Elasticsearch中間加一個緩存層,通常我們選用redis做爲一個純粹的緩存隊列用。
部署情況:四臺機器 A B C D
A 部署redis + Logstash +Elasticsearch +Kibana
B C D 部署Elasticsearch
A B C D 組成 Elasticsearch集羣
需要收集日誌的四臺機器N1 ,N2 ,N3,N4 爲四臺擔當負載的nginx機器,分別在這4臺機器上部署logstash,過濾規整nginx日誌上傳到A機器的redis中去。然後由A機器上的logstah從redis中獲取數據輸出到elasticsearch集羣中去,由kibana展現elasticsearch集羣中數據。
二.版本選用:
java環境:jdk1.8.0_65
日誌收集,上傳:Logstash1.5.4 下載地址:https://download.elastic.co/logstash/logstash/logstash-1.5.4.tar.gz
Elasticsearch集羣:Elasticsearch1.7.3 下載地址:https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.3.tar.gz
日誌展現:kibana4.1.2 下載地址:https://download.elastic.co/kibana/kibana/kibana-4.1.2-linux-x64.tar.gz
隊列緩存:redis3.0.4 下載地址:http://download.redis.io/releases/redis-3.0.4.tar.gz
三.具體搭建
機器環境爲:Centos6.7
1.安裝java環境:
推薦選用當前最新的java環境,並且elasticsearch集羣的jdk版本一致,這裏我們的選用的是jdk1.8.0_65。
本機環境中,默認的其實是裝了openjdk的,而且各臺機器的環境亂七八槽,所以在安裝java環境之前我把默認的openjdk的環境給幹掉了。
1.1卸載openjdk
#java -version 發現是openjdk環境
#rpm -qa|grep java或者#rpm -qa | grep jdk 找到rpm安裝的java 可能輸出如下:
tzdata-java-2015g-2.el6.noarch
依次卸載以上java:
1.2 安裝jdk1.8.0_65
到 http://www.oracle.com/technetwork/java/javase/downloads/找到自己需要的java版本 wget下來
解壓: #tar zxvf jdk-8u65-linux-x64.tar.gz -C /usr/local/java
設置環境變量
export JAVA_HOME=/usr/local/java/jdk1.8.6_65
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.: ${JAVA_HOME}/lib: ${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin: $PATH
保存,立即生效環境變量
#source /etc/profile
驗證環境是否ok:
#java -version出現jdk1.8.0_65說明java環境ok了
2.redis安裝
#wget http://download.redis.io/releases/redis-3.0.4.tar.gz
解壓:tar -xzvf redis-3.0.4.tar.gz 到你需要的目錄
#cd redis-3.0.4
#make
#make install
在make的過程中可以會出錯,一般安裝提示yum安裝即可,可參考如下:
#yum install vim unix2dos wget curl curl-devel expect expect-devel
#yum install gcc glibc glib2 libgcc glibc-devel glib2-devel
#yum install m4 automake autoconf cmake cpp
#yum install gcc-c++ libstdc++ libstdc++-devel libstdc++-docs
如果出現如下錯誤:
zmalloc.h:55:2: error: #error 'Newer version of jemalloc required'
可以執行: make MALLOC=libc
修改daemonize yes
運行redis:
#./src/redis-server redis.conf
#ps -ef | grep redis查看進程
或者
#redis-3.0.4/src/redis-cli
>set a b
>get a
#b
redis ok啦!
3.安裝elasticsearch 集羣
elasticsearch集羣的安裝配置非常簡單,只要在同一個局域網內,集羣名稱一致,es會自動發現其他機器,並加入集羣內,但是在實際環境中使用時,由於網絡環境問題,常常出現節點掉線,或者長時間無法加入集羣的情況,需要我們更改配置,優化相關參數,已達到實際需求,本文緊緊以默認配置爲例,後續的優化會在另一篇文章分享。
# wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.3.tar.gz
# 解壓 tar -xzvf elasticsearch-1.7.3 -C 到你需要的目錄
在 A B C D四臺機器上分別下載安裝
# elasticsearch-1.7.3/bin/elasticsearch -d 啓動
訪問各臺機器的9200端口,返回200說明ok了,如果返回503,可以稍微再等一會,這種情況下大多是因爲節點正在嘗試加入集羣,我曾經遇到過等了10分鐘,狀態才由503變成200。如果狀態一直不對,不要-d 啓動,直接啓動,會打出啓動日誌,看看是否報錯。
elasticsearch的相關插件有很多,我主要安裝了兩種:elasticsearch-head 和 kopf ,head的界面稍微粗糙了點,kopf界面風格更geek一點,相關其他插件可參考:http://www.cnblogs.com/huangfox/p/3541300.html
4.安裝Logstash
# wget https://download.elastic.co/logstash/logstash/logstash-1.5.4.tar.gz
#解壓 tar –xvzf logstash-1.5.4.tar.gz 到你的目錄
5.安裝Kibana4
# wget https://download.elastic.co/kibana/kibana/kibana-4.1.2-linux-x64.tar.gz
#解壓 tar -xzvf kibana-4.1.2 到你的目錄
現在kibana4已經自帶web能力了,默認端口是5601,直接在kibana/bin/kibana 即可啓動kibana4了
四.相關配置
1.配置logstash
N1~N4機器上的logstash的配置:
1.1在logstash下mkdir兩個文件夾:conf和logs 分別存儲logstash的配置文件和日誌文件
1.2#cd conf
#vi nginx_access.conf
內容如下:
- input {
- file {
- type => "XXX"
- path => "/xxx/nginx/access.log"
- }
- }
- output {
- redis {
- host => "xxx.xxx.xx.xx"
- port => xx
- data_type => 'list'
- key => 'logstash:redis'
- }
- input {
- redis {
- host => "xxx.xx.xxx.xx"
- port => 6379
- data_type => 'list'
- key => 'logstash:redis'
- type => 'redis-input'
- }
- }
- filter {
- }
- output {
- elasticsearch {
- host => "xxx.xx.xxx.xx"
- port => 9200
- codec => "json"
- protocol => "http"
- }
- }