参考资料
官方网址

filebeat

filebeat 是基于原先 logstash-forwarder 的源码改造出来的。换句话说:filebeat 就是新版的 logstash-forwarder,也会是 Elastic Stack 在 shipper 端的第一选择。
Filebeat 是本地文件的日志数据采集器,可监控日志目录或特定日志文件(tail file),并将它们转发给Elasticsearch或Logstatsh进行索引、kafka等。带有内部模块(auditd,Apache,Nginx,System和MySQL),可通过一个指定命令来简化通用日志格式的收集,解析和可视化。

工作原理

Filebeat涉及两个组件:查找器prospector和采集器harvester,来读取文件(tail file)并将事件数据发送到指定的输出。

启动Filebeat时,它会启动一个或多个查找器,查看你为日志文件指定的本地路径。对于prospector所在的每个日志文件,prospector启动harvester。每个harvester都会为新内容读取单个日志文件,并将新日志数据发送到libbeat,后者将聚合事件并将聚合数据发送到你为Filebeat配置的输出。

image

安装部署

  • deb:
    1
    2
    curl -L -O https://download.elastic.co/beats/filebeat/filebeat_5.0.0_amd64.deb
    sudo dpkg -i filebeat_5.0.0_amd64.deb
  • rpm:
    1
    2
    3
    4
    curl -L -O https://download.elastic.co/beats/filebeat/filebeat-5.0.0-x86_64.rpm
    包可以去官网从新下载过
    https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.2.2-x86_64.rpm
    sudo rpm -vi filebeat-5.0.0-x86_64.rpm
  • mac:
    1
    2
    curl -L -O https://download.elastic.co/beats/filebeat/filebeat-5.0.0-darwin.tgz
    tar xzvf filebeat-5.0.0-darwin.tgz
  • win:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    下载 https://download.elastic.co/beats/filebeat/filebeat-5.0.0-windows.zip
    解压到 C:\Program Files
    重命名 filebeat-5.0.0-windows 目录为 Filebeat
    右键点击 PowerSHell 图标,选择『以管理员身份运行』
    运行下列命令,将 Filebeat 安装成 windows 服务:
    PS > cd 'C:\Program Files\Filebeat'
    PS C:\Program Files\Filebeat> .\install-service-filebeat.ps1


    <font color="red">注意</font>

    可能需要额外授予执行权限。命令为:PowerShell.exe -ExecutionPolicy RemoteSigned -File .\install-service-filebeat.ps1.

    filebeat 配置

所有的 beats 组件在 output 方面的配置都是一致的,之前章节已经介绍过。这里只介绍 filebeat 在 input 段的配置,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
filebeat:
spool_size: 1024 # 最大可以攒够 1024 条数据一起发送出去
idle_timeout: "5s" # 否则每 5 秒钟也得发送一次
registry_file: ".filebeat" # 文件读取位置记录文件,会放在当前工作目录下。所以如果你换一个工作目录执行 filebeat 会导致重复传输!
config_dir: "path/to/configs/contains/many/yaml" # 如果配置过长,可以通过目录加载方式拆分配置
prospectors: # 有相同配置参数的可以归类为一个 prospector
-
fields:
ownfield: "mac" # 类似 logstash 的 add_fields
paths:
- /var/log/system.log # 指明读取文件的位置
- /var/log/wifi.log
include_lines: ["^ERR", "^WARN"] # 只发送包含这些字样的日志
exclude_lines: ["^OK"] # 不发送包含这些字样的日志
-
document_type: "apache" # 定义写入 ES 时的 _type 值
ignore_older: "24h" # 超过 24 小时没更新内容的文件不再监听。在 windows 上另外有一个配置叫 force_close_files,只要文件名一变化立刻关闭文件句柄,保证文件可以被删除,缺陷是可能会有日志还没读完
scan_frequency: "10s" # 每 10 秒钟扫描一次目录,更新通配符匹配上的文件列表
tail_files: false # 是否从文件末尾开始读取
harvester_buffer_size: 16384 # 实际读取文件时,每次读取 16384 字节
backoff: "1s" # 每 1 秒检测一次文件是否有新的一行内容需要读取
paths:
- "/var/log/apache/*" # 可以使用通配符
exclude_files: ["/var/log/apache/error.log"]
-
input_type: "stdin" # 除了 "log",还有 "stdin"
multiline: # 多行合并
pattern: '^[[:space:]]'
negate: false
match: after
output:
...

我们已完成了配置,当 sudo service filebeat start 之后,你就可以在 kibana 上看到你的日志了。

字段

Filebeat 发送的日志,会包含以下字段:

  • beat.hostname beat 运行的主机名
  • beat.name shipper 配置段设置的 name,如果没设置,等于 beat.hostname
  • @timestamp 读取到该行内容的时间
  • type 通过 document_type 设定的内容
  • input_type 来自 “log” 还是 “stdin”
  • source 具体的文件名全路径
  • offset 该行日志的起始偏移量
  • message 日志内容
  • fields 添加的其他固定字段都存在这个对象里面