从边缘设备丰富你的 Elasticsearch 文档

作者:David Pilato

我们在之前的文章中已经了解了如何丰富 Elasticsearch 本身和 Logstash 中的数据。 但如果我们可以从边缘设备中做到这一点呢? 这将减少 Elasticsearch 要做的工作。 让我们看看如何从具有代理处理器的 Elastic 代理中执行此操作。

Elastic Agent 代理文档说:

Elastic Agent 处理器是轻量级处理组件,可用于解析、过滤、转换和丰富源数据。 例如,你可以使用处理器来:

  • 减少导出字段的数量
  • 使用附加元数据增强事件
  • 执行额外的处理和解码
  • 清理数据

这正是我们想要做的,但 Elastic Agent 处理器的限制之一是它无法使用来自 Elasticsearch 或其他自定义数据源的数据来丰富事件。

这意味着我们需要在这里保持非常静态。 我们需要提前知道我们想要用什么来丰富我们的数据。 这不是什么大问题,因为我们随时可以更改代理的配置以在以后添加新的功能。 例如,我们可以将采集管道添加到 Elasticsearch 中,或者将数据从 Elastic Agent 发送到 Logstash 来丰富它。

启动 Elastic 代理

从 Elastic Cloud 运行时,你只需按照说明 enroll 代理或转到 Fleet 控制台并从 “Settings” 选项卡获取 URL:

以及 Enrollment tokens选项卡中的秘密 TOKEN:

由于我想使用 Docker 在本地运行代理,因此我将使用以下命令并将 URL 和 TOKEN 值替换为我的 Fleet 控制台中的值:

docker run \--env FLEET_ENROLL=1 \--env FLEET_URL=URL \--env FLEET_ENROLLMENT_TOKEN=TOKEN \-v $(pwd)/datadir:/usr/share/elastic-agent/db \--rm docker.elastic.co/beats/elastic-agent:8.12.0

请注意,我将本地目录安装到 /usr/share/elastic-agent/db ,以便我可以在本文后面共享一些内容。 几秒钟后,你应该在 Fleet 控制台中看到你的代理可用:

添加字段

我们可以使用 add_fields 处理器向文档添加字段。 例如,我们可以在文档中添加 vip 和 name 字段:

processors:- add_fields:fields:vip: truename: 'David P'

使用条件

前面的示例将向每个文档添加 vip 和 name 字段。 显然,我们只想在满足条件时添加字段。 例如,只有当 clientip 字段为 30.156.16.164 时,我们才能添加 vip 和 name 字段:

processors:- add_fields:when:equals:clientip: '30.156.16.164'fields: vip: truename: 'David P'

由于这里有一个网络 IP 地址,因此我们还可以使用 CIDR 表示法,它不比较 “字符串”,而是比较 “网络地址”。 我们正在使用网络处理器条件:

processors:- add_fields:when:network:clientip: '30.156.16.164'fields:vip: truename: 'David P'

使用更多条件

由于我们的条件数量有限,我们可以使用多个 add_fields 处理器根据条件添加字段:

processors:- add_fields:when:network:clientip: '30.156.16.164'fields:vip: truename: 'David P'- add_fields:when:network:clientip: '164.85.94.243'fields:vip: truename: 'Philipp K'

使用脚本添加字段

我们还可以使用 script processor 来使用 JavaScript 添加字段。 例如,我们可以根据 clientip 字段的值添加 vip 字段:

processors:- script:lang: javascriptsource: >function process(event) {var clientip = event.Get('network.clientip');if (clientip == '30.156.16.164') {event.Put('vip', true);event.Put('name', 'David P');}}

这里我们内联了脚本,但我们也可以使用包含脚本的文件:

processors:- script:lang: javascriptfile: /usr/share/elastic-agent/db/enrich.js

而 enrich.js 的内容是:

function process(event) {var clientip = event.Get('network.clientip');if (clientip == '30.156.16.164') {event.Put('vip', true);event.Put('name', 'David P');}
}

