2019-07-12 ELK原理與介紹【轉(zhuǎn)】

為什么用到ELK:

一般我們需要進(jìn)行日志分析場景:直接在日志文件中 grep烛卧、awk 就可以獲得自己想要的信息佩微。但在規(guī)模較大的場景中缝彬,此方法效率低下,面臨問題包括日志量太大如何歸檔哺眯、文本搜索太慢怎么辦谷浅、如何多維度查詢。需要集中化的日志管理奶卓,所有服務(wù)器上的日志收集匯總一疯。常見解決思路是建立集中式日志收集系統(tǒng),將所有節(jié)點上的日志統(tǒng)一收集夺姑,管理墩邀,訪問。

一般大型系統(tǒng)是一個分布式部署的架構(gòu)盏浙,不同的服務(wù)模塊部署在不同的服務(wù)器上磕蒲,問題出現(xiàn)時留潦,大部分情況需要根據(jù)問題暴露的關(guān)鍵信息,定位到具體的服務(wù)器和服務(wù)模塊辣往,構(gòu)建一套集中式日志系統(tǒng)兔院,可以提高定位問題的效率。

一個完整的集中式日志系統(tǒng)站削,需要包含以下幾個主要特點:

  • 收集-能夠采集多種來源的日志數(shù)據(jù)
  • 傳輸-能夠穩(wěn)定的把日志數(shù)據(jù)傳輸?shù)街醒胂到y(tǒng)
  • 存儲-如何存儲日志數(shù)據(jù)
  • 分析-可以支持 UI 分析
  • 警告-能夠提供錯誤報告坊萝,監(jiān)控機(jī)制

ELK提供了一整套解決方案,并且都是開源軟件许起,之間互相配合使用十偶,完美銜接,高效的滿足了很多場合的應(yīng)用园细。目前主流的一種日志系統(tǒng)惦积。

ELK簡介:

ELK是三個開源軟件的縮寫,分別表示:Elasticsearch , Logstash, Kibana , 它們都是開源軟件猛频。新增了一個FileBeat狮崩,它是一個輕量級的日志收集處理工具(Agent),F(xiàn)ilebeat占用資源少鹿寻,適合于在各個服務(wù)器上搜集日志后傳輸給Logstash睦柴,官方也推薦此工具。

Elasticsearch是個開源分布式搜索引擎毡熏,提供搜集坦敌、分析、存儲數(shù)據(jù)三大功能痢法。它的特點有:分布式狱窘,零配置,自動發(fā)現(xiàn)财搁,索引自動分片蘸炸,索引副本機(jī)制,restful風(fēng)格接口妇拯,多數(shù)據(jù)源幻馁,自動搜索負(fù)載等洗鸵。

Logstash 主要是用來日志的搜集越锈、分析、過濾日志的工具膘滨,支持大量的數(shù)據(jù)獲取方式甘凭。一般工作方式為c/s架構(gòu),client端安裝在需要收集日志的主機(jī)上火邓,server端負(fù)責(zé)將收到的各節(jié)點日志進(jìn)行過濾丹弱、修改等操作在一并發(fā)往elasticsearch上去德撬。

Kibana 也是一個開源和免費的工具,Kibana可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面躲胳,可以幫助匯總蜓洪、分析和搜索重要數(shù)據(jù)日志。

Filebeat隸屬于Beats坯苹。目前Beats包含四種工具:

  1. Packetbeat(搜集網(wǎng)絡(luò)流量數(shù)據(jù))
  2. Topbeat(搜集系統(tǒng)隆檀、進(jìn)程和文件系統(tǒng)級別的 CPU 和內(nèi)存使用情況等數(shù)據(jù))
  3. Filebeat(搜集文件數(shù)據(jù))
  4. 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)圖一:

image

這是最簡單的一種ELK架構(gòu)方式。優(yōu)點是搭建簡單粹湃,易于上手恐仑。缺點是Logstash耗資源較大,運(yùn)行占用CPU和內(nèi)存高为鳄。另外沒有消息隊列緩存裳仆,存在數(shù)據(jù)丟失隱患。

此架構(gòu)由Logstash分布于各個節(jié)點上搜集相關(guān)日志孤钦、數(shù)據(jù)歧斟,并經(jīng)過分析、過濾后發(fā)送給遠(yuǎn)端服務(wù)器上的Elasticsearch進(jìn)行存儲司训。Elasticsearch將數(shù)據(jù)以分片的形式壓縮存儲并提供多種API供用戶查詢构捡,操作。用戶亦可以更直觀的通過配置Kibana Web方便的對日志查詢壳猜,并根據(jù)數(shù)據(jù)生成報表勾徽。

架構(gòu)圖二:

image

