19、Elastic Stack应用:传感器数据分析与时间序列数据处理

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

Elastic Stack应用:传感器数据分析与时间序列数据处理

1. 分片数量的影响

1.1 对相关性得分的影响

大量小分片并不总是最佳解决方案,因为这可能会影响搜索结果的相关性。在搜索查询中,相关性得分是在分片的上下文中计算的。文档的相对频率是在每个分片的上下文中计算的,而不是跨所有分片。因此,分片数量会影响查询的总体得分。特别是,为了解决未来的可扩展性问题而设置过多分片并不是一个好办法。

1.2 对聚合准确性的影响

与搜索查询的执行类似,聚合查询也由协调节点进行协调。假设客户端请求对一个可能有大量唯一值的字段进行词项聚合。默认情况下,词项聚合会向客户端返回前10个词项。
为了协调词项聚合的执行,协调节点不会从所有分片中请求所有桶。所有分片都会被要求提供它们的前n个桶。默认情况下,这个n值等于词项聚合的size参数,即客户端请求的前几个桶的数量。例如,如果客户端请求前10个词项,协调节点会要求每个分片提供前10个桶。

2. 映射随时间的变化

2.1 新增字段

当包含新字段的第一个文档被索引时,如果该新字段的映射不存在,Elasticsearch会自动创建它。Elasticsearch会根据第一个文档中该字段的值推断其数据类型,以创建映射。特定类型文档的映射可能会随着时间的推移而增长。一旦包含新字段的文档被索引,该新字段的映射就会被创建并保留。

2.2 删除现有字段

随着时间的推移,项目需求可能会发生变化,一些字段可能会过时不再使用。在Elasticsearch索引中,不再使用的字段不会自动删除,所有曾经被索引的字段的映射都会保留在索引中。Elasticsearch索引中的每个额外字段都会带来开销,特别是当有数百或数千个字段时。如果在你的用例中有大量未使用的字段,会增加集群的负担。

3. 自动删除旧文档

没有集群有无限的容量来永久保留数据。随着数据量随时间增长,你可能决定只在Elasticsearch中存储必要的数据。通常,根据你的用例,你可能希望在Elasticsearch中保留过去几周、几个月或几年的数据。
在Elasticsearch 2.x之前,这是通过为单个文档设置TTL(生存时间)来实现的。每个文档可以配置为在索引中保留可配置的时间。但由于按文档维护生存时间的开销,TTL功能在2.x版本中被弃用。

4. 按时间框架创建索引的优势

4.1 可扩展性

不再使用需要存储所有历史数据的单一整体索引,根据近期数据量进行扩展或缩减变得更容易。分片数量的选择不是一个预先确定且永久的决定。可以为给定的时间段开始时估计一个初始的分片数量,并将其放入索引模板中。由于可以在下一个时间框架开始之前更改分片的选择,因此不会因错误的选择而受限。每个时间段都有机会调整索引模板,以增加或减少为下一个要创建的索引分配的分片数量。

4.2 映射更改

更改映射变得更容易,因为只需更新用于创建新索引的索引模板。当索引模板更新时,为新时间框架创建的新索引将使用模板中的新映射。每个时间框架都为我们提供了更改的机会。

4.3 自动删除旧文档

使用基于时间的索引,删除旧文档变得更容易。可以直接删除旧索引,而不是逐个删除文档。如果使用月度索引并希望强制保留6个月的数据,可以删除所有超过6个月的索引。这可以设置为定期任务,以查找并删除旧索引。

以下是按时间框架创建索引的优势总结表格:
| 优势 | 说明 |
| ---- | ---- |
| 可扩展性 | 可根据近期数据量调整分片数量 |
| 映射更改 | 可通过更新索引模板轻松更改映射 |
| 自动删除旧文档 | 可直接删除旧索引,而非逐个删除文档 |

5. 构建传感器数据分析应用

5.1 应用介绍

