【Elasticsearch全文搜索引擎實戰】之Filebeat快速入門


0. 背景

用過ELK(Elasticsearch, Logstash, Kibana)的人應該都面臨過同樣的問題,Logstash雖然功能強大:支持許多的input/output plugin、強大的filter功能。但是確內存占用會非常大。還有種情況(我就是orz...),在Logstash 5.2+版本中,input plugin使用Log4j,必須使用filebeat,並且只支持log4j 1.x版本。了解到filebeat已經支持filter和不少的output plugin,果斷轉投fielbeat陣營。

1. 簡介

Filebeat官方介紹是這樣的:

Filebeat is a log data shipper for local files. Installed as an agent on your servers, Filebeat monitors the log directories or specific log files, tails the files, and forwards them either to Elasticsearch or Logstash for indexing.

Here’s how Filebeat works: When you start Filebeat, it starts one or more prospectors that look in the local paths you’ve specified for log files. For each log file that the prospector locates, Filebeat starts a harvester. Each harvester reads a single log file for new content and sends the new log data to libbeat, which aggregates the events and sends the aggregated data to the output that you’ve configured for Filebeat.

翻譯成中文大意就是:
Filebeat是一個日志數據收集工具,在服務器上安裝客戶端后,filebeat會監控日志目錄或者指定的日志文件,追蹤讀取這些文件(追蹤文件的變化,不停的讀),並且轉發這些信息到elasticsearch或者logstarsh中存放。

以下是filebeat的工作流程:當你開啟filebeat程序的時候,它會啟動一個或多個探測器(prospectors)去檢測你指定的日志目錄或文件,對於探測器找出的每一個日志文件,filebeat啟動收割進程(harvester),每一個收割進程讀取一個日志文件的新內容,並發送這些新的日志數據到處理程序(spooler),處理程序會集合這些事件,最后filebeat會發送集合的數據到你指定的地點。

Filebeat工作流程

更關於探測器(prospectors)和收割進程(harvester)信息,請查看官網How Filebeat works.

1.2 核心功能

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

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

1.2.2 Filebeat 不會讓通道過載

考慮到數據量較大,Filebeat 使用壓力敏感協議向 Logstash 或 Elasticsearch 發送數據。如果 Logstash 正在繁忙地處理數據,它會告知 Filebeat 減慢讀取速度。擁塞解決后,Filebeat 將恢復初始速度並繼續輸送數據。

1.2.3 不需要重載管道

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

image

1.2.4 輸送至 Elasticsearch 或 Logstash。在 Kibana 中實現可視化。

Filebeat 是 Elastic Stack 的一部分,因此能夠與 Logstash、Elasticsearch 和 Kibana 無縫協作。無論您要使用 Logstash 轉換或充實日志和文件,還是在 Elasticsearch 中隨意處理一些數據分析,亦或在 Kibana 中構建和分享儀表板,Filebeat 都能輕松地將您的數據發送至最關鍵的地方。

2. 性能

運行環境:

OS 內存 CPU Filebeat版本 Logstash版本
CentOS 32g 6核Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz 6.1 5.6.5
  • Logstash內存占用
[root@dde /]# cat  /proc/20085/status  /proc/20085/status |  grep -i vm
VmPeak:	 9837428 kB
VmSize:	 9835376 kB
VmLck:	       0 kB
VmHWM:	  798364 kB
VmRSS:	  798360 kB
VmData:	 9677292 kB
VmStk:	      88 kB
VmExe:	       4 kB
VmLib:	   16520 kB
VmPTE:	    2568 kB
VmSwap:	       0 kB
VmPeak:	 9837428 kB
VmSize:	 9835376 kB
VmLck:	       0 kB
VmHWM:	  798364 kB
VmRSS:	  798360 kB
VmData:	 9677292 kB
VmStk:	      88 kB
VmExe:	       4 kB
VmLib:	   16520 kB
VmPTE:	    2568 kB
VmSwap:	       0 kB
  • Filebeat內存占用
[root@dde /]# cat  /proc/22207/status  /proc/22207/status |  grep -i vm
VmPeak:	  452796 kB
VmSize:	  410180 kB
VmLck:	       0 kB
VmHWM:	   16008 kB
VmRSS:	   16008 kB
VmData:	  376332 kB
VmStk:	      88 kB
VmExe:	   24764 kB
VmLib:	    1804 kB
VmPTE:	     184 kB
VmSwap:	       0 kB
VmPeak:	  452796 kB
VmSize:	  410180 kB
VmLck:	       0 kB
VmHWM:	   16008 kB
VmRSS:	   16008 kB
VmData:	  376332 kB
VmStk:	      88 kB
VmExe:	   24764 kB
VmLib:	    1804 kB
VmPTE:	     184 kB
VmSwap:	       0 kB

Logstash因為是運行是JVM中的,可以看到Logstash內存占用比Filebeat大的多。

