Beats 入門實戰(2)--FileBeat 介紹

来源:https://www.cnblogs.com/wuyongyin/archive/2022/10/15/16699140.html
-Advertisement-
Play Games

本文主要介紹 Filebeat 的相關概念及基本使用,相關的環境及軟體信息如下:CentOS 7.9、FileBeat 8.2.2、Logstash 8.2.2、Elasticsearch 8.2.2。 1、Filebeat 簡介 1.1、Filebeat 總覽 Filebeat 是用於轉發和集中日 ...


本文主要介紹 Filebeat 的相關概念及基本使用,相關的環境及軟體信息如下:CentOS 7.9、FileBeat 8.2.2、Logstash 8.2.2、Elasticsearch 8.2.2。

1、Filebeat 簡介

1.1、Filebeat 總覽

Filebeat 是用於轉發和集中日誌數據的輕量級傳送程式。 作為伺服器上的代理安裝,Filebeat 監視你指定的日誌文件或位置,收集日誌事件,並將它們轉發到 Elasticsearch 或 Logstash 以進行索引。

Filebeat 具有如下的一些特性:

  • 正確處理日誌旋轉:針對每隔一個時間段生產一個新的日誌的案例,Filebeat 可以幫我們正確地處理新生產的日誌,並重新啟動對新生成日誌的處理
  • 背壓敏感:如果日誌生成的速度過快,從而導致 Filebeat 生產的速度超過 Elasticsearch 處理的速度,那麼 Filebeat 可以自動調節處理的速度,以達到 Elasticsearch 可以處理的範圍內
  • “至少一次”保證:每個日誌生成的事件至少被處理一次
  • 結構化日誌:可以處理結構化的日誌數據數據
  • 多行事件:如果一個日誌有多行信息,也可以被正確處理,比如錯誤信息往往是多行數據
  • 條件過濾:可以有條件地過濾一些事件

Filebeat 的工作方式如下:啟動 Filebeat 時,它將啟動一個或多個輸入,這些輸入將在為日誌數據指定的位置中查找。 對於 Filebeat 所找到的每個日誌,Filebeat 都會啟動收集器(havester)。 每個收集器都讀取一個日誌以獲取新內容,並將新日誌數據發送到 libbeat。libbeat 會彙總事件,並將彙總的數據發送到為 Filebeat 配置的輸出。

從上面有可以看出來在 spooler 里有一些緩存,這個可以用於重新發送以確保至少一次的事件消費,同時也可以用於背壓敏感。一旦 Filebeat 生成的事件的速度超過 Elasticsearch 能夠處理的極限,這個緩存可以用於存儲一些事件。每個 Filebeat 可以配置多個 input,並且每個 input 可以配置來採集一個或多個文件路徑的文件。 就像上面的圖顯示的那樣,Filebeat 支持多種輸入方式。Filbeat 支持如下的一些輸出:

  • Elasticsearch
  • Logstash
  • Kafka
  • Redis
  • File
  • Console
  • Cloud

1.2、Filebeat 模塊

一個 Filebeat 模塊通常由如下的部分組成:

Filebeat 模塊簡化了常見日誌格式的收集,解析和可視化。文件集包含以下內容:

  • Filebeat 輸入配置,其中包含在其中查找日誌文件的預設路徑。 這些預設路徑取決於操作系統。 Filebeat 配置還負責在需要時將多行事件縫合在一起。
  • Elasticsearch Ingest Node 管道定義,用於解析日誌行。
  • 欄位定義,用於為每個欄位配置具有正確的 Elasticsearch 類型,它們還包含每個欄位的簡短說明。
  • 示例 Kibana 儀錶板(如果有)可用於可視化日誌文件。

Filebeat 會根據你的環境自動調整這些配置,並將它們載入到相應的 Elastic Stack 組件中。

