ELK由ElasticSearch、Logstash和Kiabana三個開源工具組成。官方網站:https://www.elastic.co/cn/products/html
Elasticsearch 是個開源分佈式搜索引擎,它的特色有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。linux
Logstash 是一個徹底開源的工具,他能夠對你的日誌進行收集、過濾,並將其存儲供之後使用(如,搜索)。git
Kibana 是一個開源和免費的工具,它Kibana能夠爲Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,能夠幫助您彙總、分析和搜索重要數據日誌。github
Logstash: logstash server端用來蒐集日誌;
Elasticsearch: 存儲各種日誌;
Kibana: web化接口用做查尋和可視化日誌;
Logstash Forwarder: logstash client端用來經過lumberjack 網絡協議發送日誌到logstash server;web
2.1 ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java開發的,並做爲Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,可以達到實時搜索,穩定,可靠,快速,安裝使用方便。shell
2.2 從ELK官網下載Elasticsearch:vim
https://www.elastic.co/downloads/elasticsearch
下載elasticsearch-6.1.0.tar.gz的tar包後,瀏覽器
使用 tar -xvf elasticsearch-5.2.1.tar 命令解壓,使用cd命令進入文件夾目錄;ruby
啓動的時候必定要注意,由於es不能夠進行root帳戶啓動,因此你還須要開啓一個elsearch帳戶。服務器
groupadd elsearch #新建elsearch組
useradd elsearch -g elsearch -p elasticsearch #新建一個elsearch用戶
chown -R elsearch:elsearch ./elasticsearch #指定elasticsearch所屬elsearch組
接下來咱們默認啓動就行了,什麼也不用配置,而後在日誌中大概能夠看到開啓了9200,9300端口。
進入bin目錄,使用./elasticsearch 命令啓動elasticsearch,若是沒有出現報錯信息的話!這個時候,已經成功啓動了!
Logstash官方文檔地址:
https://www.elastic.co/guide/en/logstash/current/index.html
* 一、Logstash 的下載和安裝*
3.1 下載對應的版本:
https://www.elastic.co/downloads/past-releases/logstash-6-4-3
解壓:
使用tar -xvf logstash-5.1.1.tar.gz 命令解壓文件,解壓後使用cd命令進入文件夾內部:
主要文件夾包含bin、data、lib、config等。其中bin包含了一寫可執行腳本文件,data是用於存儲數據的,lib是一些系統所依賴的jar文件,config包含一些配置文件。
解壓完以後,咱們到config目錄中新建一個logstash.conf配置。
[root@slave1 config]# ls
jvm.options log4j2.properties logstash.conf logstash.yml startup.options
[root@slave1 config]# pwd/usr/myapp/logstash/config
[root@slave1 config]# vim logstash.conf
而後作好input ,filter,output三大塊, 其中input是吸收logs文件下的全部log後綴的日誌文件,filter是一個過濾函數,這裏不用配置,output配置了導入到
hosts爲127.0.0.1:9200的elasticsearch中,天天一個索引。
input { file { type => "log" path => "/logs/*.log" start_position => "beginning" } } output { stdout { codec => rubydebug { } } elasticsearch { hosts => "127.0.0.1" index => "log-%{+YYYY.MM.dd}" } }
配置完了以後,咱們就能夠到bin目錄下啓動logstash了,配置文件設置爲conf/logstash.conf,從下圖中能夠看到,當前開啓的是9600端口。
3.2 測試Logstash安裝,運行最基本的Logstash管道:
cd logstash-5.1.1
bin/logstash -e 'input { stdin { } } output { stdout {} }'
-e 參數表示執行後邊的語句,標誌使您可以直接從命令行指定配置。在命令行中指定配置容許您快速測試配置,而無需在迭代之間編輯文件。示例中的管道從標準輸入stdin獲取輸入,並以結構化格式將輸入移動到標準輸出stdout。
3.3 等待片刻等提示信息以後,就能夠在控制檯輸入任何內容,他都會輸出:
至此,一個Logstash的安裝與使用完成!
而後在終端上運行:
bin/logstash -f logstash.conf
-f 表示指定使用哪個配置文件進行執行。
* 3、Logstash基本原理*
Logstash管道有兩個必需的元素,輸入和輸出,以及一個可選元素,過濾器。輸入插件從源消耗數據,過濾器插件根據您指定的內容修改數據,輸出插件將數據寫入目標。以下圖:
Logstash事件處理管道有三個階段:輸入→過濾器→輸出。輸入生成事件,過濾器修改它們,並將輸出發送到其餘地方。輸入和輸出支持編解碼器,使您可以在數據進入或退出流水線時對其進行編碼或解碼,而無需使用單獨的過濾器。也就是說,其實Logstash是一個input–decode –filter–encode–output的數據流!
(1)修改上一篇文章中本身定義的配置文件 logstash.conf,修改成以下內容:
input { beats { port => "5044" } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}"} } geoip { source => "clientip" } } output { elasticsearch { hosts => [ "localhost:9200" ] } } 而後output輸出爲elasticsearch,退出保存! (2)啓動Filebeat ./filebeat -e -c filebeat.yml -d "publish" (3)啓動Logstash bin/logstash -f logstash.conf
Kibana是一個開源的分析和可視化平臺,旨在與Elasticsearch一塊兒工做。您使用Kibana搜索,查看和與存儲在Elasticsearch索引中的數據進行交互。您能夠輕鬆地在各類圖表,表格和地圖中執行高級數據分析和可視化數據。
下載
https://artifacts.elastic.co/downloads/kibana/kibana-6.4.3-linux-x86_64.tar.gz
使用tar -xvf kibana-5.2.1-linux-x86_64.tar.gz命令進行解壓,進入目錄
配置Kibana
Kibana的配置文件是在config/kibana.yml
修改配置文件: vi /config/kibana.yml (添加以下配置)
#配置本機ip
server.host: "http://localhost:9200"
#配置es集羣url
elasticsearch.url: "http://192.168.177.132:9200"
啓動:
>bin/kibana & //&後臺啓動
[root@slave1 kibana]# cd bin [root@slave1 bin]# ls kibana kibana-plugin nohup.out [root@slave1 bin]# ./kibana log [01:23:27.650] [info][status][plugin:kibana@5.2.0] Status changed from uninitialized to green - Ready log [01:23:27.748] [info][status][plugin:elasticsearch@5.2.0] Status changed from uninitialized to yellow - Waiting for Elasticsearch log [01:23:27.786] [info][status][plugin:console@5.2.0] Status changed from uninitialized to green - Ready log [01:23:27.794] [warning] You're running Kibana 5.2.0 with some different versions of Elasticsearch. Update Kibana or Elasticsearch to the same version to prevent compatibility issues: v5.6.4 @ 192.168.23.151:9200 (192.168.23.151) log [01:23:27.811] [info][status][plugin:elasticsearch@5.2.0] Status changed from yellow to green - Kibana index ready log [01:23:28.250] [info][status][plugin:timelion@5.2.0] Status changed from uninitialized to green - Ready log [01:23:28.255] [info][listening] Server running at http://0.0.0.0:5601 log [01:23:28.259] [info][status][ui settings] Status changed from uninitialized to green - Ready
訪問:http://192.168.177.132:5601/
瀏覽器中輸入:http://192.168.23.151:5601/ 你就能夠打開kibana頁面了,,默認讓我指定一個查看的Index。
接下來咱們在本機的/logs文件夾下建立一個簡單的1.log文件,內容爲「hello world」,而後在kibana上將logstash-* 改爲 log* ,Create按鈕就會自動出來。
[root@slave1 logs]# echo 'hello world' > 1.log
進入以後,點擊Discover,你就能夠找到你輸入的內容啦~~~~ 是否是很帥氣。。。
若是你裝了head安裝包,你還能夠看到它確實帶了日期模式的Index索引,還自帶5個默認分片數。
5.Elasticsearch的擴展
根據業務需求,可添加中文分詞器,查閱相關文檔官方建議安裝ik分詞器,目前效果最匹配
5.1 ik分詞器的安裝
①去github上直接下載直接編譯好的zip文件。
→ https://github.com/medcl/elasticsearch-analysis-ik/releases
選擇和已經下載的elasticsearch版本兼容的ik。
②下載好了以後解壓,將解壓後的文件夾放在elasticsearch目錄下的plugins目錄下,並重命名爲analysis-ik
③上傳至以前安裝的/home/learn/elasticsearch/plugins下,並進行解壓與重命名,重命名爲iK:
unzip elasticsearch-analysis-ik-6.4.3.zip -d ik-analyzer
④ 在ES的配置文件config/elasticsearch.yml中增長ik的配置,在最後增長:
⑤重啓elasticsearch,進入elasticsearch/bin,執行./elasticsearch
5.2 ik分詞器的使用
Ik帶有兩個分詞器:
ik_max_word :會將文本作最細粒度的拆分;儘量多的拆分出詞語
ik_smart:會作最粗粒度的拆分;已被分出的詞語將不會再次被其它詞語佔有
看下邊的例子就會明白他們的區別了:
通常在索引時採用細粒度,搜索時採用粗粒度
ik_smart正確請求方式以下(直接複製粘貼到xshell,回車便可):
返回結果:
ik_max_word正確請求方式以下:
返回結果:
自定義詞庫:
在plugins下的ik下的config中,有一個IKAnalyzer.cfg.xml,文件內容以下:
指定自定義的擴展字典,而後建立該xxx.dic文件,把自定義的專用不想被拆分的詞語添加進去,編碼爲utf-8,重啓後生效。