首页 > 编程知识 正文

elasticsearch数据结构(elasticsearch导出索引)

时间:2023-05-04 15:29:15 阅读:66996 作者:1737

索引是elastic搜索的重要组成部分。 每个索引都隔离和组织数据集,从而使您可以灵活地以不同的方式处理每个数据集,并在整个生命周期中更容易管理。 通过提供摄取方法和管理工具来简化流程,Elastic可以轻松利用索引。

本文使用文件beat将来自多个源的数据捕获到多个索引中,并使用索引生命周期管理(ILM )和数据流进一步控制数据。

什么是文件beat?

Filebeat是一个轻量级日志发射器,它具有许多嵌入式模块,用于从多个数据源无缝收集、分析和管理数据到Elasticsearch。 这些模块随预构建的Kibana控制板一起提供,可用于各种系统、服务和APP应用程序。

单个Filebeat实例具有多种用于从多个数据源收集数据的用途。 这样,用户可以节省数小时的分析、索引模板配置和数据管理,而不是几天。 默认情况下,来自所有不同源的数据传输到同一Elasticsearch索引,因此用户可以使用event.module字段筛选数据源。 这种行为有助于启动文件beat,但有一些用例可以通过在多个索引中存储类似数据来获益,例如:

将不同的数据保留策略应用于不同的数据源例如,VPC和防火墙数据需要一年时间,但IIS数据只能在群集中存储一个月。仅使数据子集可用于应用程序或仪表板例如,安全分析师可能对防火墙和网络数据感兴趣,但对Redis和Kafka数据不感兴趣。轻松为需要访问数据子集的用户分配数据访问权限例如,支持团队成员可能只需要访问IIS,而不是Tomcat数据集。 为此,Elastic管理员可以查看文档级别的安全性,但这种方法更复杂,更容易发生人为错误。 使用索引生命周期管理和数据流隔离数据

上面的所有用例都建议使用基于数据源或文件beat数据模块隔离数据的解决方案。 分离很容易实现,但要避免分片化的问题就很复杂了。 瓷砖问题可能是瓷砖太多(小瓷砖太多),或者瓷砖不足(你的瓷砖太大)。 每个瓷砖都有自己的问题。 拼贴太多意味着每个操作都需要更多的拼贴共同完成,拼贴不足会导致可用性问题。

此博客将文件beat中的数据分隔为小索引。 虽然这些索引专用于每个模块,但通过设置数据流/ILM策略可以避免分片问题。 它还利用新的Elasticsearch索引模板和Elasticsearch组件模板,帮助所有新索引从默认的文件beat映射继承正确的模板映射此外,使用数据流验证数据是否正确反转。

这看起来很多,但部署完成后,管理就变得简单了。 现在有一些工作要做,以后不用再担心了。

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

在本例中,有三种类型的数据:谷歌云、微软azure和亚马逊网络服务(AWS )。 数据集属于以下两种不同的数据保留策略:

谷歌云将保留30天Azure和AWS 365天。 如果没有集群,则可以在启动下一个步骤1 之前启动Elastic Cloud的免费试用版。

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

首先,为每个数据子集创建索引生命周期策略。 这将创建不同的保留策略,以便您可以为每个索引设置自己的规则。

# createapolicythatdeletesdataafterdaysfromrolloverput _ ILM/policy/file beat-30 days { ' policy ' : { ' phases ' 33: ' actions ' : { ' actions ' 3360 } ' max _ age ' : ' 1d ' }、' set _ priority ' : { ' priority ' :100 } }、 ' delete ' 3360 { ' min _ age ' 3360 } ' actions ' : { ' delete ' : { ' delete _ searchable _ snapshot ' : true

"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-30days 或 filebeat-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 的更多信息,如果有任何疑问,请访问 “讨论论坛”。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。