简化日志数据管理:利用 Elastic 灵活路由的力量

这篇具有很好参考价值的文章主要介绍了简化日志数据管理:利用 Elastic 灵活路由的力量。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:Felix Barnsteiner,Nicolas Ruflin

简化日志数据管理:利用 Elastic 灵活路由的力量

在 Elasticsearch 8.8 中,我们在技术预览中引入了重新路由处理器(reroute processor),它可以根据灵活的路由规则将文档(例如日志)发送到不同的数据流。 使用 Elastic 可观察性时,你可以更精细地控制数据的保留、权限和处理,并享受数据流命名方案的所有潜在优势。 在针对数据流进行优化的同时,重新路由处理器也适用于经典索引。 这篇博文包含有关如何使用重新路由处理器的示例,你可以通过在 Kibana 开发工具中执行代码片段来自行尝试。

Elastic Observability 提供广泛的集成,可帮助你监控应用程序和基础设施。 这些集成作为策略添加到 Elastic 代理,这有助于将遥测数据引入 Elastic 可观察性。 这些集成的几个示例包括从系统中提取日志的能力,这些系统发送来自不同应用程序的日志流,例如 Amazon Kinesis Data Firehose、Kubernetes 容器日志和系统日志。 一个挑战是这些多路复用日志流正在将数据发送到相同的 Elasticsearch 数据流,例如 logs-syslog-default。 这使得很难在摄取管道和仪表板中为特定技术创建解析规则,例如来自 Nginx 和 Apache 集成的技术。 这是因为在 Elasticsearch 中,结合数据流命名方案,处理和模式都被封装在一个数据流中。

重新路由处理器可帮助你从通用数据流中梳理出数据并将其发送到更具体的数据流。 例如,你可以使用该机制将日志发送到由 Nginx 集成设置的数据流,以便使用该集成解析日志,你可以使用集成的预建仪表板或使用字段创建自定义仪表板,例如 作为 url、状态代码和 Nginx 管道从 Nginx 日志消息中解析出来的响应时间。 你还可以使用重新路由处理器拆分/分离常规 Nginx 日志和错误,从而提供进一步的日志分离能力和分类。

简化日志数据管理:利用 Elastic 灵活路由的力量

示例用例

要使用重新路由处理器,首先:

  1. 确保你使用的是 Elasticsearch 8.8
  2. 确保你有权管理索引和数据流
  3. 如果你在 Elastic Cloud 上还没有账户,请注册一个

接下来,你需要设置一个数据流并创建一个自定义的 Elasticsearch 摄取管道,该管道被称为默认管道。 下面我们将逐步介绍我们将模拟摄取容器日志的“mydata” 数据集。 我们从一个基本示例开始,然后从那里扩展它。

应在 Elastic 控制台中使用以下步骤,该控制台位于 Management -> Dev Tools -> Console。 首先,我们需要一个摄取管道和一个数据流模板:

PUT _ingest/pipeline/logs-mydata
{
  "description": "Routing for mydata",
  "processors": [
    {
      "reroute": {
      }
    }
  ]
}

这将创建一个带有空重新路由处理器的摄取管道。 要使用它,我们需要一个索引模板:

PUT _index_template/logs-mydata
{
  "index_patterns": [
    "logs-mydata-*"
  ],
  "data_stream": {},
  "priority": 200,
  "template": {
    "settings": {
      "index.default_pipeline": "logs-mydata"
    },
    "mappings": {
      "properties": {
        "container.name": {
          "type": "keyword"
        }
      }
    }
  }
}

上述模板适用于传送到 logs-mydata-* 的所有数据。 我们已将 container.name 映射为 keyword 字段,因为这是我们稍后将用于路由的字段。 现在,我们将文档发送到数据流,它将被摄取到 logs-mydata-default 中:

POST logs-mydata-default/_doc
{
  "@timestamp": "2023-05-25T12:26:23+00:00",
  "container": {
    "name": "foo"
  }
}

我们可以使用下面的命令检查它是否被提取,这将显示 1 个结果。

GET logs-mydata-default/_search

上面的命令显示的结果为:

{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": ".ds-logs-mydata-default-2023.06.15-000001",
        "_id": "o1k9vogBbFMkj6EdYagJ",
        "_score": 1,
        "_source": {
          "container": {
            "name": "foo"
          },
          "data_stream": {
            "namespace": "default",
            "type": "logs",
            "dataset": "mydata"
          },
          "@timestamp": "2023-05-25T12:26:23+00:00"
        }
      }
    ]
  }
}

