Filebeat部署

Filebeat简介

​ Filebeat 是使用 Golang 实现的轻量型日志采集器,也是 Elasticsearch stack 里面的一员。本质上是一个 agent ,可以安装在各个节点上,根据配置读取对应位置的日志,并上报到相应的地方去。

​ Filebeat 的可靠性很强,可以保证日志 At least once 的上报,同时也考虑了日志搜集中的各类问题,例如日志断点续读、文件名更改、日志 Truncated 等。

​ Filebeat 并不依赖于 ElasticSearch,可以单独存在。我们可以单独使用Filebeat进行日志的上报和搜集。filebeat 内置了常用的 Output 组件, 例如 kafka、ElasticSearch、redis 等,出于调试考虑,也可以输出到 console 和 file 。我们可以利用现有的 Output 组件,将日志进行上报。也可以自定义 Output 组件,让 Filebeat 将日志转发到我们想要的地方。

​ filebeat 其实是 elastic/beats 的一员,除了 filebeat 外,还有 HeartBeat、PacketBeat。这些 beat 的实现都是基于 libbeat 框架。

下载与安装filebeat

elastic官网下载:https://www.elastic.co/downloads/beats/filebeat

# 将安装包直接解压到一个路径下即可完成安装
[root@filebeatserver ~]# tar -zxvf filebeat-6.3.2-linux-x86_64.tar.gz -C /usr/local
[root@filebeatserver ~]# mv /usr/local/filebeat-6.3.2-linux-x86_64  /usr/local/filebeat

配置filebeat

vi /usr/local/filebeat/filebeat.yml

# 注意默认打开的是es的output,将es的屏蔽后,末尾加上kafka output
# 若kafka收集不到日志信息,需手动创建topic
filebeat.inputs:
- type: log
  enabled: true
  paths:
   - /var/log/messages
   - /var/log/secure
  fields:
    log_topic: osmessages/topic
name: "172.16.213.157"
output.kafka:
  enabled: true
  hosts: ["172.16.213.51:9092", "172.16.213.75:9092", "172.16.213.109:9092"]
  version: "0.10"
  topic: '%{[fields][log_topic]}'
  partition.round_robin:
    reachable_only: true
  worker: 2
  required_acks: 1
  compression: gzip
  max_message_bytes: 10000000
logging.level: debug

配置项的含义介绍如下:

  • filebeat.inputs:用于定义数据原型。

  • type:指定数据的输入类型,这里是log,即日志,是默认值,还可以指定为stdin,即标准输入。

  • enabled: true:启用手工配置filebeat,而不是采用模块方式配置filebeat。

  • paths:用于指定要监控的日志文件,可以指定一个完整路径的文件,也可以是一个模糊匹配格式,例如:

    /data/nginx/logs/nginx_*.log,该配置表示将获取/data/nginx/logs目录下的所有以.log结尾的文件,注意这里有个破折号“-”,要在paths配置项基础上进行缩进,不然启动filebeat会报错,另外破折号前面不能有tab缩进,建议通过空格方式缩进。

    /var/log/*.log,该配置表示将获取/var/log目录的所有子目录中以”.log”结尾的文件,而不会去查找/var/log目录下以”.log”结尾的文件。

  • name: 设置filebeat收集的日志中对应主机的名字,如果配置为空,则使用该服务器的主机名。这里设置为IP,便于区分多台主机的日志信息。

  • output.kafka:filebeat支持多种输出,支持向kafka,logstash,elasticsearch输出数据,这里的设置是将数据输出到kafka。

  • enabled:表明这个模块是启动的。

  • host: 指定输出数据到kafka集群上,地址为kafka集群IP加端口号。

  • topic:指定要发送数据给kafka集群的哪个topic,若指定的topic不存在,则会自动创建此topic。注意topic的写法,在filebeat6.x之前版本是通过“%{[type]}”来自动获取document_type配置项的值。而在filebeat6.x之后版本是通过’%{[fields][log_topic]}'来获取日志分类的。

  • logging.level:定义filebeat的日志输出级别,有critical、error、warning、info、debug五种级别可选,在调试的时候可选择debug模式。

启动filebeat收集日志

[root@filebeatserver ~]# cd /usr/local/filebeat
[root@filebeatserver filebeat]# nohup ./filebeat -e -c filebeat.yml &

启动后,在当前目录下会生成一个nohup.out文件,可以查看filebeat启动日志和运行状态。

filebeat输出信息格式解读

​ 这里以操作系统中/var/log/secure文件的日志格式为例,选取一个SSH登录系统失败的日志,内容如下:
Jan 31 17:41:56 localhost sshd[13053]: Failed password for root from 172.16.213.37 port 49560 ssh2
​ filebeat接收到/var/log/secure日志后,会将上面日志发送到kafka集群,在kafka任意一个节点上,消费输出日志内容如下:

{
    
    "@timestamp":"2018-08-16T11:27:48.755Z",
"@metadata":{
    
    "beat":"filebeat","type":"doc","version":"6.3.2","topic":"osmessages"},
"beat":{
    
    "name":"filebeatserver","hostname":"filebeatserver","version":"6.3.2"},
"host":{
    
    "name":"filebeatserver"},
"source":"/var/log/secure",
"offset":11326,
"message":"Jan 31 17:41:56 localhost sshd[13053]: Failed password for root from 172.16.213.37 port 49560 ssh2",
"prospector":{
    
    "type":"log"},
"input":{
    
    "type":"log"},
"fields":{
    
    "log_topic":"osmessages"}
}

​ 从这个输出可以看到,输出日志被修改成了JSON格式,日志总共分为10个字段,每个字段含义如下:

  1. @timestamp:时间字段,表示读取到该行内容的时间。
  2. @metadata:元数据字段,此字段只有是跟Logstash进行交互使用。
  3. beat:beat属性信息,包含beat所在的主机名、beat版本等信息。
  4. host: 主机名字段,输出主机名,如果没主机名,输出主机对应的IP。
  5. source: 表示监控的日志文件的全路径。
  6. offset: 表示该行日志的偏移量。
  7. message: 表示真正的日志内容。
  8. prospector:filebeat对应的消息类型。
  9. input:日志输入的类型,可以有多种输入类型,例如Log、Stdin、redis、Docker、TCP/UDP等
  10. fields:topic对应的消息字段或自定义增加的字段。

​ 通过filebeat接收到的内容,默认增加了不少字段,但是有些字段对数据分析来说没有太大用处,所以有时候需要删除这些没用的字段,在filebeat配置文件中添加如下配置,即可删除不需要的字段:

processors:
  - drop_fields:
      fields: ["beat", "input", "source", "offset"]

​ 这个设置表示删除"beat"、“input”、“source”、“offset” 四个字段,其中, @timestamp 和@metadata字段是不能删除的。做完这个设置后,再次查看kafka中的输出日志,已经不再输出这四个字段信息了。

猜你喜欢

转载自blog.csdn.net/qq_41210783/article/details/133296950