物联网(IoT)在现代有广泛的应用。物联网是指通过互联网交换数据,相互感知和通信的智能设备网络。物联网设备连接到互联网,配备各种传感器,收集并传输数据。这些数据可以实时存储、分析和处理。预计到2020年,联网设备数量将达到300亿。
我们将构建一个应用程序,用于存储和分析来自温度和湿度传感器的传感器数据。传感器可以部署在多个地点,每个地点都连接到互联网。该应用可以扩展以支持任何类型的传感器数据。

5.2 理解传感器生成的数据

传感器以JSON格式通过互联网发送数据,每个读数如下所示:

{  "sensor_id": 1,  "time": 1511935948000,  "value": 21.89} 
  • sensor_id :发出记录的传感器的唯一标识符。
  • time :自1970年1月1日00:00:00以来的毫秒数。
  • value :传感器发出的实际度量值。

系统中的所有传感器每分钟都会生成这种JSON负载。

5.3 理解传感器元数据

所有传感器的元数据存储在关系数据库中,在我们的示例中是MySQL。这些元数据也可以存储在其他关系数据库或Elasticsearch的索引中。传感器元数据主要包含以下详细信息:
- 传感器类型:如温度传感器、湿度传感器等。
- 位置相关元数据:具有给定传感器ID的传感器的物理位置,以及与之关联的客户。

这些信息存储在MySQL的以下三个表中:

sensor_type表
sensor_type_id sensor_type
1 Temperature
2 Humidity
location表
location_id customer department building_name room floor location_on_floor latitude longitude
1 Abc Labs R & D 222 Broadway 101 1 C - 101 40.710936 -74.008500
sensors表
sensor_id sensor_type_id location_id
1 1 1
2 2 1

可以使用以下SQL查询查找与给定传感器ID关联的所有元数据:

select  
    st.sensor_type as sensorType, 
    l.customer as customer, 
    l.department as department, 
    l.building_name as buildingName, 
    l.room as room, 
    l.floor as floor, 
    l.location_on_floor as locationOnFloor, 
    l.latitude, 
    l.longitude 
from 
    sensors s 
        inner join 
    sensor_type st ON s.sensor_type_id = st.sensor_type_id 
        inner join 
    location l ON s.location_id = l.location_id 
where 
    s.sensor_id = 1; 

5.4 理解最终存储的数据

通过结合客户端发送的数据(包含传感器在给定时间的给定指标的度量值),可以构建一个包含以下字段的丰富记录:
- sensorId
- sensorType
- customer
- department
- buildingName
- room
- floor
- locationOnFloor
- latitude
- longitude
- time
- reading

其中, sensorId time reading 字段来自传感器发送的有效负载,其余字段通过上述SQL查询使用 sensorId 进行查找和丰富。这样,每分钟都可以为每个传感器生成一个非规范化的传感器读数记录。

6. 在Elasticsearch中建模数据

6.1 定义索引模板

由于要存储不可变的时间序列数据,我们不希望创建一个大的整体索引。可以使用之前讨论的时间序列数据建模技术。
应用的源代码位于GitHub仓库:https://github.com/pranav-shukla/learningelasticstack/tree/v7.0/chapter - 10。请按照该路径下README.md文件中的步骤操作。可以创建README.md文件步骤1中提到的索引模板,或者在Kibana开发工具控制台中执行以下脚本:

POST _template/sensor_data_template{ "index_patterns": [ ...

6.2 理解映射

在索引模板中定义的映射包含查找后非规范化记录中所有的字段。索引模板映射中的一些注意事项如下:
- 所有包含文本类型数据的字段都存储为关键字类型,同时也存储在分析字段中作为文本。例如, customer 字段。
- 丰富数据中的 latitude longitude 字段现在映射为名为 location 的地理点类型字段。

7. 设置元数据数据库

需要一个包含传感器元数据的数据库,该数据库将包含前面应用介绍部分讨论的表。我们使用关系数据库MySQL,但也可以使用其他关系数据库。由于使用MySQL,我们将使用MySQL JDBC驱动程序连接到数据库。请确保系统上设置了以下内容:
1. MySQL数据库社区版5.5、5.6或5.7。如果系统上已经有现有数据库,可以使用它。
2. 安装下载的MySQL数据库,使用root用户登录。执行以下脚本:https://github.com/pranav - shukla/learningelasticstack/tree/v7.0/chapter - 10/files/create_sensor_metadata.sql

8. 构建Logstash数据管道

8.1 数据管道的功能

数据管道应执行以下步骤:
- 通过Web(HTTP)接受JSON请求。
- 用MySQL数据库中的元数据丰富JSON数据。
- 将结果文档存储在Elasticsearch中。

这三个主要功能分别对应Logstash数据管道的输入、过滤和输出插件。完整的Logstash配置文件位于:https://github.com/pranav - shukla/learningelasticstack/tree/v7.0/chapter - 10/files/logstash_sensor_data_http.conf。

8.2 接受Web上的JSON请求

这个功能由输入插件实现。Logstash支持http输入插件,它可以构建一个HTTP接口,接受不同类型的有效负载作为输入。 logstash_sensor_data_http.conf 中包含输入过滤器的相关部分如下:

input {  http {    id => "sensor_data_http_input"  }}

这里, id 字段是一个字符串,如果需要,可以在文件中唯一标识这个输入过滤器。我们选择 sensor_data_http_input 作为名称。HTTP输入插件的参考文档可在以下链接找到:https://www.elastic.co/guide/en/logstash/current/plugins - inputs - http.html

以下是整个构建传感器数据分析应用的流程mermaid图:

graph LR
    A[理解传感器数据与元数据] --> B[在Elasticsearch中建模数据]
    B --> C[设置元数据数据库]
    C --> D[构建Logstash数据管道]
    D --> E[接受Web上的JSON请求]
    E --> F[用元数据丰富JSON数据]
    F --> G[存储结果文档到Elasticsearch]

综上所述,通过上述方法可以有效处理传感器数据的存储、分析等问题,并且利用按时间框架创建索引等技术可以更好地应对时间序列数据的挑战。在实际应用中,可以根据具体需求对这些技术进行调整和优化。

9. 数据管道的过滤与输出

9.1 用元数据丰富JSON数据

在Logstash数据管道中,过滤插件负责用MySQL数据库中的元数据丰富JSON数据。可以使用Logstash的jdbc过滤器插件来实现这一功能。以下是一个简单的配置示例:

filter {
  jdbc {
    jdbc_connection_string => "jdbc:mysql://localhost:3306/sensor_metadata"
    jdbc_user => "root"
    jdbc_password => "password"
    jdbc_driver_library => "/path/to/mysql-connector-java.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    statement => "SELECT st.sensor_type as sensorType, l.customer as customer, l.department as department, l.building_name as buildingName, l.room as room, l.floor as floor, l.location_on_floor as locationOnFloor, l.latitude, l.longitude FROM sensors s INNER JOIN sensor_type st ON s.sensor_type_id = st.sensor_type_id INNER JOIN location l ON s.location_id = l.location_id WHERE s.sensor_id = :sensor_id"
    parameters => { "sensor_id" => "%{sensor_id}" }
  }
}

在这个配置中:
- jdbc_connection_string :指定MySQL数据库的连接字符串。
- jdbc_user jdbc_password :用于连接数据库的用户名和密码。
- jdbc_driver_library :指定MySQL JDBC驱动程序的路径。
- jdbc_driver_class :指定JDBC驱动程序的类名。
- statement :定义用于查询元数据的SQL语句。
- parameters :将传感器ID作为参数传递给SQL语句。

9.2 将结果文档存储在Elasticsearch中

输出插件负责将丰富后的JSON数据存储在Elasticsearch中。可以使用Logstash的elasticsearch输出插件来实现这一功能。以下是一个简单的配置示例:

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "sensor_data-%{+YYYY.MM.dd}"
    document_id => "%{sensor_id}-%{time}"
  }
}