此種架構(gòu)引入了消息隊列機(jī)制,位于各個節(jié)點上的Logstash Agent先將數(shù)據(jù)/日志傳遞給Kafka(或者Redis)统扳,并將隊列中消息或數(shù)據(jù)間接傳遞給Logstash喘帚,Logstash過濾、分析后將數(shù)據(jù)傳遞給Elasticsearch存儲咒钟。最后由Kibana將日志和數(shù)據(jù)呈現(xiàn)給用戶吹由。因為引入了Kafka(或者Redis),所以即使遠(yuǎn)端Logstash server因故障停止運(yùn)行,數(shù)據(jù)將會先被存儲下來朱嘴,從而避免數(shù)據(jù)丟失倾鲫。

架構(gòu)圖三:

image

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

Filebeat工作原理:

Filebeat由兩個主要組件組成:prospectors 和 harvesters磕道。這兩個組件協(xié)同工作將文件變動發(fā)送到指定的輸出中。

image

Harvester(收割機(jī)):負(fù)責(zé)讀取單個文件內(nèi)容行冰。每個文件會啟動一個Harvester溺蕉,每個Harvester會逐行讀取各個文件伶丐,并將文件內(nèi)容發(fā)送到制定輸出中。Harvester負(fù)責(zé)打開和關(guān)閉文件疯特,意味在Harvester運(yùn)行的時候哗魂,文件描述符處于打開狀態(tài),如果文件在收集中被重命名或者被刪除漓雅,F(xiàn)ilebeat會繼續(xù)讀取此文件啡彬。所以在Harvester關(guān)閉之前,磁盤不會被釋放故硅。默認(rèn)情況filebeat會保持文件打開的狀態(tài)庶灿,直到達(dá)到close_inactive(如果此選項開啟,filebeat會在指定時間內(nèi)將不再更新的文件句柄關(guān)閉吃衅,時間從harvester讀取最后一行的時間開始計時往踢。若文件句柄被關(guān)閉后,文件發(fā)生變化徘层,則會啟動一個新的harvester峻呕。關(guān)閉文件句柄的時間不取決于文件的修改時間,若此參數(shù)配置不當(dāng)趣效,則可能發(fā)生日志不實時的情況瘦癌,由scan_frequency參數(shù)決定,默認(rèn)10s跷敬。Harvester使用內(nèi)部時間戳來記錄文件最后被收集的時間讯私。例如:設(shè)置5m,則在Harvester讀取文件的最后一行之后西傀,開始倒計時5分鐘斤寇,若5分鐘內(nèi)文件無變化,則關(guān)閉文件句柄拥褂。默認(rèn)5m)娘锁。

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

|

1

2

3

4

|

filebeat.prospectors:

- input_type: log

paths:

- /apps/logs/*/info.log

|

Prospector會找到/apps/logs/*目錄下的所有info.log文件饺鹃,并為每個文件啟動一個Harvester莫秆。Prospector會檢查每個文件,看Harvester是否已經(jīng)啟動悔详,是否需要啟動镊屎,或者文件是否可以忽略。若Harvester關(guān)閉伟端,只有在文件大小發(fā)生變化的時候Prospector才會執(zhí)行檢查杯道。只能檢測本地的文件匪煌。

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

將文件狀態(tài)記錄在文件中(默認(rèn)在/var/lib/filebeat/registry)责蝠。此狀態(tài)可以記住Harvester收集文件的偏移量党巾。若連接不上輸出設(shè)備,如ES等霜医,filebeat會記錄發(fā)送前的最后一行齿拂,并再可以連接的時候繼續(xù)發(fā)送。Filebeat在運(yùn)行的時候肴敛,Prospector狀態(tài)會被記錄在內(nèi)存中署海。Filebeat重啟的時候,利用registry記錄的狀態(tài)來進(jìn)行重建医男,用來還原到重啟之前的狀態(tài)砸狞。每個Prospector會為每個找到的文件記錄一個狀態(tài),對于每個文件镀梭,F(xiàn)ilebeat存儲唯一標(biāo)識符以檢測文件是否先前被收集刀森。

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

Filebeat之所以能保證事件至少被傳遞到配置的輸出一次,沒有數(shù)據(jù)丟失报账,是因為filebeat將每個事件的傳遞狀態(tài)保存在文件中研底。在未得到輸出方確認(rèn)時,filebeat會嘗試一直發(fā)送透罢,直到得到回應(yīng)榜晦。若filebeat在傳輸過程中被關(guān)閉,則不會再關(guān)閉之前確認(rèn)所有時事件羽圃。任何在filebeat關(guān)閉之前為確認(rèn)的時間乾胶,都會在filebeat重啟之后重新發(fā)送。這可確保至少發(fā)送一次朽寞,但有可能會重復(fù)胚吁。可通過設(shè)置shutdown_timeout參數(shù)來設(shè)置關(guān)閉之前的等待事件回應(yīng)的時間(默認(rèn)禁用)愁憔。

Logstash工作原理:

Logstash事件處理有三個階段:inputs → filters → outputs腕扶。是一個接收,處理吨掌,轉(zhuǎn)發(fā)日志的工具半抱。支持系統(tǒng)日志,webserver日志膜宋,錯誤日志窿侈,應(yīng)用日志,總之包括所有可以拋出來的日志類型秋茫。

image

Input:輸入數(shù)據(jù)到logstash史简。

一些常用的輸入為:

file:從文件系統(tǒng)的文件中讀取,類似于tail -f命令

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

redis:從redis service中讀取

beats:從filebeat中讀取

Filters:數(shù)據(jù)中間處理圆兵,對數(shù)據(jù)進(jìn)行操作跺讯。

一些常用的過濾器為:

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

官方提供的grok表達(dá)式:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
grok在線調(diào)試:https://grokdebug.herokuapp.com/

mutate:對字段進(jìn)行轉(zhuǎn)換。例如對字段進(jìn)行刪除轮傍、替換暂雹、修改、重命名等创夜。

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

clone:拷貝 event,這個過程中也可以添加或移除字段挥下。

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

Outputs:outputs是logstash處理管道的最末端組件揍魂。一個event可以在處理過程中經(jīng)過多重輸出,但是一旦所有的outputs都執(zhí)行結(jié)束棚瘟,這個event也就完成生命周期现斋。

一些常見的outputs為:

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

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

graphite:將event數(shù)據(jù)發(fā)送到圖形化組件中,一個很流行的開源存儲圖形化展示的組件迷雪。

Codecs:codecs 是基于數(shù)據(jù)流的過濾器限书,它可以作為input,output的一部分配置章咧。Codecs可以幫助你輕松的分割發(fā)送過來已經(jīng)被序列化的數(shù)據(jù)倦西。

一些常見的codecs:

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

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市疼约,隨后出現(xiàn)的幾起案子卤档,更是在濱河造成了極大的恐慌,老刑警劉巖程剥,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劝枣,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)舔腾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門溪胶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人琢唾,你說我怎么就攤上這事《芤” “怎么了采桃?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丘损。 經(jīng)常有香客問我普办,道長,這世上最難降的妖魔是什么徘钥? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任衔蹲,我火速辦了婚禮,結(jié)果婚禮上呈础,老公的妹妹穿的比我還像新娘舆驶。我一直安慰自己,他們只是感情好而钞,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布沙廉。 她就那樣靜靜地躺著,像睡著了一般臼节。 火紅的嫁衣襯著肌膚如雪撬陵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天网缝,我揣著相機(jī)與錄音巨税,去河邊找鬼。 笑死粉臊,一個胖子當(dāng)著我的面吹牛草添,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扼仲,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼果元,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了犀盟?” 一聲冷哼從身側(cè)響起而晒,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎阅畴,沒想到半個月后倡怎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年监署,在試婚紗的時候發(fā)現(xiàn)自己被綠了颤专。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡钠乏,死狀恐怖栖秕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晓避,我是刑警寧澤簇捍,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站俏拱,受9級特大地震影響暑塑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锅必,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一事格、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧搞隐,春花似錦驹愚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至味廊,卻和暖如春蒸甜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背余佛。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工柠新, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辉巡。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓恨憎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親郊楣。 傳聞我的和親對象是個殘疾皇子憔恳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

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

  • 簡介 ELK是Elasticsearch、Logstash净蚤、Kibana的簡稱钥组,這三者是核心套件,但并非全部今瀑。后文...
    mysia閱讀 3,605評論 1 14
  • 一程梦、ELK初步接觸 1.1為什么要用ELK 日志主要包括系統(tǒng)日志点把、應(yīng)用程序日志和安全日志。系統(tǒng)運(yùn)維和開發(fā)人員可以通...
    CobubRazor閱讀 7,817評論 1 26
  • 工欲善其事屿附,必先利其器郎逃。 最近討論的比較多的就是如何把我們的log有效的管理起來,收集了一些ELK相關(guān)的知識挺份,做個...
    jaymz明閱讀 357評論 0 2
  • 概要: ELK允許你以任何格式搜索褒翰,分析和可視化從任何源生成的日志,這種做法稱為集中式日志記錄匀泊。在嘗試識別服務(wù)器或...
    Daisy小朋友閱讀 4,106評論 0 4
  • 本人陸陸續(xù)續(xù)接觸了ELK的1.4优训,2.0,2.4探赫,5.0型宙,5.2版本撬呢,可以說前面使用當(dāng)中一直沒有太多感觸伦吠,最近使用...
    三杯水Plus閱讀 4,090評論 0 12