濮阳杆衣贸易有限公司

主頁 > 知識庫 > 深入淺析ELK原理與簡介

深入淺析ELK原理與簡介

熱門標簽:地圖標注資源分享注冊 北京外呼系統(tǒng)咨詢電話 廊坊地圖標注申請入口 襄陽外呼增值業(yè)務線路解決方案 怎么去掉地圖標注文字 高德地圖標注公司位置需要錢嗎 慶陽外呼系統(tǒng)定制開發(fā) 合肥阿里辦理400電話號 海南人工外呼系統(tǒng)哪家好

為什么用到ELK:

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

一般大型系統(tǒng)是一個分布式部署的架構,不同的服務模塊部署在不同的服務器上,問題出現(xiàn)時,大部分情況需要根據問題暴露的關鍵信息,定位到具體的服務器和服務模塊,構建一套集中式日志系統(tǒng),可以提高定位問題的效率。

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

  • 收集-能夠采集多種來源的日志數據
  • 傳輸-能夠穩(wěn)定的把日志數據傳輸到中央系統(tǒng)
  • 存儲-如何存儲日志數據
  • 分析-可以支持 UI 分析
  • 警告-能夠提供錯誤報告,監(jiān)控機制

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

ELK簡介:

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

Elasticsearch是個開源分布式搜索引擎,提供搜集、分析、存儲數據三大功能。它的特點有:分布式,零配置,自動發(fā)現(xiàn),索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。

Logstash 主要是用來日志的搜集、分析、過濾日志的工具,支持大量的數據獲取方式。一般工作方式為c/s架構,client端安裝在需要收集日志的主機上,server端負責將收到的各節(jié)點日志進行過濾、修改等操作在一并發(fā)往elasticsearch上去。

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

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

  1. Packetbeat(搜集網絡流量數據)
  2. Topbeat(搜集系統(tǒng)、進程和文件系統(tǒng)級別的 CPU 和內存使用情況等數據)
  3. Filebeat(搜集文件數據)
  4. Winlogbeat(搜集 Windows 事件日志數據)

官方文檔:

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架構圖:

架構圖一:

這是最簡單的一種ELK架構方式。優(yōu)點是搭建簡單,易于上手。缺點是Logstash耗資源較大,運行占用CPU和內存高。另外沒有消息隊列緩存,存在數據丟失隱患。

此架構由Logstash分布于各個節(jié)點上搜集相關日志、數據,并經過分析、過濾后發(fā)送給遠端服務器上的Elasticsearch進行存儲。Elasticsearch將數據以分片的形式壓縮存儲并提供多種API供用戶查詢,操作。用戶亦可以更直觀的通過配置Kibana Web方便的對日志查詢,并根據數據生成報表。

架構圖二:

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

架構圖三:

此種架構將收集端logstash替換為beats,更靈活,消耗資源更少,擴展性更強。同時可配置Logstash 和Elasticsearch 集群用于支持大集群系統(tǒng)的運維日志數據監(jiān)控和查詢。

Filebeat工作原理:

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

Harvester(收割機):負責讀取單個文件內容。每個文件會啟動一個Harvester,每個Harvester會逐行讀取各個文件,并將文件內容發(fā)送到制定輸出中。Harvester負責打開和關閉文件,意味在Harvester運行的時候,文件描述符處于打開狀態(tài),如果文件在收集中被重命名或者被刪除,F(xiàn)ilebeat會繼續(xù)讀取此文件。所以在Harvester關閉之前,磁盤不會被釋放。默認情況filebeat會保持文件打開的狀態(tài),直到達到close_inactive(如果此選項開啟,filebeat會在指定時間內將不再更新的文件句柄關閉,時間從harvester讀取最后一行的時間開始計時。若文件句柄被關閉后,文件發(fā)生變化,則會啟動一個新的harvester。關閉文件句柄的時間不取決于文件的修改時間,若此參數配置不當,則可能發(fā)生日志不實時的情況,由scan_frequency參數決定,默認10s。Harvester使用內部時間戳來記錄文件最后被收集的時間。例如:設置5m,則在Harvester讀取文件的最后一行之后,開始倒計時5分鐘,若5分鐘內文件無變化,則關閉文件句柄。默認5m)。

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

