ELK儲(chǔ)備

工欲善其事毅舆,必先利其器西篓。

最近討論的比較多的就是如何把我們的log有效的管理起來(lái),收集了一些ELK相關(guān)的知識(shí)憋活,做個(gè)筆記岂津。

一般我們需要進(jìn)行日志分析場(chǎng)景:直接在日志文件中 grep、awk 就可以獲得自己想要的信息悦即。但在規(guī)模較大的場(chǎng)景中吮成,此方法效率低下橱乱,面臨問(wèn)題包括日志量太大如何歸檔、文本搜索太慢怎么辦粱甫、如何多維度查詢泳叠。需要集中化的日志管理,所有服務(wù)器上的日志收集匯總茶宵。常見(jiàn)解決思路是建立集中式日志收集系統(tǒng)危纫,將所有節(jié)點(diǎn)上的日志統(tǒng)一收集,管理乌庶,訪問(wèn)种蝶。

一般大型系統(tǒng)是一個(gè)分布式部署的架構(gòu),不同的服務(wù)模塊部署在不同的服務(wù)器上安拟,問(wèn)題出現(xiàn)時(shí)蛤吓,大部分情況需要根據(jù)問(wèn)題暴露的關(guān)鍵信息,定位到具體的服務(wù)器和服務(wù)模塊糠赦,構(gòu)建一套集中式日志系統(tǒng)会傲,可以提高定位問(wèn)題的效率。

一個(gè)完整的集中式日志系統(tǒng)拙泽,需要包含以下幾個(gè)主要特點(diǎn):

收集-能夠采集多種來(lái)源的日志數(shù)據(jù)

傳輸-能夠穩(wěn)定的把日志數(shù)據(jù)傳輸?shù)街醒胂到y(tǒng)

存儲(chǔ)-如何存儲(chǔ)日志數(shù)據(jù)

分析-可以支持 UI 分析

警告-能夠提供錯(cuò)誤報(bào)告淌山,監(jiān)控機(jī)制

ELK提供了一整套解決方案,并且都是開(kāi)源軟件顾瞻,之間互相配合使用泼疑,完美銜接,高效的滿足了很多場(chǎng)合的應(yīng)用荷荤。目前主流的一種日志系統(tǒng)退渗。

ELK簡(jiǎn)介:

ELK是三個(gè)開(kāi)源軟件的縮寫(xiě),分別表示:Elasticsearch , Logstash, Kibana , 它們都是開(kāi)源軟件蕴纳。新增了一個(gè)FileBeat会油,它是一個(gè)輕量級(jí)的日志收集處理工具(Agent),F(xiàn)ilebeat占用資源少古毛,適合于在各個(gè)服務(wù)器上搜集日志后傳輸給Logstash翻翩,官方也推薦此工具。

Elasticsearch是個(gè)開(kāi)源分布式搜索引擎稻薇,提供搜集嫂冻、分析、存儲(chǔ)數(shù)據(jù)三大功能塞椎。它的特點(diǎn)有:分布式桨仿,零配置,自動(dòng)發(fā)現(xiàn)案狠,索引自動(dòng)分片服傍,索引副本機(jī)制暇昂,restful風(fēng)格接口,多數(shù)據(jù)源伴嗡,自動(dòng)搜索負(fù)載等。

Logstash 主要是用來(lái)日志的搜集从铲、分析瘪校、過(guò)濾日志的工具,支持大量的數(shù)據(jù)獲取方式名段。一般工作方式為c/s架構(gòu)阱扬,client端安裝在需要收集日志的主機(jī)上,server端負(fù)責(zé)將收到的各節(jié)點(diǎn)日志進(jìn)行過(guò)濾伸辟、修改等操作在一并發(fā)往elasticsearch上去麻惶。

Kibana 也是一個(gè)開(kāi)源和免費(fèi)的工具,Kibana可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面信夫,可以幫助匯總窃蹋、分析和搜索重要數(shù)據(jù)日志。

Filebeat隸屬于Beats静稻。目前Beats包含四種工具:

Packetbeat(搜集網(wǎng)絡(luò)流量數(shù)據(jù))

Topbeat(搜集系統(tǒng)警没、進(jìn)程和文件系統(tǒng)級(jí)別的 CPU 和內(nèi)存使用情況等數(shù)據(jù))

