Beats 介绍

Beats 是轻量级的数据搬运工,一般作为代理安装在边缘服务器上。

Beats 框架由一个 libbeat 的库组成,它提供了所有 Beats 都可以使用的API,用于将数据发送到目的(如 ES、Logstash、Redis、Kafka)。libbeat库是使用Go语言构建的。因为它易于学习,静态编译,易于部署。

Elastic 官方维护了几个常见的 Beat ,比如 Packetbeat、Filebeat、Winlogbeat、 等等。另外也有一些社区 Beats ,比如 Mongobeat、httpbeat 等。

1. 官方 Beats

下面是官方的一些常见的 Beats。

(1)Packetbeat

Packetbeat是一种实时网络数据包分析器,您可以与Elasticsearch一起使用,以提供应用程序监视和性能分析系统。

Packetbeat的工作原理是捕获应用程序服务器之间的网络流量,解码应用程序层协议(HTTP,MySQL,Redis等),将请求与响应相关联,并记录每个事务的感兴趣字段。

Packetbeat可以帮助您轻松发现后端应用程序的问题,例如错误或性能问题,并且可以更快地对它们进行故障排除 - 从而修复它们。

Packetbeat会嗅探服务器之间的流量,动态解析应用程序级协议,并将消息关联到事务中。目前,Packetbeat支持以下协议:

  • ICMP (v4 and v6)
  • DHCP (v4)
  • DNS
  • HTTP
  • AMQP 0.9.1
  • Cassandra
  • Mysql
  • PostgreSQL
  • Redis
  • Thrift-RPC
  • MongoDB
  • Memcache
  • NFS
  • TLS

(2)Filebeat

Filebeat 是一个开源的轻量级日志代理,它安装在边缘服务器上,监视日志目录,跟踪文件,并将它们发送到 Elasticsearch、Logstash、Kafka或Redis。

Filebeat作为二进制文件运行,不需要 JVM 之类的,因此它非常轻量,消耗资源更少。

(3)Winlogbeat

Winlogbeat将Windows事件日志发送到Elasticsearch或Logstash。您可以将其安装为Windows服务。

Winlogbeat使用Windows API从一个或多个事件日志中读取,根据用户配置的条件过滤事件,然后将事件数据发送到配置的输出(Elasticsearch或Logstash)。Winlogbeat监视事件日志,以便及时发送新事件数据。每个事件日志的读取位置将持久保存到磁盘,以允许Winlogbeat在重新启动后恢复。

Winlogbeat可以从系统上运行的任何事件日志中捕获事件数据。例如,您可以捕获以下事件:

  • application events
  • hardware events
  • security events
  • system events

(4)Metricbeat

Metricbeat 是一个轻量级的发货器,定期从系统或服务器上运行的服务(比如 Apache、Nginx等)收集指标。它也支持监控远端的服务,但一般不这样做。

Metricbeat 输出同样支持 Elasticsearch、Logstash、Kafka或Redis。

(5)Heartbeat

Heartbeat是一个轻量级守护程序,可以安装在远程服务器上,定期检查服务状态并确定它们是否可用。与Metricbeat不同,Metricbeat仅告诉您服务器是启动还是关闭,Heartbeat会告诉您服务是否可访问。

Heartbeat支持ICMPTCPHTTP监视器来检查主机/服务。

(6)Auditbeat

Auditbeat是一个轻量级托运者,您可以在服务器上安装它来审核系统上用户和进程的活动。例如,您可以使用Auditbeat从Linux Audit Framework收集和集中审核事件。您还可以使用Auditbeat检测关键文件(如二进制文件和配置文件)的更改,并识别潜在的安全策略违规。

(7)Functionbeat

Functionbeat 是 Beats 家族的新成员之一,用于收集服务器环境中的事件,并将这些事件发送到 Elasticsearch。

(8)Journalbeat

Journalbeat作为代理安装在服务器上,监控您指定的日志位置,收集日志事件,并将它们转发到 Elasticsearch或 Logstash。

(9)Legacy Topbeat

该 beats 在 5.0 当中,已经被 Metricbeat 取代。

2. 社区 Beats

社区 Beats 列表:https://www.elastic.co/guide/en/beats/devguide/current/community-beats.html

Beats 开发指南:https://www.elastic.co/guide/en/beats/devguide/current/index.html

3. Logstash 和 Beats 比较

在您学习完 Beats 和 Logstash 之后,你会有疑问:既然已经有了 Beats 了,为什么还要学 Logstash ,其实它们之间还是有区别的。

  • Beats 是轻量级代理,消耗的资源更少,因此更适合安装在边缘服务器上。
  • Logstash 用于比 Beats 更强大的功能,比如解析和转换事件。

FileBeat

