ELK是三個開源工具的縮寫——Elasticsearch、Logstash、Kibana。
Elasticsearch:
開源分布式搜索引擎,提供搜索、分析、存儲數(shù)據(jù)三大功能。特點包括分布式、零配置、自動發(fā)現(xiàn)、索引自動分片、索引副本機制、restful風格接口、多數(shù)據(jù)源、自動搜索負載等。
Logstash:
開源的日志搜集、分析、過濾工具,支持大量的數(shù)據(jù)獲取方式。一般工作方式為C/S架構(gòu),client端安裝在需要收集日志的主機上,server端負責將收到的各節(jié)點日志進行過濾、修改等操作后再發(fā)送到Elasticsearch上。
Kibana:
為Logstash和Elasticsearch提供友好的日志分析界面,幫助匯總、分析和搜索重要的數(shù)據(jù)日志。
Filebeat,新增的工具,輕量級的日志收集處理工具(Agent),filebeat占用資源少,適用于在服務(wù)器上搜集日志后傳輸?shù)絣ogstash。
補充:Beats輕量級數(shù)據(jù)采集器,目前包含四種工具:
Packetbeat——搜集網(wǎng)絡(luò)流量數(shù)據(jù)
Topbeat——搜集系統(tǒng)、進程、文件系統(tǒng)級別的CPU和內(nèi)存使用情況
Filebeat——搜索文件數(shù)據(jù)
Winlogbeat——搜索windows事件日志數(shù)據(jù)
一般情況下進行日志分析時,可以直接在日志文件中使用grep、awk就可以獲得想要的信息。但是,在規(guī)模較大的場景中此方法效率很低,面臨的問題包括:日志量太大如何歸檔、文本檢索太慢、如何多維度查詢,需要集中化的日志管理所有服務(wù)器上的日志收集匯總。常見解決思路是建立集中式的日志收集系統(tǒng),將所有節(jié)點上的日志統(tǒng)一收集、管理、訪問。ELK提供了一整套解決方案,并且都開源,各組件相互配合使用,高效的滿足了很多場景的應(yīng)用,是目前主流的日志分析系統(tǒng)。
完整的集中式日志收集系統(tǒng)應(yīng)包含以下主要特點:
收集——能夠采集多種來源的日志數(shù)據(jù)
傳輸——能夠穩(wěn)定的把日志數(shù)據(jù)傳輸?shù)胶诵南到y(tǒng)
存儲——如何存儲日志數(shù)據(jù)
分析——支持UI分析
警告——提供監(jiān)控機制及異常告警
最簡單的ELK架構(gòu)方式,此架構(gòu)由logstash分布于各個節(jié)點上搜集相關(guān)日志、數(shù)據(jù),并經(jīng)過分析、過濾后發(fā)送到遠端服務(wù)器上的Elasticsearch進行存儲。Elasticsearch將數(shù)據(jù)以分片的形式壓縮存儲,并提供多種API供用戶查詢。也可更直觀的通過配置Kibana對日志進行查詢,并根據(jù)數(shù)據(jù)生成報表。
優(yōu)點:搭建簡單、易于上手
缺點:logstash資源消耗大,運行時占用較高的CPU和內(nèi)存,且沒有消息隊列緩存,存在數(shù)據(jù)丟失隱患。
此種架構(gòu)引入了消息隊列機制,各個節(jié)點上的logstashAgent先將日志數(shù)據(jù)傳遞給kafka(或redis),并將kafka隊列中的消息或數(shù)據(jù)間接傳遞給logstash,logstash過濾、分析后將數(shù)據(jù)傳遞給elasticsearch進行存儲。最后由kabana將日志和數(shù)據(jù)呈現(xiàn)在界面。因為引入了kafka(或redis),所以即使遠端logstash server因故障停止運行,數(shù)據(jù)將會先被存儲下來,避免數(shù)據(jù)丟失。
此種架構(gòu)將收集端logstash替換為beats,更靈活、消耗資源更少、擴展性更強。同時可配置logstash和elasticsearch集群用于支持大集群系統(tǒng)的運維日志數(shù)據(jù)監(jiān)控和查詢。
主要兩個組件Prospectors和Harvesters,協(xié)同工作將文件的變動發(fā)送到指定的輸出中。
每個文件會啟動一個Harvester,Harvester會逐行讀取文件內(nèi)容,并將文件內(nèi)容發(fā)送到指定的輸出中。Harvester負責打開和關(guān)閉文件,即在Harvester運行時,文件描述符處于打開狀態(tài)。如果文件在收集時被重命名或刪除,F(xiàn)ilebeat會繼續(xù)讀取此文件,所以在Harvester關(guān)閉之前磁盤不會被釋放。默認情況下,filebeat會保持文件的打開狀態(tài),直到達到close_inactive。若close_inactive選項開啟,filebeat會在指定時間內(nèi)將不再更新的文件句柄關(guān)閉,時間從Harvester讀取最后一行的時間開始計時。若文件句柄被關(guān)閉后,文件內(nèi)容發(fā)生了變化,則會啟動一個新的Harvester。關(guān)閉文件句柄的時間不取決于文件的修改時間,而是由scan_frequency參數(shù)決定,默認10s,若配置不當,則可能發(fā)生日志不實時的情況。Harvester使用內(nèi)部時間戳來記錄文件最后被收集的時間。如scan_frequency設(shè)置60s,則在Harvester讀取文件最后一行后,開始倒計時60s,若文件60s內(nèi)無變化,則關(guān)閉文件句柄。
Prospector會搜尋到/apps/logs/下所有的info.log文件,并為每個文件啟動一個Harvester。Prospector會檢查每個文件的Harvester是否已經(jīng)啟動、是否需要啟動、或者文件是否可以忽略。若文件的Harvester已關(guān)閉,在有文件大小發(fā)生變化時Prospector才會執(zhí)行檢查,且Prospector只能檢測本地文件。
將文件狀態(tài)記錄在registry文件中(默認在filebeat的data目錄下),狀態(tài)中會記錄Harvester收集文件的偏移量。filebeat會記錄發(fā)送前的最后一行,并在可以連接的時候繼續(xù)發(fā)送。filebeat運行時,Prospector的狀態(tài)記錄在內(nèi)存中。重啟filebeat時,利用registry記錄的狀態(tài)進行重建,用來還原到重啟之前的狀態(tài)。Prospector會為找到的每個文件記錄一個狀態(tài),而對于每個文件,filebeat會存儲唯一標識符以檢測文件是否已經(jīng)被收集。
{"source":"/usr/local/tomcat/apache-tomcat-7.0.29/logs/localhost_access_log.2019-03-26.txt","offset":11694,"timestamp":"2021-07-12T16:21:52.006333381+08:00","ttl":-1,"type":"log","meta":null,"FileStateOS":{"inode":262747,"device":64768}}]
filebeat之所以能保證事件至少被傳遞一次而沒有數(shù)據(jù)丟失,是因為filebeat將每個事件的傳遞狀態(tài)保存在文件中。在未得到接收方確認時,filebeat會一直嘗試發(fā)送,直到得到回應(yīng)。若filebeat在傳輸過程中被關(guān)閉,則不會在關(guān)閉前確認所有事件是否被傳遞。任何在filebeat關(guān)閉前未確認的事件,都會在filebeat重啟之后重新發(fā)送??纱_認至少發(fā)送一次,但用可能會重復(fù)。可通過shutdown_timeout參數(shù)設(shè)置關(guān)閉前等待事件回應(yīng)的時間。
logstash是接收、處理、轉(zhuǎn)發(fā)日志的工具。支持系統(tǒng)日志、webserver日志、錯誤日志、應(yīng)用日志,基本包括所有的日志類型。
logstash事件處理的三個階段:inputs → filters → outputs。
file → 從文件系統(tǒng)中的文件讀取,類似于tail -f命令
syslog → 在514端口上監(jiān)聽系統(tǒng)日志消息,并根據(jù)RFC3164標準進行解析
redis → 在redis server上讀取
beats → 在filebeat中讀取
grok → 解析任意文本數(shù)據(jù),grok是logstash最重要的插件,主要作用是將文本格式的字符串轉(zhuǎn)換為具體的結(jié)構(gòu)化的數(shù)據(jù),配置正則表達式使用。
mutate → 對字段進行轉(zhuǎn)換,例如對字段進行刪除、替換、重命名、修改等。
drop → 丟棄一部分events不進行處理
clone → 復(fù)制事件,該過程中也可以添加或移除字段
geoip → 添加地理信息(為前臺kibana圖形化展示使用)
一個事件可以在處理過程中經(jīng)過多重輸出,但是一旦所有的outputs都執(zhí)行結(jié)束,該事件就完成生命周期。常用的outputs為以下
elasticsearch → 可高效的保存數(shù)據(jù),并且能夠簡單的進行查詢
file → 將事件數(shù)據(jù)保存到文件中
graphite → 將事件數(shù)據(jù)發(fā)送到圖形化組件中,很流行的開源存儲圖形化展示的組件
codecs可以輕松的分割已經(jīng)序列化的數(shù)據(jù)。常見的codecs如下
json → 使用json格式對數(shù)據(jù)進行編碼/解碼。
multiline → 多個事件中數(shù)據(jù)匯總為一個單一的行。比如:java異常信息和堆棧信息
Elasticsearch配置
Master節(jié)點編輯elasticsearch.yml配置文件:
Slave1節(jié)點編輯elasticsearch.yml配置文件:
Slave2節(jié)點編輯elasticsearch.yml配置文件:
Logstash配置:
可以在任一節(jié)點部署logstash,默認不修改配置文件也可以運行。
Kibana配置:
可以在任一節(jié)點部署Kibana,修改kibana.yml配置文件
啟動ELK:
后臺啟動ES: ./elasticsearch -d
后臺啟動kibana: nohup ./kibana &
后臺啟動logstash:nohup ./logstash &
logstash -e input { stdin{} } output { stdout{} } -- -e參數(shù)允許在命令行中直接輸入配置
logstash -f file_std.conf -- -f參數(shù)指定配置文件
1. logstash簡單測試
進入到logstash安裝目錄,執(zhí)行以下命令:
./logstash -e input { stdin{} } output { stdout{} }
-e參數(shù)允許在命令行中直接輸入配置,而不同通過-f參數(shù)指定配置文件。
如果出現(xiàn)Pipeline main started則logstash已經(jīng)啟動成功,在命令行輸入一些文字后,logstash會加上日期和主機名(IP)輸出到終端。這就是Logstash最基本的工作模式,接受標準輸入,然后將信息加工后放入到標準輸出。
2. logstash接收filebeat輸出
在filebeat安裝目錄中filebeat.yml文件修改如下:
在logstash安裝目錄中新建配置文件filebeat.conf,使logstash接收filebeat的輸入,并輸出到終端。
測試配置文件的準確性,返回OK則配置文件沒有問題
啟動命令./logstash -f ../test/filebeat.conf,輸出以下內(nèi)容則成功
啟動命令./filebeat -e -c filebeat.yml -d "public"
查看logstash終端輸出
新建配置文件logfile.conf,配置內(nèi)容如下
驗證配置文件logfile.conf準確性
啟動命令./logstash -f ../test/logfile.conf
新建配置文件logfileIntoES.conf
啟動命令./logstash -f ../test/logfileIntoES.conf,elasticsearch上查看結(jié)果如下
需在Chrome雙核瀏覽器上安裝Elasticsearch-head插件
安裝成功后可點擊插件圖標使用Elasticsearch-head,輸入ES地址和端口即可查看集群中的節(jié)點信息、索引信息等。
通過Kibana提供的Dev Tools工具可以查看集群的健康狀態(tài),在Dev Tools的Console中運行“GET /_cat/health?v”查看集群狀態(tài),返回green和100%則集群狀態(tài)良好
在Elasticsearch中也可查看集群節(jié)點的狀態(tài),瀏覽器訪問節(jié)點IP:9200即可
在Elasticsearch-head同樣可以查看集群的健康狀態(tài)
綠色——健康狀態(tài),所有主分片和副本分片都可用
黃色——所有主分片可用,部分副本分片不可用
紅色——部分主分片可用
更多精彩干貨分享
點擊下方名片關(guān)注
IT那活兒
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/129774.html
摘要:每年設(shè)有三期線下課程,分別在月份,月份以及月份,所有線下課程將在北京總部進行。當大家完成了線下課程和全部課程考核,我們會舉辦一個充滿儀式感的結(jié)業(yè)答辯,并為順利結(jié)業(yè)的小伙伴授予專屬的結(jié)業(yè)證書。 TiDB 每一次微小進步都離不開廣大社區(qū)小伙伴們的支持,但也有很多同學(xué)反映 TiDB 是一個非常復(fù)雜的分布式數(shù)據(jù)庫系統(tǒng),如果沒有相關(guān)知識和經(jīng)驗積累,在參與之初難免會遇到各種問題。因此我們決定全面升...
showImg(https://segmentfault.com/img/remote/1460000014421849); 概述 一個宿主機上可以運行多個容器化應(yīng)用,容器化應(yīng)用運行于宿主機上,我們需要知道該容器的運行情況,包括 CPU使用率、內(nèi)存占用、網(wǎng)絡(luò)狀況以及磁盤空間等等一系列信息,而且這些信息隨時間變化,我們稱其為時序數(shù)據(jù),本文將實操 如何搭建一個可視化的監(jiān)控中心 來收集這些承載著具體應(yīng)...
摘要:但有一個問題就是對于一個初學(xué)者如此潔凈的環(huán)境,我完全不知道從何入手,也弄不清這個框架的優(yōu)勢是什么連個樣本都沒有。還有的配置,的接入都踩過不少坑,才部署成一個像樣的學(xué)習(xí)環(huán)境。之后在寫腳本的時候又是各種踩雷,終于實現(xiàn)了快速一鍵部署。 引言 剛接觸Elk的時候,我用https://github.com/deviantony/docker-elk,部署了第一個測試環(huán)境,這是一個很優(yōu)秀的項目,幾...
閱讀 1401·2023-01-11 13:20
閱讀 1745·2023-01-11 13:20
閱讀 1235·2023-01-11 13:20
閱讀 1957·2023-01-11 13:20
閱讀 4191·2023-01-11 13:20
閱讀 2802·2023-01-11 13:20
閱讀 1432·2023-01-11 13:20
閱讀 3731·2023-01-11 13:20