logstash beats 系列 & fluentd

來源:互聯網
上載者:User

一、logstash

      Logstash: 是一個靈活的資料轉送和處理系統,在beats出來之前,還負責進行資料收集。Logstash的任務,就是將各種各樣的資料,經過配置轉化規則,統一化存入Elasticsearch。使用Ruby開發的Logstash在靈活性上,非常出色。不過效能一直是被詬病的問題。

     由於Logstash在資料收集上並不出色,而且作為agent,效能並不達標。elastic發布了beats系列輕量級採集組件。至此,elastic形成了一個完整的生態鏈和技術棧,成為大資料超市的佼佼者。

二、Elastic Stack Beats 系列

    Beats 是 ELK Stack 技術棧中負責單一用途資料擷取並推送給 Logstash 或 Elasticsearch 的輕量級產品。   

  Beats 架構:

    beats 是一個使用 Golang 構建的平台,libbeat 是其核心庫,用來提供API進行與Elasticsearch,Logstash 的串連,還能配置輸入特性和實現資訊收集等工作。其中封裝一個輸出模組(Publisher),輸出模組可以負責將收集到的資料發送給 Logstash 或者 Elasticsearch。由於 go 語言設計有 channel,收集資料的邏輯代碼與 Publisher 都是通過 channel 通訊的,耦合度的最低的。因此,開發一個收集器,完全不需要知道Publisher 的存在,程式啟動並執行時候自然就“神奇”的把資料發往服務端了。除此之外,還封裝了設定檔處理、Tlog、守護化等功能,方便開發人員拓展 beats 的能力。 

Beats 是一組輕量級採集程式的統稱,我們通常常用的幾個如下:

        1)  filebeat: 進行檔案和目錄採集,主要用於收集日誌資料。

        2) metricbeat: 進行指標採集,指標可以是系統的,也可以是眾多中介軟體產品的,主要用於監控系統和軟體的效能。

        3)packetbeat: 通過網路抓包、協議分析,對一些請求響應式的系統通訊進行監控和資料收集,可以收集到很多常規方式無法收集到的資訊。

        4) Winlogbeat: 專門針對 windows 的 event log 進行的資料擷取。

        5) Heartbeat: 系統間連通性檢測,比如 icmp, tcp, http 等系統的連通性監控。

        6) 可以通過 beats 產生器來產生自己的 beats

1. filebeats

    filebeat是構建於beats之上的,應用於日誌收集情境的實現,用來替代 Logstash Forwarder 的下一代 Logstash 收集器,是為了更快速穩定輕量低耗地進行收集工作,它可以很方便地與 Logstash 還有直接與 Elasticsearch 進行對接。


1) 健壯性

filebeat 異常中斷重啟後會繼續上次停止的位置。(通過${filebeat_home}\data\registry檔案來記錄日誌的位移量)

2) 智能調節傳輸速度,防止logstash、es 過載

Filebeat 使用力道感應式協議(backpressure-sensitive)來傳輸資料,在 logstash 忙的時候,Filebeat 會減慢讀取-傳輸速度,一旦 logstash 恢複,則 Filebeat 恢複原來的速度。


2. Metricbeat 

  Metricbeat 是一個輕量級的系統級效能指標監控工具。收集CPU,記憶體,磁碟等系統指標和 Redis,nginx等各種服務的指標。

    1)通過在Linux,Windows,Mac上部署Metricbeat,可以收集cpu,記憶體,檔案系統,磁碟IO,網路IO等統計資訊。

    2)支援採集 Apache, NGINX, MongoDB, MySQL, PostgreSQL, Redis, and ZooKeeper等服務的指標。零依賴,只需要在設定檔中啟用即可

    3)如果你使用Docker管理你的服務。可以在該主機上單獨起一個Metricbeat容器,他通過從proc檔案系統中直接讀取cgroups資訊來收集有關Docker主機上每個容器的統計資訊。不需要特殊許可權訪問Docker API

    4)Metricbeats是ELK Stack全家桶中的一員,可以和ELK無縫協同工作。例如使用Logstash二次處理資料,用Elasticsearch分析,或者用Kibana建立和共用儀錶盤。

3. Packetbeat

Packetbeat 是一個輕量級的網路資料包分析工具。Packetbeat可以通過抓包分析應用程式的網路互動。並且將抓到的資料發送到 Logstash 或者Elasticsearch。 

1)Packetbeat 輕鬆的即時監控並解析像HTTP這樣的網路通訊協定。以瞭解流量是如何經過你的網路。Packetbeat 是被動的,不增加延遲開銷,無代碼侵入,不干涉其他基礎設施。

2)Packetbeat是一個庫,支援多種應用程式層協議,如 http、dns、mysal、icmp、postgres、redis 等。

3)Packetbeat可以讓你即時在目標伺服器上進行抓包-解碼-擷取請求和響應-展開欄位-將json格式的結果發送到Elasticsearch。