在这个配置中:
- hosts :指定Elasticsearch的主机和端口。
- index :指定存储数据的索引名称,使用日期模式确保每天的数据存储在不同的索引中。
- document_id :为每个文档指定唯一的ID,由传感器ID和时间戳组成。

以下是Logstash数据管道的配置总结表格:
| 插件类型 | 插件名称 | 配置说明 |
| ---- | ---- | ---- |
| 输入 | http | 构建HTTP接口接受JSON请求 |
| 过滤 | jdbc | 用MySQL数据库中的元数据丰富JSON数据 |
| 输出 | elasticsearch | 将结果文档存储在Elasticsearch中 |

10. 可视化传感器数据

10.1 使用Kibana进行可视化

Kibana是Elastic Stack的可视化工具,可以用于创建各种图表和仪表板来展示传感器数据。以下是使用Kibana进行可视化的基本步骤:
1. 连接到Elasticsearch :在Kibana的管理界面中,配置连接到Elasticsearch的主机和端口。
2. 创建索引模式 :在Kibana中创建一个索引模式,指定要可视化的索引名称。例如,可以使用 sensor_data-* 来匹配所有以 sensor_data- 开头的索引。
3. 创建可视化 :在Kibana的可视化界面中,选择合适的可视化类型,如柱状图、折线图、地图等,然后配置可视化的参数,如选择要展示的字段、设置过滤条件等。
4. 创建仪表板 :将多个可视化组合在一起,创建一个仪表板,以便全面展示传感器数据。

10.2 示例可视化

以下是一个简单的折线图示例,用于展示温度传感器的读数随时间的变化:
1. 选择可视化类型 :在Kibana的可视化界面中,选择折线图。
2. 配置数据源 :选择要展示的索引模式,如 sensor_data-* ,并选择 time 字段作为X轴, reading 字段作为Y轴。
3. 设置过滤条件 :可以设置过滤条件,只展示温度传感器的数据,例如,过滤 sensorType 字段为 Temperature
4. 调整可视化参数 :根据需要调整折线图的颜色、线条样式、坐标轴标签等参数。

以下是使用Kibana进行可视化的步骤列表:
1. 连接到Elasticsearch
2. 创建索引模式
3. 创建可视化
4. 创建仪表板

11. 总结

11.1 关键技术回顾

在处理传感器数据分析和时间序列数据时,我们介绍了以下关键技术:
- 分片管理 :分片数量会影响搜索结果的相关性和聚合的准确性,按时间框架创建索引可以更灵活地管理分片数量。
- 映射更改 :通过更新索引模板,可以轻松更改映射,适应数据结构的变化。
- 数据删除 :使用基于时间的索引,可以直接删除旧索引,简化数据删除操作。
- 数据建模 :在Elasticsearch中定义索引模板和映射,用于存储传感器数据。
- 数据管道 :使用Logstash构建数据管道,实现数据的接收、丰富和存储。
- 可视化 :使用Kibana进行传感器数据的可视化展示。

11.2 应用优势

通过应用这些技术,我们可以实现以下优势:
- 可扩展性 :根据数据量的变化,灵活调整分片数量和索引配置。
- 数据管理 :方便地更改映射和删除旧数据,提高数据管理效率。
- 实时分析 :快速处理和分析传感器数据,实现实时监控和决策。

以下是关键技术和应用优势的总结表格:
| 关键技术 | 应用优势 |
| ---- | ---- |
| 分片管理 | 可扩展性 |
| 映射更改 | 数据管理 |
| 数据删除 | 数据管理 |
| 数据建模 | 数据存储 |
| 数据管道 | 数据处理 |
| 可视化 | 实时分析 |

11.3 未来展望

在未来的应用中,可以进一步扩展和优化这些技术,例如:
- 增加传感器类型 :支持更多类型的传感器数据,如压力传感器、光照传感器等。
- 实时警报 :根据传感器数据设置阈值,实现实时警报功能。
- 机器学习分析 :应用机器学习算法对传感器数据进行深入分析,发现潜在的模式和趋势。

