Elasticsearch + Logstash + Filebeat + Kibana搭建ELK日誌分析平臺(官方推薦的BEATS架構)

来源:https://www.cnblogs.com/jiagooushi/archive/2022/07/27/16524801.html
-Advertisement-
Play Games

俗話話說的號,沒有金剛鑽,也不攬那瓷器活;日誌分析可以說是所有大小系統的標配了,不知道有多少菜鳥程式員有多喜歡日誌,如果沒了日誌,那自己寫的bug想不被別人發現,可就難了; 有了它,就可將bug們統統消化在自己手裡。 當然了,作為一個架構師搭建動手搭建一個日誌平臺也基本是必備技能了,雖然我們說架構師 ...


file

俗話話說的號,沒有金剛鑽,也不攬那瓷器活;日誌分析可以說是所有大小系統的標配了,不知道有多少菜鳥程式員有多喜歡日誌,如果沒了日誌,那自己寫的bug想不被別人發現,可就難了;
有了它,就可將bug們統統消化在自己手裡。

當然了,作為一個架構師搭建動手搭建一個日誌平臺也基本是必備技能了,雖然我們說架構師基本不咋寫代碼了,但是如果需要的時候,還是能扛槍的

大家可以看下架構師要具備的能力:
那些年薪50萬,卻不寫代碼的程式員,到底贏在哪?
原來,百萬年薪的架構師都是這樣使用redis的!

ELK部署應用與工作機制

3.1 ELK日誌分析平臺介紹

ELK是三個開源軟體的縮寫,分別表示:Elasticsearch , Logstash和Kibana。Elasticsearch和Kibana我們上面做過講解。 Logstash 主要是用來日誌的搜集、分析、過濾日誌的工具,適用大數據量場景, 一般採用c/s模式,client端安裝在需要收集日誌的主機上,server端負責將收到的各節點日誌進行過濾、修改等操作, 再一併發往Elasticsearch上做數據分析。

一個完整的集中式日誌系統,需要包含以下幾個主要特點:

  • 收集-能夠採集多種來源的日誌數據
  • 傳輸-能夠穩定的把日誌數據傳輸到中央系統
  • 存儲-如何存儲日誌數據
  • 分析-可以支持 UI 分析
  • 警告-能夠提供錯誤報告,監控機制

ELK提供了一整套解決方案,並且都是開源軟體,之間互相配合使用,完美銜接,高效的滿足了很多場合的應用,是目前主流的一種日誌分析平臺。

3.2 ELK部署架構模式

3.2.1 簡單架構

file

這是最簡單的一種ELK部署架構方式, 由Logstash分佈於各個節點上搜集相關日誌、數據,並經過分析、過濾後發送給遠端伺服器上的Elasticsearch進行存儲。 優點是搭建簡單, 易於上手, 缺點是Logstash耗資源較大, 依賴性強, 沒有消息隊列緩存, 存在數據丟失隱患

3.2.2 消息隊列架構

file
該隊列架構引入了KAFKA消息隊列, 解決了各採集節點上Logstash資源耗費過大, 數據丟失的問題, 各終端節點上的Logstash Agent 先將數據/日誌傳遞給Kafka, 消息隊列再將數據傳遞給Logstash, Logstash過濾、分析後將數據傳遞給Elasticsearch存儲, 由Kibana將日誌和數據呈現給用戶。

3.2.3 BEATS架構

file
該架構的終端節點採用Beats工具收集發送數據, 更靈活,消耗資源更少,擴展性更強。同時可配置Logstash 和Elasticsearch 集群用於支持大集群系統的運維日誌數據監控和查詢, 官方也推薦採用此工具, 本章我們採用此架構模式進行配置講解(如果在生產環境中, 可以再增加kafka消息隊列, 實現了beats+消息隊列的部署架構 )。

Beats工具包含四種:

1、Packetbeat(搜集網路流量數據)

2、Topbeat(搜集系統、進程和文件系統級別的 CPU 和記憶體使用情況等數據)

3、Filebeat(搜集文件數據)

4、Winlogbeat(搜集 Windows 事件日誌數據)

3.3 ELK工作機制

3.3.1 Filebeat工作機制

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

file

Harvester(收割機):負責讀取單個文件內容。每個文件會啟動一個Harvester,每個Harvester會逐行讀取各個文件,並將文件內容發送到制定輸出中。Harvester負責打開和關閉文件,意味在Harvester運行的時候,文件描述符處於打開狀態,如果文件在收集中被重命名或者被刪除,Filebeat會繼續讀取此文件。所以在Harvester關閉之前,磁碟不會被釋放。預設情況filebeat會保持文件打開的狀態,直到達到close_inactive

filebeat會在指定時間內將不再更新的文件句柄關閉,時間從harvester讀取最後一行的時間開始計時。若文件句柄被關閉後,文件發生變化,則會啟動一個新的harvester。關閉文件句柄的時間不取決於文件的修改時間,若此參數配置不當,則可能發生日誌不實時的情況,由scan_frequency參數決定,預設10s。Harvester使用內部時間戳來記錄文件最後被收集的時間。例如:設置5m,則在Harvester讀取文件的最後一行之後,開始倒計時5分鐘,若5分鐘內文件無變化,則關閉文件句柄。預設5m】。

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

