belk學習

beats

elk架構圖:

在這裏插入圖片描述

Filebeat負責從web服務器上實時抓取數據,當log文件發生變化時,將文件內容吐給kafka。

Kafka是消息隊列,主要作用是在filebeat和logstash之間做緩存,避免因寫入logstash的數據量過大,導致數據丟失。

filebeat(go語言開發)

官網:https://www.elastic.co/cn/beats/filebeat

功能:用於監控、收集服務器日誌文件.

1.advantage

  • 性能穩健,不錯過任何檢測信號

無論在任何環境中,隨時都潛伏着應用程序中斷的風險。Filebeat 能夠讀取並轉發日誌行,如果出現中斷,還會在一切恢復正常後,從中斷前停止的位置繼續開始。

  • Filebeat 讓簡單的事情簡單化

Filebeat 內置有多種模塊(Apache、Cisco ASA、Microsoft Azure、NGINX、MySQL 等等),可針對常見格式的日誌大大簡化收集、解析和可視化過程,只需一條命令即可。之所以能實現這一點,是因爲它將自動默認路徑(因操作系統而異)與 Elasticsearch 採集節點管道的定義和 Kibana 儀表板組合在一起。不僅如此,數個 Filebeat 模塊還包括預配置的 Machine Learning 任務。

  • 它不會導致您的管道過載

當將數據發送到 Logstash 或 Elasticsearch 時,Filebeat 使用背壓敏感協議,以應對更多的數據量。如果 Logstash 正在忙於處理數據,則會告訴 Filebeat 減慢讀取速度。一旦擁堵得到解決,Filebeat 就會恢復到原來的步伐並繼續傳輸數據。

2.架構:

在這裏插入圖片描述

3.Filebeat工作原理

Filebeat由兩個主要組件組成:input和 harvester。

  • harvester:

    • 負責讀取單個文件的內容。
    • 如果文件在讀取時被刪除或重命名,Filebeat將繼續讀取文件。
  • input

    • 輸入負責管理收割機並查找所有可讀取的資源。

    • 如果輸入類型爲log,則輸入將在驅動器上找到與定義的全局路徑匹配的所有文件,併爲每個文件啓動收集器。每個輸入都在其自己的Go例程中運行。

    • 支持多種輸入類型 eg:log,Container,Kafka,Redis,UDP,Docker…

  • Filebeat如何保持文件的狀態

    • Filebeat 保存每個文件的狀態並經常將狀態刷新到磁盤上的註冊文件中。
    • 該狀態用於記住harvester正在讀取的最後偏移量,並確保發送所有日誌行。
    • 如果輸出(例如Elasticsearch或Logstash)無法訪問,Filebeat會跟蹤最後發送的行,並在輸出再次可用
      時繼續讀取文件。
    • 在Filebeat運行時,每個prospector內存中也會保存的文件狀態信息,當重新啓動Filebeat時,將使用註冊 文件的數據來重建文件狀態,Filebeat將每個harvester在從保存的最後偏移量繼續讀取。
    • 文件狀態記錄在data/registry文件中。

4.部署及運行:

  • 部署:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation.html

  • 配置

    核心配置文件filebeat.yml

  1. 控制檯測試修改filebeat.yml:
  • filebeat.inputs:
    - type: stdin
     enabled: true
    setup.template.settings:
     index.number_of_shards: 3
    output.console:
     pretty: true
     enable: true
    
    

​ 2.啓動filebeat

​ ./filebeat -e -c filebeat.yml

​ 輸入:hello beats

