如何使用 Filebeat,ILM 和数据流跨多个索引管理 Elasticsearch 数据

索引是 Elasticsearch 的重要组成部分。 每个索引使你的数据集保持分离和有条理,从而使你可以灵活地以不同方式对待每个数据集,并使其在整个生命周期中都易于管理。 通过提供摄入方法和管理工具来简化流程,Elastic 可以轻松地充分利用索引。

在本文中,我们将使用 Filebeat 将来自多个源的数据摄入到多个索引中,然后将使用索引生命周期管理(ILM)和数据流来进一步控制该数据。

 

Filebeat 是什么?

Filebeat 是一种轻量级的日志传送器,带有许多内置模块,用于从多个数据源到 Elasticsearch 无缝收集,解析和管理数据。这些模块(与预建的 Kibana 仪表板一起提供)可用于各种系统,服务和应用程序

单个 Filebeat 实例具有多种用途,可以从多个数据源收集数据。它可以帮助用户节省数小时(如果不是几天)的解析,索引模板配置和数据管理。默认情况下,来自所有不同来源的数据都将传送到相同的 Elasticsearch 索引,从而使用户可以使用 event.module 字段过滤数据源。尽管此行为使 Filebeat 的入门更加容易,但是有多个用例可通过将相似数据存储在多个索引中而受益,例如:

  1. 将不同的数据保留策略应用于不同的数据源。例如,VPC 和防火墙数据可能需要保存一年,而 IIS 数据仅需要在群集中保存一个月。
  2. 仅使数据子集可用于应用程序或仪表板。例如,安全分析人员可能会关心防火墙和网络数据,但可能不会关心 Redis 或 Kafka 数据。
  3. 轻松为需要访问数据子集的用户分配数据访问权限。例如,支持团队的成员可能仅需要访问 IIS,而无需访问 Tomcat 数据集。为了实现此目的,Elastic 管理员可以查看文档级的安全性,但是这种方法更复杂,并且更容易出现人为错误。

 

使用索引生命周期管理和数据流分离数据

上面所有用例都建议一种解决方案是根据数据源或 Filebeat 数据模块分离数据。分离很容易实现,但是避免分片问题要复杂一些。分片问题可能是分片过多(太多的小分片)或分片不足(你的分片太大)。每个分片都有其自身的问题,因为分片过多意味着每个操作都必须由更多的分片协同完成,分片不足会导致可用性问题。

本博客将帮助你将 Filebeat 中的数据分离为较小的索引,这些索引专用于每个模块,但通过设置数据流 / ILM策略来帮助你避免分片问题。我们还将利用新的 Elasticsearch 索引模板Elasticsearch 组件模板来帮助确保所有新索引都将从默认 Filebeat 映射继承正确的模板映射。我们还将使用数据流来确保我们的数据正确翻转。

这看起来很多,但是配置完成后,管理变得轻而易举。现在要做一些工作,以后再不用担心了。

 

实际示例:管理多个云数据源

在此示例中,我们将拥有三种类型的数据,包括 Google Cloud,Microsoft Azure 和 Amazon Web Services(AWS)。 数据集将属于两种不同的数据保留策略:

  • Google Cloud 将保留 30 天
  • Azure 和 AWS 将保留 365 天

如果没有集群,可以在开始下面的 步骤1 之前启动 Elastic Cloud 的免费试用版

 

步骤1:创建索引生命周期策略

首先,我们将为每个数据子集创建索引生命周期策略。 这将创建不同的保留策略,因此每个索引可以具有自己的规则:

# create a policy that deletes data after days from rollover 
PUT _ilm/policy/filebeat-30days 
{ 
    "policy" : { 
      "phases" : { 
        "hot" : { 
          "min_age" : "0ms", 
          "actions" : { 
            "rollover" : { 
              "max_size" : "50gb", 
              "max_age" : "1d" 
            }, 
            "set_priority" : { 
              "priority" : 100 
            } 
          } 
        }, 
        "delete" : { 
          "min_age" : "30d", 
          "actions" : { 
            "delete" : { 
              "delete_searchable_snapshot" : true 
            } 
          } 
        } 
      } 
    } 
} 

# create a policy that deletes data after days from rollover 
PUT _ilm/policy/filebeat-365days 
{ 
    "policy" : { 
      "phases" : { 
        "hot" : { 
          "min_age" : "0ms", 
          "actions" : { 
            "rollover" : { 
              "max_size" : "50gb", 
              "max_age" : "1d" 
            }, 
            "set_priority" : { 
              "priority" : 100 
            } 
          } 
        }, 
        "delete" : { 
          "min_age" : "365d", 
          "actions" : { 
            "delete" : { 
              "delete_searchable_snapshot" : true 
            } 
          } 
        } 
      } 
    } 
}

步骤2:创建组件模板

现在,我们需要创建一个组件模板,这是用于构建指定索引映射(index mapping),设置(settings)和别名(aliases)的索引模板的构建块。 我们将通过传统模板 filebeat-%{agent.version} 创建它来节省时间。

1)通过转到以下位置创建基于 filebeat-7.10.1 的组件模板:Kibana > 堆栈管理 > 索引管理 > 组件模板 > 创建组件模板

2)从 filebeat-7.10.1(GET _template / filebeat-7.10.1)复制 settings。

