【Elasticsearch全文搜索引擎實戰(zhàn)】Filebeat 快速入門

0. 背景

用過ELK(Elasticsearch, Logstash, Kibana)的人應(yīng)該都面臨過同樣的問題抡蛙,Logstash雖然功能強(qiáng)大:支持許多的input/output plugin、強(qiáng)大的filter功能焕蹄。但是確內(nèi)存占用會非常大。還有種情況(我就是orz...)弦叶,在Logstash 5.2+版本中舍败,input plugin使用Log4j,必須使用filebeat婿滓,并且只支持log4j 1.x版本。了解到filebeat已經(jīng)支持filter和不少的output plugin粥喜,果斷轉(zhuǎn)投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是一個日志數(shù)據(jù)收集工具,在服務(wù)器上安裝客戶端后额湘,filebeat會監(jiān)控日志目錄或者指定的日志文件卿吐,追蹤讀取這些文件(追蹤文件的變化,不停的讀)锋华,并且轉(zhuǎn)發(fā)這些信息到elasticsearch或者logstarsh中存放嗡官。

以下是filebeat的工作流程:當(dāng)你開啟filebeat程序的時候,它會啟動一個或多個探測器(prospectors)去檢測你指定的日志目錄或文件毯焕,對于探測器找出的每一個日志文件衍腥,filebeat啟動收割進(jìn)程(harvester),每一個收割進(jìn)程讀取一個日志文件的新內(nèi)容芥丧,并發(fā)送這些新的日志數(shù)據(jù)到處理程序(spooler)紧阔,處理程序會集合這些事件坊罢,最后filebeat會發(fā)送集合的數(shù)據(jù)到你指定的地點续担。

Filebeat工作流程

更關(guān)于探測器(prospectors)和收割進(jìn)程(harvester)信息,請查看官網(wǎng)How Filebeat works.

1.2 核心功能

1.2.1 性能穩(wěn)健活孩,不錯過任何檢測信號

無論在任何環(huán)境中物遇,隨時都潛伏著應(yīng)用程序中斷的風(fēng)險。Filebeat 能夠讀取并轉(zhuǎn)發(fā)日志行憾儒,如果出現(xiàn)中斷询兴,還會在一切恢復(fù)正常后,從中斷前停止的位置繼續(xù)開始起趾。

1.2.2 Filebeat 不會讓通道過載

考慮到數(shù)據(jù)量較大诗舰,F(xiàn)ilebeat 使用壓力敏感協(xié)議向 Logstash 或 Elasticsearch 發(fā)送數(shù)據(jù)。如果 Logstash 正在繁忙地處理數(shù)據(jù)训裆,它會告知 Filebeat 減慢讀取速度眶根。擁塞解決后蜀铲,F(xiàn)ilebeat 將恢復(fù)初始速度并繼續(xù)輸送數(shù)據(jù)。

1.2.3 不需要重載管道

當(dāng)將數(shù)據(jù)發(fā)送到 Logstash 或 Elasticsearch 時属百,F(xiàn)ilebeat 使用背壓敏感協(xié)議记劝,以考慮更多的數(shù)據(jù)量。如果 Logstash 正在忙于處理數(shù)據(jù)族扰,則可以讓 Filebeat 知道減慢讀取速度厌丑。一旦擁堵得到解決,F(xiàn)ilebeat 就會恢復(fù)到原來的步伐并繼續(xù)運(yùn)行渔呵。

不需要重載管道

1.2.4 輸送至 Elasticsearch 或 Logstash怒竿。在 Kibana 中實現(xiàn)可視化。

Filebeat 是 Elastic Stack 的一部分扩氢,因此能夠與 Logstash愧口、Elasticsearch 和 Kibana 無縫協(xié)作。無論您要使用 Logstash 轉(zhuǎn)換或充實日志和文件类茂,還是在 Elasticsearch 中隨意處理一些數(shù)據(jù)分析耍属,亦或在 Kibana 中構(gòu)建和分享儀表板,F(xiàn)ilebeat 都能輕松地將您的數(shù)據(jù)發(fā)送至最關(guān)鍵的地方巩检。

2. 性能

運(yùn)行環(huán)境:

OS 內(nèi)存 CPU Filebeat版本 Logstash版本
CentOS 32g 6核Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz 6.1 5.6.5
  • Logstash內(nèi)存占用
[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內(nèi)存占用
[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因為是運(yùn)行是JVM中的厚骗,可以看到Logstash內(nèi)存占用比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.以管理員身份運(yùn)行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現(xiàn)在已經(jīng)支持豐富的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

當(dāng)事件的大小超過max_message_bytes的值的時候民轴,會被直接丟棄不處理,所以要盡量控制filebeat產(chǎn)生的事件小于max_message_bytes的值球订。

上面示例中字段含義如下:
enable: 該output是否生效后裸;
hosts:kafka broker集群地址;
topic: kafka接收事件的topic;
partition: kafka output的partioning 策略冒滩,可能值為:random, round_robin, hash微驶。默認(rèn)為hash;官方關(guān)于這幾個可選值解釋如下:

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=不需要響應(yīng), 1=等待本地commit, -1=等待所有的 replicascommit. 默認(rèn)值為 1.

Note: 如果設(shè)置為0开睡,kafka將沒有ACK返回因苹,也許會有消息丟失或者錯誤较店。

5.運(yùn)行

sudo ./filebeat -e -c filebeat.yml

Filebeat目前已經(jīng)支持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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末容燕,一起剝皮案震驚了整個濱河市梁呈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蘸秘,老刑警劉巖官卡,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異醋虏,居然都是意外死亡寻咒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門颈嚼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毛秘,“玉大人,你說我怎么就攤上這事阻课〗行” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵限煞,是天一觀的道長抹恳。 經(jīng)常有香客問我,道長署驻,這世上最難降的妖魔是什么奋献? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮旺上,結(jié)果婚禮上瓶蚂,老公的妹妹穿的比我還像新娘。我一直安慰自己宣吱,他們只是感情好窃这,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凌节,像睡著了一般钦听。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上倍奢,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音垒棋,去河邊找鬼卒煞。 笑死,一個胖子當(dāng)著我的面吹牛叼架,可吹牛的內(nèi)容都是我干的畔裕。 我是一名探鬼主播衣撬,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼扮饶!你這毒婦竟也來了具练?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤甜无,失蹤者是張志新(化名)和其女友劉穎扛点,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岂丘,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陵究,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了奥帘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铜邮。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖寨蹋,靈堂內(nèi)的尸體忽然破棺而出松蒜,到底是詐尸還是另有隱情,我是刑警寧澤已旧,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布牍鞠,位于F島的核電站,受9級特大地震影響评姨,放射性物質(zhì)發(fā)生泄漏难述。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一吐句、第九天 我趴在偏房一處隱蔽的房頂上張望胁后。 院中可真熱鬧,春花似錦嗦枢、人聲如沸攀芯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侣诺。三九已至,卻和暖如春氧秘,著一層夾襖步出監(jiān)牢的瞬間年鸳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工丸相, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留搔确,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像膳算,于是被迫代替她去往敵國和親座硕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容