从边缘设备丰富你的 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 社区论坛上提问。
相关文章:
从边缘设备丰富你的 Elasticsearch 文档
作者:David Pilato 我们在之前的文章中已经了解了如何丰富 Elasticsearch 本身和 Logstash 中的数据。 但如果我们可以从边缘设备中做到这一点呢? 这将减少 Elasticsearch 要做的工作。 让我们看看如何从具有代理处理器的 Elastic 代理中执行此操作。 E…...
day29|leetcode|C++|491. 非递减子序列|46. 全排列|47. 全排列 II
Leetcode 491. 非递减子序列 链接:491. 非递减子序列 thought: 设 stack 中最后一个值的位置为 last。如果 stack 为空,则 last -1。 设当前正在处理的位置为 pos。如果在 nums 的子区间 [last1, pos) 中,存在和 nums[pos] 相同的值&…...
[Java、Android面试]_12_java访问修饰符、抽象类和接口
文章目录 1. java访问修饰符2. 抽象类和接口2.1 抽象类2.2 接口2.3 抽象类和接口的区别 本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。 整理成了面试系列,由于时间有限&…...
Linux:Prometheus的源码包安装及操作(2)
环境介绍 三台centos 7系统,运行内存都2G 1.prometheus监控服务器:192.168.6.1 主机名:pm 2.grafana展示服务器:192.168.6.2 主机名:gr 3.被监控服务器:192.168.6.3 …...
MongoDB聚合运算符:$integral
文章目录 语法使用举例 $integral聚合运算符只能用在$setWindowField阶段,返回曲线下面积的近似值,该曲线是使用梯形规则计算的,其中每组相邻文档使用以下公式形成一个梯形: $setWindowFields阶段中用于积分间隔的sortBy字段值$i…...
手撕算法-买卖股票的最佳时机 II(买卖多次)
描述 分析 使用动态规划。dp[i][0] 代表 第i天没有股票的最大利润dp[i][1] 代表 第i天持有股票的最大利润 状态转移方程为:dp[i][0] max(dp[i-1][0], dp[i-1][1] prices[i]); // 前一天没有股票,和前一天有股票今天卖掉的最大值dp[i][1] max(dp[i-1…...
技术创新与产业升级
在政府工作报告中,新兴技术如云计算、大数据、人工智能等被多次提及,这反映了政府高度重视新一代信息技术在推动经济社会发展中的重要作用。对于计算机行业而言,抓住这些新兴技术的发展机遇,推动技术创新和产业升级,将是未来发展的关键所在。 云计算作为一种新兴的计算模式,正…...
透视未来工厂:山海鲸可视化打造数字孪生新篇章
在信息化浪潮的推动下,数字孪生工厂项目正成为工业制造领域的新宠。作为一名山海鲸可视化的资深用户,我深感其强大的数据可视化能力和数字孪生技术在工厂管理中的应用价值,同时我们公司之前也和山海鲸可视化合作制作了一个智慧工厂项目&#…...
三.寄存器(内存访问)
1.内存中字的存储 2.并不是所有cpu都支持将数据段送入段寄存器,所以有时候用个别的寄存器先把数据段存储起来,再把该寄存器mov到段寄存器。 3.字的传送 4.栈 5.栈机制 举例说明 6.栈顶超界问题 push超界 pop超界 7.栈段...
Day31 贪心算法
Day31 贪心算法 455.分发饼干 我的思路: 小孩数组g指针一直前移,只有饼干数组s满足条件时,才前移,并且更新num 解答: class Solution {public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.…...
【WEEK4】 【DAY5】AJAX - Part Two【English Version】
2024.3.22 Friday Following the previous article 【WEEK4】 【DAY4】AJAX - Part One【English Version】 Contents 8.4. Ajax Asynchronous Data Loading8.4.1. Create User.java8.4.2. Add lombok and jackson support in pom.xml8.4.3. Change Tomcat Settings8.4.4. Mo…...
力扣100热题[哈希]:最长连续序列
原题:128. 最长连续序列 题解: 官方题解:. - 力扣(LeetCode)题解,最长连续序列 :哈希表 官方解题思路是先去重,然后判断模板长度的数值是否存在,存在就刷新,…...
python笔记基础--文件和存储数据(7)
目录 1.从文件中读取数据 2.写入文件 3.存储数据 3.1使用json.dump()和json.load() 3.2保存和读取用户生成的数据 3.3重构 1.从文件中读取数据 读取整个文件 with open(data.txt) as file_object: contents file_object.read()print(contents)print(contents.rstrip…...
Vue黑马笔记(最新)
VUE vue是一个用于构建用户界面的渐进式框架 创建一个VUE实例 核心步骤: 准备容器引包(官网)-开发版本/生产版本创建一个vue实例 new vue()指定配置项->渲染数据 el指定挂载点(选择器),指定管理的是哪个容器。dat…...
安全工具介绍 SCNR/Arachni
关于SCNR 原来叫Arachni 是开源的,现在是SCNR,商用工具了 可试用一个月 Arachni Web Application Security Scanner Framework 看名字就知道了,针对web app 的安全工具,DASTIAST吧 安装 安装之前先 sudo apt-get update sudo…...
赋能数据收集:从机票网站提取特价优惠的JavaScript技巧
背景介绍 在这个信息时代,数据的收集和分析对于旅游行业至关重要。在竞争激烈的市场中,实时获取最新的机票特价信息能够为旅行者和旅游企业带来巨大的优势。 随着机票价格的频繁波动,以及航空公司和旅行网站不断推出的限时特价优惠ÿ…...
【大模型】在VS Code(Visual Studio Code)上安装中文汉化版插件
文章目录 一、下载安装二、配置显示语言(一)调出即将输入命令的搜索模式(二)在大于号后面输入:Configure Display Language(三)重启 三、总结 【运行系统】win 11 【本文解决的问题】 1、英文不…...
自定义WordPress顶部的菜单的方法
要自定义WordPress顶部的菜单,你需要使用WordPress的菜单系统。首先,你需要创建自定义菜单,然后将其设置为顶部导航菜单。 以下是创建自定义菜单并设置其为顶部导航菜单的步骤: 登录到WordPress管理界面。转到“外观”>“菜单…...
独孤思维:流量暴涨,却惨遭违规
最近独孤操作虚拟资料短视频,有个很深的感悟。 每天发10条短视频,积累到20天左右,播放量和粉丝数开始暴涨。 虽然很多牛比的比我数据好,但是对于刚做短视频的独孤来说,我已经满足了。 但是又发了10来天,…...
【python 装饰器 - 重试】做一个简易重试装饰器,如果函数执行错误则会自动重新执行,可设置重试次数,对爬虫比较友好
文章日期:2024.03.19 使用工具:Python 类型:装饰器 文章全程已做去敏处理!!! 【需要做的可联系我】 AES解密处理(直接解密即可)(crypto-js.js 标准算法)&…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