控制檯顯示結果:

  • {
      "@timestamp": "2020-05-13T02:40:47.361Z",
      "@metadata": {					#元數據信息
        "beat": "filebeat",
        "type": "_doc",
        "version": "7.6.2"
      },
      "ecs": {
        "version": "1.4.0"
      },
      "host": {
        "name": "centos-200"
      },
      "agent": {
        "ephemeral_id": "e5774b50-26b5-4793-942e-19ff3a60afa1",
        "hostname": "centos-200",
        "id": "62898e4b-d500-4a1b-8fd5-5090ff5e1cc7",
        "version": "7.6.2",
        "type": "filebeat"
      },
      "log": {
        "offset": 0,
        "file": {
          "path": ""
        }
      },
      "message": "hello beats",   #輸入結果
      "input": { #控制檯標準輸入
        "type": "stdin"
      }
    }
    

    3.讀取文件測試

  • 修改filebeat.yml配置文件
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
      - /root/zqc/logs/*.log
    setup.template.settings:
     index.number_of_shards: 3
    output.console:
     pretty: true
     enable: true
    

​ 運行結果

  • {
      "@timestamp": "2020-05-13T02:53:29.266Z",
      "@metadata": {
        "beat": "filebeat",
        "type": "_doc",
        "version": "7.6.2"
      },
      "log": {
        "offset": 0,
        "file": {
          "path": "/root/zqc/logs/a.log"
        }
      },
      "message": "abc",
      "input": {
        "type": "log"
      },
      "ecs": {
        "version": "1.4.0"
      },
      "host": {
        "name": "centos-200"
      },
      "agent": {
        "ephemeral_id": "ab92a3cf-0509-412f-ac4d-8a7bc507c7db",
        "hostname": "centos-200",
        "id": "62898e4b-d500-4a1b-8fd5-5090ff5e1cc7",
        "version": "7.6.2",
        "type": "filebeat"
      }
    }
    

    4.自定義字段:打標籤

  • #修改filebeat.yml文件
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
       /root/zqc/logs/*.log
      tags: ["zqc"]
      fields:
        from: zqc-input
    setup.template.settings:
       index.number_of_shards: 3
    output.console:
       pretty: true
       enable: true
    

    運行結果

    {
      "@timestamp": "2020-05-13T03:07:42.105Z",
      "@metadata": {
        "beat": "filebeat",
        "type": "_doc",
        "version": "7.6.2"
      },
      "message": "456",
      "tags": [
        "zqc"    					#添加的標籤
      ],
      "input": {
        "type": "log"
      },
      "fields": {					#添加的字段
        "from": "zqc-input"
      },
      "agent": {
        "id": "62898e4b-d500-4a1b-8fd5-5090ff5e1cc7",
        "version": "7.6.2",
        "type": "filebeat",
        "ephemeral_id": "86991f47-98b3-4528-b686-404a8dcff0af",
        "hostname": "centos-200"
      },
      "ecs": {
        "version": "1.4.0"
      },
      "host": {
        "name": "centos-200"
      },
      "log": {
        "offset": 8,
        "file": {
          "path": "/root/zqc/logs/a.log"
        }
      }
    }
    

5.Module

在Filebeat中,有大量的Module,可以簡化我們的配置,直接就可以使用,如:mysql,redis,mongodb等

./filebeat modules enable redis #啓動
./filebeat modules disable redis #禁用

Metricbeat

功能:用於從系統和服務收集指標。

1.advantage

  • 系統級監控,更簡潔

    將 Metricbeat 部署到您的所有 Linux、Windows 和 Mac 主機,並將它連接到 Elasticsearch 就大功告成了:您 可以獲取系統級的 CPU 使用率、內存、文件系統、磁盤 IO 和網絡 IO 統計數據,還可針對系統上的每個進程獲得與 top 命令類似的統計數據

  • 單個二進制文件提供多種模塊

Metricbeat 提供多種內部模塊,這些模塊可從多項服務(諸如 Apache、Jolokia、NGINX、MongoDB、MySQL、PostgreSQL、Prometheus 等等)中收集指標。安裝簡單,完全零依賴性。只需在配置文件中啓用您所需的模塊即可。

而且,如果您沒有看到要找的模塊,還可以自己構建。以 Go 語言編寫 Metricbeat 模塊,過程十分簡單。

  • 容器就緒

近來是不是所有工作都轉移到了 Docker 中?通過 Elastic Stack,您能夠輕鬆地監測容器。將 Metricbeat 部署到同一臺主機上的一個單獨容器後,它將收集與主機上運行的其他每一個容器相關的統計數據。在收集統計數據時,它直接從 proc 文件系統讀取 cgroup 信息,這就意味着它無需特權即可訪問 Docker API,並且同樣適用於其他 Runtime。針對 Docker 的 Autodiscovery 讓事情進一步簡化,您只需指定一個條件即可開啓 Metricbeat 模塊。

  • 不錯過任何檢測信號

將指標通過假脫機傳輸方式輸送至磁盤,這樣您的數據管道再也不會錯過任何一個數據點,即使發生中斷(例如網絡問題),也勿需擔心。Metricbeat 會保留傳入的數據,並在重新上線後將這些指標輸送至 Elasticsearch 或 Logstash

2.架構

在這裏插入圖片描述

Metricbeat有2部分組成,一部分是Modules,另一部分爲Metricsets

  • Metricbeat Module
定義了從特定服務(例如Redis,MySQL等)收集數據的基本邏輯。 該Module指定有關服務的詳細信息,包括如何連接,收集度量的頻率以及收集哪些度量。
  • Metricsets
    收集指標的集合,如:cpu、memory、network等;

3.部署運行

配置文件

默認收集系統module數據system.yml

修改配置文件:metricbeat.yml

  • metricbeat.config.modules:
     path: /etc/metricbeat/modules.d/*.yml
     reload.enabled: false
    setup.template.settings:
     index.number_of_shards: 1
     index.codec: best_compression
    output.elasticsearch:
        hosts: ["192.168.16.129:9200"]
    processors:   #使用處理器過濾和增強數據
      - add_host_metadata: ~
      - add_cloud_metadata: ~
    

運行:./metricbeat -e

待補充 Packetbeat

Packetbeat 是一個實時網絡數據包分析工具,與elasticsearch一體來提供應用程序的監控和分析系統。

Packetbeat通過嗅探應用服務器之間的網絡通訊,來解碼應用層協議類型如HTTP、MySQL、redis等等,關聯請求與響應,並記錄每個事務有意義的字段。

Packetbeat可以幫助我們快速發現後端應用程序的問題,如bug或性能問題等等,修復排除故障也很快捷。

Packetbeat目前支持的協議有:

Packetbeat可以將相關事務直接插入到elasticsearch或redis(不推薦)或logstash。

Packetbeat可以運行在應用服務器上或者獨自的服務器。當運行在獨自服務器上時,需要從交換機的鏡像端口或者竊聽設備上獲取網絡流量。

LOGSTASH

1.介紹

官網:https://www.elastic.co/guide/en/logstash/current/first-event.html

  • 集中、轉換和存儲數據

    Logstash 是開源的服務器端數據處理管道,能夠同時從多個來源採集數據,轉換數據,然後將數據發送到您 最喜歡的“存儲庫”中。

  • 輸入、過濾器和輸出

    Logstash 能夠動態地採集、轉換和傳輸數據,不受格式或複雜度的影響。利用 Grok 從非結構化數據中派生出結構,從 IP 地址解碼出地理座標,匿名化或排除敏感字段,並簡化整體處理過程。

  • 實時解析和轉換數據

    數據從源傳輸到存儲庫的過程中,Logstash 過濾器能夠解析各個事件,識別已命名的字段以構建結構,並將它們轉換成通用格式,以便更輕鬆、更快速地分析和實現商業價值。

    • 利用 Grok 從非結構化數據中派生出結構
    • 從 IP 地址破譯出地理座標
    • 將 PII(unencrypted personal data ) 數據匿名化,完全排除敏感字段
    • 簡化整體處理,不受數據源、格式或架構的影響

在這裏插入圖片描述

流程圖:

在這裏插入圖片描述

2.部署與運行

接收Filebeat輸入的日誌

Filebeat讀取nginx的日誌,發送到logstash,通過logstash發送到es

在這裏插入圖片描述

步驟:

1.編輯filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
   - /var/log/nginx/access.log
  tags: ["log"]
  fields:
    from: nginx
fields_under_root: false
 output.logstash:
   hosts: ["192.168.16.129:5044"]

2.編輯logstash.yml

input {
  beats {
   port => "5044"
  }
}
filter {
  grok {
    patterns_dir => "/usr/share/logstash/nginx-patterns"
    match => { "message" => "%{NGINX_ACCESS}"}
    remove_tag => [ "_grokparsefailure" ]
    add_tag => [ "nginx_access" ]
   }
 }
output {
  elasticsearch {
     index => "abc" #將結果輸出到es
  }
}

3.運行

先啓動logstash

#啓動 --config.test_and_exit 用於測試配置文件是否正確
bin/logstash -f logstash.conf --config.test_and_exit

#正式啓動 --config.reload.automatic 熱加載配置文件,修改配置文件後無需重新啓動
bin/logstash -f logstash.conf --config.reload.automatic

,再啓動filebeat

./filebeat -e -c filebeat.yml

刷新瀏覽器之後kibana頁面顯示的點擊次數

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章