前言
EFK可能都不熟悉,實際上EFK是大名鼎鼎的日志系統(tǒng)ELK的一個變種
在沒有分布式日志的時候戚篙,每次出問題了需要查詢?nèi)罩镜臅r候迹淌,需要登錄到Linux服務(wù)器,使用命令cat -n xxxx|grep xxxx 搜索出日志在哪一行剪芍,然后cat -n xxx|tail -n +n行|head -n 顯示多少行,這樣不僅效率低下窟蓝,而且對于程序異常也不方便查詢罪裹,日志少還好,一旦整合出來的日志達(dá)到幾個G或者幾十G的時候运挫,僅僅是搜索都會搜索很長時間了状共,當(dāng)然如果知道是哪天什么時候發(fā)生的問題當(dāng)然也方便查詢,但是實際上很多時候有問題的時候谁帕,是不知道到底什么時候出的問題峡继,所以就必須要在聚合日志中去搜索(一般日志是按照天來分文件的,聚合日志就是把很多天的日志合并在一起匈挖,這樣方便查詢)碾牌,而搭建EFK日志分析系統(tǒng)的目的就是將日志聚合起來康愤,達(dá)到快速查看快速分析的目的,使用EFK不僅可以快速的聚合出每天的日志舶吗,還能將不同項目的日志聚合起來征冷,對于微服務(wù)和分布式架構(gòu)來說,查詢?nèi)罩居葹榉奖憧泗妫乙驗槿罩颈4嬖贓lasticsearch中资盅,所以查詢速度非常之快
認(rèn)識EFK
EFK不是一個軟件调榄,而是一套解決方案踊赠,并且都是開源軟件,之間互相配合使用每庆,完美銜接筐带,高效的滿足了很多場合的應(yīng)用,是目前主流的一種日志系統(tǒng)缤灵。EFK是三個開源軟件的縮寫伦籍,分別表示:Elasticsearch , FileBeat, Kibana , 其中ELasticsearch負(fù)責(zé)日志保存和搜索,F(xiàn)ileBeat負(fù)責(zé)收集日志腮出,Kibana 負(fù)責(zé)界面,當(dāng)然EFK和大名鼎鼎的ELK只有一個區(qū)別帖鸦,那就是EFK把ELK的Logstash替換成了FileBeat,因為Filebeat相對于Logstash來說有2個好處:
1胚嘲、侵入低作儿,無需修改程序目前任何代碼和配置
2、相對于Logstash來說性能高馋劈,Logstash對于IO占用很大
當(dāng)然FileBeat也并不是完全好過Logstash攻锰,畢竟Logstash對于日志的格式化這些相對FileBeat好很多,F(xiàn)ileBeat只是將日志從日志文件中讀取出來妓雾,當(dāng)然如果你日志本身是有一定格式的娶吞,F(xiàn)ileBeat也可以格式化,但是相對于Logstash來說械姻,還是差一點
Elasticsearch
Elasticsearch是個開源分布式搜索引擎妒蛇,提供搜集、分析楷拳、存儲數(shù)據(jù)三大功能绣夺。它的特點有:分布式,零配置唯竹,自動發(fā)現(xiàn)乐导,索引自動分片,索引副本機制浸颓,restful風(fēng)格接口物臂,多數(shù)據(jù)源旺拉,自動搜索負(fù)載等。
FileBeat
Filebeat隸屬于Beats棵磷。目前Beats包含六種工具:
Packetbeat(搜集網(wǎng)絡(luò)流量數(shù)據(jù))
Metricbeat(搜集系統(tǒng)蛾狗、進程和文件系統(tǒng)級別的 CPU 和內(nèi)存使用情況等數(shù)據(jù))
Filebeat(搜集文件數(shù)據(jù))
Winlogbeat(搜集 Windows 事件日志數(shù)據(jù))
Auditbeat( 輕量型審計日志采集器)
Heartbeat(輕量級服務(wù)器健康采集器)
Kibana
Kibana可以為 Logstash 、Beats和 ElasticSearch 提供的日志分析友好的 Web 界面仪媒,可以幫助匯總沉桌、分析和搜索重要數(shù)據(jù)日志。
EFK架構(gòu)圖
安裝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
當(dāng)然如果要安裝其他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
編輯環(huán)境變量
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為例韭山,當(dāng)前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
添加以下配置秃诵,或者將對應(yīng)的配置注釋取消修改
network.host: 0.0.0.0
http.port: 9200
由于Elasticsearch不能使用root用戶打開续搀,所以需要專門創(chuàng)建一個用戶來啟動Elasticsearch
$ adduser elastic
#設(shè)置密碼
$ passwd elastic
#需要輸入2次密碼
#授權(quán)
$ chmod -R 777 /usr/local/elasticsearch-6.2.4
#切換用戶
$ su elastic
創(chuàng)建的用戶名為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對應(yīng)descriptors [65535]中的65535,修改后的值65536對應(yīng)increase to at least [65536]毅往,所以當(dāng)提示不一致時牵咙,需要根據(jù)具體的錯誤提示具體修改
如果遇到錯誤: 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
并執(zhí)行命令
sysctl -p
以上2個修改需要在root用戶權(quán)限修改,如果是使用xshell開兩個窗口的話修改完成之后一定要斷開重新登錄一下攀唯,啟動成功用執(zhí)行命令
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默認(rèn)是localhost侯嘀,如果只是本地訪問可以默認(rèn)localhost另凌,如果需要外網(wǎng)訪問谱轨,可以設(shè)置為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默認(rèn)為false献汗,需要改成true才會收集日志。其中/var/xxx/*.log修改為自己的日志路徑王污,注意-后面有一個空格罢吃,
如果多個路徑則添加一行,一定要注意新行前面的4個空格玉掸,multiline開頭的幾個配置取消注釋就行了刃麸,是為了兼容多行日志的情況,setup.kibana中的host取消注釋司浪,根據(jù)實際情況配置地址,output.elasticsearch中的host也一樣把沼,根據(jù)實際情況配置
啟動FileBeat
./filebeat -c /usr/local/filebeat/filebeat.yml
/usr/local/filebeat/filebeat.yml為filebeat 的配置文件地址啊易,需要根據(jù)實際情況修改,啟動后FileBeat就會自動收集日志了
配置Kibana
打開瀏覽器進入http://127.0.0.1:5601饮睬,會出現(xiàn)如下頁面:
點擊Management進入配置
點擊進入Index Patterns
如圖所示租谈,F(xiàn)ileBeat默認(rèn)創(chuàng)建的Elasticsearch索引格式為filebeat-版本號-日期,所以需要在第一個紅框的輸入框中輸入
filebeat-6.2.4-*
能匹配到Elasticsearch的索引捆愁,第二個紅框出會顯示出Elasticsearch中已有的索引割去,點擊Next step進入下一步
點擊Create index pattern完成配置,配置完成后點擊 Discover就能查看日志了昼丑,還能搜索呻逆,如下圖
至此EFK就搭建完畢了