大佬请教一个确保的问题 flink cdc mysql 提示却包?
问题1:大佬请教一个确保的问题 flink cdc mysql 提示却包? 问题2:我测试环境使用了1.17.0没有问题的,uat环境却包了缺少包的问题,测试和uat flink 环境一致的,我启动要给sql clent yarn session 是可以的,将sql client 提交到yarn session集群
各位老师好 Flink CDC中 ck 的 MaterializeMySQL存储引擎从mysql ?
问题1:各位老师好 Flink CDC中 ck 的 MaterializeMySQL 存储引擎从mysql 伪同步过来整个库 可以创建表和 视图吗 第一次用 不太熟悉还望指教 ? 问题2:怎么创建 还望指点下 没事阻塞 我压测下
Flink CDC这个本地有防火墙限制,打包到服务器print和本地应该没有什么区别?
问题1:Flink CDC这个本地有防火墙限制,打包到服务器print和本地应该没有什么区别? 问题2:大佬这个不是打印结果嘛?这个和本地IDEA打印有什么区别嘛 问题3:我idea设置的是utf-8,数据库是utf8mb4,我怎么在代码中设置和MySQL保持一直? 问题4:本地没有办法print,有防火墙限制 问题5:本地开发环境没有这个表,这个是测试环境的,测试环境是不允许联通的
合约现货跟单量化系统开发详细说明/案例项目/源码功能/方案设计
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。
狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。
广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。
在进行区块链公链开发时,需要遵循以下注意事项:
安全性:公链技术需要有高度的安全性,需要遵循安全的编程规范,并对所有的代码进行安全测试。
可扩展性:在进行架构设计时,需要关注公链的可扩展性,预先设置好扩展节点的策略。
易用性:需要从用户的角度出发,考虑到易用性和用户体验。
高性能:需要设计高吞吐、低延迟的系统,以提高性能。
智能合约:需要合理设计智能合约,并遵循智能合约规范和最佳实践。
开发一条区块链公链需要考虑到去中心化、智能合约、共识机制、应用开发技术、存储和联网技术等多个方面。在进行区块链公链开发时,需要仔细进行需求分析和架构设计,并在智能合约编写、节点搭建、测试和部署等环节中遵循相关规范和最佳实践,确保公链系统的稳定性和安全性。
Blockchain public chain development process
Developing a blockchain public chain requires the following steps:
requirement analysis
Firstly, it is necessary to communicate with the customer and understand their needs. After understanding the customer's needs, it is necessary to conduct a specific demand analysis to clarify their specific requirements.
architecture design
After understanding the customer's needs, it is necessary to conduct architecture design and choose different architecture modes based on different situations, such as public chain, alliance chain, and private chain. At the same time, it is necessary to choose appropriate storage media and networking technology to meet customer requirements.
Smart contract writing
After architectural design, it is necessary to write a smart contract program to achieve the automated execution function of the public chain system. The writing of smart contracts needs to comply with public chain standards, have good security and efficiency.
Node construction
After completing the writing of the smart contract, it is necessary to build the nodes. Nodes are the core components of a public chain system, and the construction of nodes requires attention to security and scalability.
Testing and Deployment
During the development process, it is necessary to conduct testing and optimize the code based on the test results. After passing the testing, it is necessary to deploy, test and go live after deployment.
带你读《Elastic Stack 实战手册》之83:——4.3.2.Elasticsearch 开发人员最佳实践指南(4)
《Elastic Stack 实战手册》——四、应用实践——4.3 性能优化场景——4.3.2.Elasticsearch 开发人员最佳实践指南(3): /article/1225221spm=a2c6h.13148508.setting.16.438f4f0e18NXNE在启用副本之前强制段合并及增加带宽一个非常常见的 Elasticsearch 用例是:定期(每两小时一次)创建一个索引。关于如何实现最佳性能,SoundCloud 上有一篇非常不错的 文章。从该文中引用,我特别发现以下几项“必须”。· 在完成索引创建后,务必启用副本。· 在启用副本之前,请确保:1)通过强制合并来缩小索引大小;POST /twitter/_forcemerge推荐阅读:https://developers.soundcloud.com/blog/how-to-reindex-1-billion-documents-in-1-hour-at-soundcloud记录应用程序级别指标Kibana 对 Elasticsearch 性能提供了多维监控指标仪表盘:· indexing· search latency and throughput · flush· merge operations· GC pauses· heap size· OS (CPU usage, disk I/O· kernel caches 等......但,这还不够。如果由多个应用程序使用,Elasticsearch 将受到各种访问模式的影响。想象一下,你的应用程序 A 试图删除 1000 万 个不太重要的用户文档,而另一个组件 B 试图更新用户帐户详细信息。如果你查看 Elasticsearch 监控指标,一切都是绿色正常。但是,此时更新账户的用户可能不满意他们尝试更新帐户时的延迟。因此,始终为你的 Elasticsearch 查询提供额外的应用程序级指标。尽管 Elasticsearch 结合 Kibana 或者 cerbro 已经为整体集群性能提供了足够的指标,但它们缺乏特定于操作的上下文监控,需要结合实际业务特事特办。重视 CPU 的配置选型和使用率监控怎么强调 CPU 都不过分。从我过去的经验来看,无论是写负载还是读负载场景,CPU 一直是我们的瓶颈。谨慎编写自定义的 Elasticsearch 插件· 许多 Elasticsearch 版本包含重大的内部更改。你的插件所基于的公共 API 很可能会向后不兼容。· 你需要调整部署过程,不能再使用原始的 Elasticsearch 工作。· 由于你的应用程序依赖于于插件提供的特定功能,因此在集成测试过程中运行的 Elasticsea-rch 实例也需要包含插件。你也就不能再使用原始的 Docker 镜像。 创作人简介:铭毅天下,Elastic 认证工程师、Elastic 官方合作培训讲师、便宜云服务器 MVP、CSDN 博客专家、铭毅天下 Elasticsearch 公众号作者、死磕 Elasticsearch 知识星球星主。近 10 年工作经验,关注 Elastic Stack 技术栈、大数据技术领域。博客:https://elastic.blog.csdn.net/
带你读《Elastic Stack 实战手册》之83:——4.3.2.Elasticsearch 开发人员最佳实践指南(3)
《Elastic Stack 实战手册》——四、应用实践——4.3 性能优化场景——4.3.2.Elasticsearch 开发人员最佳实践指南(2): /article/1225222spm=a2c6h.13148508.setting.15.438f4f0e18NXNE实战技巧(Strategy)在最后一节中,我收集了解决上述未解决问题的便捷的实战技巧。 始终(尝试)坚持使用最新的 JVM 和 Elasticsearch 版本Elasticsearch 是一个 Java 应用程序。像其他所有 Java 应用程序一样,它也有 hot paths和垃圾回收问题。几乎每个新的 JVM 版本都会带来很多优化,你可以不费吹灰之力利用这些优化。Elasticsearch 有一个官方页面,列出了支持的 JVM 版本和垃圾收集器。在尝试任何 JVM 升级之前,请务必先翻一翻如下文章清单:· https://www.elastic.co/guide/en/elasticsearch/guide/current/_don_8217_t_touch_these_settings.html · https://www.elastic.co/cn/support/matrix#matrix_jvm注意:Elasticsearch 升级也是免费获得性能提升的来源。 使用 Elasticsearch 完整和部分快照进行备份Elasticsearch 可以便捷的实现全部索引的全量快照,或者部分索引数据的增量快照。根据你的更新模式和索引大小,找到适合你的用例的快照最佳组合。也就是说,例如,在 00:00 时有 1 个完整快照,在 06:00、12:00 和 18:00 时有 3 个 局部增量快照。将它们存储在第三方存储也是一种好习惯。有一些第三方 插件 可以简化这些情况。举例:https://www.elastic.co/guide/en/elasticsearch/plugins/master/repository.html与每份备份方案一样,安全起见,请确保快照可以还原并反复练习几次。有一个持续的性能测试平台像任何其他数据库一样,Elasticsearch 在不同条件下显示不同的性能:· 索引,文档大小;· 更新,查询/检索模式;· 索引,集群设置;· 硬件,操作系统,JVM 版本等。很难跟踪每个设置的改变以观察其对整体性能的影响。确保你(至少)进行每日性能测试,以帮助缩小范围,快速定位最近引入的、导致性能下降的可能的原因。这种性能测试说起来容易做起来难。你需要确保测试环境:· 能有代表性的生产环境数据· 配置和生产环境一致· 完全覆盖用例· 考虑包括操作系统缓存的测试的影响。使用别名告诉你一些颇有见地的实操经验:永远不要查询索引,而要查询别名。别名是指向实际索引的指针。你可以将一个或多个索引归为一个别名。许多 Elasticsearch 索引在索引名称上都有内部上下文,例如 events-20190515 代表 20190515 这一天的数据。现在,在查询 events-* 索引时,应用程序代码中有两个选择:选择 1:通过特定日期格式即时确定索引名称:events-YYYYMMDD。这种方法有两个主要缺点:1)需要回退到特定日期的索引,因此需要对整个代码库进行相应的设计以支持这种操作。2)撇开所有时钟同步问题,在凌晨,你需要用程序或者脚本控制索引切换,确保数据写入下一天索引。选择 2:创建一个 events 别名,指向 events-* 相关的索引。负责创建新索引的组件如:curator 或者 ILM(索引生命周期管理)可以自动将别名切换到新索引。这种方法将带来两个明显的好处:1)它没有以前方法的缺点。2)只需指向 events 别名,代码就会更简洁。避免拥有大量同义词Elasticsearch 支持索引阶段和查询阶段指定 同义词。没有同义词,搜索引擎是不完整的,但实战使用环境,注意如下问题:· 索引阶段同义词增加了索引大小,并增加了运行时开销。· 查询阶段同义词不会增加索引的大小,但顾名思义,这会增加运行时开销。· 使用同义词,很容易在尝试修复其他问题时无意间破坏某些其他内容。所以,要持续监视同义词对性能的影响,并尝试为添加的每个同义词编写测试用例。同义词官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html《Elastic Stack 实战手册》——四、应用实践——4.3 性能优化场景——4.3.2.Elasticsearch 开发人员最佳实践指南(4): /article/1225219?spm=a2c6h.13148508.setting.17.438f4f0e18NXNE
带你读《Elastic Stack 实战手册》之82:——4.3.1.Elasticsearch 生产环境集群部署最佳实践(1)
4.3.1.Elasticsearch 生产环境集群部署最佳实践创作人:铭毅天下在生产环境搭建或维护 Elasticsearch 集群和个人搭建集群的小打小闹有非常大的不同。本文的最佳实践基于每天增量数亿+的线上环境。内存Elasticsearch 和 Lucene 都是 Java 语言编写,这意味着我们必须注意堆内存的设置。Elasticsearch 可用的堆越多,它可用于过滤器(filter)和其他缓存的内存也就越多,更进一步讲可以提高查询性能。但请注意,过多的堆可能会使垃圾回收暂停时间过长。请勿将堆内存的最大值设置为 JVM 用于压缩对象指针(压缩的 oops)的临界值之上,确切的临界值有所不同,但不要超过 32 GB。常见内存配置坑 1:堆内存设置过大举例:Elasticsearch 宿主机:64 GB 内存,堆内存恨不得设置为 64 GB。这忽略了堆的另一部分内存使用大户:OS 文件缓存。Lucene 旨在利用底层操作系统来缓存内存中的数据结构。Lucene 段存储在单独的文件中。由于段是不可变的(immutable),因此这些文件永远不会更改。这使它们非常易于缓存,并且底层操作系统很乐意将热段驻留在内存中,以加快访问速度。 这些段包括倒排索引(用于全文搜索)和 doc values 正排索引(用于聚合)。Lucene 的性能取决于与 OS 文件缓存的交互。如果你将所有可用内存分配给 Elasticsearch 的堆,则 OS文件缓存将不会剩下任何可用空间。这会严重影响性能。官方标准建议是:将 50% 的可用内存(不超过 32 GB,一般建议最大设置为:31 GB)分配给 Elasticsearch 堆,而其余 50% 留给 Lucene 缓存。图片来自网络可以通过以下方式配置 Elasticsearch 堆:? 方式一:堆内存配置文件 jvm.options# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms16g
-Xmx16g? 方式二:启动参数设置ES_JAVA_OPTS="-Xms10g -Xmx10g" ./bin/elasticsearchCPU运行复杂的缓存查询、密集写入数据都需要大量的 CPU,因此选择正确的查询类型以及渐进的写入策略至关重要。一个节点使用多个线程池来管理内存消耗。与线程池关联的队列,使待处理的请求得以保留(类似缓冲效果)而不是被丢弃。由于 Elasticsearch 会做动态分配,除非有非常具体的要求,否则不建议更改线程池和队列大小。推荐阅读:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-threadpool.html分片数分片是 Elasticsearch 在集群内分发数据的单位。集群发生故障再恢复平衡的速度,取决于分片的大小、分片数量、网络以及磁盘性能。在 Elasticsearch 中,每个查询在每个分片的单个线程中执行。但是,可以并行处理多个分片。针对同一分片的多个查询和聚合也可以并行处理。这意味着在不涉及缓存的情况下,最小查询延迟将取决于数据、查询类型以及分片的大小三个因素。设置很多小分片 VS 设置很少大分片?· 查询很多小分片,导致每个分片能做到快速响应,但是由于需要按顺序排队和处理结果汇集。因此不一定比查询少量的大分片快。· 如果存在多个并发查询,那么拥有大量小分片也会降低查询吞吐量。所以,就有了下面的分片数如何设定的问题?分片数设定选择正确数量的分片是一个复杂问题,因为在集群规划阶段以及在数据写入开始之前,一般不能确切知道文档数。对于集群而言,分片数多了以后,索引和分片管理,可能会使主节点超载,并可能会导致集群无响应,甚至导致集群宕机。建议:为主节点(Master 节点)分配足够的资源,以应对分片数过多可能导致的问题。必须强调的是:主分片数是在索引创建时定义的,不支持借助 update API 实现类副本数更新的动态修改。创建索引后,更改主分片数的唯一方法是重新创建索引,然后将原来索引数据reindex 到新索引。官方给出的合理的建议:每个分片数据大小:30GB-50GB。· 推荐 1:Elasticsearch 究竟要设置多少分片数?https://elastic.blog.csdn.net/article/details/78080602· 推荐 2:Elasticsearch 之如何合理分配索引分片https://qbox.io/blog/optimizing-elasticsearch-how-many-shards-per-index副本Elasticsearch 通过副本实现集群的高可用性,数据在数据节点之间复制,以实现主分片数据的备份,因此即便部分节点因异常下线,也不会导致数据丢失。默认情况下,副本数为 1,但可以根据产品高可用要求将其增加。副本越多,数据的容灾性越高。副本多的另一个优点是,每个节点都拥有一个副本分片,有助于提升查询性能。铭毅提醒:· 实际副本数增多,提高查询性能建议结合集群做下测试,我实测过效果不明显。· 副本数增多,意味着磁盘存储要加倍,也考验硬盘空间和磁盘预算。建议:根据业务实际综合考虑设置副本数。普通业务场景(非精准高可用)副本设置为 1 足够了。冷热集群架构配置根据产品业务数据特定和需求,我们可以将数据分为热数据和冷数据,这是冷热集群架构的前提。访问频率更高的索引,可以分配更多更高配(如:SSD)的数据节点,而访问频率较低的索引可以分配低配(如:机械磁盘)数据节点。冷热集群架构对于存储,诸如应用程序日志或互联网实时采集数据(基于时间序列数据)特别有用。数据迁移策略:通过运行定时任务,来实现定期将索引移动到不同类型的节点。具体实现:Curator 工具或借助 ILM 索引生命周期管理。 热节点热节点是一种特定类型的数据节点,关联索引数据是:最近、最新、最热数据。因为这些热节点数据通常倾向于最频繁地查询。热数据的操作会占用大量 CPU 和 IO 资源,因此对应服务器需要功能强大(高配)并附加 SSD 存储支持。针对集群规模大的场景,建议:至少运行 3 个热节点以实现高可用性。当然,这也和你实际业务写入和查询的数据量有关系,如果数据量非常大,可能会需要增加热节点数目。 冷节点(或称暖节点)冷节点是对标热节点的一种数据节点,旨在处理大量不太经常查询的只读索引数据。由于这些索引是只读的,因此冷节点倾向于使用普通机械磁盘而非 SSD 磁盘。与热节点对标,也建议:最少 3 个冷节点以实现高可用性。同样需要注意的是,若集群规模非常大,可能需要更多节点才能满足性能要求。甚至需要更多类型,如:热节点、暖节点、冷节点等。强调一下:CPU 和内存的分配最终需要你通过使用与生产环境中类似的环境借助 esrally 性能测试工具测试确定,而不是直接参考各种最佳实践拍脑袋而定。有关热节点和热节点的更多详细信息,请参见:https://www.elastic.co/blog/hot-warm-architecture-in-elasticsearch-5-x《Elastic Stack 实战手册》——四、应用实践——4.3 性能优化场景——4.3.1.Elasticsearch 生产环境集群部署最佳实践(2) /article/1225320?spm=a2c6h.13148508.setting.15.47564f0eVi9cik
带你读《Elastic Stack 实战手册》之78:——4.2.4.Elasticsearch和Python构建面部识别系统(下)
《Elastic Stack 实战手册》——四、应用实践——4.2 可观测性应用场景 ——4.2.4.Elasticsearch和Python构建面部识别系统(中) /article/1225805匹配面孔?假设我们在 Elasticsearch 中索引了四个文档,其中包含 Elastic 创始人的每个面部表情。 现在,我们可以使用创始人的其他图像来匹配各个图像。为此,我们需要创建一个叫做 recognizeFaces.py 的文件。recognizeFaces.py import face_recognition
import numpy as np
from elasticsearch import Elasticsearch
import sys
import os
from elasticsearch import Elasticsearch
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])
cwd = os.getcwd()
# print("cwd: " + cwd)# Get the images directory
rootdir = cwd + "/images_to_be_recognized"
# print("rootdir: {0}".format(rootdir))
for subdir, dirs, files in os.walk(rootdir):
for file in files:
print(os.path.join(subdir, file))
file_path = os.path.join(subdir, file)
image = face_recognition.load_image_file(file_path)
# detect the faces from the images
face_locations = face_recognition.face_locations(image)
# encode the 128-dimension face encoding for each face in the image
face_encodings = face_recognition.face_encodings(image, face_locations)
# Display the 128-dimension for each face detected
i = 0
for face_encoding in face_encodings:
i += 1
print("Face", i)
response = es.search(
index="faces",
body={
"size": 1,
"_source": "face_name",
"query": {
"script_score": {
"query": {
"match_all": {}
},
"script": {
"source": "cosineSimilarity(params.query_vector, 'face_encoding')",
"params": {
"query_vector": face_encoding.tolist()
}
}
}
}
}
)
# print(response)
for hit in response['hits']['hits']:
# double score=float(hit['_score'])
print("score: {}".format(hit['_score']))
if float(hit['_score']) > 0.92:
print("==> This face match with ", hit['_source']['face_name'], ",the score is", hit['_score'])
else:
print("==> Unknown face")这个文件的写法也非常简单。它从目录 images_to_be_recognized 中获取需要识别的文件,并对这个图片进行识别。我们使用 cosineSimilarity 函数来计算给定查询向量和存储在 Elasticsearch 中的文档向量之间的余弦相似度。# Display the 128-dimension for each face detected
i = 0
for face_encoding in face_encodings:
i += 1
print("Face", i)
response = es.search(
index="faces",
body={
"size": 1,
"_source": "face_name",
"query": {
"script_score": {
"query": {
"match_all": {}
},
"script": {
"source": "cosineSimilarity(params.query_vector, 'face_encoding')",
"params": {
"query_vector": face_encoding.tolist()
}
}
}
}
}
)假设分数低于 0.92 被认为是未知面孔:for hit in response['hits']['hits']:
# double score=float(hit['_score'])
print("score: {}".format(hit['_score']))
if float(hit['_score']) > 0.92:
print("==> This face match with ", hit['_source']['face_name'], ",the score is", hit['_score'])
else:
print("==> Unknown face")执行上面的 Python 代码:该脚本能够检测出得分匹配度高于 0.92 的所有面孔搜寻进阶?面部识别和搜索可以结合使用,以用于高级用例。 你可以使用 Elasticsearch 构建更复杂的查询,例如 geo_queries,query-dsl-bool-query 和 search-aggregations。?例如,以下查询将 cosineSimilarity?搜索应用于200公里半径内的特定位置: GET /_search
{
"query": {
"script_score": {
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": {
"geo_distance": {
"distance": "200km",
"pin.location": {
"lat": 40,
"lon": -70
}
}
}
}
},
"script": {
"source": "cosineSimilarity(params.query_vector, 'face_encoding')",
"params": {
"query_vector":[
-0.14664565,
0.07806452,
0.03944433,
...
...
...
-0.03167224,
-0.13942884
]
}
}
}
}
}将 cosineSimilarity 与其他 Elasticsearch 查询结合使用,可以无限地实现更复杂的用例。?结论?面部识别可能与许多用例相关,并且你可能已经在日常生活中使用了它。 上面描述的概念可以推广到图像或视频中的任何对象检测,因此你可以将用例扩展到非常大的应用场景。?参考?l?https://www.elastic.co/blog/how-to-build-a-facial-recognition-system-using-elasticsearch-and-python?创作人简介: 刘晓国,现为 Elastic 社区资深布道师。新加坡国立大学硕士,西北工业大学本硕。曾就职于新加坡科技,康柏电脑,通用汽车,爱立信,诺基亚,Linaro 非营利组织(Linux for ARM),Ubuntu,LinkMotion,Vantiq等企业。从事过通信,电脑设计,计算机操作系统,物联网,汽车电子,云实时事件处理,大数据搜索等行业。从爱立信开始,到后来的诺基亚,Ubuntu从事社区工作有超过 15 年以上经历。喜欢分享自己所学到的知识,希望和大家一起分享及学习。博客:https://elasticstack.blog.csdn.net/
带你读《Elastic Stack 实战手册》之68:——3.5.20. ECS介绍(上)
3.5.20. ECS介绍创作人:徐天豪审稿人:亢伟楠?Elastic Common Schema (ECS) 是一个开源规范,定义了在 Elasticsearch 中存储事件数据时要使用的一组通用字段,规范了命名、层级与类型。?背景?无论你是在执行安全分析、运营分析,还是完全不同的用例,你都可能常常需要对来自不同来源的数据进行集中分析。?这些不同来源的数据里面常常会出现字段含义相同但实际名称类型不一致的情况,比如:对于源 ip 这个字段,有的厂商起名为 source_ip,有的厂商起名为 src_ip在下述的一些数据源不同的情况,会使我们的数据在格式方面常常出现各种不一致的现象:?l?不同的数据类型(例如指标、日志、APM)l?采用了不同供应商的设备l?相似但不完全相同的数据源(例如端点数据的多个来源,譬如 IDS、防火墙 和 IPS)?在这种情况下,假设我们需要结合多数据源进行下钻分析,全局监控时,我们会面临巨大的工作量:l?当我们接入新的数据源后,在使用数据之前需要熟悉其中的每个字段l?当我们查询的时候的,需要针对不同的数据源调整查询语句l?当我们配置仪表盘告警的时候,需要针对不同的数据源进行大量的重复配置?由于这种多数据源字段命名、类型不一致的问题会给我们实际工作中带来大量重复的定制化工作,因此迫切的需要通过定义一组通用的字段和数据类型,让用户对不同的数据源执行统一的搜索、可视化和分析。?ECS是什么?Elastic Common Schema(ECS)是一个开源规范,它定义了一组通用字段和命名准则,用于将数据采集到 Elasticsearch 中,可让用户以一致的方式分析来自不同来源的数据。ECS 是灵活的,你可以添加自定义的字段。?ECS 将许多字段针对用途进行了分组,这些分组又被称为“字段集”。其中 base 字段集中的字段是在事件的最顶层中进行定义的,所有其他字段集都定义为 Elasticsearch 中的嵌套对象,所有字段都在该对象下定义。完整的 ECS Field reference 可以直接参考官方文档:https://www.elastic.co/guide/en/ecs/1.9/ecs-field-reference.html?。ECS 采用专门构建的分类学,具有很好的可预测性,同时还包括可适应定制用例的包罗万象的规格,具有很好的通用性。ECS 的分类学会将数据元素划分为以下三个级别的字段:通过下图我们可以看到通过 ECS 实现了每一个字段,字段名称与字段类型的统一。如何使用ECS?如何转换我们要做的事就是将现有的数据按照 ECS 的规范进行映射转换,具体的话可以分为以下三个步骤:?1、查看原始事件中的每个字段并将其映射到相关的 ECS 字段。2、查看我们正在使用的任何字段集中的其他核心字段、扩展字段,并尝试填充它。3、设置ecs.version为我们当前正在使用的版本,方便后续的版本升级。?我们以下面的这一条事件为例:?1、这条事件里的信息可以对应上4个ECS字段集,分别是 agent、cloud、event、host,再加上base 共计5个 ECS 字段集,我们将其中的每个字段映射成相关的 ECS 字段。2、如果不存在相关的 ECS 核心字段与扩展字段,使用 ECS 命名准则自定义字段,并将原始事件字段映射到该字段。3、查看这6个字段集中的所有核心字段与扩展字段,并尝试填充它。l?考虑根据其他元数据(例如静态信息)填充该字段(例如,event.category:authentication即使你的身份验证事件未提及“authentication”一词,也要添加)。l?尽可能的采集其他环境元数据,例如有关主机、容器或云实例的信息。4、设置ecs.version信息,方便后续版本升级。什么时候进行转换ECS 字段转换的动作可以发生在事件的产生阶段,ETL 阶段或者 ingest 阶段进行转换。注意:从 Beats 7.0 开始,所有事件源已经自动全部转换为 ECS 格式,如果我们采用 Beats?版本低于7.0的话,我们需要手动在后续环节进行字段的转换。?自定义字段命名注意事项?l?不要使用和 ECS namespace 冲突的字段名l?所有的字段名必须小写l?除了下划线和点以外不能有其他的特殊字符l?使用下划线连接词语l?尽可能避免使用缩写l?除非字段描述历史信息,否则使用现在时l?正确使用单复数名称以反映字段内容?《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.20. ECS介绍(下) /article/1226519?
带你读《Elastic Stack 实战手册》之61:——3.5.17.Elasticsearch SQL (1)
3.5.17.Elasticsearch SQL ?创作人:杨智审稿人:刘帅?一、初步了解?1. Elasticsearch SQL 是什么??2018年6月,Elasticsearch 6.3 版本 X-Pack 插件中引入新的 SQL 查询功能,虽然一直到现在,有经验的专业人员仍然更加喜欢使用 Elasticsearch DSL 来进行搜索,但是毫无疑问,Elasticsearch SQL 的查询语法对于新用户更加友好,毕竟大部分程序员并不想从头学习一门新的语言。下面是两条等价的查询语句:# Elasticsearch SQL 查询语句
POST /_sql?format=txt
{
"query": """
SELECT AVG(DistanceKilometers) AS AvgDistance,
OriginCountry
FROM kibana_sample_data_flights
WHERE DestWeather='Sunny' AND AvgTicketPrice>=300
GROUP BY OriginCountry
ORDER BY OriginCountry ASC LIMIT 5"""
}
# Elasticsearch DSL 查询语句
GET kibana_sample_data_flights/_search
{
"size" : 0,
"query" : {
"bool" : {
"must": [
{
"term" : {
"DestWeather" : {
"value" : "Sunny"
}
}
},
{
"range" : {
"AvgTicketPrice" : {
"gte": 300
}
}
}
]
}
},
"aggregations" : {
"groupby" : {
"composite" : {
"size": 5,
"sources" : [
{
"a1" : {
"terms" : {
"field" : "OriginCountry",
"order" : "asc"
}
}
}
]
},
"aggregations" : {
"a2" : {
"avg" : {
"field" : "DistanceKilometers"
}
}
}
}
}
}2. Elasticsearch SQL 不是什么??Elasticsearch SQL 提供了一个符合 ANSI SQL 规范的只读接口,即通过 Elasticsearch SQL,我们只能进行搜索,无法实现创建、更新、删除 Elasticsearch 的索引或者索引中的文档。?Elasticsearch SQL 的查询功能,相比较于其他关系型数据库的 SQL 查询,有许多独特之处,例如: Elasticsearch SQL 不支持 join 查询语法,但却实现了更加强大的聚合分析函数。更多不同之处,下文将会详细介绍。?3. 环境说明?本文测试环境为 Elasticsearch Cloud?免费试用的 Elasticsearch 集群,其中 Elasticsearch 和 Kibana 版本是 7.14.0,文中查询的索引 test_logs 即是 Kibana 示例索引kibana_sample_data_logs。# 新建索引别名
POST _aliases
{
"actions": [
{
"add": {
"index": "kibana_sample_data_logs",
"alias": "test_logs"
}
}
]
}《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.17.Elasticsearch SQL (2) /article/1227076