[toc] ## 介绍 Filebeat是beat家族中的一员,Beats是用于单用途数据托运人的平台。它们以轻量级代理的形式安装,并将来自成百上千台机器的数据发送到Logstash或Elasticsearch。 (画外音:通俗地理解,就是**采集数据**,并**上报**到Logstash或Elasticsearch) Beats对于收集数据非常有用。它们位于你的服务器上,将数据集中在Elasticsearch中,Beats也可以发送到Logstash来进行转换和解析。 为了捕捉(捕获)数据,Elastic提供了各种Beats: ![](https://box.kancloud.cn/9a7b4c80382a84d5b1857b6c0fe466d3_575x266.png) **其中Filebeat就是用于Log files的数据采集。** Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasticsearch或者logstarsh中存放。 以下是filebeat的工作流程:当你开启filebeat程序的时候,它会启动一个或多个探测器(prospectors)去检测你指定的日志目录或文件,对于探测器找出的每一个日志文件,filebeat启动收割进程(harvester),每一个收割进程读取一个日志文件的新内容,并发送这些新的日志数据到处理程序(spooler),处理程序会集合这些事件,最后filebeat会发送集合的数据到你指定的地点。 ![](https://box.kancloud.cn/bdac4e040f708160c6d906f0f700b50a_554x434.png) ## 安装 下载安装:https://www.elastic.co/cn/downloads/beats/filebeat Filebeat can also be installed from our package repositories using apt or yum 这里我们试一下用yum安装 1. Download and install the public signing key: ~~~ sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch ~~~ 2. Create a file with a`.repo`extension (for example,`elastic.repo`) in your`/etc/yum.repos.d/`directory and add the following lines: ~~~ [elastic-6.x] name=Elastic repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md ~~~ Your repository is ready to use. For example, you can install Filebeat by running: ~~~ sudo yum install filebeat ~~~ 3. To configure the Beat to start automatically during boot, run: ~~~ sudo chkconfig --add filebeat ~~~ ## [配置](https://www.cnblogs.com/smile361/p/7688545.html) > `vim /etc/filebeat/filebeat.yml` ### 定义prospectors块 ~~~ filebeat.inputs: - type: log //开启监视,不开不采集 enable: true paths: - /var/log/elkTest/error/*.log # 日志多行合并采集 # 匹配开始标识 multiline.pattern: '^\[' multiline.negate: true multiline.match: after # 为每个项目标识,或者分组,可区分不同格式的日志 # 可以在logstash里边通过这个tags 过滤并格式化自己想要的内容 tags: ["seas-logs"] # 这个文件记录日志读取的位置,如果容器重启,可以从记录的位置开始取日志 registry_file: /usr/share/filebeat/data/registry # 如果是多个的话就定义多个prospector块 - type: log enabled: true paths: - /var/log/*.log # 退出查看 grep "^\s*[^# \t].*$" /etc/filebeat/filebeat.yml ~~~ 在这个例子中,获取在/var/log/\*.log路径下的所有文件作为输入,这就意味着Filebeat将获取/var/log目录下所有以.log结尾的文件。 为了从预定义的子目录级别下抓取所有文件,可以使用以下模式:/var/log/\*/\*.log。这将抓取/var/log的子文件夹下所有的以.log结尾的文件。它不会从/var/log文件夹本身抓取。目前,不可能递归地抓取这个目录下的所有子目录下的所有.log文件。 <br /> ### 输出到Elasticsearch **如果你发送输出目录到Elasticsearch(并且不用Logstash),那么设置IP地址和端口以便能够找到Elasticsearch** ~~~ output.elasticsearch: hosts: ["172.28.3.199:9200"] ~~~ **如果你打算用Kibana仪表盘,可以这样配置Kibana端点** ~~~ setup.kibana: host: "localhost:5601" ~~~ **如果你的Elasticsearch和Kibana配置了安全策略,那么在你启动Filebeat之前需要在配置文件中指定访问凭据。** ~~~ output.elasticsearch: hosts: ["myEShost:9200"] username: "filebeat_internal" password: "{pwd}" setup.kibana: host: "mykibanahost:5601" username: "my_kibana_user" password: "{pwd}" ~~~ ### 在Elasticsearch中加载索引模板 在Elasticsearch中,索引模板用于定义设置和映射,以确定如何分析字段。(画外音:相当于定义索引文档的数据结构,因为要把采集的数据转成标准格式输出) Filebeat包已经安装了推荐的索引模板。如果你接受filebeat.yml中的默认配置,那么Filebeat在成功连接到Elasticsearch以后会自动加载模板。如果模板已经存在,不会覆盖,除非你配置了必须这样做。 通过在Filebeat配置文件中配置模板加载选项,你可以禁用自动模板加载,或者自动加载你自己的模板。 **配置模板加载** 默认情况下,如果Elasticsearch输出是启用的,那么Filebeat会自动加载推荐的模板文件 ——— fields.yml。 * 加载不同的模板 * ~~~ setup.template.name: "your_template_name" setup.template.fields: "path/to/fields.yml" ~~~ 覆盖一个已存在的模板 * ~~~ setup.template.overwrite: true ~~~ 禁用自动加载模板 * ~~~ setup.template.enabled: false ~~~ 修改索引名称 ~~~ # 默认情况下,Filebeat写事件到名为filebeat-6.3.2-yyyy.MM.dd的索引,其中yyyy.MM.dd是事件被索引的日期。为了用一个不同的名字,你可以在Elasticsearch输出中设置index选项。例如: output.elasticsearch.index: "customname-%{[beat.version]}-%{+yyyy.MM.dd}" setup.template.name: "customname" setup.template.pattern: "customname-*" setup.dashboards.index: "customname-*" ~~~ **手动加载模板** ~~~ ./filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]' ~~~ ### 设置Kibana dashboards Filebeat附带了Kibana仪表盘、可视化示例。在你用dashboards之前,你需要创建索引模式,filebeat-\*,并且加载dashboards到Kibana中。为此,你可以运行setup命令或者在filebeat.yml配置文件中配置dashboard加载。 ~~~ ./filebeat setup --dashboards ~~~ ### 输出到Logstash 如果你想使用Logstash对Filebeat收集的数据执行额外的处理,那么你需要将Filebeat配置为使用Logstash。 ~~~ output.logstash: hosts: ["127.0.0.1:5044"] ~~~ ### 参考 ~~~ #=========================== Filebeat inputs ============== filebeat.inputs: - type: log enabled: true paths: - /var/log/*.log #============================== Dashboards =============== setup.dashboards.enabled: false #============================== Kibana ================== setup.kibana: host: "192.168.101.5:5601" #-------------------------- Elasticsearch output --------- output.elasticsearch: hosts: ["localhost:9200"] ~~~ ## 启动 ~~~ # 设置dashboard filebeat setup --dashboards # 启动filebeat filebeat -e -c /etc/filebeat/filebeat.yml -d "publish" # 进es查看索引 GET /_cat/indices?format=json { "health" : "yellow", "status" : "open", "index" : "filebeat-6.7.0-2019.03.29", "uuid" : "UEv8Ryi1RViK76tTP1Wwmw", "pri" : "3", "rep" : "1", "docs.count" : "514", "docs.deleted" : "0", "store.size" : "158.7kb", "pri.store.size" : "158.7kb" } ~~~ 进es查看文档会发现日志被记录在一个 `message `的字段上。其实一般情况下,只有这个字段是需要的,所以要经过`logstash`来中转一下。 ## 参考资料 * [轻量型日志采集器](https://www.elastic.co/cn/products/beats/filebeat)