以下是未来扩展和优化的步骤mermaid图:

graph LR
    A[增加传感器类型] --> B[实时警报]
    B --> C[机器学习分析]

通过以上技术和方法,可以构建一个高效、可扩展的传感器数据分析应用,实现对传感器数据的实时监控、分析和可视化展示。在实际应用中,可以根据具体需求对这些技术进行调整和优化,以满足不同的业务场景。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

这个是完整源码 python实现 大数据 Spark pyspark 可视化大屏+Kafka+FastAPI+Vue3 【深度学习毕业设计】人脸识别 智能门禁系统(深度学习+OpenCV DNN+FastAPI+Vue3) 源码+论文 完整版 数据库Mysql 出入控制是安防体系中的基础环节。长期以来,IC 卡、密码键盘和门禁钥匙在企事业单位中广泛使用,但存在卡片易丢失、密码易泄露、冒用难追溯等问题。尤其在人员流动性较高的园区写字楼场景中,卡片补办成本高,权限变更往往滞后,管理方难以及时掌握“谁在何时从何处进出”的完整信息。近年来,深度学习推动生物特征识别技术快速落地,人脸识别因采集成本低、通行体验好、可视频监控联动,成为智能门禁的主流方案之一。 在智慧园区和数字化办公场景中,门禁系统不仅要完成“开门”,还要完成“管人、管设备、管权限、管记录、管告警”的闭环。将人脸识别后台管理系统结合,能够把身份核验、权限策略和安全事件处理统一到同一平台,提升管理效率安全水平。对组织管理者而言,系统可以支撑考勤辅助、访客管控安全审计;对通行者而言,非接触式识别减少了掏卡刷卡的繁琐步骤,也降低了交叉接触风险。因此,研究并实现一套结构清晰、技术路线明确、可演示可扩展的带人脸识别智能门禁系统,具有明确的工程意义教学价值。 本课题选择 OpenCV DNN、YuNet SFace 作为识别技术路线,结合 Python、FastAPI Vue3 完成系统开发。该方案无需依赖商业闭源 SDK,模型文件体积较小,部署门槛低,适合本科毕业设计在有限硬件条件下完成可运行原型,同时又能体现深度学习在实际工程中的应用方式。单纯调用云端识别 API 相比,本地化推理更有利于保护人脸生物特征数据,也便于在论文中完整展示算法调用链路系统设计细节。 从人才培养角度看,本课题横跨软件工程、数据库原
内容概要:本文针对微电网在遭受间歇性拒绝服务(DoS)攻击下的运行安全问题,提出了一种融合混合动态事件触发机制的多目标二次均衡控制策略。该方法通过设计弹性控制架构动态事件触发机制,在有效抵御间歇性DoS阻断攻击的同时,降低系统通信负担,保障控制信号的可靠传输。所提策略实现了频率电压的协同调节,兼顾系统稳定性控制精度,并在存在网络攻击扰动的情况下仍能维持良好的动态响应性能。通过Simulink平台构建微电网仿真模型,验证了该控制方案在多种攻击场景下的有效性鲁棒性,为提升网络物理系统在恶意攻击下的安全运行能力提供了可行的技术路径。; 适合人群:具备电力系统自动化、控制理论或网络安全基础知识,从事微电网、智能配电网、分布式能源系统等领域研究的硕士/博士研究生、高校科研人员及电力行业工程技术开发者。; 使用场景及目标:①提升微电网在面临网络攻击时的运行韧性安全性;②优化受限通信资源下的控制效率实时性;③实现多目标二次控制攻击容忍机制的协同设计;④为高可靠性能源互联网系统的仿真建模防御策略验证提供技术支持。; 阅读建议:建议结合提供的Simulink仿真模型深入理解控制结构事件触发条件的设计逻辑,重点关注系统在不同时序攻击模式下的状态响应变化,并可通过修改攻击强度、触发阈值等参数进行对比实验,进一步拓展至其他网络化控制系统中的安全控制研究。
内容概要:本文围绕光伏阵列非线性输出耦合储能电池的独立直流供电系统,开展能量均衡建模分层控制策略研究,重点探讨离网光伏直流微网中功率供需失衡的抑制机制。通过Simulink搭建包含PV光伏阵列、Boost DC-DC变换器、双向DC-DC变换器锂离子电池的系统仿真模型,结合最大功率点跟踪(MPPT)技术和储能系统的双向充放电控制,实现光伏能量的高效捕获储能系统的削峰填谷协同调控,进而提升系统能量利用效率供电稳定性。研究涵盖多模块耦合建模、双级电力电子协同调控、分层控制架构设计等内容,并辅以模型预测控制(MPC)、虚拟同步机(VSG)等先进控制策略,增强系统在扰动和间歇性出力下的动态响应能力鲁棒性。; 适合人群:具备电力电子、新能源系统或自动控制相关背景,从事光伏储能系统、微电网、智能控制等领域研究的科研人员及工程技术人员,尤其适合研究生及以上层次的研究者。; 使用场景及目标:① 构建离网光伏储能直流系统的完整Simulink仿真模型;② 实现MPPT储能双向充放电的协同控制策略设计;③ 研究系统在光照波动、负载变化等扰动条件下的能量均衡稳定运行机制;④ 掌握分层控制、模型预测控制等先进控制方法在新能源系统中的应用; 阅读建议:建议结合文中提及的Simulink仿真资源MATLAB代码实践操作,逐步复现模型并调试控制参数,重点关注系统动态响应、能量流动平衡控制策略有效性,同时参考团队提供的网盘资料公众号资源获取完整代码案例支持。
覆盖了不同佩戴姿势、光Y照O条L件O和v背1景1干扰室下内的办手公套环实境例绝,缘为手开套发目精标准检的测手数部据防集 护装目备标检类测别模:[型'提L供了e可f靠t的 数I据n基s础u。 l从a数t据i分o布n来 看G,l该o数v据e集s合'理,划 分'了R训i练g集h(1t5 9I3ns张u)l、a验t证i集o(4n5 5Gl张o)v和e测s试'集](2 2中8文类张别):,[比'例约左为侧7绝:缘2手:套'1,, 确'保了右模侧型绝训缘练手、套'调]优 和评训估练的集完:1整5流9程3。 各子张 集在验手证套集类:4型5、5佩 戴方张 式和测背试景集特:2征上2具8有 良好张 的分总布计一:2致2性7,6能 够有张 效支该持数模据型集的提泛供化了d能a力t验a证.。 ya在m标l注质文量件方,面内,容该如数下据:集 展t现r了a极i高n的:专 业.水.准/。t所r有a图i像n均/采i用m精a确g的e矩s形 框v标a注l,:边 界.框.严/格v贴a合l手i套d轮/廓i,m且a标g注e者s对 左t右e手s区t分:清 晰.准.确/。标t注e过s程t遵/循i统m一a规g范e,s确 保n了c数:据 的2一 致n性a和m可e靠s性:, 为[后'续L模e型f训t练 奠I定n了s坚u实l基a础t。 io该n数据 集G可l广o泛v应e用s于'电,力 维'修R、i工g业h操t作 等I需n要s手u部l防a护t的i场o景n, 特G别l是o在v电e气s设'备]检 修Y、O高L压O作v业1等1专业室领内域办。公其环高境精绝度缘的手检套测目能标力检有测助数于据提集 升作该业数安据全集性专,注辅于助室智内能办穿公戴场设景备中开绝发缘,手并套为的工目业标安检全测监任控务系,统通提过供系可统靠化的的技图术像支采撑集。标注,构建了高质量的训练样本。数据集包含2276张图像,覆盖了不同佩戴姿势、光照条件和
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值