【ELK初探】-Centos6.7下搭建篇

     一.架構一覽:

所謂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.6.0-openjdk-1.6.0.37-1.13.9.4.el6_7.x86_64
    java-1.7.0-openjdk-1.7.0.91-2.6.2.2.el6_7.x86_64

依次卸載以上java:

 #yum -y remove java-1.7.0-openjdk-1.7.0.91-2.6.2.2.el6_7.x86_64
     #yum -y remove java-1.6.0-openjdk-1.6.0.37-1.13.9.4.el6_7.x86_64
     #yum -y remove  tzdata-java-2015g-2.el6.noarch

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

設置環境變量

#vi /etc/profile
    在文件的最後加入 

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'
  •    }
說明:從文本讀取日誌文件,輸出到A機器上的redis中去。
1.3 # cd logs/  新建logstash.log 
1.4 #nohup ./logstash -f ./conf/nginx_access.conf -l ./logs/logstash.log & 運行 ,可以在實際運行前./logstash -f ./conf/nginx_access.conf -t 檢測一下配置文件是否正確

 A機器上logstash的配置:
  •  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"
  •   }
  • }
說明:從A機器上的redis中獲取數據,輸出到elasticsearch集羣中去

2.配置elasticsearch

cluster.name: elasticsearch
discovery.zen.ping.timeout: 120s
     discovery.zen.ping.retries: 6
     discovery.zen.ping.interval: 30s
說明: elasticsearch的優化配置有很多東西可以說,這裏簡單配置一下,在同一個局域網下統一集羣名稱,elasticsearch就可以自動發現並加入集羣了,上面的參數表示每隔30s,去心跳主節點,嘗試6次,超時爲120s,在這種情況下還無法與主節點通信就認爲該節點已經脫離主節點。



3.配置kibana

port: 5601  
host: "xxx.xx.xxx.xx" 本機ip地址  
elasticsearch_url: "http://xxx.xx.xxx.xx:9200"  ip地址爲elasticsearchip地址 這個地址就是kibana去查詢索引數據時候的訪問地址

訪問5601端口,能夠成功訪問到數據,就說明成功了!














    












 



發佈了27 篇原創文章 · 獲贊 59 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章