还有另一个有趣的选项允许我们从一个目录加载多个脚本:

processors:- script:lang: javascriptfiles:- /usr/share/elastic-agent/db/dataset.js- /usr/share/elastic-agent/db/enrich.js

我们可以在 dataset.js 中构建 IP 地址和名称之间的映射:

var dataset = {'30.156.16.164': {'vip': true, 'name': 'David P'},'164.85.94.243': {'vip': true, 'name': 'Philipp K' },'50.184.59.162': {'vip': true, 'name': 'Adrienne V' },'236.212.255.77': {'vip': true, 'name': 'Carly R' },'16.241.165.21': {'vip': true, 'name': 'Naoise R' },'246.106.125.113': {'vip': true, 'name': 'Iulia F' },'81.194.200.150': {'vip': true, 'name': 'Jelena Z' },'111.237.144.54': {'vip': true, 'name': 'Matt R' }
}

我们现在可以修改 enrich.js 脚本以使用此数据集:

function process(event) {var clientip = event.Get('network.clientip');if (dataset[clientip]) {event.Put('vip', dataset[clientip].vip);event.Put('name', dataset[clientip].name);}
}

结论

我们现在拥有一组三个解决方案来丰富我们的数据:

  • 丰富 Elasticsearch 本身的数据
  • 加快 Logstash 中的 Elasticsearch 查找速度
  • 使用代理处理器丰富边缘数据

第一个解决方案是最灵活的,但它需要一个具有足够资源的集群来处理负载。 第二种解决方案是一个很好的折衷方案,因为它允许你减少 Elasticsearch 的负载,但它要求你拥有 Logstash 集群。 第三种解决方案是最容易实现的解决方案,但也是最静态的解决方案。

我希望你喜欢这一系列的帖子。 如果你有任何疑问,请随时在 Elastic 社区论坛上提问。

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

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

相关文章

Redis如何删除大key

参考阿里云Redis规范 查找大key: redis-cli --bigkeys 1、String类型: Redis 4.0及以后版本提供了UNLINK命令,该命令与DEL命令类似,但它会在后台异步删除key,不会阻塞当前客户端,也不会阻塞Redis服务器的…

【漏洞复现】WordPress Plugin NotificationX 存在sql注入CVE-2024-1698

漏洞描述 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。WordPress plugin是一个应用插件。 WordPress Plugin NotificationX 存在安全漏洞,该漏洞源于对用户提供的…

MySQL:表的操作

文章目录 创建表查看表结构修改表删除表 前面对于库的操作有了认识后,下面进行表的操作 创建表 以下图为例 创建表其实和定义结构体有点类似,总的来说就是先定义列名,然后后面跟着是列的数据类型,之后在定义结束后可以带上对应的…

【数据挖掘】实验4:数据探索

实验4:数据探索 一:实验目的与要求 1:熟悉和掌握数据探索,学习数据质量分类、数据特征分析和R语言的主要数据探索函数。 二:实验内容 1:数据质量分析 2:统计量分析 3:贡献度分析…

Redis常见数据类型(1)

Redis提供了5种数据结构, 理解每种数据类型的特点对于Redis开发运维非常重要, 同时掌握每种数据类型的常见命令, 会在使用Redis的时候做到游刃有余. 内容如下: 预备知识: 几个全局命令, 数据结构和内部编码, 单线程机制解析. 5种数据类型的特点, 命令使用, 应用场景示例. 键遍历…

uniapp微信小程序_购物车_下单页面

先说下整体逻辑以方便总体理解 1、首先画出下单页面 2、此次画出结算价格页面 3、怎么点击下完单变成结算页面?其实就是把下单页面的信息传递给结算页面就行 问题难点? 点击加号的时候把物品加入一个数组传到下单页面,但是点击的时候不能…

2024-03-24 需求分析-智能问答系统-调研