一個典型的模塊(例如,對於 Nginx 日誌)由一個或多個文件集(對於 Nginx,訪問和錯誤日誌)組成,比如,Nginx 模塊解析 NGINX HTTP 伺服器創建的訪問和錯誤日誌。它在幕後執行如下的一些任務:

  • 設置日誌文件的預設路徑(你可以更改)
  • 確保每個多行日誌事件都作為單個事件發送
  • 使用 ingest node 來解析和處理日誌行
  • 將數據塑造成適合在 Kibana 中進行可視化的結構
  • 部署儀錶板以可視化日誌數據

 針對其它的 Beats 模塊來說,基本和 Filebeat 一樣。目前針對 Elasticsearch 所提供的模塊來說,有非常多的模塊可以供使用:

 關於 Filbeat 的模塊信息,可查看官網文檔:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-modules.html。

2、Filebeat 安裝

根據環境下載對應的安裝包:https://www.elastic.co/cn/downloads/beats/filebeat,這裡選擇 Linux x86_64 版本;下載完成後在伺服器上解壓即可:

tar zxvf filebeat-8.2.2-linux-x86_64.tar.gz

3、Filebeat 使用

這裡使用 Filebeat 來收集 Nginx 訪問日誌併發送到 Logstash 和 Elasticsearch 中。

3.1、按照普通日誌文件方式收集 Nginx 訪問日誌

3.1.1、配置

修改配置文件 filebeat.yml,配置輸入、輸出,開始可以先把輸出配成 console,調試沒問題後再配置輸出到 Logstash 和 Elasticsearch。

filebeat.inputs:
- type: filestream
  id: my-filestream-id
  enabled: true
  paths:
    - /home/hadoop/app/nginx-1.8.0/logs/access.log
    
output.console:
  pretty: true
  enable: true

3.1.2、啟動

./filebeat -e -c filebeat.yml 

3.1.3、驗證

訪問 Nginx,日誌文件 /home/hadoop/app/nginx-1.8.0/logs/access.log 會輸出日誌:

10.49.196.1 - - [16/Sep/2022:15:35:20 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"

filebeat 的控制台列印採集的日誌信息如下:

{
  "@timestamp": "2022-09-16T07:35:25.797Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "8.2.2",
    "pipeline": "filebeat-8.2.2-nginx-access-pipeline"
  },
  "event": {
    "timezone": "+08:00",
    "module": "nginx",
    "dataset": "nginx.access"
  },
  "fileset": {
    "name": "access"
  },
  "ecs": {
    "version": "1.12.0"
  },
  "agent": {
    "type": "filebeat",
    "version": "8.2.2",
    "ephemeral_id": "5f0443a4-e5c6-43c0-88d2-4ad7b946c4a7",
    "id": "197bfd49-e03a-416e-b53f-4ac143b94fa5",
    "name": "pxc2"
  },
  "message": "10.49.196.1 - - [16/Sep/2022:15:35:20 +0800] \"GET / HTTP/1.1\" 304 0 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36\"",
  "input": {
    "type": "log"
  },
  "host": {
    "id": "a91a3eb89492470398ed77cd24a29299",
    "containerized": false,
    "ip": [
      "10.49.196.11",
      "fe80::2011:ba1b:b32b:b63a"
    ],
    "mac": [
      "00:0c:29:97:29:ce"
    ],
    "hostname": "pxc2",
    "name": "pxc2",
    "architecture": "x86_64",
    "os": {
      "version": "7 (Core)",
      "family": "redhat",
      "name": "CentOS Linux",
      "kernel": "3.10.0-957.el7.x86_64",
      "codename": "Core",
      "type": "linux",
      "platform": "centos"
    }
  },
  "log": {
    "offset": 16308,
    "file": {
      "path": "/home/hadoop/app/nginx-1.8.0/logs/access.log"
    }
  },
  "service": {
    "type": "nginx"
  }
}
View Code

3.1.4、處理器

預設情況下配置瞭如下處理器:

processors:
  - add_host_metadata:
      when.not.contains.tags: forwarded
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~

如果覺得輸出的日誌過多,可以把這些處理器去掉並添加去除欄位的處理器:

processors:
  #- add_host_metadata:
  #    when.not.contains.tags: forwarded
  #- add_cloud_metadata: ~
  #- add_docker_metadata: ~
  #- add_kubernetes_metadata: ~
  - drop_fields:
      fields: ["agent.id", "log"]

3.1.5、配置輸出到 Logstash

output.logstash:
  hosts: ["localhost:5044"]

Logstash 接受到的日誌信息如下:

{
          "tags" => [
        [0] "beats_input_codec_plain_applied"
    ],
         "event" => {
        "timezone" => "+08:00",
        "original" => "10.49.196.1 - - [16/Sep/2022:15:51:38 +0800] \"GET / HTTP/1.1\" 304 0 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36\"",
         "dataset" => "nginx.access",
          "module" => "nginx"
    },
           "log" => {
        "offset" => 16866,
          "file" => {
            "path" => "/home/hadoop/app/nginx-1.8.0/logs/access.log"
        }
    },
      "@version" => "1",
       "fileset" => {
        "name" => "access"
    },
       "message" => "10.49.196.1 - - [16/Sep/2022:15:51:38 +0800] \"GET / HTTP/1.1\" 304 0 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36\"",
    "@timestamp" => 2022-09-16T07:51:45.515Z,
         "agent" => {
                "name" => "pxc2",
                "type" => "filebeat",
        "ephemeral_id" => "9a6a130b-04c6-4bbf-a228-60e1f237f5a9",
             "version" => "8.2.2",
                  "id" => "197bfd49-e03a-416e-b53f-4ac143b94fa5"
    },
           "ecs" => {
        "version" => "1.12.0"
    },
          "host" => {
        "name" => "pxc2"
    },
       "service" => {
        "type" => "nginx"
    },
         "input" => {
        "type" => "log"
    }
}
View Code

3.1.6、配置輸出到 Elasticsearch

output.elasticsearch:
  hosts: ["localhost:9200"] 

Elasticsearch 會自動創建名為 filebeat-8.2.2 的數據流,數據流中保存的日誌信息如下:

{
  "_index": ".ds-filebeat-8.2.2-2022.09.16-000001",
  "_id": "8qxKRYMBPnCOyxVi1GuP",
  "_version": 1,
  "_score": 1,
  "_source": {
    "agent": {
      "name": "pxc2",
      "id": "197bfd49-e03a-416e-b53f-4ac143b94fa5",
      "ephemeral_id": "a6b1d9a5-8485-4391-92be-6a6ae530a5cd",
      "type": "filebeat",
      "version": "8.2.2"
    },
    "nginx": {
      "access": {
        "remote_ip_list": [
          "10.49.196.1"
        ]
      }
    },
    "log": {
      "file": {
        "path": "/home/hadoop/app/nginx-1.8.0/logs/access.log"
      },
      "offset": 17052
    },
    "source": {
      "address": "10.49.196.1",
      "ip": "10.49.196.1"
    },
    "fileset": {
      "name": "access"
    },
    "url": {
      "path": "/",
      "original": "/"
    },
    "input": {
      "type": "log"
    },
    "@timestamp": "2022-09-16T07:54:24.000Z",
    "ecs": {
      "version": "1.12.0"
    },
    "_tmp": {},
    "related": {
      "ip": [
        "10.49.196.1"
      ]
    },
    "service": {
      "type": "nginx"
    },
    "host": {
      "name": "pxc2"
    },
    "http": {
      "request": {
        "method": "GET"
      },
      "response": {
        "status_code": 304,
        "body": {
          "bytes": 0
        }
      },
      "version": "1.1"
    },
    "event": {
      "ingested": "2022-09-16T07:54:34.439241175Z",
      "original": "10.49.196.1 - - [16/Sep/2022:15:54:24 +0800] \"GET / HTTP/1.1\" 304 0 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36\"",
      "timezone": "+08:00",
      "created": "2022-09-16T07:54:33.213Z",
      "kind": "event",
      "module": "nginx",
      "category": [
        "web"
      ],
      "type": [
        "access"
      ],
      "dataset": "nginx.access",
      "outcome": "success"
    },
    "user_agent": {
      "original": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36",
      "os": {
        "name": "Windows",
        "version": "10",
        "full": "Windows 10"
      },
      "name": "Chrome",
      "device": {
        "name": "Other"
      },
      "version": "105.0.0.0"
    }
  },
  "fields": {
    "event.category": [
      "web"
    ],
    "user_agent.os.full": [
      "Windows 10"
    ],
    "user_agent.original.text": [
      "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"
    ],
    "url.original.text": [
      "/"
    ],
    "source.address": [
      "10.49.196.1"
    ],
    "user_agent.os.name.text": [
      "Windows"
    ],
    "user_agent.os.version": [
      "10"
    ],
    "user_agent.os.name": [
      "Windows"
    ],
    "traefik.access.user_agent.name": [
      "Chrome"
    ],
    "service.type": [
      "nginx"
    ],
    "agent.type": [
      "filebeat"
    ],
    "event.module": [
      "nginx"
    ],
    "http.request.method": [
      "GET"
    ],
    "related.ip": [
      "10.49.196.1"
    ],
    "traefik.access.user_agent.original": [
      "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"
    ],
    "source.ip": [
      "10.49.196.1"
    ],
    "agent.name": [
      "pxc2"
    ],
    "host.name": [
      "pxc2"
    ],
    "user_agent.version": [
      "105.0.0.0"
    ],
    "http.response.status_code": [
      304
    ],
    "http.version": [
      "1.1"
    ],
    "event.kind": [
      	   

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

-Advertisement-
Play Games
更多相關文章
  • 序列化組件的三大功能 序列化,序列化器會把模型對象轉換成字典,經過response以後變成json字元串 反序列化,把客戶端發送過來的數據,經過request以後變成字典,序列化器可以把字典轉成模型 反序列化時同時會完成數據校驗功能 序列化器Serializer使用方法 查詢單個數據語法: 1.在s ...
  • JDBC和連接池03 8.事務 8.1事務介紹 基本介紹 JDBC程式中當一個Connection對象創建時,預設情況下是自動提交事務:每次執行一個SQL語句時,如果執行成功,就會向資料庫自動提交,而不能回滾。 JDBC程式中為了讓多個SQL語句作為一個整體執行,需要使用事務 調用Connectio ...
  • 前言 嗨嘍~大家好呀,這裡是魔王吶 ! 我又來更新小姐姐網站,批量採集得辦法拉~ 讓我們一起來學習吧~ 開發環境: Python 3.8 Pycharm 模塊使用: 第三方模塊 需要安裝 在cmd裡面 進行 pip install requests / parsel requests 如何安裝pyt ...
  • 1.os.walk 返回指定路徑下所有文件和子文件夾中所有文件列表 其中文件夾下路徑如下: import os def file_name_walk(file_dir): for root, dirs, files in os.walk(file_dir): print("root", root) ...
  • Nacos 動態配置原理 可憐夜半虛前席,不問蒼生問鬼神。 簡介 動態配置管理是 Nacos 的三大功能之一,通過動態配置服務,我們可以在所有環境中以集中和動態的方式管理所有應用程式或服務的配置信息。 動態配置中心可以實現配置更新時無需重新部署應用程式和服務即可使相應的配置信息生效,這極大了增加了系 ...
  • python煙花代碼 如下 # -*- coding: utf-8 -*- import math, random,time import threading import tkinter as tk import re #import uuid Fireworks=[] maxFireworks= ...
  • 1.有n個評委,他們給出score個分數,請用代碼寫出平均值,ave代表平均值 2022-10-15 13:17:10 int main() { int n, i =1, score, sum = 0, ave; printf("請輸入評委人數:"); scanf("%d",&n); while ( ...
  • MinGW 和arm-none-eabi 下載百度雲 鏈接:https://pan.baidu.com/s/1AvPXFQbkb7fi10lrJ3chsA 提取碼:sh3x 首先建議你閱讀官方建議 https://infocenter.nordicsemi.com/index.jsp?topic=% ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...