【全文检索_10】Filebeat 基本使用

2021-03-02 15:32:54 浏览数 (1)

1.1 简介

1.1.1 概述

  Filebeat 是 Beats 的一员,用于转发和集中日志数据的轻量级传送工具。当面对成百上千、甚至成千上万的服务器、虚拟机和容器生成的日志时,Filebeat 将为您提供一种轻量型方法,监视指定的日志文件或位置,收集日志事件,并将它们转发到 Elasticsearch、 Logstash 等。

1.1.2 工作流程

  Filebeat 涉及两个组件:查找器 prospector 和采集器 harvester,读取文件并将事件数据发送到指定的输出。启动 Filebeat 时,它会启动一个或多个查找器,查看你为日志文件指定的本地路径。Prospector 负责管理 harvester 并找到所有要读取的文件来源。如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为 Filebeat 监视的每个文件启动一个 harvester。当 harvester 读取到一个日志的新内容就发送到 libbeat,聚合起来然后把聚合的数据发送到设置输出的地方。

1.2 Filebeat 命令

1.2.1 基本命令

命令

说明

export

导出配置,索引模板、或者 dashboard 到 output 中

help

显示所有命令的帮助

keystore

管理私有的存储

modules

管理配置的模块

run

运行 Filebeat。如果我们不使用其他的 command 的话,默认执行的就是这个

setup

设置一些初始化的环境,包括索引,kibana的dashboards,机器学习的一些任务

test

测试配置文件是否正确

version

显示当前版本的信息

1.2.2 keystore 的使用

  当我们配置 Filebeat 的时候,我们可能需要设置一些敏感的配置项,如密码。相比依赖于文件系统权限来保护我们这些数据,更适合在配置的时候用 Filebeat 的 keystore 来安全存储这些数据。当我们加入了一个 key 和对应的密码信息到 keystore 后,在设置敏感配置项的时候可以使用 ${KEY} 来替代原来的密码信息。

代码语言:javascript复制
# 创建 keystore
filebeat keystore create

# 添加 key,执行后会让你输入 key 对应的信息
# add KEY 将指定的密钥添加到密钥库
filebeat keystore add ES_PWD
# 使用 --force 标志覆盖现有密钥
filebeat keystore add ES_PWD --force

# 列举所有 key
filebeat keystore list

# 删除 key
filebeat keystore remove ES_PWD
代码语言:javascript复制
# 使用 keystore
output.elasticsearch:
      password: "${ES_PWD}"

1.3 输入

1.3.1 配置

配置

说明

paths

日志加载的路径示例:- /var/log/*/*.log 抓取 /var/log 子目录目录下所有 *.log 文件

encoding

根据输入的文本设置编码示例:utf-8

exclude_lines

不显示符合所配置的规则的行, 空行被忽略。示例:['^DBG'] 过滤 DBG 开头

include_lines

显示符合所配置的规则的行, 空行被忽略 示例:['^ERR', '^WARN'] 导出 ERR 或 WARN 开头

exclude_files

排除的文件示例:['.gz$'] 排除以 gz 结尾的文件

harvester_buffer_size

每个harvester的缓存大小,默认是16384

max_bytes

单个日志消息可以发送的最大字节,默认是10MB

json

json 配置示例:  json.keys_under_root: false key 是否输出到顶级目录   json.add_error_key: false 如果启用此设置, 则当出现 json 解编错误或在配置中定义了文本键但无法使用时, Filebeat 将添加 “error.message” 和 “error.key:json” 键 json.message_key: log 用于应用行筛选和多行设置的JSON键。此键必须是顶级的,其值必须是字符串,否则将忽略它。如果未定义文本键,则不能使用行筛选和多行功能。 json.overwrite_keys: false 若启用此设置,则解码的 JSON 对象中的值将覆盖 Filebeat 通常添加的字段(类型,源,偏移等)以防发生冲突。

multiline

将多行日志合并成一行示例:  multiline.negate: false 包含(true)或排除(false)匹配上的行   multiline.pattern: ^[ 匹配正则  multiline.match: after 合并匹配之后(after)的行

tags

在 Filebeat 输出的每个事件中加入这个 tags 字段使用标签,这样能够被 Kibana 或 Logstash 轻松过滤示例:["json"]

fields

可以向输出添加附加字段,例如可以加入一些字段过滤 log 数据示例:level: debug

1.3.2 paths 的使用

☞ 日志加载路径
代码语言:javascript复制
filebeat.inputs:
- type: log
  paths:
    - /var/log/*.log
☞ 多个输入部分
代码语言:javascript复制
filebeat.inputs:
- type: log  # 从 system.log、wifi.log 两个文件收集
  paths:
    - /var/log/system.log
    - /var/log/wifi.log
- type: log  # 从 apache2 下所有文件收集
  paths:
    - "/var/log/apache2/*"
- type: log  # 抓取 /var/log 子目录目录下所有 *.log 文件,不会从 /var/log 本身目录下的 *.log 文件
  paths:
    - /var/log/*/*.log

