Beats

Beats是一组轻量级数据传输工具,包括Filebeat、Metricbeat等,用于从源头收集数据。Filebeat主要用于日志文件处理,经过Input、Filter、Output流程,支持多种输出对象如Elasticsearch。Packetbeat则专注于网络数据,能实时抓取并解析应用层协议。本文详述了Filebeat的配置与工作原理,以及如何使用Filebeat收集和分析Nginx日志。

Beats概述


什么是Beats

官方定义是:轻量级数据传送工具。

Beats其实是一组beat工具的统称,它包含有很多的工具。

beat工具

  • Filebeat:针对日志文件
  • Metricbeat:度量数据,可以搜集系统性能和软件数据,将这些数据存在Elasticsearch中就可以进行展示、告警等功能。
  • Packetbeat:网络数据,比如抓包
  • Winlogbeat:主要针对Windows数据
  • Hearbeat:健康检查

架构

Beats工具位于数据的起始端,它们获取到数据后可以直接传递到Elasticsearch中进行存储,或者传输给Logstash进行日志处理,最终都会交给Kibana进行展示。

Filebeat


Filebeat处理流程

Filebeat主要是针对日志文件进行处理的,它的处理流程如下:

1、输入Input:输入就是日志文件
2、处理 Filter:对获取到的日志文件进行处理
3、输出 Output:将结果输出

Fliebeat构成

这里写图片描述

从图中可以看出,Filebeat的输出对象可以使Elasticsearch、Logstash、Kafka、Redis等。而Filebeat有两个组成部分:Prospector和Harvester。

Prospector:负责检测指定的日志文件是否存在变化。
Harvester:当 Prospector 检测到指定的日志发生变化时就会通知Harvester来收集新的日志,然后发送到output对象。

在一个Filebeat中可以有多个Prospector对象,每一个Prospector对象针对的日志对象都是不同的。每个Prospector会对自己匹配到的日志文件启动一个Harvester。

Filebeat配置


Filebeat配置是通过yaml语法进行配置的。

Input配置

示例:

filebeat.prospectors:
    - input_type:log
      paths:
        - /var/log/apache/httpd-*.log
    - input_type:log
      paths:
        - /var/log/messages
        - /var/log/*.log

其中,input_type有两种类型:
- log:日志文件
- stdin:标准输入

Output配置

Output支持的输出对象有:
- Console:标准输出
- Elasticsearch
- Logstash
- Kafka
- redis
- file:输出到另一个文件中

示例1,输出到elasticsearch:

output.elasticsearch:
  hosts:["http://10.10.99.229:9200"]
  username:"admin"
  password:"admin"

如果加了用户权限认证则需要配置username和password

示例2,输出到标准输出:

output.console:
  pretty:true

Filter配置

Filebeat对读入的内容可以通过Filter进行一定的处理。但是其处理能力相对较弱。

Input时处理:
- Include_lines:读入这一行
- exclude_lines:不读入这一行
- exclude_files:不读取这个文件

Output前处理 – Processer:
- drop_event:如果读入数据满足一定条件就丢弃
- drop_fields:丢弃满足条件的字段
- Decode_json_fields:对符合json格式的字段进行json解析
- Include_fields:加入字段

示例

processirs:
  - drop_event:
    when:
      regexp:
        message: "^DBG."

当匹配到正则表达式的时候丢弃不存储。

processors:
  - decode_json_fields:
      fields:["inner"]

将日志中的inner字段的json格式正常化处理

Filebeat Module


Filebeat Module对从Field写数据到ES的过程进行了合理的封装,比如nginx,mysql,apache的日志等。

他具体封装了filebeat.yaml、ingest node pipeline、kibana dashboard,这样就极大简化了日志存储的过程。

Elasticsearch Igest Node


前面提到,Filebeat缺乏数据转换的能力,在Elasticsearch5.X后,官方提供了一个 Elasticsearch Igest Node的新的node类型,它可以在写入ES前进行数据转换,它使用pipeline api。

Filebeat 收集Nginx日志


通过stdin收集日志,通过console输出结果。

安装Filebeat

首先下载Filebeat 5.6.4版本,可以通过命令下载:

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.6.4-linux-x86_64.tar.gz

解压并将解压后的目录移动到 /usr/local:

tar zxf filebeat-5.6.4-linux-x86_64.tar.gz
mv filebeat-5.6.4-linux-x86_64 /usr/local/filebeat-5.6.4

修改权限:

chown elastic:elastic -R filebeat-5.6.4/

我们要分析的nginx访问日志的信息如下:
这里写图片描述

设置Filebeat 配置

首先设置一个nginx.yaml 的配置文件,内容如下:

filebeat.prospectors:
- input_type: stdin

output.console:
  pretty: true

分析日志

通过标准输入向filebeat中输入日志信息,同时指定日志分析的配置文件:

head -2 /var/log/nginx/access.log | ./filebeat -e -c nginx.yaml

这里写图片描述

可以看到,从标准输入输入了日志文件的两行,日志分析出了两组数据。

Packetbeat简介


packetbeat能够实时抓取网络包,并能自动解析应用层协议。

packetbeat抓取http包并解析

这里以packetbeat解析es的http请求为例:

下载packetbeat:

wget https://artifacts.elastic.co/downloads/beats/packetbeat/packetbeat-5.6.9-linux-x86_64.tar.gz

解压并修改属主:

tar zxf packetbeat-5.6.9-linux-x86_64.tar.gz
mv packetbeat-5.6.9-linux-x86_64 /usr/local/packetbeat-5.6.9
chown -R elastic:elastic packetbeat-5.6.9

创建packetbeat配置文件:

packetbeat.interface.device: ens192
packetbeat.protocols.http: 
  ports: [9200]
  send_request: true
  include_body_for: ["application/json","x-www-form-urlencoded"]
output.console:
  pretty: true

interface.device指定了监听的网卡,protocols.http指定了抓包的协议为http,并且和端口。send_request: true表示记录了详细的信息。include_body_for设置了记录哪些格式的数据。

运行抓包:

sudo ./packetbeat -e -c es.yml -strict.perms=false

这里之所以用到sudo是应为转包命令普通用户权限可能不足。-strict.perms=false表示不检查文件的权限。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值