Beats介绍

发布时间 2023-04-25 16:01:17作者: 金天黑日

1 简介

  Elastic Stack传统上由三个主要组件(Elasticsearch,Logstash和Kibana)组成

  现在早已脱离了这种组合,也可以与名为“ Beats”的第四个元素结合使用--一个针对不同用例的日志运送者系列。 现在网上有一种说法叫做ELKB,这里的B就是指的beats

  在集中式日志记录中,数据管道包括三个主要阶段:聚合,处理和存储。 在ELK堆栈中,传统上,前两个阶段是堆栈工作量Logstash的职责。执行这些任务需要付出一定的代价。 由于与Logstash的设计有关的内在问题,性能问题变得经常发生,尤其是在复杂的管道需要大量处理的情况下。将Logstash的部分职责外包的想法也应运而生,尤其是将数据提取任务转移到其他工具上。

  Beats是elasticsearch公司开源的一款采集系统监控数据的代理agent,它可以发送不同类型的数据到elasticsearch中,也可以行将采集完的数据发送到logstash中转,然后在推送到elasticsearch中

  在ELKB中,各个框架角色如下

    Beats:负责收集系统数据,可以直接发送到es中,也可以通过logstash中转
    logstash:收集日志,为beats提供中转功能
    Elasticsearch:提供数据存储,服务端聚合计算功能
    Kibana:提供炫丽的可视化图形展示并且作为elasticsearch的搜索的小清新客户端

 

2 Beats提供了那些组件

2.1 Filebeat

  顾名思义,Filebeat用于收集和传送日志文件,它也是最常用的Beat。 Filebeat如此高效的事实之一就是它处理背压的方式-因此,如果Logstash繁忙,Filebeat会减慢其读取速率,并在减速结束后加快节奏。
  Filebeat几乎可以安装在任何操作系统上,包括作为Docker容器安装,还随附用于特定平台(例如Apache,MySQL,Docker等)的内部模块,其中包含这些平台的默认配置和Kibana对象

 

2.2 Packetbeat

  网络数据包分析器Packetbeat是第一个引入的beat。 Packetbeat捕获服务器之间的网络流量,因此可用于应用程序和性能监视。
  Packetbeat可以安装在受监视的服务器上,也可以安装在其专用服务器上。 Packetbeat跟踪网络流量,解码协议并记录每笔交易的数据。 Packetbeat支持的协议包括:DNS,HTTP,ICMP,Redis,MySQL,MongoDB,Cassandra等

 

2.3 Metricbeat

  Metricbeat是一种非常受欢迎的beat,它收集并报告各种系统和平台的各种系统级度量。 Metricbeat还支持用于从特定平台收集统计信息的内部模块。您可以使用这些模块和称为指标集的metricsets来配置Metricbeat收集指标的频率以及要收集哪些特定指标

 

2.4 Heartbeat

  Heartbeat是用于“uptime monitoring”的。本质上,Heartbeat是探测服务以检查它们是否可访问的功能,例如,它可以用来验证服务的正常运行时间是否符合您的SLA。 您要做的就是为Heartbeat提供URL和正常运行时间指标的列表,以直接发送到Elasticsearch或Logstash以便在建立索引之前发送到您的堆栈

 

2.5 Auditbeat

  Auditbeat可用于审核Linux服务器上的用户和进程活动。 与其他传统的系统审核工具(systemd,auditd)类似,Auditbeat可用于识别安全漏洞-文件更改,配置更改,恶意行为等

 

2.6 Winlogbeat

Winlogbeat仅会引起Windows系统管理员或工程师的兴趣,因为它是专门为收集Windows事件日志而设计的节拍。 它可用于分析安全事件,已安装的更新等。

 

2.7 Functionbeat

  Functionbeat被定义为“serverless”的发件人,可以将其部署为收集数据并将其发送到ELK堆栈的功能。 Functionbeat专为监视云环境而设计,目前已针对Amazon设置量身定制,可以部署为Amazon Lambda函数,以从Amazon CloudWatch,Kinesis和SQS收集数据

 