1.3.3 收集 Java 多行日志

代码语言:javascript复制
# https://www.elastic.co/guide/en/beats/filebeat/current/multiline-examples.html
# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: log
  # 更改为 true 以启用此输入配置
  enabled: true
  # 应该爬行和获取的路径,基于全局的路径。
  paths:
    - /home/logs/*
  # 合并以 "[" 开头的第一行之后的行
  multiline.pattern: '^['
  multiline.negate: true
  multiline.match: after
  tags: ["java"]

1.3.4 收集 JSON 格式日志

代码语言:javascript复制
# https://www.elastic.co/guide/en/beats/filebeat/current/configuration-filebeat-options.html
# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: log
  # 更改为 true 以启用此输入配置
  enabled: true
  # 应该爬行和获取的路径,基于全局的路径。
  paths:
    - /home/logs/*
  # 解码 JSON,如果日志是 JSON 格式, 启用此功能
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["json"]

1.4 输出

1.4.1 Logstash 作为输出

☞ 配置 filebeat.yml
代码语言:javascript复制
# https://www.elastic.co/guide/en/beats/filebeat/current/logstash-output.html
# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: log
  # 更改为 true 以启用此输入配置
  enabled: true
  # 应该爬行和获取的路径,基于全局的路径。
  paths:
    - /home/filebeat-7.10.2-linux-x86_64/logs/*

# ------------------------------ Logstash Output -------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["localhost:5044"]
☞ Logstash 配置文件
代码语言:javascript复制
# 在 Logstash 安装目录下新建 first-pipeline.conf
# https://www.elastic.co/guide/en/logstash/current/plugins-inputs-beats.html
input {
  # 使用 beats 输入插件
  beats {
    port => 5044
  }
}

# https://www.elastic.co/guide/en/logstash/current/plugins-outputs-stdout.html
output {
  # 输出到控制台
  stdout { 
    codec => rubydebug 
  }
}
☞ 启动 Logstash
代码语言:javascript复制
# --config 或 -f 选项的意思是指定配置文件启动
# --config.test_and_exit 选项的意思是解析配置文件并报告任何错误
# --config.reload.automatic 选项的意思是启用自动配置加载
bin/logstash -f first-pipeline.conf --config.test_and_exit
☞ 启动 Filebeat
代码语言:javascript复制
# -e 将日志记录到标准日志并禁用系统日志/文件输出
# -c 指定你的配置文件, 默认读取 filebeat.yml 文件
# -d 参数指定了调试的选择器,不同的选择器用逗号分隔,-d "*" 表示调试所有的信息。
./filebeat -e -c filebeat.yml -d "publish"

如果一切正常,会在 Logstash 控制台看到类似下图的输出:

1.4.2 Elasticsearch 作为输出

☞ 配置 filebeat.yml
代码语言:javascript复制
# https://www.elastic.co/guide/en/beats/filebeat/current/elasticsearch-output.html
# ---------------------------- Elasticsearch Output ----------------------------
output.elasticsearch:
  hosts: ["localhost:9200"]
  # 无密码可不配
  username: "USERNAME"
  password: "PASSWORD"
  # 配置索引库名称,默认 filebeat-%{[agent.version]}-%{ yyyy.MM.dd}-%{index_num}
  # 要想使用必须设置 setup.template.name 和 setup.template.pattern
  index: "filebeat-es-%{ yyyy.MM.dd}"

# ================================== Template ==================================
# 模板名称和模式必须设置,以防 Elasticsearch 索引模式被修改。
setup.template.name: "filebeat"
setup.template.pattern: "filebeat-*"
# 自定义 ES 的索引需要把索引生命周期管理 ilm 设置为 false
setup.ilm.enabled: false
☞ 启动

  启动 Filebeat 后就可以发现,Elasticsearch 中多了一个名为 filebeat-es-2021.02.09 的索引,里面放了一堆看不懂的东西,就是我们刚刚通过 Filebeat 采集的日志。这个时候收集到的数据没有太大的意义,我们需要通过 Logstash 解析之后再存入 Elasticsearch 中。

0 人点赞