filebeat.prospectors:
- input_type: log
  paths:
    - /apps/logs/*/info.log

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

Filebeat如何記錄發送狀態:

將文件狀態記錄在文件中(預設在/var/lib/filebeat/registry)。此狀態可以記住Harvester收集文件的偏移量。若連接不上輸出設備,如ES等,filebeat會記錄發送前的最後一行,並再可以連接的時候繼續發送。Filebeat在運行的時候,Prospector狀態會被記錄在記憶體中。Filebeat重啟的時候,利用registry記錄的狀態來進行重建,用來還原到重啟之前的狀態。每個Prospector會為每個找到的文件記錄一個狀態,對於每個文件,Filebeat存儲唯一標識符以檢測文件是否先前被收集。

Filebeat如何保證數據發送成功:

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

3.3.2 Logstash工作機制

Logstash事件處理有三個階段:inputs → filters → outputs。是一個接收,處理,轉發日誌的工具。支持系統日誌,webserver日誌,錯誤日誌,應用日誌等。

file

Input:輸入數據到logstash。

支持的輸入類型:

file:從文件系統的文件中讀取,類似於tail -f命令

syslog:在514埠上監聽系統日誌消息,並根據RFC3164標準進行解析

redis:從redis service中讀取

beats:從filebeat中讀取

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

一些常用的過濾器為:

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

官方提供的grok表達式

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

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

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

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

Outputs:outputs是logstash處理管道的最末端組件。

一個event可以在處理過程中經過多重輸出,但是一旦所有的outputs都執行結束,這個event也就完成生命周期。

常見的outputs為:

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

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

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

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

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

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

3.4 Logstash安裝配置

在192.168.116.141機器節點上進行安裝:

  1. 下載解壓

    下載:

    cd /usr/local
    wget https://artifacts.elastic.co/downloads/logstash/logstash-7.10.2-linux-x86_64.tar.gz
    

    解壓:

    tar -xvf logstash-7.10.2-linux-x86_64.tar.gz
    
  2. 創建數據存儲與日誌記錄目錄

    [root@localhost logstash-7.10.2]# mkdir -p /usr/local/logstash-7.10.2/data
    [root@localhost logstash-7.10.2]# mkdir -p /usr/local/logstash-7.10.2/logs
    
  3. 修改配置文件:

    vi /usr/local/logstash-7.10.2/config/logstash.yml 
    

    配置內容:

    # 數據存儲路徑
    path.data: /usr/local/logstash-7.10.2/data
    # 監聽主機地址
    http.host: "192.168.116.141"
    # 日誌存儲路徑
    path.logs: /usr/local/logstash-7.10.2/logs
    #啟動監控插件
    xpack.monitoring.enabled: true 
    #Elastic集群地址
    xpack.monitoring.elasticsearch.hosts:["http://192.168.116.140:9200","http://192.168.116.140:9201","http://192.168.116.140:9202"]
    
  4. 創建監聽配置文件:

    vi /usr/local/logstash-7.10.2/config/logstash.conf 
    

    配置:

    input {
      beats {
        # 監聽埠
        port => 5044
      }
    }
    
    output {
    
      stdout {
        # 輸出編碼插件
        codec => rubydebug
      }
    
      elasticsearch {
        # 集群地址
        hosts => ["http://192.168.116.140:9200","http://192.168.116.140:9201","http://192.168.116.140:9202"]
    
      }
    }
    
  5. 啟動服務:

    以root用戶身份執行:

    ## 後臺啟動方式
    nohup  /usr/local/logstash-7.10.2/bin/logstash -f /usr/local/logstash-7.10.2/config/logstash.conf &
    ##
    ./logstash -f ../config/logstash.conf
    

    成功啟動後會顯示以下日誌:

    [2020-10-15T06:57:40,640][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
    

    訪問地址: http://192.168.116.141:9600/, 可以看到返回信息:

    file

3.5 Filebeat安裝配置

在192.168.116.141機器節點上操作:

  1. 下載解壓

    與ElasticSearch版本一致, 下載7.10.2版本。

    cd /usr/local
    wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.10.2-linux-x86_64.tar.gz
    

    解壓:

    tar -xvf filebeat-7.10.2-linux-x86_64.tar.gz
    
  2. 修改配置文件

    vi /usr/local/filebeat-7.10.2/filebeat.yml
    

    修改內容:

    # 需要收集發送的日誌文件
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/messages
    # 如果需要添加多個日誌,只需要添加
    - type: log
      enabled: true
      paths:
        - /var/log/test.log    
    # filebeat 配置模塊, 可以載入多個配置
    filebeat.config.modules:  
      path: ${path.config}/modules.d/*.yml  
      reload.enabled: false    
    # 索引分片數量設置
    setup.template.settings:
      index.number_of_shards: 2
    # kibana 信息配置
    setup.kibana:
      host: "192.168.116.140:5601"
    # logstash 信息配置 (註意只能開啟一項output設置, 如果採用logstash, 將output.elasticsearch關閉)
    output.logstash:  
      hosts: ["192.168.116.141:5044"]
    # 附加metadata元數據信息
    processors:
      - add_host_metadata: ~
      - add_cloud_metadata: ~
    
  3. 啟動服務

    ## 後臺啟動
    nohup /usr/local/filebeat-7.10.2/filebeat -e -c /usr/local/filebeat-7.10.2/filebeat.yml &
    ## 
    ./filebeat -e -c filebeat.yml
    

    啟動成功後顯示日誌:

    2020-12-15T07:09:33.922-0400    WARN    beater/filebeat.go:367  Filebeat is unable to load the Ingest Node pipelines for the configured modules because the Elasticsearch output is not configured/enabled. If you have already loaded the Ingest Node pipelines or are using Logstash pipelines, you can ignore this warning.
    2020-12-15T07:09:33.922-0400    INFO    crawler/crawler.go:72   Loading Inputs: 1
    2020-12-15T07:09:33.923-0400    INFO    log/input.go:148        Configured paths: [/var/log/messages]
    2020-12-15T07:09:33.923-0400    INFO    input/input.go:114      Starting input of type: log; ID: 14056778875720462600 
    2020-12-15T07:09:33.924-0400    INFO    crawler/crawler.go:106  Loading and starting Inputs completed. Enabled inputs: 1
    2020-12-15T07:09:33.924-0400    INFO    cfgfile/reload.go:150   Config reloader started
    

    我們監聽的是/var/log/messages系統日誌信息, 當日誌發生變化後, filebeat會通過logstash上報到Elasticsearch中。 我們可以查看下集群的全部索引信息:

    http://192.168.116.140:9200/_cat/indices?v

    image-20210720161146415

    可以看到, 已經生成了名為logstash-2021.07.20-000001索引。

3.6 Kibana配置與查看數據

  1. 進入Kibana後臺, 進行配置:

    http://192.168.116.140:5601

    file

    進入【Management】--> 在Index Pattern中輸入"logstash-*" --> 點擊【next step】, 選擇"@timestamp",

    file

    點擊【 Create index pattern 】進行創建。

file

  1. 查看數據

    進入【Discover】, 可以查看到收集的數據:

file

如果沒有顯示, 可以重新調整Time Range時間範圍。

本文由傳智教育博學谷 - 狂野架構師教研團隊發佈
如果本文對您有幫助,歡迎關註和點贊;如果您有任何建議也可留言評論或私信,您的支持是我堅持創作的動力
轉載請註明出處!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 本文包含JSP的原理剖析、基礎語法和指令、內置對象和作用域、JSP及JSTL標簽及JavaBean等JSP的知識都在這裡了 ...
  • 開頭 試想一下我們一般怎麼統一處理異常呢,答:切麵。但拋開切麵不講,如果對每一個controller方法拋出的異常做專門處理,那麼著實太費勁了,有沒有更好的方法呢?當然有,就是本篇文章接下來要介紹的springmvc的異常處理機制,用到了ControllerAdvice和ExceptionHandl ...
  • 課程導讀 原生的ajax雖然在實際開發中很少編寫,但如果想將js高級框架底層學明白,那ajax的原理是必須要求精通的。 本套ajax視頻對ajax底層實現原理講解非常透徹,對ajax發送非同步請求的每一步都進行了透徹的分析,讓你徹底搞懂搞透ajax。 課程主要涵蓋的內容: ajax底層實現原理剖析、 ...
  • 前言 本篇文章內容主要為如何用代碼,把你想要的內容,以郵件的形式發送出去內容可以自己完善,還可以設置一個定時發送,或者開機啟動自動運行代碼 代理註冊與使用 註冊賬號並登錄 生成api 將自己電腦加入白名單 http://api.tianqiip.com/white/add?key=xxx&brand ...
  • 一、Golang環境安裝及配置Go Module https://go-zero.dev/cn/docs/prepare/golang-install mac OS安裝Go# 下載並安裝Go for Mac 驗證安裝結果 $ go version go version go1.15.1 darwin ...
  • 兄弟們,今天我們來用Python生成隨機密碼試試~ 知識點 文件讀寫 基礎語法 字元串處理 字元拼接 代碼解析 導入模塊 import platform import string import random # 我還給大家準備了這些資料:Python視頻教程、100本Python電子書、基礎、爬蟲 ...
  • likeshop外賣點餐系統適用於茶飲類的外賣點餐場景,搭建自己的一點點、奈雪、喜茶點餐系統。 系統基於總部+多門店的連鎖模式,擁有門店獨立管理後臺,支持總部定價和門店定價。LBS定位點餐,可堂食可外賣。無論運營還是二開都是性價比極高的100%開源商城系統。 適用場景 系統適用於茶飲類的外賣點餐場景 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...