一. 需求列表 基于本地知识库的问答系统对接外围系统 数字人语音识别二. 待调研的公司 2.1 音视贝 AI智能外呼_大模型智能客服系统_大模型知识库系统_杭州音视贝 (yinshibei.com) 2.2 得助智能 智能AI客服机器人-智能电话机器人客服-电话电销机器人-得助智能 (51ima.com) 2…

LabVIEW比例流量阀自动测试系统

LabVIEW比例流量阀自动测试系统 开发了一套基于LabVIEW编程和PLC控制的比例流量阀自动测试系统。通过引入改进的FCMAC算法至测试回路的压力控制系统,有效提升了压力控制效果,展现了系统的设计理念和实现方法。 项目背景: 比例流量阀在液压…

使用 chezmoi vscode, 管理你的 dotfiles

什么是 dotfiles In Unix-like operating systems, any file or folder that starts with a dot character (for example, /home/user/.config), commonly called a dot file or dotfile. 任何以 . 开头去命名的文件或者目录都可以称为 dotfile, 在 Unix-like 系统一般用的比较…

Mysql数据库深入理解

目录 一、什么是数据库 二、Mysql基本架构图 1.Mysql客户端/服务器架构 2.客户端与服务器的连接过程 3.服务器处理客户端请求 4.一条查询SQL执行顺序 4.1连接器 4.2查询缓存 4.3解析器 4.4执行器 4.4.1预处理阶段 4.4.2优化阶段 4.4.3执行阶段 5.一条记录如何存…

外包干了4年,技术退步明显.......

先说一下自己的情况,大专生,19年通过校招进入杭州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

【十六】MySQL数据库设计篇

MySQL数据库设计篇 概述 做服务端开发离不开数据库设计,虽然说服务端技术一直在革新,但是MySQL一直都是我们首选使用的关系型数据库。服务端开发一直以来都是采用数据驱动研发的思想,可见数据库设计是非常重要的,数据库设计的好坏…

01.重新认识文件(Linux基本概念)

知识引入: 我们经常使用word或者wps写的论文、作业等都是文件,而我们这样对文件的认识也比较片面。我们是否思考过,如果文件里面没有写东西,那么计算机会不会保存呢?答案是,肯定会的。因为我们每次建的空文…

Linux下对线程的认识+生产消费者模型+信号量

线程的概念 线程是进程内部中更加轻量化的一种执行流。线程是CPU调度的基本单位,而进程是承担系统资源的实体。就是说一个进程中可能会有多个线程,而在Linux内核中并没有真正重新的创建线程并重新进行资源分配,因为我们每个线程指向的资源都是…

力扣---最长回文子串---二维动态规划

二维动态规划思路: 首先,刚做完这道题:力扣---最长有效括号---动态规划,栈-CSDN博客,所以会有一种冲动,设立g[i],表示以第i位为结尾的最长回文子串长度,然后再遍历一遍取最大长度即可…

【图解物联网】第8章 物联网与机器人

8.1 由设备到机器人 把我们身边形形色色的“物”都连接到互联网,这就是物联网。物联网中使用的设备随着时间的推移在不断进化,这条进化之路的前方到底有什么呢?这里我们就围绕其中一种形式,即机器人来对讨论一下这个问题。 8.1…

使用Python的scipy.integrate计算微积分

先上一个二重积分计算,来自2022年考研数学第二题 进行计算前先在终端下载 scipy包 pip install scipy 在脚本中先导入所需要的模块 import scipy.integrate as spi 定义函数f(x, y) ,所得值返回 def f(x, y): return y / (1 x**3)**0.5 定义…

基于springboot+vue的影院订票系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

LeetCode Python - 71. 简化路径

目录 题目描述解法运行结果 题目描述 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中,一个点(.&…

一图理解递归-算法通关村

一图理解递归-算法通关村 递归是我们算法进阶的基础,是必须要掌握的内容,只有掌握了递归才算真的会算法。与递归有关的问题有: 与树和二叉树相关的大部问题二分查找相关的问题快速排序、归并排序相关的问题所有回溯的问题所有动态规划的问题 …