# need to remove  "rollover_alias": "filebeat-7.10.1" from the output   
curl -XGET "https://<Elasticsearch>:<port>/_template/filebeat-7.10.1" -u elastic | 'jq .[].settings'

3)从 filebeat-7.10.1 旧版模板复制映射。

# need to remove  "rollover_alias": "filebeat-7.10.1" from the output  
curl -XGET "https://<Elasticsearch>:<port>/_template/filebeat-7.10.1" -u elastic | jq .[].mappings

 

步骤3:建立索引模板

现在,我们可以使用该组件模板为每个数据源创建一个新的索引模板。 让我们从 Google Cloud 模板开始。

1)转到 Kibana > 堆栈管理 > 索引管理 > 索引模板 > 创建模板

2)确保已启用数据流(Data stream)。

3)将你在 步骤2 中创建的组件模板添加到该新模板中
4)覆盖组件模板中的默认设置以使用自定义索引生命周期策略

{
  "index": {
    "lifecycle": {
      "name": "filebeat-30days"
    }
  }
}

5)将映射保留为空白,因为映射是从组件模板继承的。
6)将别名留空。
7)保存模板。 对所有具有正确ILM策略的自定义数据集重复这些步骤,即 filebeat-30daysfilebeat-365days

 

步骤4:将输出配置为多个索引

Filebeat 允许你将基于 event.module 值的数据分解为较小的索引。 有两种典型的日志流设置,一种使用 Logstash,另一种不使用 Logstash:

Filebeat > Logstash > Elasticsearch

在将数据吸收到 Elasticsearch 之前,数据在 Logstash 处停止。 在此设置中,鉴于你已完成 filebeat setup 命令,我们将需要在 Logstash 中完成最少的数据解析。

input { 
  beats { 
    port => 5044 
  } 
} 
filter { 
  mutate { 
    add_tag => [ "coming_from_logstash"] 
  } 
} 
output { 
    elasticsearch { 
    index => "filebeat-%{[agent][version]}-%{[event][module]}" 
    user => "elastic" 
    password => "password" 
    pipeline => "filebeat-%{[agent][version]}-%{[event][module]}-%{[fileset][name]}-pipeline" ## leverage the built in ingest pipeline from filebeat 
    hosts => [ "https://<elasticsearch_URL>:<port>" ] 
    action => "create" 
    } 
}

Filebeat > Elasticsearch

在此设置中,Filebeat 无需使用 Logstash 即可直接将数据发送到 Elasticsearch。

filebeat.inputs: 
- type: log 
  enabled: false 
filebeat.config.modules: 
  path: ${path.config}/modules.d/*.yml 
  reload.enabled: true 
setup.template.settings: 
  index.number_of_shards: 1 
# Set up Kibana 
setup.kibana.host: "https://Kibana_URL:443" 
setup.kibana.protocol: https 
# Set up Elasticsearch 
output.elasticsearch: 
  hosts : ["https://Elasticsearch_URL:443"] 
  username: "elastic" 
  password: "${elastic_user_pd}" 
  indices: 
    - index: "filebeat-%{[agent.version]}-%{[event.module]}" 
      when.has_fields: ['event.module'] 
processors: 
  - add_host_metadata: 
      when.not.contains.tags: forwarded 
  - add_cloud_metadata: ~ 
  - add_docker_metadata: ~ 
  - add_kubernetes_metadata: ~ 
logging.level: debug 
logging.to_files: true 
logging.files: 
  path: /var/log/filebeat 
  name: filebeat 
  keepfiles: 7 
  permissions: 0644

步骤5:开始摄入

如果一切正常,你应该看到类似以下内容:

GET _cat/indices/filebeat*?v 
health status index                                                           uuid                   pri rep docs.count docs.deleted store.size pri.store.size 
green  open   .ds-filebeat-7.10.1-azure-2020.12.26-000001                     4xvOnCt2Sx6iVSy3WnUaKQ   3   1         24            0      1.7mb        876.1kb 
green  open   .ds-filebeat-7.10.1-aws-2020.12.26-000001                     4xvOnCt2Sx6iVSy3WnUaKQ   3   1         24            0      1.7mb        876.1kb 
green  open   .ds-filebeat-7.10.1-googlecloud-2020.12.26-000001               PYxA7WHwQf6dVzEJ07X2yQ   3   1     443538            0    294.2mb        146.8mb 
green  open   .ds-filebeat-7.10.1-system-2020.12.26-000001                    sZdFR68wSWCr_XOQasEkWA   3   1         72            0      1.1mb        607.2kb

而且你的 ILM 策略应显示该策略已应用于 x 个索引:

立即开始流式传输

就这么简单,现在你无需担心的管理任务! 如果你一直在阅读并且还没有尝试过,我鼓励您自己尝试一下,并开始使用 Filebeat 来开始流式传输并分析来自多个数据源的日志。

是否想查看整个生态系统的健康状况,而不仅仅是日志文件? 查看 Elastic Observability,并将你的日志,指标和 APM 跟踪放到一个堆栈中。 在此网络研讨会上了解有关 ILM 的更多信息,如果有任何疑问,请访问 “讨论论坛”。

已标记关键词 清除标记
相关推荐