4)Packetbeat是ELK Stack全家桶中的一員,可以和ELK無縫協同工作。例如使用Logstash二次處理資料,用Elasticsearch分析,或者用Kibana建立和共用儀錶盤。

4. Winlogbeat

  Winlogbeat 是一個輕量級的 Windows 事件記錄收集工具。將 Windows 事件發送到 Elasticsearc h或者Logstash

  如果你有 Windows 伺服器的話,其實可以從 Windows 事件記錄中看到很多東西。例如,登陸(4624),登陸失敗(4625),插入USB可攜式裝置(4663)或者新裝軟體(11707)。WinlogBeat可以配置從任何事件記錄通道讀取並且結構化提供原始事件數目據。使得通過 Elasticsearch 過濾和彙總結果變得很容易。

    Winlogbeat是ELK Stack全家桶中的一員,可以和ELK無縫協同工作。例如使用Logstash二次處理資料,用Elasticsearch分析,或者用Kibana建立和共用儀錶盤。

5. Heartbeat

Heartbeat 是一個心跳偵查工具,主要監控服務的可用性。監控給定的地址是否可用(官網原話:對於給定的URL列表,Heartbeat就問一句,還活著沒?活著吱一聲。。。) 可以結合ELK Stack其他產品做進一步的分析

1)不管你是測試同主機服務還是其他網路服務,Heartbeat都可以很輕鬆的產生正常已耗用時間和回應時間資料。而且修改配置不需要重啟Heartbeat

2)Heartbeat通過ICMP,TCP,和HTTP進行ping,也支援TLS,身分識別驗證(authentication ),和代理(proxies)。由於簡單的DNS解析,你可以監控所有負載平衡的服務(原文:You can monitor all the hosts behind a load-balanced server thanks to simple DNS resolution)

3)現如今基礎設施,服務和主機經常動態調整。Heartbeat可以修改設定檔後自動載入(原文:Heartbeat makes it easy to automate the process of adding and removing monitoring targets via a simple, file-based interface.)

4)Heartbeat是ELK Stack全家桶中的一員,可以和ELK無縫協同工作。例如使用Logstash二次處理資料,用Elasticsearch分析,或者用Kibana建立和共用儀錶盤。

6. 建立一個自己的 Beat

    可以根據官方文檔,使用 beats 產生器產生自己的 beats

    https://www.elastic.co/cn/blog/build-your-own-beat

三、 Fluentd

Fluentd是一個完全開源免費的log資訊收集軟體,支援超過125個系統的log資訊收集。其架構圖


Fluentd可以分為用戶端和服務端兩種模組。用戶端為安裝在被採集系統中的程式,用於讀取log檔案等資訊,並發送到Fluentd的服務端。服務端則是一個收集器。在Fluentd服務端,我們可以進行相應的配置,使其可以對收集到的資料進行過濾和處理,並最終路由到下一跳。下一跳可以是用於儲存的資料庫,如MongoDB, Amazon S3, 也可以是其他的資料處理平台,比如Hadoop。

1. install & 啟動

由於Fluentd的安裝較為麻煩,所以業界流行的穩定安裝版本其實是有Treasure Data公司提供的td-agent

curl-Lhttps://toolbelt.treasuredata.com/sh/install-ubuntu-trusty-td-agent2.sh|sh

通過start, stop, restart等命令可以啟動、關閉和重啟Fluentd服務。此時預設的Fluentd設定檔的目錄是/etc/td-agent/td-agent.conf檔案。

2. Post Sample Logs via HTTP

預設情況下,/etc/td-agent/td-agent.conf檔案已經對td-agent進行了基本的配置。可以接收通過HTTP Post的資料,並將其路由、寫入到/var/log/td-agent/td-agent.log中。

可嘗試通過以下curl命令來嘗試post資料。

$curl-XPOST-d'json={"json":"message"}'http://localhost:8888/debug.test

執行之後,可在輸出log的最後一行找到我們輸入的測試資料。

3. Syntax of Config

在Fluentd中,設定檔非常重要,它定義了Fluentd應該執行的操作。

開啟/etc/td-agent/td-agent.conf檔案,可以看到設定檔的具體內容。設定檔中基本會出現的配置分為以下幾種:

source: 定義輸入

match:定義輸出的目標,如寫入檔案,或者發送到指定地點。

filter:過濾,也即事件處理流水線,可在輸入和輸出之間運行。

system:系統層級的設定。

label:定義一組操作,從而實現複用和內部路由。

@include:引入其他檔案,和Java、python的import類似。

1)source: 定義輸入

Fluentd支援多輸入。每一個輸入配置必須包含類型/type,比如tcp資料輸入,或者http類型輸入。type將指定使用的input plugin。以下的樣本中就定義了兩個輸入源,一個是從24224連接埠進入的tcp資料流,另一個是從9880連接埠進入的http資料。

# Receive events from 24224/tcp# This is used by log forwarding and the fluent-cat command@type forward  port 24224#http://this.host:9880/myapp.access?json={"event":"data"}@type http  port 9880

