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

news2024/12/28 20:36:52

作者:Felix Barnsteiner,Nicolas Ruflin

在 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 日志和错误,从而提供进一步的日志分离能力和分类。

 

示例用例

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

  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。 通过此反馈表让我们知道你打算如何使用重新路由处理器以及你是否有改进建议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/650455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jmeter吞吐量控制器使用小结

吞吐量控制器(Throughput Controller)场景: 在同一个线程组里, 有10个并发, 7个做A业务, 3个做B业务,要模拟这种场景,可以通过吞吐量模拟器来实现.。 添加吞吐量控制器 如果你想学习jmeter性能测试&#xff0c;我这边给你推荐一套视频&#xff0c;这个视频可以说是B站播放全网…

第十六届全国大学生信息安全竞赛CISCN---Cypto

1.Sign_in_passwd 打开环境&#xff0c;下载附件&#xff0c;用记事本打开flag的文件 发现里面是像base密码但又不像base密码的一串&#xff0c;第二行的%&#xff0c;就很像url密码啊&#xff0c;之前做题没接触过啊&#xff0c;还是做题做少了 没有啥解题思路&#xff0c;看…

基于Jeecg-boot的flowable流程支持拒绝同意流程操作

更多功能看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/nbcio-boot 前端代码&#xff1a;https://gitee.com/nbacheng/nbcio-vue.git 在线演示&#xff08;包括H5&#xff09; &#xff1a; http://122.227.135.243:9888 因为看很多朋友需要…

利用Transformer BEV解决自动驾驶Corner Case的技术原理

摘要&#xff1a; 本文总结了Transformer和BEV技术在自动驾驶中的原理和应用&#xff0c;特别是如何解决Corner Case问题。 自动驾驶系统在实际应用中需要面对各种复杂的场景&#xff0c;尤其是Corner Case&#xff08;极端情况&#xff09;对自动驾驶的感知和决策能力提出了更…

访问者模式(十八)

相信自己&#xff0c;请一定要相信自己 上一章简单介绍了命令模式(十七), 如果没有看过, 请观看上一章 一. 访问者模式 引用 菜鸟教程里面访问者模式介绍: https://www.runoob.com/design-pattern/visitor-pattern.html 在访问者模式&#xff08;Visitor Pattern&#xff09…

大模型入门(六)—— RLHF微调大模型

一、RLHF微调三阶段 参考&#xff1a;https://huggingface.co/blog/rlhf 1&#xff09;使用监督数据微调语言模型&#xff0c;和fine-tuning一致。 2&#xff09;训练奖励模型     奖励模型是输入一个文本序列&#xff0c;模型给出符合人类偏好的奖励数值&#xff0c;这个奖…

大数据技术——用户与组管理

一、实验目的 1.了解linux用户和组 2.熟练掌握liunx用户和组的基本操作 3.进一步了解linux系统 二、实验内容 1.用户账号的添加、删除与修改。 2.用户口令的管理 3.用户组的管理 三、实验原理或流程 Linux系统是一个多用户多任务的分时操作系统&#xff0c;任何一个要使…

阿里面试了7轮...就这么狠的吗?

引言 今年的大环境非常差&#xff0c;互联网企业裁员的现象比往年更严重了&#xff0c;可今年刚好是我的第一个“五年计划”截止的时间点&#xff0c;说什么也不能够耽搁了&#xff0c;所以早早准备的跳槽也在疫情好转之后开始进行了。但是&#xff0c;不得不说&#xff0c;这…

ApacheStreamPark2.1.0部署及执行flink-cdc任务同步mysql表的数据到es的实践

文章目录 [toc] 1.ApacheStreamPark是什么&#xff1f;2.介绍2.1 特性2.2 架构2.3 Zeppelin和StreamPark的对比 3.相关连接4.部署4.1 二进制包编译构建4.2 镜像构建4.3 初始化sql4.4 部署4.4.1 Docker-compose.yaml部署脚本4.4.2 配置文件准备4.4.3 flink启动配置4.4.4 streamp…

7. WebGPU 将图像导入纹理

我们在上一篇文章中介绍了有关使用纹理的一些基础知识。在本文中&#xff0c;我们将介绍从图像导入纹理。 在上一篇文章中&#xff0c;通过调用 device.createTexture 创建了一个纹理&#xff0c;然后通过调用 device.queue.writeTexture 将数据放入纹理中。 device.queue 上还…

从小白到大神之路之学习运维第41天---第三阶段---Redis高可用集群(redis 的主从复制、redis的哨兵模式操作)

第三阶段基础 时 间&#xff1a;2023年6月15日 参加人&#xff1a;全班人员 内 容&#xff1a; Redis高可用集群 目录 一、redis主从复制原理介绍 主从复制特点&#xff1a; 主从复制实现原理&#xff1a; 二、主从复制实现操作&#xff08;多机实例实现&#xff09…

Mysql 表的七种联接方式【附带练习sql】

联接 七种JOIN介绍 图形联接方式说明SQL内联接共有部分SELECT <select_list> FROM TableA A INNER JOIN TableB B ON A.Key B.Key;左联接A表独有共有部分SELECT <select_list> FROM TableA A LEFT JOIN TableB B ON A.Key B.Key;右联接B表独有共有部分SELECT &…

linux spi相关调试

在Linux系统中&#xff0c;SPI 的用户模式设备接口的驱动源码位于 drivers/spi/spidev.c&#xff0c;在应用层生成 /dev/spidev* 的节点&#xff0c;可以通过 read、 write 达到与硬件设备的 SPI 通信。下面介绍spidev驱动移植和应用程序编写方法。 SPI &#xff08;serial pe…

阿里 P8 面试官总结的《2023 最新 java 面试题》限时开源了

国内的互联网面试&#xff0c;恐怕是现存的、最接近科举考试的制度。 以美国为例&#xff0c;北美工程师面试比较重视算法&#xff08;Coding&#xff09;&#xff0c;近几年也会加入 Design 轮&#xff08;系统设计和面向对象设计 OOD&#xff09;和 BQ 轮&#xff08;Behavi…

怎么学习数据库的相关知识? - 易智编译EaseEditing

学习数据库的相关知识可以按照以下步骤进行&#xff1a; 确定学习目标&#xff1a; 了解数据库的基本概念、原理和常用术语&#xff0c;学习数据库管理系统&#xff08;DBMS&#xff09;的功能和特性&#xff0c;以及掌握数据库设计和查询语言等方面的知识。 学习数据库基础知…

【闭包函数与装饰器大全】——python基础

目录索引 闭包&#xff1a;闭包三要素&#xff1a;闭包的作用&#xff1a;闭包演示&#xff1a;闭包的意义&#xff1a; 装饰器&#xff1a;特点&#xff1a;实例演示&#xff1a;实例演示2之参数&#xff1a; 装饰器常用的场景&#xff1a;编写一个计时的装饰器&#xff1a;*普…

AIGC和虚拟现实为什么必然产物

背景 在流量存量时代&#xff0c;内容运营重要性不言而喻。在流量时代&#xff0c;内容可以不要过于多样化和差异化&#xff0c;只需要有足够多的人流量&#xff0c;按流量转化比率来看&#xff0c;1000个人有1%概率转化&#xff0c;素材不变只要增加足够多的流量那就一定会有…

永久存储:文件处理与路径处理

&#x1f4e2;博客主页&#xff1a;盾山狂热粉的博客_CSDN博客-C、C语言,机器视觉领域博主&#x1f4e2;努力努力再努力嗷~~~✨ &#x1f4a1;大纲 ⭕如何将数据永久的存放到硬盘上 &#x1f449;不要打开文件&#xff0c;然后直接关闭文件&#xff0c;会导致截断 一、如何操作…

OneNote支持Markdown:高亮代码

文章目录 结论在前效果安装日常工作流&#xff08;高亮代码块&#xff09; 结论在前 markdown对我来说是伪需求&#xff0c;真正需要的是高亮代码&#xff0c;通过Github/NoteHighlight2016这个开源插件可实现这个插件虽然叫2016&#xff0c;但实测onenote 2013也是可以用的 效…

华为OD机试之数组去重和排序(Java源码)

数组去重和排序 题目描述 给定一个乱序的数组&#xff0c;删除所有的重复元素&#xff0c;使得每个元素只出现一次&#xff0c;并且按照出现的次数从高到低进行排序&#xff0c;相同出现次数按照第一次出现顺序进行先后排序。 输入描述 一个数组 输出描述 去重排序后的数组…