Filebeat(搜集文件數(shù)據(jù))

Winlogbeat(搜集 Windows 事件日志數(shù)據(jù))

官方文檔:

Filebeat:

https://www.elastic.co/cn/products/beats/filebeat

https://www.elastic.co/guide/en/beats/filebeat/5.6/index.html

Logstash:

https://www.elastic.co/cn/products/logstash

https://www.elastic.co/guide/en/logstash/5.6/index.html

Kibana:

https://www.elastic.co/cn/products/kibana

https://www.elastic.co/guide/en/kibana/5.5/index.html

Elasticsearch:

https://www.elastic.co/cn/products/elasticsearch

https://www.elastic.co/guide/en/elasticsearch/reference/5.6/index.html

elasticsearch中文社區(qū):

https://elasticsearch.cn/


ELK架構(gòu)圖:

架構(gòu)圖一:

這是最簡(jiǎn)單的一種ELK架構(gòu)方式。優(yōu)點(diǎn)是搭建簡(jiǎn)單振湾,易于上手杀迹。缺點(diǎn)是Logstash耗資源較大,運(yùn)行占用CPU和內(nèi)存高押搪。另外沒(méi)有消息隊(duì)列緩存树酪,存在數(shù)據(jù)丟失隱患。

此架構(gòu)由Logstash分布于各個(gè)節(jié)點(diǎn)上搜集相關(guān)日志大州、數(shù)據(jù)续语,并經(jīng)過(guò)分析、過(guò)濾后發(fā)送給遠(yuǎn)端服務(wù)器上的Elasticsearch進(jìn)行存儲(chǔ)摧茴。Elasticsearch將數(shù)據(jù)以分片的形式壓縮存儲(chǔ)并提供多種API供用戶查詢绵载,操作。用戶亦可以更直觀的通過(guò)配置Kibana Web方便的對(duì)日志查詢苛白,并根據(jù)數(shù)據(jù)生成報(bào)表娃豹。

架構(gòu)圖二:

此種架構(gòu)引入了消息隊(duì)列機(jī)制,位于各個(gè)節(jié)點(diǎn)上的Logstash Agent先將數(shù)據(jù)/日志傳遞給Kafka(或者Redis)购裙,并將隊(duì)列中消息或數(shù)據(jù)間接傳遞給Logstash懂版,Logstash過(guò)濾、分析后將數(shù)據(jù)傳遞給Elasticsearch存儲(chǔ)躏率。最后由Kibana將日志和數(shù)據(jù)呈現(xiàn)給用戶躯畴。因?yàn)橐肓薑afka(或者Redis),所以即使遠(yuǎn)端Logstash server因故障停止運(yùn)行民鼓,數(shù)據(jù)將會(huì)先被存儲(chǔ)下來(lái),從而避免數(shù)據(jù)丟失蓬抄。

架構(gòu)圖三:

此種架構(gòu)將收集端logstash替換為beats丰嘉,更靈活,消耗資源更少嚷缭,擴(kuò)展性更強(qiáng)饮亏。同時(shí)可配置Logstash 和Elasticsearch 集群用于支持大集群系統(tǒng)的運(yùn)維日志數(shù)據(jù)監(jiān)控和查詢。

Filebeat工作原理:

Filebeat由兩個(gè)主要組件組成:prospectors?和?harvesters阅爽。這兩個(gè)組件協(xié)同工作將文件變動(dòng)發(fā)送到指定的輸出中路幸。