3 Beats的使用

3.1 文档

  官方文档

  版本支持

 

3.2 下载解压(以Metricbeat为例)

  选择要下载的beats

   如:metricbeat7.3.2linux版下载

  下载完成后,上传到linux直接解压即可

 

3.3 Metricbeat 配置文件

3.3.1 文件目录

  安装完Metricbeat后,我们可以在安装目录的根目录下看到如下的所有文件

$ ls -F
LICENSE.txt            metricbeat*
NOTICE.txt            metricbeat.reference.yml
README.md            metricbeat.yml
data/                metricbeat.yml.org
fields.yml            module/
kibana/                modules.d/
logs/

  在这个目录下,我们可以看到有两个文件配置文件

metricbeat.yml:这是一个默认的配置文件
metricbeat.reference.yml:这是一个完整的样本配置文件

  

3.3.2 配置文件内容

  只使用第一个配置文件。

  配置Metricbeat时,需要指定要运行的模块。

  Metricbeat使用模块来收集指标。 每个模块都定义了从特定服务(例如Redis或MySQL)收集数据的基本逻辑。

  一个模块由获取和构造数据的metricsets组成。

  比如针对Redis模块,在这个模块中使用了Info Metricset及Keyspace Metricset。它们会共用一个和host相连接的通道。

 

3.3.3 默认配置介绍

  如果您接受默认配置而不启用其他模块,则Metricbeat仅收集System指标

# 路径:metricbeat-7.3.2-darwin-x86_64/modules.d
# ls -a
.                    kibana-xpack.yml.disabled
..                    kibana.yml.disabled
aerospike.yml.disabled            kubernetes.yml.disabled
apache.yml.disabled            kvm.yml.disabled
aws.yml.disabled            logstash-xpack.yml.disabled
beat-xpack.yml.disabled            logstash.yml.disabled
beat.yml.disabled            memcached.yml.disabled
ceph.yml.disabled            mongodb.yml.disabled
cockroachdb.yml.disabled        mssql.yml.disabled
consul.yml.disabled            munin.yml.disabled
coredns.yml.disabled            mysql.yml.disabled
couchbase.yml.disabled            nats.yml.disabled
couchdb.yml.disabled            nginx.yml.disabled
docker.yml.disabled            oracle.yml.disabled
dropwizard.yml.disabled            php_fpm.yml.disabled
elasticsearch-xpack.yml.disabled    postgresql.yml.disabled
elasticsearch.yml.disabled        prometheus.yml.disabled
envoyproxy.yml.disabled            rabbitmq.yml.disabled
etcd.yml.disabled            redis.yml.disabled
golang.yml.disabled            system.yml
graphite.yml.disabled            traefik.yml.disabled
haproxy.yml.disabled            uwsgi.yml.disabled
http.yml.disabled            vsphere.yml.disabled
jolokia.yml.disabled            windows.yml.disabled
kafka.yml.disabled            zookeeper.yml.disabled

  在Metricbeat下的子目录下有一个叫做modules.d的。

  它里面显示所有默认的metricbeat能支持的所有的模块,在默认的情况下,只有system.yml是enabled的状态。其它的都是在disabled的状态。

  我们可以通过在metricbeat安装目录下打入如下的命令来获得当前所有被支持的模块:

./metricbeat modules list

  如果我们想打开某个模块,我们可以这么做:

./metricbeat modules enable apache mysql

  这样我们就打开了apache及mysql的模块。如果我们想关闭模块的话,可以采用如下的命令:

./metricbeat modules disable apache mysql

  也可以直接修改配置文件

 

3.3.4 配置output

  Metricbeat支持多种输出,但是通常您将事件直接发送到Elasticsearch或Logstash进行其他处理

output.elasticsearch
  hosts: ["127.0.0.1:9200"]

  如果您打算使用Metricbeat随附的示例Kibana仪表板,请配置Kibana端点。 如果Kibana与Elasticsearch在同一主机上运行,则可以跳过此步骤