1. Filebeat 架构

Filebeat 由两个主要组件组成:inputs 和 harvesters 。这些组件一起工作以跟踪文件并将事件数据发送到指定的输出。

Filebeat 的工作原理:启动Filebeat时,它会启动一个或多个输入,这些输入将查找您为日志数据指定的位置。对于Filebeat找到的每个日志,Filebeat启动一个收集器。每个收集器为新内容读取单个日志,并将新日志数据发送到libbeat,libbeat聚合事件并将聚合数据发送到您为Filebeat配置的输出。

[success]具体工作原理参考:https://www.elastic.co/guide/en/beats/filebeat/current/how-filebeat-works.html

2. Filebeat 安装

安装参考:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation.html

(1)Centos 7 上安装

1
2
$ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.0-x86_64.rpm
$ yum -y install filebeat-7.3.0-x86_64.rpm

(2)Windows 安装

下载地址:https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.0-windows-x86_64.zip

3. Filebeat 配置

配置文件格式参考:https://www.elastic.co/guide/en/beats/libbeat/7.3/config-file-format.html
配置文件常见配置参考:https://www.elastic.co/guide/en/beats/filebeat/7.3/filebeat-configuration.html
详细配置参考:https://www.elastic.co/guide/en/beats/filebeat/current/configuring-howto-filebeat.html

Filebeat.yml 配置主要包含以下几个部分:

  • Filebeat inputs
  • Filebeat modules
  • Dashboards
  • Kibana
  • Outputs
  • Logging

(1)Filebeat inputs

从 Filebeat 7.0 开始,支持 Input 的类型有:Log、Stdin、Container、Redis、UDP、Docker、TCP、Syslog、NetFlow、Google Pub/Sub 。根据输入类型的不同,配置参数也不尽相同。您可以配置多种输入类型,并在运行 Filebeat 之前通过 enable 开启或禁用。

下面介绍以下常用的两个:

1)log
  • type:输入类型,这里是 log。
  • paths:指定日志文件,必须是绝对路径,支持 Go Glob 匹配。
  • exclude_files:排除匹配的文件
  • exclude_lines:排除匹配的行,比如 DEBUG 行
  • include_lines:接受匹配的行,比如 ERR 或 WARN 行
  • tags:对事件进行打标签,用于 kibana或Logstash 过滤
  • fields:用于指定需要包含在每个事件中的选项字段,类似 tags ,字段值可以是度量值,数组或字典。它会被定义在 fields 字段下。如果需要定义为顶级字段,请将fields_under_root选项设置为true。

Go Glob 匹配连接参考:https://golang.org/pkg/path/filepath/#Glob

2)Docker
  • type:docker
  • containers.ids:容器列表。获取所有容器,使用 *
  • containers.path:指定容器日志路径,默认为 /var/lib/docker/containers
  • containers.stream:要从中读取文件的流。可用流的列表是:all、stdout和stderr。all是默认选项。
  • exclude_lines
  • include_lines
  • tags
  • fields

(2)Filebeat modules

Filebeat 自带了很多模块,可以通过配置或者命令启用或停用。

Filebeat 模块的所有配置都位于 modules.d 下,以 disable 结尾的为未启用的模块。

1
$ filebeat modules enable system nginx

//配置启动模块方式

1
2
3
filebeat.modules:
-module: nginx
-module: system

(3) Dashboards

setup.dashboards.enabled:如果将此选项设置为true, Filebeat将从Filebeat安装的主路径中的本地Kibana目录加载样例Kibana仪表板。

setup.dashboards.url:用于下载仪表板文件的URL。如果设置了此选项,Filebeat将从指定的URL下载仪表板存档文件,而不是使用本地目录。

(4)Kibana

1
2
3
4
setup.kibana
host:"localhost:5601"
username:
password:

(5)outputs

此部分用于配置需要发送事件的输出。事件可以同时发送到单个或多个输出。允许的输出包括Elasticsearch、Logstash、Kafka、Redis、file和console。

1)Elasticsearch
1
2
3
4
output.elasticsearch:
hosts: ["localhost:9200"] #hosts: ["10.45.3.2:9220", "10.45.3.1:9230"]
username: "elasticuser"
password: "password"

hosts 接受一个或多个Elasticsearch节点/服务器。当配置多个主机时,事件按循环顺序分布到这些节点。

2)Logstash
1
2
output.logstash:
hosts: ["localhost:5045", "localhost:5046"]

(6)Logging

1
2
3
4
5
6
7
logging.level: info
logging.to_files: true
logging.files:
path: /var/log/filebeat
name: filebeat
keepfiles: 7
permissions: 0644

日志系统可以将日志写入syslog或旋转日志文件。如果没有显式配置日志记录,则使用文件输出。