Harvester(收割機(jī)):負(fù)責(zé)讀取單個(gè)文件內(nèi)容。每個(gè)文件會(huì)啟動(dòng)一個(gè)Harvester付翁,每個(gè)Harvester會(huì)逐行讀取各個(gè)文件简肴,并將文件內(nèi)容發(fā)送到制定輸出中。Harvester負(fù)責(zé)打開(kāi)和關(guān)閉文件百侧,意味在Harvester運(yùn)行的時(shí)候砰识,文件描述符處于打開(kāi)狀態(tài),如果文件在收集中被重命名或者被刪除移层,F(xiàn)ilebeat會(huì)繼續(xù)讀取此文件仍翰。所以在Harvester關(guān)閉之前,磁盤(pán)不會(huì)被釋放观话。默認(rèn)情況filebeat會(huì)保持文件打開(kāi)的狀態(tài)予借,直到達(dá)到close_inactive(如果此選項(xiàng)開(kāi)啟,filebeat會(huì)在指定時(shí)間內(nèi)將不再更新的文件句柄關(guān)閉频蛔,時(shí)間從harvester讀取最后一行的時(shí)間開(kāi)始計(jì)時(shí)灵迫。若文件句柄被關(guān)閉后,文件發(fā)生變化晦溪,則會(huì)啟動(dòng)一個(gè)新的harvester瀑粥。關(guān)閉文件句柄的時(shí)間不取決于文件的修改時(shí)間,若此參數(shù)配置不當(dāng)三圆,則可能發(fā)生日志不實(shí)時(shí)的情況狞换,由scan_frequency參數(shù)決定,默認(rèn)10s舟肉。Harvester使用內(nèi)部時(shí)間戳來(lái)記錄文件最后被收集的時(shí)間修噪。例如:設(shè)置5m,則在Harvester讀取文件的最后一行之后路媚,開(kāi)始倒計(jì)時(shí)5分鐘黄琼,若5分鐘內(nèi)文件無(wú)變化,則關(guān)閉文件句柄整慎。默認(rèn)5m)脏款。

Prospector(勘測(cè)者):負(fù)責(zé)管理Harvester并找到所有讀取源围苫。