setup.kibana:
  host: "127.0.0.1:5601"

  如果Elasticsearch和Kibana受保护,请在运行设置和启动Metricbeat的命令之前在metricbeat.yml配置文件中设置证书

output.elasticsearch:
  hosts: ["myEShost:9200"]
  username: "filebeat_internal"
  password: "YOUR_PASSWORD"
setup.kibana:
  host: "mykibanahost:5601"
  username: "my_kibana_user"
  password: "YOUR_PASSWORD"

 

3.4 运行测试指令

./metricbeat test config -e

  目前输入只设置了system模块。

 

3.5 设置Kibana模块

  我们运行如下的命令来配置Kibana仪表盘

./metricbeat setup

  显示结果

$ ./metricbeat setup
Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards

  这个操作将在Kibana中为我们生产相应的index pattern,并生产相应的示例模板dashboard供我们使用

 

3.6 运行Metricbeat

  在上一步我们已经配置好我们的Metricbeat了,我们现在可以开始运行Metricbeat了。

./metricbeat -e

  可以到Kibana上去看一下数据。选择以metricbeat为开头的index,可以看见数据是在不断地增长,表明metricbeat是在不断地收集数据。

  点击Discover图标,然后选择metricbeat的Index pattern,可以看到收集到的数据。

  点击Dashboard图标,然后搜索Metricbeat的System显示仪表盘

  上面显示的是System Overview,我们也可以点击“Host Overview”:

  通过这样简单的配置,我们就可以了解我们系统的整个使用情况

 

4 ELKB简单使用示例

4.1 环境介绍

    1)es(7.6.2)集群三个节点分别在三个虚拟机上:

      es-node-01   192.168.28.110  9201  9700

      es-node-02   192.168.28.111  9202  9800

      es-node-03   192.168.28.112  9203  9900

    2)logstash(7.6.1)安装在es-node-01同一台虚拟机上

    3)filebeats(7.6.1)安装在es-node-01同一台虚拟机上

    4)kibana(7.6.2)安装在windows本机上

 

4.2 es安装

  es集群安装

 

4.3 logstash安装

  下载后直接解压即可

 

4.4 filebeats安装

  下载解压即可

 

4.5 kibana下载安装

  kibana在windows下安装

 

4.6 配置

4.6.1 配置logstash

  进入config目录,复制一份logstash-sample.conf文件,命名为logstash-sample2.conf,进行如下配置

input {
  beats {
    port => 5044
    client_inactivity_timeout => 36000
  }
}

output {
  elasticsearch {
    hosts => ["http://192.168.28.110:9201"]
    index => "myindex-elk"
  }
}

 

4.6.2 配置filebeats

    进入安装目录:修改filebeat.yml

    输入是读取/usr/local/programs/elasticsearch-7.6.2/logs/jcc_es_cluster.log这个日志文件

    输出是logstash

    配置如下

#=========================== Filebeat inputs =============================
 
filebeat.inputs:
 
# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.
 
- type: log
 
  # Change to true to enable this input configuration.
  enabled: true
 
  # Paths that should be crawled and fetched. Glob based paths.
  paths:  #配置多个日志路径
    - /usr/local/programs/elasticsearch-7.6.2/logs/jcc_es_cluster.log

    #- c:\programdata\elasticsearch\logs\*
 
  # Exclude lines. A list of regular expressions to match. It drops the lines that are
  # matching any regular expression from the list.
  #exclude_lines: ['^DBG']
 
  # Include lines. A list of regular expressions to match. It exports the lines that are
  # matching any regular expression from the list.
  #include_lines: ['^ERR', '^WARN']
 
  # Exclude files. A list of regular expressions to match. Filebeat drops the files that
  # are matching any regular expression from the list. By default, no files are dropped.
  #exclude_files: ['.gz$']
 
  # Optional additional fields. These fields can be freely picked
  # to add additional information to the crawled log files for filtering
  #fields:
  #  level: debug
  #  review: 1
 
  ### Multiline options
 
  # Multiline can be used for log messages spanning multiple lines. This is common
  # for Java Stack Traces or C-Line Continuation
 
  # The regexp Pattern that has to be matched. The example pattern matches all lines starting with [
  #multiline.pattern: ^\[
 
  # Defines if the pattern set under pattern should be negated or not. Default is false.
  #multiline.negate: false
 
  # Match can be set to "after" or "before". It is used to define if lines should be append to a pattern
  # that was (not) matched before or after or as long as a pattern is not matched based on negate.
  # Note: After is the equivalent to previous and before is the equivalent to to next in Logstash
  #multiline.match: after
 
 
