ELK(elastic search+logstash+kibana)日誌收集系統簡單搭建(版本6.5.3)

        現在基本上有一定規模負載的項目都會用分佈式來部署項目,分佈式帶來的好處自然就是很直觀的擴大了項目的負載能力,但是隨之而來的弊端就是在運維部署以及維護時候的複雜度直線上升,一個典型的例子就是項目的日誌收集變得困難重重,試想如果線上的一個業務出現了問題,得去每一臺機器上的日誌去挨個grep……

   目前處理這種分佈式日誌的做法大約有三種:

  1. 機器數不是很多的話,不是不可以挨個去找錯誤發生的位置,然後定位。
  2. 機器數較多的話,就得寫腳本然後每次設定參數去每一臺機子上吧相關的日誌文件抓取過來,然後放到一起grep。
  3. 搭建一套自己的日誌收集系統,把需要的日誌通過這個系統收集起來,然後經過處理放入類似redis、mongo、elasticsearch的數據庫裏面,一方面可以很方便的查看日誌,另一方面還可以通過大數據計算來獲取一些有用的信息,一舉兩得

我選擇了elastic公司的ELK搭建系統,相對來說該系統操作起來比較方便,elasticsearch也是一個很好用的索引型數據庫,話不多說從零開始搭建。

系統:centOS

    1.安裝elasticsearch:

        https://www.elastic.co/cn/downloads/elasticsearch,進去之後可以選擇相應的格式,這裏爲了方便,用wget直接下載了rpm格式的安裝包,然後用 rpm -ivh xxx.rpm 命令直接安裝好,默認安裝位置可以用whereis 來查看

值得注意的是,如果選擇通過壓縮包或者其他方式來安裝和運行的話,elasticsearch是不允許以root權限來安裝的,你需要新建一個賬戶來chown 改變該目錄的所有人和操作權限,具體操作可以在網上搜一下其他貼子,rpm包是可以幫你建立好一個elastic賬戶來運行elasticsearch數據庫的,省去了一些麻煩。

安裝完之後,若想通過外網訪問默認的9200端口的話需要將/etc/elasticsearch/elasticsearch.yml中的

network.host: 0.0.0.0

設置好,這樣就可以在外網訪問9200了,可以直接在瀏覽器輸入xxx.xxxx.xxxx.xxx:9200

會得到類似這樣的返回值。

2. kibana的安裝

    kibana作爲一個可視化的圖形工具,在集成elastic可視化方面可是非常方便(廢話,一家公司嘛),所以直接模仿上面的安裝方式來安裝,https://www.elastic.co/cn/downloads/kibana需要注意的是,ELK的版本需要保持一致例如6.5.X和6.4.X是不兼容的,切記注意版本。

還是下載rpm包安裝完成之後,在yml文件裏面將

server.host:"0.0.0.0"
elasticsearch.username:"xxxxx"
elasticsearch.password:"xxxxx"

配置完成就可以通過外網登陸kibana來查看es裏面的數據了,如果es沒有auth,用戶名密碼就可以不用填寫了。

這個界面你看到的應該是英文,網上有如何漢化的教程,大家可以去搜一下,在這裏我就不做教程了。需要提一下的是,一會下面有部分用戶管理的時候會用到x-pack插件,在這個版本x-pack是會默認安裝到es裏面的,不用手動安裝了。

3. logstash

 這一步就是最後一步了,也是最關鍵的一步,將日誌收集到es裏面。

logstash也是安裝es的安裝方法安裝好之後,這時候會在/etc/logstash/下面有一個conf.d的文件夾,在這個文件夾裏面,新建一個logstash.conf的文件

sudo vim /etc/logstash/conf.d/logstash.conf

文件名可以隨便起,其實位置也可以隨便放,不過官方推薦放在這裏。

logstash的配置文件的寫法大概其就是一個“三段式”,是這個樣子的:

#顧名思義 就是輸入、過濾、然後輸出
input{

}
filter{

}
output{

}

每個“段落”都會有很多的輔助插件來幫助你處理你要的數據,本人的場景是將一個文件夾的log文件來通過過濾輸出到es中來,使用到的插件就是,file插件和grok插件

input{
	file{
		 path => "xxxxxx/*.log" #文件路徑
		 start_position => "beginning" #文件開始的位置
		 type => "xxxxx" #自定義的類型
	}
}
filter{
	grok{
		match => { "message" => "\s*%{TIMESTAMP_ISO8601:time}\s*\[\s*(?<threads> 
        ([\s\S]*))\s*\]\s*%{LOGLEVEL:level}\s*%{JAVAFILE:classname}\s*-\s*(?<info> 
         ([^\r]*))"}#grok正則表達式過濾關鍵信息
	}
	if "_grokparsefailure" in [tags] {
    drop {}
    } #不匹配的過濾掉

}
output {
  elasticsearch { hosts => ["localhost:9200"] }#輸出到es
  stdout { codec => rubydebug }#同時輸出到控制檯
}

這個配置的重點是如何編寫正則表達式,我的正則表達式匹配的日誌格式爲

2018-12-26 10:09:55.236 [XNIO-2 task-60] ERROR xxx.xxx.xxx.xxx.xxxx - 解析失敗

大家可以對照一下,大概就能理解,另外在kibana的開發者工具裏面有一個grok測試工具,寫完正則表達式之後一定要去測試一下,事半功倍。

然後啓動的時候注意在 bin/logstash -f /etc/logstash/conf.d/logstash 加上知道配置文件啓動,這樣就可以將知道文件按照過濾格式導入es了。

 

4. 要點

   到此爲止elk的初步搭建應該已經完成了,下面有幾點注意事項

  • logstash 默認在每天8:00創建當天的索引,這個可以通過配置文件修改
  • kibana的用戶管理需要許可纔可以開啓,大家可以通過試用憑證來開啓用戶驗證管理,然後在es的配置文件中將用戶驗證打開,設置號密碼後就可以在kibana開啓用戶管理了。

elk的搭建到此結束!希望大家可以用到

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