Prospector會找到/apps/logs/*目錄下的所有info.log文件,并為每個文件啟動一個Harvester。Prospector會檢查每個文件,看Harvester是否已經啟動,是否需要啟動,或者文件是否可以忽略。若Harvester關閉,只有在文件大小發(fā)生變化的時候Prospector才會執(zhí)行檢查。只能檢測本地的文件。

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

將文件狀態(tài)記錄在文件中(默認在/var/lib/filebeat/registry)。此狀態(tài)可以記住Harvester收集文件的偏移量。若連接不上輸出設備,如ES等,filebeat會記錄發(fā)送前的最后一行,并再可以連接的時候繼續(xù)發(fā)送。Filebeat在運行的時候,Prospector狀態(tài)會被記錄在內存中。Filebeat重啟的時候,利用registry記錄的狀態(tài)來進行重建,用來還原到重啟之前的狀態(tài)。每個Prospector會為每個找到的文件記錄一個狀態(tài),對于每個文件,F(xiàn)ilebeat存儲唯一標識符以檢測文件是否先前被收集。

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

Filebeat之所以能保證事件至少被傳遞到配置的輸出一次,沒有數據丟失,是因為filebeat將每個事件的傳遞狀態(tài)保存在文件中。在未得到輸出方確認時,filebeat會嘗試一直發(fā)送,直到得到回應。若filebeat在傳輸過程中被關閉,則不會再關閉之前確認所有時事件。任何在filebeat關閉之前為確認的時間,都會在filebeat重啟之后重新發(fā)送。這可確保至少發(fā)送一次,但有可能會重復。可通過設置shutdown_timeout 參數來設置關閉之前的等待事件回應的時間(默認禁用)。

Logstash工作原理:

Logstash事件處理有三個階段:inputs → filters → outputs。是一個接收,處理,轉發(fā)日志的工具。支持系統(tǒng)日志,webserver日志,錯誤日志,應用日志,總之包括所有可以拋出來的日志類型。

Input:輸入數據到logstash。

一些常用的輸入為:

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

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

redis:從redis service中讀取

beats:從filebeat中讀取

Filters:數據中間處理,對數據進行操作

一些常用的過濾器為:

grok:解析任意文本數據,Grok 是 Logstash 最重要的插件。它的主要作用就是將文本格式的字符串,轉換成為具體的結構化的數據,配合正則表達式使用。內置120多個解析語法。

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

mutate:對字段進行轉換。例如對字段進行刪除、替換、修改、重命名等。

drop:丟棄一部分events不進行處理。

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

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

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

一些常見的outputs為:

elasticsearch:可以高效的保存數據,并且能夠方便和簡單的進行查詢。

file:將event數據保存到文件中。

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

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

一些常見的codecs:

json:使用json格式對數據進行編碼/解碼。

multiline:將匯多個事件中數據匯總為一個單一的行。比如:java異常信息和堆棧信息。

到此這篇關于ELK原理與介紹的文章就介紹到這了,更多相關ELK原理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Docker-compose部署ELK的示例代碼
  • 基于Docker快速搭建ELK的方法
  • 淺談Node框架接入ELK實踐總結
  • 使用Docker搭建ELK日志系統(tǒng)的方法示例

標簽:鎮(zhèn)江 株洲 鶴崗 平頂山 哈密 綿陽 商丘 臺州

巨人網絡通訊聲明:本文標題《深入淺析ELK原理與簡介》,本文關鍵詞  深入,淺析,ELK,原理,與,簡介,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《深入淺析ELK原理與簡介》相關的同類信息!
  • 本頁收集關于深入淺析ELK原理與簡介的相關信息資訊供網民參考!
  • 推薦文章
    乌苏市| 邵东县| 大埔县| 密云县| 静海县| 盘锦市| 磐石市| 吉木萨尔县| 应用必备| 博客| 托克逊县| 方城县| 崇义县| 东丽区| 大邑县| 贵德县| 保靖县| 玛多县| 汪清县| 郓城县| 崇礼县| 南召县| 监利县| 防城港市| 武强县| 沈阳市| 依安县| 柘城县| 金山区| 西吉县| 兖州市| 临安市| 青河县| 边坝县| 阳高县| 崇州市| 维西| 定陶县| 康定县| 绿春县| 南涧|