Prospector會(huì)找到/apps/logs/*目錄下的所有info.log文件,并為每個(gè)文件啟動(dòng)一個(gè)Harvester撤师。Prospector會(huì)檢查每個(gè)文件剂府,看Harvester是否已經(jīng)啟動(dòng),是否需要啟動(dòng)剃盾,或者文件是否可以忽略周循。若Harvester關(guān)閉,只有在文件大小發(fā)生變化的時(shí)候Prospector才會(huì)執(zhí)行檢查万俗。只能檢測(cè)本地的文件。

Filebeat如何記錄文件狀態(tài):

將文件狀態(tài)記錄在文件中(默認(rèn)在/var/lib/filebeat/registry)饮怯。此狀態(tài)可以記住Harvester收集文件的偏移量闰歪。若連接不上輸出設(shè)備,如ES等蓖墅,filebeat會(huì)記錄發(fā)送前的最后一行库倘,并再可以連接的時(shí)候繼續(xù)發(fā)送。Filebeat在運(yùn)行的時(shí)候论矾,Prospector狀態(tài)會(huì)被記錄在內(nèi)存中教翩。Filebeat重啟的時(shí)候,利用registry記錄的狀態(tài)來(lái)進(jìn)行重建贪壳,用來(lái)還原到重啟之前的狀態(tài)饱亿。每個(gè)Prospector會(huì)為每個(gè)找到的文件記錄一個(gè)狀態(tài),對(duì)于每個(gè)文件闰靴,F(xiàn)ilebeat存儲(chǔ)唯一標(biāo)識(shí)符以檢測(cè)文件是否先前被收集彪笼。

Filebeat如何保證事件至少被輸出一次:

Filebeat之所以能保證事件至少被傳遞到配置的輸出一次,沒(méi)有數(shù)據(jù)丟失蚂且,是因?yàn)閒ilebeat將每個(gè)事件的傳遞狀態(tài)保存在文件中配猫。在未得到輸出方確認(rèn)時(shí),filebeat會(huì)嘗試一直發(fā)送杏死,直到得到回應(yīng)泵肄。若filebeat在傳輸過(guò)程中被關(guān)閉,則不會(huì)再關(guān)閉之前確認(rèn)所有時(shí)事件淑翼。任何在filebeat關(guān)閉之前為確認(rèn)的時(shí)間腐巢,都會(huì)在filebeat重啟之后重新發(fā)送。這可確保至少發(fā)送一次窒舟,但有可能會(huì)重復(fù)系忙。可通過(guò)設(shè)置shutdown_timeout?參數(shù)來(lái)設(shè)置關(guān)閉之前的等待事件回應(yīng)的時(shí)間(默認(rèn)禁用)惠豺。

Logstash工作原理:

Logstash事件處理有三個(gè)階段:inputs → filters → outputs银还。是一個(gè)接收风宁,處理,轉(zhuǎn)發(fā)日志的工具蛹疯。支持系統(tǒng)日志戒财,webserver日志,錯(cuò)誤日志捺弦,應(yīng)用日志饮寞,總之包括所有可以拋出來(lái)的日志類(lèi)型。

Input:輸入數(shù)據(jù)到logstash列吼。

一些常用的輸入為:

file:從文件系統(tǒng)的文件中讀取幽崩,類(lèi)似于tial -f命令

syslog:在514端口上監(jiān)聽(tīng)系統(tǒng)日志消息,并根據(jù)RFC3164標(biāo)準(zhǔn)進(jìn)行解析

redis:從redis service中讀取

beats:從filebeat中讀取

Filters:數(shù)據(jù)中間處理寞钥,對(duì)數(shù)據(jù)進(jìn)行操作慌申。

一些常用的過(guò)濾器為:

grok:解析任意文本數(shù)據(jù),Grok 是 Logstash 最重要的插件理郑。它的主要作用就是將文本格式的字符串蹄溉,轉(zhuǎn)換成為具體的結(jié)構(gòu)化的數(shù)據(jù),配合正則表達(dá)式使用您炉。內(nèi)置120多個(gè)解析語(yǔ)法柒爵。

官方提供的grok表達(dá)式:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns

grok在線調(diào)試:https://grokdebug.herokuapp.com/

mutate:對(duì)字段進(jìn)行轉(zhuǎn)換。例如對(duì)字段進(jìn)行刪除赚爵、替換棉胀、修改、重命名等冀膝。

drop:丟棄一部分events不進(jìn)行處理膏蚓。

clone:拷貝 event,這個(gè)過(guò)程中也可以添加或移除字段畸写。

geoip:添加地理信息(為前臺(tái)kibana圖形化展示使用)

Outputs:outputs是logstash處理管道的最末端組件驮瞧。一個(gè)event可以在處理過(guò)程中經(jīng)過(guò)多重輸出,但是一旦所有的outputs都執(zhí)行結(jié)束枯芬,這個(gè)event也就完成生命周期论笔。

一些常見(jiàn)的outputs為:

elasticsearch:可以高效的保存數(shù)據(jù),并且能夠方便和簡(jiǎn)單的進(jìn)行查詢千所。

file:將event數(shù)據(jù)保存到文件中狂魔。

graphite:將event數(shù)據(jù)發(fā)送到圖形化組件中,一個(gè)很流行的開(kāi)源存儲(chǔ)圖形化展示的組件淫痰。

Codecs:codecs 是基于數(shù)據(jù)流的過(guò)濾器最楷,它可以作為input,output的一部分配置。Codecs可以幫助你輕松的分割發(fā)送過(guò)來(lái)已經(jīng)被序列化的數(shù)據(jù)籽孙。

一些常見(jiàn)的codecs:

json:使用json格式對(duì)數(shù)據(jù)進(jìn)行編碼/解碼烈评。

multiline:將匯多個(gè)事件中數(shù)據(jù)匯總為一個(gè)單一的行。比如:java異常信息和堆棧信息犯建。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末讲冠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子适瓦,更是在濱河造成了極大的恐慌竿开,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玻熙,死亡現(xiàn)場(chǎng)離奇詭異否彩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)嗦随,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)胳搞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人称杨,你說(shuō)我怎么就攤上這事】曜” “怎么了姑原?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)呜舒。 經(jīng)常有香客問(wèn)我锭汛,道長(zhǎng),這世上最難降的妖魔是什么袭蝗? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任唤殴,我火速辦了婚禮,結(jié)果婚禮上到腥,老公的妹妹穿的比我還像新娘朵逝。我一直安慰自己,他們只是感情好乡范,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布配名。 她就那樣靜靜地躺著,像睡著了一般晋辆。 火紅的嫁衣襯著肌膚如雪渠脉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天瓶佳,我揣著相機(jī)與錄音芋膘,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛为朋,可吹牛的內(nèi)容都是我干的臂拓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼潜腻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼埃儿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起融涣,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤童番,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后威鹿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體剃斧,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年忽你,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了幼东。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡科雳,死狀恐怖根蟹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情糟秘,我是刑警寧澤简逮,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站尿赚,受9級(jí)特大地震影響散庶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凌净,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一悲龟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冰寻,春花似錦须教、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至秒旋,卻和暖如春约计,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背迁筛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工煤蚌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耕挨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓尉桩,卻偏偏與公主長(zhǎng)得像筒占,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蜘犁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容