一可很、什么是ELK
?????????ELK是Elasticsearch + Logstash + Kibana 這種架構(gòu)的簡(jiǎn)寫。這是一種日志分平臺(tái)析的架構(gòu)藐守。從前我們用shell三劍客(grep, sed, awk)來(lái)分析日志, 雖然也能對(duì)付大多數(shù)場(chǎng)景荸频,但當(dāng)日志量大留晚,分析頻繁印蔗,并且使用者可能不會(huì)shell三劍客的情況下扒最, 配置方便,使用簡(jiǎn)單华嘹,并且分析結(jié)果更加直觀的工具(平臺(tái))就誕生了吧趣,它就是ELK。 ELK是開源的耙厚,并且社區(qū)活躍强挫,用戶眾多。當(dāng)然國(guó)內(nèi)也有一些收費(fèi)的薛躬,比較好用的日志分析平臺(tái)纠拔,比如日志易(日志易的同事趕緊給我打錢,畢竟這廣告打的好)泛豪。?
二稠诲、ELK常見的幾種架構(gòu)
1 Elasticsearch + Logstash + Kibana
這是一種最簡(jiǎn)單的架構(gòu)。這種架構(gòu)诡曙,通過(guò)logstash收集日志臀叙,Elasticsearch分析日志,然后在Kibana(web界面)中展示价卤。這種架構(gòu)雖然是官網(wǎng)介紹里的方式劝萤,但是往往在生產(chǎn)中很少使用。
2?Elasticsearch + Logstash + filebeat + Kibana
與上一種架構(gòu)相比慎璧,這種架構(gòu)增加了一個(gè)filebeat模塊床嫌。filebeat是一個(gè)輕量的日志收集代理,用來(lái)部署在客戶端胸私,優(yōu)勢(shì)是消耗非常少的資源(較logstash)厌处, 所以生產(chǎn)中,往往會(huì)采取這種架構(gòu)方式岁疼,但是這種架構(gòu)有一個(gè)缺點(diǎn)阔涉,當(dāng)logstash出現(xiàn)故障, 會(huì)造成日志的丟失捷绒。
3 Elasticsearch + Logstash + filebeat + redis(也可以是其他中間件瑰排,比如kafka) + Kibana
這種架構(gòu)是上面那個(gè)架構(gòu)的完善版,通過(guò)增加中間件暖侨,來(lái)避免數(shù)據(jù)的丟失椭住。當(dāng)Logstash出現(xiàn)故障,日志還是存在中間件中字逗,當(dāng)Logstash再次啟動(dòng)京郑,則會(huì)讀取中間件中積壓的日志显押。目前我司使用的就是這種架構(gòu),我個(gè)人也比較推薦這種方式傻挂。
架構(gòu)圖:
說(shuō)明: logstash節(jié)點(diǎn)和elasticsearch節(jié)點(diǎn)可以根據(jù)日志量伸縮數(shù)量乘碑, filebeat部署在每臺(tái)需要收集日志的服務(wù)器上。
三金拒、安裝部署
1. redis安裝部署
? ? 這個(gè)不做介紹兽肤,但是因?yàn)閞edis在這里充當(dāng)中間件,所以最好先安裝redis绪抛,并且啟動(dòng)
2. filebeat安裝部署
? ? ?filebeat是一款輕量級(jí)的數(shù)據(jù)采集器资铡,需要部署在每臺(tái)需要收集日志的機(jī)器上。安裝和配置過(guò)程很方便幢码,如果機(jī)器很多笤休,可以配合使用批量部署工具進(jìn)行安裝。
1) 安裝
linux 平臺(tái)使用 rpm安裝
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.2.2-x86_64.rpmsudo rpm -vi filebeat-5.2.2-x86_64.rpm
?上面安裝的是5.2.2版本症副。這個(gè)版本要和后面的其他組件版本保持一致店雅,否則可能會(huì)出現(xiàn)兼容性問(wèn)題。其他平臺(tái)的安裝方法贞铣,可以在官方文檔中找到?filebeat安裝
2) 配置
配置文件是yml格式的闹啦,對(duì)格式有嚴(yán)格的要求,因?yàn)楹?jiǎn)書排版的問(wèn)題辕坝,我就直接貼圖片了窍奋。
1) 日志輸入:
filebeat.prospectors模塊用來(lái)指定日志文件的來(lái)源。在這個(gè)配置文件中酱畅, 總共接收三個(gè)日志文件琳袄,分別是
/data/logs/php/errors.log? ?/data/logs/nginx/www_error.log /data/logs/php/www.slow.log
input_type 指定日志類型,在這里是log纺酸, 應(yīng)該也可以是json窖逗。
paths指定日志文件路徑。
document_type:這個(gè)字段是用來(lái)給日志打標(biāo)記的吁峻。?
fields: 也是打標(biāo)記滑负,主要為了后面日志分析查找的方便,存儲(chǔ)的時(shí)候也會(huì)根據(jù)fields分類存儲(chǔ)用含,相同fields的數(shù)據(jù)存在同一個(gè)redis key中
fields_under_root: 如果該選項(xiàng)設(shè)置為true, 則該fields會(huì)存儲(chǔ)在top-level中帮匾。
tail_files: 這個(gè)選項(xiàng)如果設(shè)置為true啄骇,則讀取日志文件的新內(nèi)容,而忽略原有的內(nèi)容瘟斜,一般要設(shè)置為true
2)日志輸出
output.redis:指定輸出到redis
hosts:指定redis主機(jī)缸夹,可以指定多臺(tái)痪寻。
password:redis密碼,redis默認(rèn)沒(méi)有密碼虽惭,在這里設(shè)為空就行
fields_under_root: 和前面對(duì)應(yīng)橡类,top-level的存儲(chǔ)key
tail_files: 和前面對(duì)應(yīng)
keys:指定存入redis中的key, 在這個(gè)配置文件中芽唇,不同的日志文件被存到不同的key顾画。
db: 指定存在redis中的db編號(hào)(redis默認(rèn)安裝有16個(gè)databases,0~15匆笤, 默認(rèn)是存儲(chǔ)在db0中的)
3) 啟動(dòng)
配置完成后研侣,就可以啟動(dòng)filebeat了,但是如果日志量很大的話炮捧,千萬(wàn)要注意redis可能會(huì)被撐爆庶诡,因?yàn)楝F(xiàn)在還未配置Logstash,即現(xiàn)在只有filebeat往redis中寫數(shù)據(jù)咆课,有生產(chǎn)者末誓,沒(méi)有消費(fèi)者,就會(huì)造成數(shù)據(jù)積壓书蚪。所以如果日志量很大基显,先不要啟動(dòng)。
我們生產(chǎn)環(huán)境是用supervisor管理fielbeat的善炫,配置好supervisisor之后撩幽,執(zhí)行
supervisorctl start filebeat
啟動(dòng)filebeat 。如果你對(duì)supervisor不熟箩艺,又想用它的話窜醉,可以去了解下,這是一個(gè)不錯(cuò)的任務(wù)管理工具艺谆。supervisor的配置
[program:filebeat]
command=/data/app/filebeat/filebeat -e -c filebeat.yml
directory=/data/app/filebeat
logfile=/data/app/filebeat/run.log
autorestart=true
3 logstash 安裝配置
1) 環(huán)境準(zhǔn)備
? ? 安裝logstash需要依賴于java環(huán)境榨惰,具體需要安裝哪個(gè)版本的jdk,請(qǐng)參考官方文檔静汤。 我這邊logstash版本是5.2. 查看官方文檔琅催,需要的是jdk1.8.0
如何安裝jdk,不在這里介紹虫给,網(wǎng)上一大堆教程藤抡。
2)? 安裝
先下載指定版本
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.2.2.tar.gz? ? ?
解壓到指定目錄
tar xf logstash-5.2.0.tar.gz -C /data/app/
值得一提的是,這種安裝方式無(wú)需編譯抹估,解壓后就可以使用缠黍。你也可以使用yum安裝。
解壓后查看一下目錄結(jié)構(gòu)
其中config一般用來(lái)存放日志文件药蜻, bin用來(lái)存放logstash啟動(dòng)文件或者二進(jìn)制文件瓷式。
logstash啟動(dòng)方式
bin/log -f? config/你的配置文件
-f用來(lái)指定配置文件替饿。ok, 那接下來(lái)我們來(lái)寫一個(gè)配置文件贸典。
logstash配置文件最基本的需要指定日志的輸入和日志的輸出视卢。可以把logstash理解成一個(gè)處理日志的中間件廊驼,所以需要input和output
在這個(gè)配置文件里:
input是redis据过, 需要指定redis的host 和port以及db,還要指明數(shù)據(jù)的類型蔬充,list表示這是一個(gè)redis的list對(duì)象蝶俱。key指明redis中的key名稱。
output 是elasticsearch饥漫, hosts指明elasticsearch的ip和端口榨呆,index指明這個(gè)日志存在elasticsearch中的索引名稱。
這是最簡(jiǎn)單的配置庸队,這樣配置即可啟動(dòng)logstash积蜻,但如果你想針對(duì)日志做一些預(yù)處理,或者一些信息的過(guò)濾彻消,可以使用logstash提供的模塊竿拆,具體參見官方文檔。
這里介紹下filter模塊
input和output和上面一樣宾尚,不做介紹丙笋。 filter模塊中有個(gè)grok,可以用來(lái)匹配日志煌贴。根據(jù)你日志的格式來(lái)編寫match規(guī)則御板。怎么書寫規(guī)則,可以參考官方文檔牛郑,這里大概講下怠肋。 使用%{} 這種形式匹配一個(gè)變量,DATA匹配任何字符淹朋, 比如上面的 %{DATA:timestamp} 表示這個(gè)日志第一域是時(shí)間笙各, 大括號(hào)后面有個(gè)空格,空格前面表示第一域) 將時(shí)間賦值給timestamp變量(名稱可以自定義)础芍, 后面同理杈抢, 第二域是代表告警級(jí)別(賦值給level), 第三域是告警信息(賦值給msg), 第四域是客戶ip地址(賦值給client_ip)...
這個(gè)匹配規(guī)則剛開始寫起來(lái)可能有些費(fèi)勁,需要調(diào)試者甲。我當(dāng)時(shí)調(diào)試也花了不少時(shí)間春感。
ok,現(xiàn)在我們有了配置文件虏缸,即可啟動(dòng)logstash鲫懒。?
./bin/logstash -f ./config/conf.d/error.log.nginx
建議使用supervisor管理進(jìn)程。
如果啟動(dòng)有報(bào)錯(cuò)刽辙,根據(jù)報(bào)錯(cuò)一步步解決問(wèn)題窥岩。
4 elasticsearch安裝
1)依賴
和logstash一樣,elasticsearch 同樣需要依賴jdk宰缤,因?yàn)榍懊嬉呀?jīng)安裝jdk環(huán)境颂翼,所以這一步可以跳過(guò)。
2)下載安裝包并解壓
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.2.tar.gz
tar -xvf elasticsearch-5.2.2.tar.gz -C? /data/app/
和logstash一樣慨灭,不需要編譯朦乏,解壓后既可以使用。但需要配置文件
3)配置
配置文件說(shuō)明:
cluster.name: 指定elasticsearch 集群的名稱氧骤,集群內(nèi)的所有elasticsearch需要配置相同的cluster.name
node.name: 當(dāng)前節(jié)點(diǎn)名稱呻疹,需要集群內(nèi)唯一。
path.data: 數(shù)據(jù)存放位置
path.logs: elasticsearch的日志存放位置
http.port: 端口
discovery.zen.ping.unicast.hosts: elasticsearch節(jié)點(diǎn)筹陵。
下面兩個(gè)應(yīng)該是elasticsearch處理相關(guān)的配置刽锤,可以參考官方文檔。
關(guān)于elasticsearch節(jié)點(diǎn)朦佩,這里說(shuō)明下并思,最好配置成單數(shù),且數(shù)量要大于等于3. 因?yàn)榧盒枰x舉主從语稠。
4)啟動(dòng)
配置完之后宋彼,啟動(dòng)elasticsearch。 注意仙畦,如果你使用root用戶啟動(dòng)elasticsearch输涕,就會(huì)報(bào)錯(cuò),啟動(dòng)失敗议泵,這是因?yàn)閑lasticsearch不允許用root用戶啟動(dòng)占贫。可以創(chuàng)建一個(gè)用戶先口,用來(lái)啟動(dòng)elasticsearch
groupadd elasticsearch
useradd -g elasticsearch elasticsearch
上面命令用來(lái)創(chuàng)建elasticsearch組和用戶型奥。創(chuàng)建完之后,因?yàn)槟J(rèn)對(duì)剛才的elasticsearch安裝目錄沒(méi)有相關(guān)權(quán)限碉京,還需要權(quán)限賦值(更改目錄所屬組和用戶)厢汹。
chown -R elasticsearch:elasticsearch? /data/app/elasticsearch/
ok,現(xiàn)在可以啟動(dòng)了谐宙。
/data/app/elasticsearch/bin/elasticsearch -d
-d 表示后臺(tái)運(yùn)行烫葬。
還是一樣,如果有報(bào)錯(cuò),就解決報(bào)錯(cuò)搭综。
5 kibana安裝配置
1) 下載安裝包并解壓
和上面的logstash以及elasticsearch一樣垢箕,無(wú)需編譯,下載并解壓即可使用兑巾。
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.2.2-linux-x86_64.tar.gz
tar -xzf kibana-5.2.2-linux-x86_64.tar.gz -C /data/app/
2) 配置
解壓后条获,進(jìn)入到kibana目錄,修改配置文件
server.host:指明服務(wù)運(yùn)行的地址
elasticsearch.uri: 指明elasticsearch運(yùn)行的地址和端口
kibana.index: 指明kibana使用的索引蒋歌,這個(gè)是自定義的帅掘。
tilemap.uri:指明了使用地圖api, 在這里使用了高德地圖的api
配置完成堂油。
3) 啟動(dòng)
/data/app/kibana/bin/kibana
如果正常啟動(dòng)修档,則可以通過(guò)默認(rèn)的5601端口訪問(wèn)kibana 的web界面。
6 nginx?
上一步府框,當(dāng)kibana安裝啟動(dòng)之后吱窝,并且可以正常訪問(wèn),ELK的架構(gòu)算是完成了寓免。但是癣诱,如果是生產(chǎn)環(huán)境,我的建議是用nginx代理kibana web袜香。 nginx安裝配置很簡(jiǎn)單撕予,網(wǎng)上一大堆,請(qǐng)自行安裝配置蜈首。
至此实抡,我們完成了filebeat + redis + logstash + elasticsearch + kibana + nginx 的這種架構(gòu)。通過(guò)訪問(wèn)網(wǎng)頁(yè)欢策, 即可查詢相關(guān)日志吆寨。
至于kibana怎么使用,如何創(chuàng)建索引踩寇,這個(gè)該教程就不作介紹了啄清,可以參考網(wǎng)上的一些資料,或者如果你英文水平過(guò)關(guān)俺孙,直接看官方文檔吧辣卒。