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