前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Elasticsearch全文搜索引擎实战】之Filebeat快速入门

【Elasticsearch全文搜索引擎实战】之Filebeat快速入门

作者头像
mantou
发布于 2019-02-13 08:58:10
发布于 2019-02-13 08:58:10
96600
代码可运行
举报
文章被收录于专栏:mantou大数据mantou大数据
运行总次数:0
代码可运行

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会发送集合的数据到你指定的地点。

更关于探测器(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 就会恢复到原来的步伐并继续运行。

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内存占用
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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内存占用
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
filebeat.prospectors:
- type: log
  enabled: true
  paths:
    - /var/log/*.log
    #- c:\programdata\elasticsearch\logs\*

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
output.elasticsearch:
  hosts: ["192.168.1.42:9200"]

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setup.kibana:
  host: "localhost:5601"
  1. Output Filebeat现在已经支持丰富的output类型:
  • Elasticsearch
  • Logstash
  • Kafka
  • Redis
  • File
  • Console
  • Output codec
  • Cloud

output到kafka的配置类似:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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.运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo ./filebeat -e -c filebeat.yml

Filebeat目前已经支持Docker和Kubernetes

5.1 Docker

(1)pull image

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker pull docker.elastic.co/beats/filebeat:6.1.2

(2) run image

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run \
  -v ~/filebeat.yml:/usr/share/filebeat/filebeat.yml \
  docker.elastic.co/beats/filebeat:6.1.2

(3) Configuration

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -L -O https://raw.githubusercontent.com/elastic/beats/6.1/deploy/kubernetes/filebeat-kubernetes.yaml

(2)Setting

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- name: ELASTICSEARCH_HOST
  value: elasticsearch
- name: ELASTICSEARCH_PORT
  value: "9200"
- name: ELASTICSEARCH_USERNAME
  value: elastic
- name: ELASTICSEARCH_PASSWORD
  value: changeme

(3)Deploy

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl create -f filebeat-kubernetes.yaml

check status

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-01-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
为什么培训班出来的程序员总遭人嫌弃?
由于it软件行业对人才的需求很大,很多传统行业也纷纷创办“互联网+”项目,加上app开发热潮,微信公众平台也催生了更多的就业岗位。
开发者技术前线
2020/11/24
4260
为什么培训班出来的程序员总遭人嫌弃?
​我想转行程序员,请鼓励一下我
是否能转行成功,最主要的取决因素是技术能否学到位、能否满足企业的需求,其余有关专业、年龄、工作经验、城市也是考量因素,但不是最重要的。
程序员晚枫
2022/07/11
3480
​我想转行程序员,请鼓励一下我
培训班出身的前端,出路在哪儿
前段时间,有个郑州的朋友在微信上给我留言,咨询培训班毕业找工作的事情。我当时答应他会写一篇文章的,没想到耽搁到现在。
闰土大叔
2019/05/05
9700
我花一个月时间整理了新人转行IT最爱问都问题
我不能一一全部解答,我收集了比较有代表性都问题,如果你也是准备转行程序员的人,相信你也会纠结同样的问题。
王炸
2019/07/02
1.1K0
前端,该自学还是培训?
前端从业久了,经常会碰到很多同学问土哥,“学web前端是自学好还是去培训机构,哪个靠谱?” 类似的问题应接不暇,包括前段时间逛知乎,关于这个话题的热度,还是居高不下。
闰土大叔
2019/05/05
7480
前端,该自学还是培训?
转行程序员4年半,被裁了!
自己又几乎没有计算机基础,所以就在毕业之前,报了一个编程培训班,当时学的是大数据方向。
程序员晚枫
2023/12/17
2640
转行程序员4年半,被裁了!
人工智能火,AI培训班有存在的必要吗?
"被称为“业界良心”吴恩达在 Coursera 的免费机器学习课程,学员数目有超过两百万;而最近国内某人工智能教育平台创始人也在微博宣称其培训平台已经吸引到将近十万的付费学员。各种培训班名目众多,堪称 IT 业界一大奇象。我们在 AI 前线的社群里也经常见到这样的问题:想入门 AI,你们能推荐下培训班么?其实关于“培训班”、“如何转型 AI“、”AI 如何速成“,最有发言权的应该是用人单位和技术专家”。 Part1:一万元学费换几万元月工资? 众所周知,人工智能火爆了一整个 2017 年,将来极有可能要
机器人网
2018/04/18
3.9K0
人工智能火,AI培训班有存在的必要吗?
过来人对迷茫的程序员一点建议,3种学习方式的优缺点
很多朋友都想入行编程,也许是因为好就业,也许是因为工资高,或许是因为其他原因。是因为爱吗?很多人都是从入门到放弃,还有很多小伙伴走了弯路,那么今天老哥就来讲讲各种学习方式的优缺点,还有一些建议。
公众号 IT老哥
2020/09/16
6620
程序员的自我修养4️⃣—学习方向和方法
在之前信息采集中很多小伙伴提及到的问题是,怎么快速学习,找不到方向、动力,怎么才能达到公司的招聘标准。
马拉松程序员
2022/04/26
3980
程序员的自我修养4️⃣—学习方向和方法
​大专学历转行程序员,先去专升本还是先参加工作?
如果是20岁左右,还没毕业的在校学生,优先考虑专升本、甚至未来继续考研。想在程序员行业有良好的、长远的发展,学历不是最核心的因素,但能给普通人带来许多帮助。
程序员晚枫
2022/12/30
2700
学习java编程快速入门
  如今的Java编程语言势头非常火爆,应用范围非常的广泛,已经是当下最火的行业之一,竞争力也是逐渐的增加,工资待遇非常丰厚,未来的发展也是极好的。
动力节点Java培训
2019/05/31
6430
培训班学出来的前端为啥被歧视?
现在前端巨火,大火,SO,很多培训机构冒了出来,什么传智啊,北大青岛啊,达内啊,,这那的,他们也在搞培训,许多刚毕业啊,想转行的人都去参加,学个三个月或半年,就基本上掌握了前端开发的“技能”了,然后就看运气,毕竟行业需求在这呢,基本上只要肯下功夫找,早晚都能找到工作,当然也有许多人确实找不到工作,为什么呢,,因为找工作四处碰壁确实是很痛苦的,一般人受不了这个,就拉倒了,就没有然后了。 并且网上啊,很多公司啊,事实上确实是不愿意要培训机构出来的学生,那这是为什么呢? 因为培训这个东西,不过是学会某种技能的过程
web前端教室
2018/02/06
6670
程序员的自我修养1️⃣—核心价值观
这个主题是因为很多的小伙伴让我给推荐个培训班,还要问28岁能不能转行的问题。重点是有粉丝说自己报了2w多的培训班感觉啥都没学到,被忽悠了。
马拉松程序员
2022/04/26
5150
关于IT培训机构的个人看法
缘分与巧合,最近接触比较多的培训机构出来的人,以及看过关于培训机构的文章和问答。虽然没在培训机构上过课,但是接触过很多培训机构出来的人,也看过一些培训机构的课程。关于培训机构,我也有自己的看法。经历了这些,我写了这篇文章,不吹不黑的写下我对培训机构的个人见解。这篇文章可能会有些争议,如果有不同的看法,大家可以评论,但是发言望大家理性,客观,不要人身攻击!
守候i
2018/08/22
1K1
关于IT培训机构的个人看法
行政妹子也要学前端?我劝你不要掉坑里
首先,跟各位说声抱歉,由于最近关注我的同学越来越多(不管是在校生、应届生、实习生,还是已经工作的同学),私信我的朋友也逐渐变得多了起来,一天下来,微信未读列表里能有十几个是来咨询土哥问题的,有的留言由于一些原因,没能及时回复,在这里土哥说声抱歉,还望见谅。
闰土大叔
2018/12/29
1.9K0
想好这些问题,你再去当程序员好吗?
2020年的春招已经持续了4个多月,小E也一直陪伴着学员改简历、写自我介绍和训练笔试和复盘面试,看着他们努力的找工作,成为一个新鲜的程序员。 如今春招也接近尾声,学员们经过自己的努力,以及我这个老程序员(老脸一红)的指导,也依次找到了自己心仪的工作,以下是我和学员们说过至少一次的建议,希望可以帮到即将成为新程序员的你。 我把建议分成三个类别: 1. 如何选择行业及职业:你真的想做程序员吗? 2. 如何从事程序员这份工作:为了找到心仪的工作,你应该如何去做? 3. 如何选择心仪的公司:这么多人一起竞争
腾讯NEXT学位
2020/05/12
1.6K0
转行程序员花几万元学编程,面试几十家无果,程序员:留条活路行吗
互联网红利时代,激发了越来越多的人投身其中就业与创业,其中程序员这一职业也被推上了高薪职业风口。除了科班毕业的程序员,也有不少传统行业从业者转行进入互联网行业,这些半路转行的有的会通过自学,有的则会通过花钱上培训班达到速成的效果。然而俗话说转行穷三年不是没有道理的,毕竟从事一个全新的岗位是需要从头积累经验的,对于公司招聘员工来说需要的有经验的。
一墨编程学习
2019/04/18
5470
转行程序员花几万元学编程,面试几十家无果,程序员:留条活路行吗
晚上自学java两个月能找工作吗?
如果只是靠晚上自学两个月直接找一份java的工作在当前基本上很难,虽然现在java还是就业第一大语言,但入门的门槛明显高了许多,现在看招聘岗位上java几乎占到了很大比例,为什么职位多反而门槛提升了?主要还是从业人数增加特别是每年培训出来大量的初学者,虽然职位很多但职位本身的要求还是挺高,以致于很多培训完了觉得水平应该可以了,结果很多碰壁了,已经不是十几年前懂点编程知识就能找到工作的时代了,记得入行第一家软件公司的时候,边上的有个同事在宿舍自学了一个月的C语言,然后出来找工作,虽然不是很顺利但面试了几次涨了点经验最后还是找到了做软件的公司,这种现象放在当前的编码领域几乎是不可能的事情。
程序员互动联盟
2018/11/30
1.2K0
晚上自学java两个月能找工作吗?
底层程序员,出局
「在深圳,每个人都走得很快。」这是徐亮的体会。第一天搭地铁去IT培训学校,他发现前面的人突然开始疾走,接着小跑起来,所有人都开始跟着一起跑。他被挤在人群中,发现是列车的车门要关闭了。他也开始在站台上冲刺,刚好在启动前把自己塞进车里。还没来得及喘口气,徐亮抬头一看,他其实坐上的是反方向的列车。
养码场
2020/11/02
5830
底层程序员,出局
我的程序员生涯按下了终止键......
2017年我大学毕业,开始下定决心从零基础学前端,到现在已经6年了。我简单聊聊这些年的收获和成长。
半指温柔乐
2023/10/31
1.5K0
我的程序员生涯按下了终止键......
推荐阅读
相关推荐
为什么培训班出来的程序员总遭人嫌弃?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验