docker-部署filebeat
前⾔
filebeat是⼀个轻量级的⽇志收集⼯具,相⽐logstash,功能更加单⼀,但是占⽤的资源较⼩,下⾯介绍如何使⽤docker来部署filebeat。更多信息请参考。
拉取镜像
docker pull /beats/filebeat:7.9.2
运⾏Filebeat设置
运⾏Filebeat设置命令将创建索引模式和负载可视化,指⽰板和机器学习⼯作。运⾏这个命令:
docker run \
/beats/filebeat:7.9.2 \
setup -E setup.kibana.host=kibana:5601 \
-E output.elasticsearch.hosts=["elasticsearch:9200"]
在Docker上配置Filebeat
Docker映像提供了⼏种配置Filebeat的⽅法。传统的⽅法是通过卷挂载提供配置⽂件,但也可以创建包含配置的⾃定义映像。
⽰例配置⽂件
docker重启容器命令
下载此⽰例配置⽂件作为起点:
curl -L -O raw.githubusercontent/elastic/beats/7.9/deploy/docker/l
Volume-mounted配置
在Docker上配置Filebeat的⼀种⽅法是提供l通过卷挂载。在docker run时,可以这样指定卷挂载。
docker run -d \
--name=filebeat \
--user=root \
--volume="$(pwd)/l:/usr/share/l:ro" \
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
--volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
/beats/filebeat:7.9.2 filebeat -e -strict.perms=false \
-E output.elasticsearch.hosts=["elasticsearch:9200"]
为了防⽌docker重启后,filebeat的传递状态(每个⽂件写了多少,写到哪⾥)不丢失,需要把镜像的数据⽬录
(/usr/share/filebeat/data)挂载到宿主机,更多⽬录布局信息请参考。(貌似还是不⾏)
定制配置
前⾯下载的l⽂件被配置为基于应⽤于容器的Docker标签部署Beats模块。有关更多细节,请参见基于提⽰的⾃动发现。在应⽤Docker容器中添加标签,当部署时,Beats⾃动发现特性将提取标签。下⾯是⼀个Apache HTTP服务器容器的命令⽰例,该容器带有⽤于配置Apache HTTP服务器的Filebeat和Metricbeat模块的标签:
docker run \
--label co.elastic.logs/module=apache2 \
--label co.elastic.logs/fileset.stdout=access \
--label co.elastic.logs/fileset.stderr=error \
--label ics/module=apache \
--label ics/metricsets=status \
--label ics/hosts='${data.host}:${data.port}' \
--detach=true \
--name my-apache-app \
-p 8080:80 \
httpd:2.4
⾃定义镜像配置
可以在⾃定义镜像中嵌⼊Filebeat配置。这⾥有⼀个例⼦Dockerfile来达到这个⽬的(不⽤操⼼⽂件权限问题):
FROM /beats/filebeat:7.9.2
l /usr/share/l
USER root
RUN chown root:filebeat /usr/share/l
USER filebeat
filebeat⼯作原理
Filebeat是⽤于转发和集中⽇志数据的轻量级传送器。Filebeat作为代理安装在服务器上,它监视您指定的⽇志⽂件或位置,收集⽇志事件,并将它们转发到Elasticsearch或Logstash进⾏索引。
以下是Filebeat的⼯作原理:当您启动Filebeat时,它将启动⼀个或多个查您为⽇志数据指定的位置
的输⼊。对于Filebeat所定位的每个⽇志,Filebeat将启动⼀个收割机。每个收割机读取新内容的单个⽇志,并将新的⽇志数据发送到libbeat,后者聚合事件并将聚合的数据发送到为Filebeat配置的输出。
Filebeat由两个主要组件组成:输⼊和收割机。这些组件⼀起⼯作来跟踪⽂件并将事件数据发送到您指定的输出。
什么是收割机?
收割机负责读取单个⽂件的内容。收割机逐⾏读取每个⽂件,并将内容发送到输出。为每个⽂件启动⼀台收割机。收割机负责打开和关闭⽂件,这意味着在收割机运⾏时,⽂件描述符保持打开状态。如果在收集⽂件时删除或重命名⽂件,Filebeat将继续读取该⽂件。这样做的副作⽤是,磁盘上的空间⼀直保留到收割机关闭。默认情况下,Filebeat保持⽂件打开,直到达到close_inactive。
关闭⼀个收割机具有以下后果:
⽂件处理程序关闭,如果⽂件在收割机仍在读取⽂件时被删除,则释放底层资源。
只有在scan_frequency结束之后,才会再次启动⽂件的收集。
如果该⽂件在收割机关闭时被移动或删除,该⽂件的收集将不会继续。
要控制收割机何时关闭,使⽤close_*配置选项。
什么是输⼊?
⼀个输⼊负责管理收割机和寻所有来源读取。
如果输⼊类型是log,则输⼊将查驱动器上与定义的glob路径匹配的所有⽂件,并为每个⽂件启动⼀个收割机。每个输⼊在它⾃⼰的Go例程中运⾏。
下⾯的⽰例将Filebeat配置为从所有与指定的glob模式匹配的⽇志⽂件中获取⾏:
filebeat.inputs:
- type: log
paths:
-/var/log/*.log
- /var/path2/*.log
Filebeat⽬前⽀持。每个输⼊类型都可以定义多次。⽇志输⼊检查每个⽂件,以查看是否需要启动收割机、收割机是否已经在运⾏,或者是否可以忽略该⽂件(参见)。只有在关闭收割机后⽂件⼤⼩发⽣变化时才会拾取新⾏。
Filebeat如何保存⽂件的状态?
Filebeat保存每个⽂件的状态,并经常将该状态刷新到注册表⽂件中的磁盘。该状态⽤于记住收割机读取的最后⼀个偏移量,并确保发送了所有⽇志线。如果不能访问Elasticsearch或Logstash等输出,Filebeat将跟踪最后发送的⾏,并在输出再次可⽤时继续读取⽂件。当Filebeat运⾏时,每个输⼊的状态信息也保存在内存中。当重新启动Filebeat时,将使⽤来⾃注册表⽂件的数据重新构建状态,Filebeat将在最后已知的位置继续每个收割机。
对于每个输⼊,Filebeat保存它到的每个⽂件的状态。因为⽂件可以重命名或移动,所以⽂件名和路径不⾜以识别⽂件。对于每个⽂
件,Filebeat存储唯⼀标识符,以检测之前是否收集了⽂件。
如果您的⽤例每天都要创建⼤量的新⽂件,那么您可能会发现注册表⽂件变得太⼤了。有关可设置以解决此问题的配置选项的详细信息,请参阅“”。
Filebeat如何确保最少⼀次传递?
Filebeat保证事件将⾄少⼀次传递到配置的输出,并且不会丢失数据。Filebeat能够实现此⾏为,因为它将每个事件的传递状态存储在注册表⽂件中。
在定义的输出被阻塞且没有确认所有事件的情况下,Filebeat将继续尝试发送事件,直到输出确认已接收到事件为⽌。
如果Filebeat在发送事件的过程中关闭,它在关闭之前不会等待输出确认所有事件。当重新启动Filebeat时,将再次发送发送到输出中但在Filebeat关闭前未确认的任何事件。这可以确保每个事件⾄少发送⼀次,但最终可能会将重复的事件发送到输出。通过设置
shutdown_timeout选项,可以配置Filebeat在关闭之前等待特定的时间。
Filebeat的⾄少⼀次传递保证有⼀个限制,涉及到⽇志旋转和旧⽂件的删除。如果⽇志⽂件被写⼊磁盘并旋转的速度⽐Filebeat处理它们的速度快,或者在输出不可⽤时删除了⽂件,那么数据可能会丢失。在Linux上,由于inode重⽤,Filebeat也可以跳过⾏。有关inode重⽤问题的详细信息,请参阅。
filebeat配置
完整的配置选项,请参考。
读取⽇志⽂件并发送到es
最简单的⼀个例⼦是读取⽇志⽂件并发送到elasticsearch:
filebeat.inputs:
- type: log
paths:
-/usr/share/filebeat/logs/level0.json
output.elasticsearch:
hosts:["elasticsearch:9200"]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。