在不修改路由处理器的情况下,这已经允许我们路由文档。 一旦指定了重路由处理器,它将默认查找 data_stream.datasetdata_stream.namespace 字段,并根据数据流命名方案 logs-<dataset>-<namespace> 将文档发送到相应的数据流。 让我们试试这个:

POST logs-mydata-default/_doc
{
  "@timestamp": "2023-03-30T12:27:23+00:00",
  "container": {
    "name": "foo"
  },
  "data_stream": {
    "dataset": "myotherdata"
  }
}

上面命令返回的结果为:

{
  "_index": ".ds-logs-myotherdata-default-2023.06.15-000001",
  "_id": "pFlAvogBbFMkj6EdDqgy",
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 0,
  "_primary_term": 1
}

从上面的返回结果中,_index 的值为 .ds-logs-myotherdata-default-2023.06.15-000001,也就是它被写入到 logs-myotherdata-default 数据流中了。

从 GET logs-mydata-default/_search 命令可以看出,该文档最终出现在 logs-myotherdata-default 数据流中。 但是我们不想使用默认规则,而是想为字段 container.name 创建我们自己的规则。 如果该字段是 container.name = foo,我们想将它发送到 logs-foo-default。 为此,我们修改路由管道:

PUT _ingest/pipeline/logs-mydata
{
  "description": "Routing for mydata",
  "processors": [
    {
      "reroute": {
        "tag": "foo",
        "if" : "ctx.container?.name == 'foo'",
        "dataset": "foo"
      }
    }
  ]
}

让我们用一个文档来测试一下:

POST logs-mydata-default/_doc
{
  "@timestamp": "2023-05-25T12:26:23+00:00",
  "container": { 
    "name": "foo"
  }
}

虽然可以为每个容器名称指定一个路由规则,但你也可以通过文档中字段的值进行路由:

PUT _ingest/pipeline/logs-mydata
{
  "description": "Routing for mydata",
  "processors": [
    {
      "reroute": {
        "tag": "mydata",
        "dataset": [
          "{{container.name}}",
          "mydata"
        ]
      }
    }
  ]
}

在此示例中,我们使用字段引用作为路由规则。 如果文档中存在 container.name 字段,它将被路由 —— 否则它会回退到 mydata。 这可以通过以下方式进行测试:

POST logs-mydata-default/_doc
{
  "@timestamp": "2023-05-25T12:26:23+00:00",
  "container": { 
    "name": "foo1"
  }
}

POST logs-mydata-default/_doc
{
  "@timestamp": "2023-05-25T12:26:23+00:00",
  "container": { 
    "name": "foo2"
  }
}

这将创建数据流 logs-foo1-default 和 logs-foo2-default。

注意:当前处理器中存在一个限制,要求在 {{field.reference}} 中指定的字段采用嵌套对象表示法。 带点的字段名称当前不起作用。 此外,当文档包含任何 data_stream.* 字段的带点字段名称时,你将收到错误消息。 此限制将在 8.8.2 和 8.9.0 中修复。

API 密钥

使用重新路由处理器时,指定的 API 密钥必须具有对源索引和目标索引的权限,这一点很重要。 例如,如果模式用于从 logs-mydata-default 进行路由,则 API 密钥必须具有对 logs-*-* 的写入权限,因为数据可能最终出现在这些索引中的任何一个中(参见下面的示例)。

我们目前正在努力扩展我们集成的 API 密钥权限,以便在你运行 Fleet 管理的 Elastic Agent 时允许默认路由。

如果你使用独立的 Elastic Agent 或任何其他的摄入数据途径,你可以使用它作为模板来创建你的 API 密钥:

POST /_security/api_key
{
  "name": "ingest_logs",
  "role_descriptors": {
    "ingest_logs": {
      "cluster": [
        "monitor"
      ],
      "indices": [
        {
          "names": [
            "logs-*-*"
          ],
          "privileges": [
            "auto_configure",
            "create_doc"
          ]
        }
      ]
    }
  }
}

未来的计划

在 Elasticsearch 8.8 中,重新路由处理器以技术预览版的形式发布。 计划是在我们的数据接收器集成中采用它,例如 syslog、k8s 和其他。 Elastic 将提供开箱即用的默认路由规则,但用户也可以添加自己的规则。 如果你正在使用我们的集成,请按照本指南了解如何添加自定义摄取管道。

试试看!

这篇博文展示了一些基于文档的路由的示例用例。 通过调整索引模板的命令并为你自己的数据摄取管道,在你的数据上试用它,并通过 7 天的免费试用开始使用 Elastic Cloud。 通过此反馈表让我们知道你打算如何使用重新路由处理器以及你是否有改进建议。文章来源地址https://www.toymoban.com/news/detail-495299.html

到了这里,关于简化日志数据管理:利用 Elastic 灵活路由的力量的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是元数据,如何管理和利用元数据?

    随着企业信息化建设的不断深入,以及公司数字化型智能转型发展的需要,很多地方都需要做元数据建设与管理 。基于元数据可以开展各种各样的应用设计,比如企业级统一标准规范建设实施、统一的数据管理,统一的授权管理,统一的数据质量把控,统一的数据传输与同步

    2023年04月11日
    浏览(24)
  • 【数据库管理】⑤归档日志Archive Log

    日志归档 是指 将数据库的归档日志文件保存到指定的位置 , 以便在需要时进行恢复和回滚操作。 在Oracle数据库中, 日志归档是一种重要的备份和恢复策略,可以保证数据库的数据完整性和可靠性。 日志归档的 主要用途包括 : 数据库备份 :归档日志文件可以用于数据库

    2023年04月09日
    浏览(29)
  • 利用Hadoop进行数据湖构建与管理

    利用Hadoop进行数据湖构建与管理 一、引言 在大数据的时代,数据的增长速度已经远超过了传统的数据处理和存储能力。为了解决这个问题,数据湖的概念应运而生。数据湖是一个集中式的存储和处理平台,可以存储各种类型的数据,而不需要事先进行结构化的处理。Hadoop,

    2024年03月12日
    浏览(84)
  • 利用大数据分析工具,实现多场景可视化数据管理

    https://yanhuang.yuque.com/staff-sbytbc/rb5rur? 购买服务器 购买腾讯云服务器,1300 元新人价,一年时间 ●4核16G内存 ●CentOS 6.7 (补充说明:最新的 2.7.1 GA 版本,8G 内存也是可以跑的,可以先使用8G,不够再做升级)。 安装docker环境 安装docker,速度还挺快的,大概3~5分钟内 1、注册鸿

    2024年02月14日
    浏览(43)
  • 【数据库管理】④重做日志Redo Log

    重做日志(Redo log)是数据库管理系统中的一种机制,主要作用包括: 提供事务的持久性支持:重做日志记录了每个事务对数据库所做的修改操作,以便在系统故障或崩溃时,通过重新执行重做日志中未提交的事务来恢复数据。 支持数据库备份和恢复:重做日志可以用于还原

    2023年04月08日
    浏览(46)
  • k8s创建数据库mysql MySQL数据库之日志管理

     本文使用的是本机挂载数据,这样存在一个弊端没有pvc挂载好  重点来了: 这种共享宿主机存储的方法似乎可以解决Mysql数据库数据恢复的场景,我们似乎可以万事大吉了! But ,有的老铁会问:如果我得宿主机挂了怎么办?或者Pod没有在上一次节点上拉起,而是在新的节点

    2023年04月27日
    浏览(41)
  • Elasticsearch系列组件:Logstash强大的日志管理和数据分析工具

    Elasticsearch 是一个开源的、基于 Lucene 的分布式搜索和分析引擎,设计用于云计算环境中,能够实现实时的、可扩展的搜索、分析和探索全文和结构化数据。它具有高度的可扩展性,可以在短时间内搜索和分析大量数据。 Elasticsearch 不仅仅是一个全文搜索引擎,它还提供了分布

    2024年02月08日
    浏览(31)
  • STM32 利用FlashDB库实现在线扇区数据管理不丢失

    📍FalshDB地址: https://gitee.com/Armink/FlashDB ✨STM32没有片内EEPROM这样的存储区,虽然有备份寄存器,仅可以实现对少量数据的频繁存储,但是依赖备份电源(BAT引脚)为芯片维持供电,才能保持数据的不丢失。FlashDB库利用在线对片内或片外存储扇区进行管理,可以有效的保存数据

    2024年04月12日
    浏览(23)
  • .net 6 web api项目添加日志(Serilog)管理,将日志输出到控制台、文件、数据库

    1.在nuget安装下面几个包 Serilog Serilog.AspNetCore //用于日志输出到控制台 Serilog.Formatting.Compact //用于日志输出到mysql数据库 Serilog.Sinks.MySQL //用于日志输出到文件 Serilog.Sinks.RollingFile 2.在Program.cs文件配置日志参数,依赖注入 别忘了在appsettings.json添加数据库连接字符串 3. 使用日志

    2024年02月10日
    浏览(53)
  • 利用java和mysql数据库创建学生信息管理系统

    管理系统的使用可以大大提高我们的工作效率,给我们的生活带来极大的便利,因此我们在学习编程语言的时候大多是要学习和实现一个管理系统的创建的。 学生信息管理系统是进一步推进学生学籍管理规范化、电子化控制和管理学生信息的总要举措。系统针对学校学生信息

    2024年02月04日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包