Source指定的input外掛程式將帶有{tag, time,record} 三個屬性的事件/event提交給Fluentd的引擎,完成資料的輸入。

2)match:定義輸出的目標,如寫入檔案,或者發送到指定地點

Match配置了資料流的匹配規則和匹配成功後所需執行的動作,和路由表項類似。比如以下的配置中就對匹配myapp.access標籤成功的資料包執行file類型動作,將資料寫入到路徑為/var/log/fluent/access的檔案中。

# Match events tagged with "myapp.access" and# store them to /var/log/fluent/access.%Y-%m-%d# Of course, you can control how you partition your data# with the time_slice_format option.@type file  path /var/log/fluent/access

標準的動作有file和forward等。File表明寫入檔案,而forward表明轉寄到下一跳。

Match Pattern的設計與正常的正則匹配沒有區別,具體的分類如下:

*:匹配tag的某一部分,比如a.*可以匹配a.b,但a.b.c無法匹配成功。**:匹配0個或者多個tag部分。比如a.**可以匹配a.b,a.b.c{X,Y,Z}:匹配X,Y,orZ,或關係。

此外,他們還可以混用,比如a.{b,c,d}.*等等。當標籤內,有多個匹配模式時,將支援或邏輯的匹配,即只要匹配成功人一個都執行對應的操作。比如:

匹配a和b.匹配a,a.b,a.b.c

3)Logging

Fluentd支援兩種類型的logging 配置,一種是 global 全域的,另一種是針對外掛程式的Plugin。

支援的log的輸出層級有如下幾種:

fatal error warn info debug trace

4)Fluentd有5種類型的外掛程式,分別是:

Input:完成輸入資料的讀取,由source部分配置

Parser:解析外掛程式

Output:完成輸出資料的操作,由match部分配置

Formatter:訊息格式化的外掛程式,屬於filter類型

Buffer:快取區外掛程式,用於快取資料

每一個類型都包含著多種的外掛程式,比如input類型就包含了以下幾種外掛程式:

in_forward   in_http   in_tail   in_exec  in_syslog  in_scribe

5)Route

Route指的是資料在Fluentd中的處理流水線,一般的流程為

input -> filter -> output

input -> filter -> output with label

即由輸入外掛程式擷取資料,然後交給filter做處理,然後交給output外掛程式去轉寄。同時,也支援資料包/事件的重新提交,比如修改tag之後重新路由等等。

reroute event by tags

reroute event by record content

reroute event to other label

4. Use case

此處將選擇一個最簡單的使用案例來介紹Fluentd的使用。Fluentd收集Docker的登陸資訊案例。

首先建立一個config file, 用於配置Fluentd的行為,可命名為”in_docker.conf“。

type forward  port 24224  bind 0.0.0.0type stdout

然後儲存檔案。使用以下命令運行Fluentd。

$fluentd-cin_docker.conf

若運行成功則可見輸出資訊如下所示:

$ fluentd -c in_docker.conf2015-09-01 15:07:12 -0600 [info]: reading config file path="in_docker.conf"2015-09-01 15:07:12 -0600 [info]: starting fluentd-0.12.152015-09-01 15:07:12 -0600 [info]: gem 'fluent-plugin-mongo' version '0.7.10'2015-09-01 15:07:12 -0600 [info]: gem 'fluentd' version '0.12.15'2015-09-01 15:07:12 -0600 [info]: adding match pattern="*.*" type="stdout"2015-09-01 15:07:12 -0600 [info]: adding source type="forward"2015-09-01 15:07:12 -0600 [info]: using configuration file:@type forward    port 24224    bind 0.0.0.0@type stdout2015-09-01 15:07:12 -0600 [info]: listening fluent socket on 0.0.0.0:24224

然後啟動docker containner。如果之前沒有安裝過docker engine,請讀者自行安裝。由於docker 本身支援Fluentd收集資訊,所以可以通過啟動命令來啟動Fluentd的client/用戶端。

$dockerrun--log-driver=fluentdubuntuecho"Hello Fluentd!"HelloFluentd!

以上命令中的ubuntu為一個鏡像,如果本地沒有,docker engine會自動下載,並在此鏡像上建立容器。啟動容器後,查看預設的輸出資訊檔:/var/log/td-agent/td-agent.log,可在最後一行查看到輸出的資訊。

總結

Fluentd是一個優秀的log資訊收集的開源免費軟體,目前以支援超過125種系統的log資訊擷取。Fluentd結合其他資料處理平台的使用,可以搭建大資料收集和處理平台,搭建商業化的解決方案。

四、Fluentd & logstash 對比

logstash支援所有主流日誌類型,外掛程式支援最豐富,可以靈活DIY,但效能較差,JVM容易導致記憶體使用量量高。

fluentd支援所有主流日誌類型,外掛程式支援較多,效能表現較好。

參考:

https://www.jianshu.com/p/9c26bd9f6ebd

https://juejin.im/entry/58bad514ac502e006bf70517

http://soft.dog/2015/12/24/beats-basic/

http://www.muzixing.com/tag/fluentd.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.