centos7搭建EFK日誌分析系統
前言
EFK可能都不熟悉,實際上EFK是大名鼎鼎的日誌系統ELK的一個變種
在沒有分散式日誌的時候,每次出問題了需要查詢日誌的時候,需要登入到Linux伺服器,使用命令cat -n xxxx|grep xxxx 搜尋出日誌在哪一行,然後cat -n xxx|tail -n +n行|head -n 顯示多少行,這樣不僅效率低下,而且對於程式異常也不方便查詢,日誌少還好,一旦整合出來的日誌達到幾個G或者幾十G的時候,僅僅是搜尋都會搜尋很長時間了,當然如果知道是哪天什麼時候發生的問題當然也方便查詢,但是實際上很多時候有問題的時候,是不知道到底什麼時候出的問題,所以就必須要在聚合日誌中去搜索(一般日誌是按照天來分檔案的,聚合日誌就是把很多天的日誌合併在一起,這樣方便查詢),而搭建EFK日誌分析系統的目的就是將日誌聚合起來,達到快速檢視快速分析的目的,使用EFK不僅可以快速的聚合出每天的日誌,還能將不同專案的日誌聚合起來,對於微服務和分散式架構來說,查詢日誌尤為方便,而且因為日誌儲存在Elasticsearch中,所以查詢速度非常之快
認識EFK
EFK不是一個軟體,而是一套解決方案,並且都是開源軟體,之間互相配合使用,完美銜接,高效的滿足了很多場合的應用,是目前主流的一種日誌系統。EFK是三個開源軟體的縮寫,分別表示:Elasticsearch , FileBeat, Kibana , 其中ELasticsearch負責日誌儲存和搜尋,FileBeat負責收集日誌,Kibana 負責介面,當然EFK和大名鼎鼎的ELK只有一個區別,那就是EFK把ELK的Logstash替換成了FileBeat,因為Filebeat相對於Logstash來說有2個好處:
1、侵入低,無需修改程式目前任何程式碼和配置
2、相對於Logstash來說效能高,Logstash對於IO佔用很大
當然FileBeat也並不是完全好過Logstash,畢竟Logstash對於日誌的格式化這些相對FileBeat好很多,FileBeat只是將日誌從日誌檔案中讀取出來,當然如果你日誌本身是有一定格式的,FileBeat也可以格式化,但是相對於Logstash來說,還是差一點
Elasticsearch
Elasticsearch是個開源分散式搜尋引擎,提供蒐集、分析、儲存資料三大功能。它的特點有:分散式,零配置,自動發現,索引自動分片,索引副本機制,restful風格介面,多資料來源,自動搜尋負載等。
FileBeat
Filebeat隸屬於Beats。目前Beats包含六種工具:
Packetbeat(蒐集網路流量資料)
Metricbeat(蒐集系統、程序和檔案系統級別的 CPU 和記憶體使用情況等資料)
Filebeat(蒐集檔案資料)
Winlogbeat(蒐集 Windows 事件日誌資料)
Auditbeat( 輕量型審計日誌採集器)
Heartbeat(輕量級伺服器健康採集器)
Kibana
Kibana可以為 Logstash 、Beats和 ElasticSearch 提供的日誌分析友好的 Web 介面,可以幫助彙總、分析和搜尋重要資料日誌。
EFK架構圖
安裝Java JDK
Elasticsearch需要執行在Java 8 及以上,所以需要先安裝Java8,下載JavaJDK
wget http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz?AuthParam=1536892035_945cb24c750d0971b8c5b1925cc723a9
當然如果要安裝其他Java版本,可以將wget後面的URL替換為其他版本的URL,只要版本不低於Java8就行,下載完成後,需要檢視下載的檔案是字尾是tar.gz(只針對tar.gz,如果是RPM或者其他格式的,請自行安裝),如果檔案字尾tar.gz還跟了一串程式碼,則重新命名檔案
mv jdk-8u181-linux-x64.tar.gz\?AuthParam\=1536892035_945cb24c750d0971b8c5b1925cc723a9 jdk-8u181-linux-x64.tar.gz
解壓
tar -zxvf jdk-8u181-linux-x64.tar.gz
編輯環境變數
vi /etc/profile
在檔案末尾加上
JAVA_HOME=/usr/local/jdk1.8.0_181/ JRE_HOME=$JAVA_HOME/jre CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin export JAVA_HOME JRE_HOME CLASS_PATH PATH
其中/usr/local/jdk1.8.0_181/替換成自己Java jdk解壓出來的主目錄,wq儲存退出,使配置生效
source /etc/profile
檢視是否安裝成功
java -version
如果正常輸出Java版本則安裝成功
安裝Elasticsearch
下載Elasticsearch,本文以Elasticsearch6.2.4為例,當前Elasticsearch最新版本為Elasticsearch6.4.0,注意Elasticsearch、Kibana、FileBeat一定要使用相同的版本
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz
解壓
tar -zxvf elasticsearch-6.2.4.tar.gz
進入Elasticsearch主目錄,修改配置
vi config/elasticsearch.yml
新增以下配置,或者將對應的配置註釋取消修改
network.host: 0.0.0.0 http.port: 9200
由於Elasticsearch不能使用root使用者開啟,所以需要專門建立一個使用者來啟動Elasticsearch
$ adduser elastic #設定密碼 $ passwd elastic #需要輸入2次密碼 #授權 $ chmod -R 777 /usr/local/elasticsearch-6.2.4 #切換使用者 $ su elastic
建立的使用者名稱為elastic,其中/usr/local/elasticsearch-6.2.4為解壓出來的Elasticsearch主目錄
啟動Elasticsearch
./bin/elasticsearch
如果遇到錯誤:max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
vi /etc/security/limits.conf
如果有 * soft nofile 65535 * hard nofile 65535 則將65535修改為65536,如果沒有則在後面新增,注意此處的65535對應descriptors [65535]中的65535,修改後的值65536對應increase to at least [65536],所以當提示不一致時,需要根據具體的錯誤提示具體修改
如果遇到錯誤: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
vi /etc/sysctl.conf
新增配置
vm.max_map_count=262144
並執行命令
sysctl -p
以上2個修改需要在root使用者許可權修改,如果是使用xshell開兩個視窗的話修改完成之後一定要斷開重新登入一下,啟動成功用執行命令
curl 127.0.0.1:9200
會得到類似以下json
{ "name" : "dQIO4Ad", "cluster_name" : "elasticsearch", "cluster_uuid" : "P8KtmO3vQdactRW1jX9JnQ", "version" : { "number" : "6.2.4", "build_hash" : "ccec39f", "build_date" : "2018-04-12T20:37:28.497551Z", "build_snapshot" : false, "lucene_version" : "7.2.1", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
安裝Kibana
下載Kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-linux-x86_64.tar.gz
解壓
tar -zxvf kibana-6.2.4-linux-x86_64.tar.gz
進入主目錄,修改配置
vi config/kibana.yml
新增以下配置或者取消註釋並修改
elasticsearch.url: "http://localhost:9200" server.host: "0.0.0.0" kibana.index: ".kibana"
其中elasticsearch.url為Elasticsearch的地址,server.host預設是localhost,如果只是本地訪問可以預設localhost,如果需要外網訪問,可以設定為0.0.0.0 啟動Kibana
./bin/kibana
安裝FileBeat
下載FileBeat
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-linux-x86_64.tar.gz
解壓
tar -zxvf filebeat-6.2.4-linux-x86_64.tar.gz
進入主目錄,修改配置
vi filebeat.yml
找到類似以下的配置並修改
filebeat.prospectors: - type: log enabled: true paths: - /var/xxx/*.log - /var/xxx/*.out multiline.pattern: ^\[ multiline.negate: true multiline.match: after setup.kibana: host: "localhost:5601" output.elasticsearch: hosts: ["localhost:9200"]
配置一定要注意格式,是以2個空格為子級,裡面的配置都在配置檔案中,列出來的只是要修改的部分,enabled預設為false,需要改成true才會收集日誌。其中/var/xxx/*.log修改為自己的日誌路徑,注意-後面有一個空格, 如果多個路徑則新增一行,一定要注意新行前面的4個空格,multiline開頭的幾個配置取消註釋就行了,是為了相容多行日誌的情況,setup.kibana中的host取消註釋,根據實際情況配置地址,output.elasticsearch中的host也一樣,根據實際情況配置
啟動FileBeat
./filebeat -c /usr/local/filebeat/filebeat.yml
/usr/local/filebeat/filebeat.yml為filebeat 的配置檔案地址,需要根據實際情況修改,啟動後FileBeat就會自動收集日誌了
配置Kibana
開啟瀏覽器進入 ofollow,noindex" target="_blank">http://127.0.0.1:5601 ,會出現如下頁面: 點選Management進入配置
點選進入Index Patterns
如圖所示,FileBeat預設建立的Elasticsearch索引格式為filebeat-版本號-日期,所以需要在第一個紅框的輸入框中輸入
filebeat-6.2.4-*
能匹配到Elasticsearch的索引,第二個紅框出會顯示出Elasticsearch中已有的索引,點選Next step進入下一步 點選Create index pattern完成配置,配置完成後點選 Discover就能檢視日誌了,還能搜尋,如下圖
至此EFK就搭建完畢了