3. 安裝

Filebeat官方提供了以下幾種安裝方式: (deb for Debian/Ubuntu, rpm for Redhat/Centos/Fedora, mac for OS X, docker for any Docker platform, and win for Windows).

  • deb:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.1.2-amd64.deb
sudo dpkg -i filebeat-6.1.2-amd64.deb
  • rpm:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.1.2-x86_64.rpm
sudo rpm -vi filebeat-6.1.2-x86_64.rpm
  • mac
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.1.2-darwin-x86_64.tar.gz
tar xzvf filebeat-6.1.2-darwin-x86_64.tar.gz
  • docker:
docker pull docker.elastic.co/beats/filebeat:6.1.2
  • windows:
    1.下載zip包,地址
    2.解壓到:C:\Program Files
    3.重命名文件夾為以下格式:filebeat-<version>-windows
    4.以管理員身份運行Shell。
    5.使用如下命令,講Filebeat安裝為一個Windows Service:
PS > cd 'C:\Program Files\Filebeat'
PS C:\Program Files\Filebeat> .\install-service-filebeat.ps1

4. 配置

Elastic提供了一個配合ELK(Elasticsearch + Logstash + Kibana)的快速配置方式,不過我們不需要配合ELK使用Filebeat。直接配置filebeat根目錄下filebeat.yml文件:

filebeat.prospectors:
- type: log
  enabled: true
  paths:
    - /var/log/*.log
    #- c:\programdata\elasticsearch\logs\*

需要配合elasticsearch使用時,增加以下配置:

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

需要配合kibana使用時,增加以下配置:

setup.kibana:
  host: "localhost:5601"
  1. Output
    Filebeat現在已經支持豐富的output類型:
  • Elasticsearch
  • Logstash
  • Kafka
  • Redis
  • File
  • Console
  • Output codec
  • Cloud

output到kafka的配置類似:

output.kafka:
  # initial brokers for reading cluster metadata
  hosts: ["kafka1:9092", "kafka2:9092", "kafka3:9092"]

  # message topic selection + partitioning
  topic: '%{[fields.log_topic]}'
  partition.round_robin:
    reachable_only: false

  required_acks: 1
  compression: gzip
  max_message_bytes: 1000000

當事件的大小超過max_message_bytes的值的時候,會被直接丟棄不處理,所以要盡量控制filebeat產生的事件小於max_message_bytes的值。

上面示例中字段含義如下:
enable: 該output是否生效;
hosts:kafka broker集群地址;
topic: kafka接收事件的topic;
partition: kafka output的partioning 策略,可能值為:random, round_robin, hash。默認為hash;官方關於這幾個可選值解釋如下:

random.group_events:
Sets the number of events to be published to the same partition, before the partitioner selects a new partition by random. The default value is 1 meaning after each event a new partition is picked randomly.

round_robin.group_events:
Sets the number of events to be published to the same partition, before the partitioner selects the next partition. The default value is 1 meaning after each event the next partition will be selected.

hash.hash:
List of fields used to compute the partitioning hash value from. If no field is configured, the events key value will be used.

hash.random:
Randomly distribute events if no hash or key value can be computed.

required_acks: kafka broker ACK可靠級別: 0=不需要響應, 1=等待本地commit, -1=等待所有的 replicascommit. 默認值為 1.

Note: 如果設置為0,kafka將沒有ACK返回,也許會有消息丟失或者錯誤。

5.運行

sudo ./filebeat -e -c filebeat.yml

Filebeat目前已經支持Docker和Kubernetes。

5.1 Docker

(1)pull image

docker pull docker.elastic.co/beats/filebeat:6.1.2

(2) run image

docker run \
  -v ~/filebeat.yml:/usr/share/filebeat/filebeat.yml \
  docker.elastic.co/beats/filebeat:6.1.2

(3) Configuration

FROM docker.elastic.co/beats/filebeat:6.1.2
COPY filebeat.yml /usr/share/filebeat/filebeat.yml
USER root
RUN chown filebeat /usr/share/filebeat/filebeat.yml
USER filebeat

5.2 Kubernetes

(1)Deploy manifests

curl -L -O https://raw.githubusercontent.com/elastic/beats/6.1/deploy/kubernetes/filebeat-kubernetes.yaml

(2)Setting

- name: ELASTICSEARCH_HOST
  value: elasticsearch
- name: ELASTICSEARCH_PORT
  value: "9200"
- name: ELASTICSEARCH_USERNAME
  value: elastic
- name: ELASTICSEARCH_PASSWORD
  value: changeme

(3)Deploy

kubectl create -f filebeat-kubernetes.yaml

check status

$ kubectl --namespace=kube-system get ds/filebeat

NAME       DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE-SELECTOR   AGE
filebeat   32        32        0         32           0           <none>          1m

6. 參考資料

Elastic Filebeat Reference


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM