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