ELK日誌分析平臺的搭建

    最近公司領導要求我搭建一個日誌收集分析平臺,用於給開發同事查看訪問和業務日誌,花了一段時間終於把日誌平臺搭建出來了,之前上網找了很多開源軟件,發現還是ELK簡單點,原來是想用Hadoop的,測試了一段時間,後來覺得有點複雜,其實ELK組合也符合需求了,後來還是使用ELK。這是我測試時用到的安裝步驟文檔,貼上來分享一下。

ELK平臺介紹

日誌主要包括系統日誌、應用程序日誌和安全日誌。系統運維和開發人員可以通過日誌瞭解服務器軟硬件信息、檢查配置過程中的錯誤及錯誤發生的原因。經常分析日誌可以瞭解服務器的負荷,性能安全性,從而及時採取措施糾正錯誤。

通常,日誌被分散的儲存不同的設備上。如果你管理數十上百臺服務器,你還在使用依次登錄每臺機器的傳統方法查閱日誌。這樣是不是感覺很繁瑣和效率低下。當務之急我們使用集中化的日誌管理,例如:開源的syslog,將所有服務器上的日誌收集彙總。

集中化管理日誌後,日誌的統計和檢索又成爲一件比較麻煩的事情,一般我們使用grep、awk和wc等Linux命令能實現檢索和統計,但是對於要求更高的查詢、排序和統計等要求和龐大的機器數量依然使用這樣的方法難免有點力不從心。

開源實時日誌分析ELK平臺能夠完美的解決我們上述的問題,ELK由ElasticSearch、Logstash和Kiabana三個開源工具組成。官方網站:https://www.elastic.co/products

·         Elasticsearch是個開源分佈式搜索引擎,它的特點有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。

·         Logstash是一個完全開源的工具,他可以對你的日誌進行收集、過濾,並將其存儲供以後使用(如,搜索)。

·         Kibana 也是一個開源和免費的工具,它Kibana可以爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,可以幫助您彙總、分析和搜索重要數據日誌。

畫了一個ELK工作的原理圖:

wKioL1e4DeTTNMVPAABjlUXim6o431.png-wh_50

如圖:Logstash的agent端收集服務器產生的Log,並存放到redisd消息隊列中,然後Logstash的indexer端又從redis讀取數據放到ES,ES查詢數據生成圖表,再返回給Browser端kinaba。

ELK平臺搭建

系統環境

System: Centos release 7.0

ElasticSearch: 2.3.5

Logstash: 2.3.4

Kibana: 4.5.4

Java: openjdk version  "1.8.0_65"

注:由於Logstash的運行依賴於Java環境, 而Logstash 1.5以上版本不低於java 1.7,因此推薦使用最新版本的Java。因爲我們只需要Java的運行環境,所以可以只安裝JRE,不過這裏我依然使用JDK,請自行搜索安裝。

ELK下載:https://www.elastic.co/downloads/

wKiom1e4GRLCE7sAAAEYEzx-v0s504.png-wh_50

 

ElasticSearch

配置ElasticSearch:

tar -zxvf elasticsearch-2.3.5.tar.gz

cd elasticsearch-2.3.5

安裝Head插件(Optional):

Cd /app/elasticsearch

./bin/plugin install mobz/elasticsearch-head

然後編輯ES的配置文件:

vi config/elasticsearch.yml

修改以下配置項:

cluster.name=server

node.name=node1

path.data=/app/elasticsearch/data

path.logs=/app/elasticsearch/logs

#當前hostnameIP:

network.host=192.168.0.235

network.port=9200

其他的選項保持默認,然後使用後臺方式啓動ES:

nohup ./bin/elasticsearch &

然後可以打開頁面localhost:9200,將會看到以下內容:

wKioL1e4GRKCd0vKAABwrlOhBvM764.jpg-wh_50

返回展示了配置的cluster_name和name,以及安裝的ES的版本等信息。

剛剛安裝的head插件,它是一個用瀏覽器跟ES集羣交互的插件,可以查看集羣狀態、集羣的doc內容、執行搜索和普通的Rest請求等。現在也可以使用它打開localhost:9200/_plugin/head頁面來查看ES集羣狀態:

wKiom1e4GRPgW1aoAADuKdf1LXk851.jpg-wh_50

Logstash

Logstash的功能如下:

wKioL1e4GRSwD_1-AADWDRiMBjs542.png-wh_50

其實它就是一個收集器而已,我們需要爲它指定Input和Output(當然Input和Output可以爲多個)。配置Logstash:

tar -zxvf logstash-2.3.4.tar.gz

cd logstash-2.3.4

編寫配置文件(名字和位置可以隨意,這裏我放在config目錄下,取名爲nginx.conf):

mkdir config

vi config/nginx.conf

輸入以下內容:

input {

  file {

   path => "/home/logs/*/access/access.log"

   codec => "json"

  }

}

output {

   redis{

   data_type => "list"

   key => "nginx-access-log"

   host => "192.168.0.235"

   port => "6379"

   db => "2"

   password => "redis"

   }

}

記得要先把nginx.conf裏面把日誌格式設置爲json:

wKioL1e4GRXhougCAACcweKwZbA185.jpg-wh_50

配置indexer.conf文件:

input {

     redis{

     data_type => "list"

     key => "nginx-access-log"

     host => "192.168.0.235"

     port => "6379"

     db => "2"

     password => "redis"

   }

}

output {

     elasticsearch {

     hosts=>  ["192.168.0.235:9200"]

     index => "222nginx-access-%{+YYYY.MM.dd}" 

     }

}

使用agent來啓動它(使用-f指定配置文件):

檢查語法:

./bin/logstash agent -f config/nginx.conf –t

./bin/logstash agent -f config/indexer.conf –t

 

啓動:

./bin/logstash agent -f config/nginx.conf

./bin/logstash agent -f config/indexer.conf 

到這裏,我們已經可以使用Logstash來收集日誌並保存到ES中了。

用Head插件查看ES狀態和內容

查看看ES的head頁面:

wKioL1e4GRaSkscBAAFBKupRvj4691.png-wh_50

切換到數據瀏覽標籤:

wKiom1e4GRjDwiamAAMkTa2VY7Q600.png-wh_50

單擊某一個文檔(doc),則會展示該文檔的所有信息:

wKioL1e4GRnw50hTAAGsGFSgjSo639.png-wh_50

Kibana

配置Kibana:

tar -zxvf kibana-4.5.4-linux-x64.tar.gz

cd kibana-4.5.4-linux-x86

vi config/kibana.yml

修改以下幾項:

server.port: 5601

server.host: 192.168.0.235

elasticsearch.url: http://192.168.0.235:9200

kibana.index: “.kibana”

啓動kibana:

./bin/kibana

wKiom1e4GRqxZJCbAADDiOrrSKQ703.png-wh_50


用瀏覽器打開該地址:

wKioL1e4GRvSEs_yAAFxVM5jU3Q685.png-wh_50

爲了後續使用Kibana,需要配置至少一個Index名字或者Pattern,它用於在分析時確定ES中的Index。這裏我輸入之前配置的Index名字222nginx-access-*,Kibana會自動加載該Index下doc的field,並自動選擇合適的field用於圖標中的時間字段:

wKiom1e4Go7iraVVAAGpuH9lo_s835.png-wh_50




點擊Create後,可以看到左側增加了配置的Index名字:

wKiom1e4GhqAsvHtAACkZ1jSchk396.jpg-wh_50

接下來切換到Discover標籤上,注意右上角是查詢的時間範圍,如果沒有查找到數據,那麼你就可能需要調整這個時間範圍了,這裏我選擇Today:

wKiom1e4GhuCdf4OAAG7mRW5tks943.png-wh_50

接下來就能看到ES中的數據了:

wKioL1e4GhyCBrBOAAHZwlm0PCI489.png-wh_50

執行搜索狀態碼200看看:

wKiom1e4Gh7DWaxzAAHQh41dyW0010.png-wh_50


點擊右邊的保存按鈕,保存該查詢爲status200。接下來去Visualize頁面,點擊新建一個柱狀圖(Vertical Bar Chart),然後選擇剛剛保存的查詢status,之後,Kibana將生成類似於下圖的柱狀圖 :

wKioL1e4GiOxMZmXAAFQyv40km0288.png-wh_50

Kinaba有很多的功能的,詳情操作可到官方文檔查看:

https://www.elastic.co/guide/en/kibana/current/index.html

到這裏,ELK平臺部署和基本的測試已完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章