#================================ Outputs =====================================
 
#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts #配多个logstash使用负载均衡机制
  hosts: ["192.168.28.110:5044"]  
  loadbalance: true  #使用了负载均衡
 
  # Optional SSL. By default is off.
  # List of root certificates for HTTPS server verifications
  #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
 
  # Certificate for SSL client authentication
  #ssl.certificate: "/etc/pki/client/cert.pem"
 
  # Client Certificate Key

 

4.6.3 配置kibana

  进入安装目录下的config目录,修改配置文件kibana.yml

  加入以下配置

elasticsearch.hosts: ["http://192.168.28.110:9201"]

 

4.7 启动

  完成以上配置后,分别启动

 

1)启动es集群

  分别启动三个es

./elasticsearch

 

2)启动logstash

./logstash -f ../config/logstash-sample2.conf --config.reload.automatic

 

3)启动filebeat

./filebeat -e   #启动filebeat

 

4)启动kibana

  双击kibana.bat

 

4.8 测试

  全部启动成功后,访问kibana

  http://localhost:5601/

 

4.9 查询索引myindex-elk

  这个是在logstash配置的index名称

GET /myindex-elk/_doc/_search
{
  "query":{
    "match_all": {}
  }
}

 

4.10 如果查不到内容

  就在文件/usr/local/programs/elasticsearch-7.6.2/logs/jcc_es_cluster.log下面手动添加内容

Caused by: java.lang.RuntimeException: can not run elasticsearch as root
        at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:105) ~[elasticsearch-7.6.2.jar:7.6.2]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:172) ~[elasticsearch-7.6.2.jar:7.6.2]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:349) ~[elasticsearch-7.6.2.jar:7.6.2]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170) ~[elasticsearch-7.6.2.jar:7.6.2]
        ... 6 more

 

4.11 再次查询

  可以看到,有数据了

{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 39,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "myindex-elk",
        "_type" : "_doc",
        "_id" : "aXZYt4cBE_wIwe2ICjz2",
        "_score" : 1.0,
        "_source" : {
          "log" : {
            "file" : {
              "path" : "/usr/local/programs/elasticsearch-7.6.2/logs/jcc_es_cluster.log"
            },
            "offset" : 0
          },
          "input" : {
            "type" : "log"
          },
          "host" : {
            "name" : "localhost.localdomain"
          },
          "agent" : {
            "ephemeral_id" : "ae3a76de-3fc7-45a6-b8af-bc6816b052a5",
            "hostname" : "localhost.localdomain",
            "id" : "178a306f-78f7-49cc-8b18-0526d639b9b0",
            "version" : "7.6.1",
            "type" : "filebeat"
          },
          "ecs" : {
            "version" : "1.4.0"
          },
          "tags" : [
            "beats_input_codec_plain_applied"
          ],
          "@version" : "1",
          "message" : "[2023-04-25T15:06:08,093][ERROR][o.e.b.Bootstrap          ] [es_node_01] Exception",
          "@timestamp" : "2023-04-25T07:36:51.981Z"
        }
      }

 

4.12 logstash日志

  在 logstash日志中也可以看到

2023-04-25T15:36:37.136+0800    INFO    log/harvester.go:324    File is inactive: /usr/local/programs/elasticsearch-7.6.2/logs/jcc_es_cluster.log. Closing because close_inactive of 5m0s reached

  说明成功