华为云用户手册

  • 方案架构 图1 迁移流程 通过 CSS 服务的读写分离插件迁移华为云Elasticsearch集群(源集群)至华为云Elasticsearch(目标集群)的数据迁移流程如图1所示。 通过读写分离插件建立源集群和目标集群的连接。 在目标集群配置索引自动同步,实现源集群的数据自动同步到目标集群。同步周期默认是30秒,支持修改。 查询自动同步状态,确认集群数据是否迁移完成。 更多关于 CS S服务的读写分离功能的介绍请参见配置Elasticsearch集群读写分离。
  • 应用场景 7.6.2和7.10.2版本的华为云Elasticsearch集群默认安装了CSS服务的读写分离插件,通过配置读写分离可以实现Elasticsearch集群间的索引数据近实时同步。 通过读写分离插件实现华为云Elasticsearch集群间数据迁移仅适用于源集群和目标集群都是CSS服务的集群。常用于以下场景: 跨地域或跨账号迁移:将其他Region或账号下的Elasticsearch集群迁移到当前集群中。 集群合并:将两个Elasticsearch集群的索引数据合并到一个集群中。
  • 方案优势 易于操作和管理:在CSS服务控制台使用集群快照功能实现备份恢复,操作简单,且易于管理和自动化。 适用于大规模数据迁移:快照备份适用于数据量大的场景,特别是当数据量达到GB、TB甚至PB级别时。 支持跨地域和跨账号迁移:通过结合OBS的跨区域复制功能,可以实现跨地域和跨账号的数据迁移。 恢复过程可控:在恢复数据时,可以选择恢复特定索引或全部索引,并且可以指定恢复到特定的集群状态。 迁移时长可控:基于迁移时长评估公式可以配置数据迁移速率,理想状态下等于文件复制速率。
  • 迁移时长 迁移过程的耗时长短依赖于源集群和目标集群的节点个数或索引shard个数。迁移过程分为备份阶段和恢复阶段,备份阶段耗时由源集群决定,恢复阶段耗时由目标集群决定。迁移总时长的评估公式如下: 当索引shard个数大于节点个数时 总时长(S)=(800G÷40MB÷源集群节点个数+800G÷40MB÷目的集群节点个数)x索引个数 当索引shard个数小于节点个数时 总时长(S)=(800G÷40MB÷源集群索引shard个数+800G÷40MB÷目的集群索引shard个数)x索引个数 评估公式是基于理想状态下(即单节点以最快速度40MB/s传输)的迁移时长,实际迁移时长还会受到网络、资源等因素影响。
  • 应用场景 通过备份与恢复实现华为云Elasticsearch集群间数据迁移仅适用于源集群和目标集群都是CSS服务的集群,且依赖 对象存储服务 OBS。常用于以下场景: 跨地域或跨账号迁移:将其他Region或账号下的Elasticsearch集群迁移到当前集群中。 跨版本迁移:将低版本的Elasticsearch集群数据迁移到高版本的集群中。 集群合并:将两个Elasticsearch集群的索引数据合并到一个集群中。
  • 应用场景 S3插件(repository-s3)是一个专为Elasticsearch设计的插件,该插件允许用户将Elasticsearch的快照备份存储到与S3 API兼容的存储服务中,例如华为云的对象存储服务(OBS)。S3插件提供了一种高效、灵活且安全的方式来备份Elasticsearch集群的数据。 通过S3插件实现自建Elasticsearch集群和华为云Elasticsearch集群之间的数据迁移,常用于以下场景: 服务迁移上云:将自建的Elasticsearch服务迁移到云平台,以利用云服务的可扩展性、维护简便性和成本效益。 跨版本迁移:将低版本的自建Elasticsearch集群数据迁移到高版本的华为云Elasticsearch集群中。 集群整合:将多个自建Elasticsearch集群迁移到一个华为云Elasticsearch集群中整合为统一的数据平台,以简化管理和提高数据一致性。 技术栈统一:当企业已经在华为云上运行其他服务时,为了技术栈的统一和简化管理,可以选择将Elasticsearch集群也迁移至华为云。
  • 操作步骤 获取Elasticsearch集群信息 准备迁移环境:创建ECS并准备必要的迁移工具和脚本。 创建Logstash集群:创建一个Logstash集群用于迁移数据。 验证集群间的网络连通性:验证Logstash和源Elasticsearch集群的连通性。 使用Logstash迁移集群 在集群迁移初期或需要确保数据完整性的场景,推荐使用Logstash全量迁移集群数据。 在需要持续同步数据或对数据实时性有较高要求的场景,推荐使用Logstash增量迁移集群数据。 释放Logstash集群:当集群迁移完成后,请及时释放Logstash集群。
  • 应用场景 华为云Logstash是一款全托管的数据接入处理服务,兼容开源Logstash的能力,支持用于Elasticsearch集群间数据迁移。 通过华为云Logstash可以实现华为云Elasticsearch、自建Elasticsearch或第三方Elasticsearch迁移至华为云Elasticsearch,该方案常用于以下场景: 跨版本迁移:利用Logstash的兼容性和灵活性,实现不同版本间的数据迁移,确保数据在新版本中的可用性和一致性。适用于Elasticsearch集群版本跨度较大的迁移场景,例如从6.X版本迁移至7.X版本。 集群合并:使用Logstash进行数据迁移,将多个Elasticsearch集群的数据整合到一个Elasticsearch集群中,实现多个Elasticsearch数据的统一管理和分析。 服务迁移上云:将自建的Elasticsearch服务迁移到云平台,以利用云服务的可扩展性、维护简便性和成本效益。 变更服务提供商:如果企业当前使用的是第三方Elasticsearch服务,但出于成本、性能或其他战略考虑,希望更换服务提供商至华为云。
  • 约束限制 集群迁移过程中,源集群的索引数据不能增删改,否则会导致迁移后的源集群数据和目标集群数据内容不一致。 集群间需要保证网络连通。 如果源集群、Logstash和目标集群在不同VPC,则需要先打通VPC网络建立对等连接。具体操作请参见对等连接简介。 如果是自建Elasticsearch集群迁移至华为云,则可以通过给自建Elasticsearch集群配置公网访问打通网络。 如果是第三方Elasticsearch集群迁移至华为云,则需要建立企业内部数据中心到华为云的VPN通道或专线。
  • 方案架构 图1 迁移流程 通过华为云Logstash实现Elasticsearch集群间数据迁移的迁移流程如图1所示。 输入(Input):华为云Logstash接收来自华为云Elasticsearch、自建Elasticsearch或第三方Elasticsearch的数据。 华为云Elasticsearch、自建Elasticsearch或第三方Elasticsearch数据迁移到华为云Elasticsearch的操作步骤相同,只是获取源集群的访问地址有差异,具体请参见获取Elasticsearch集群信息。 过滤(Filter):华为云Logstash对数据进行清洗和转换。 输出(Output):华为云Logstash将数据输出到目标设备,如华为云Elasticsearch。 根据业务需求,可以选择全量数据迁移或增量数据迁移。 全量数据迁移:使用Logstash进行全量数据迁移,适用于迁移初期或需要确保数据完整性的场景。 增量数据迁移:通过Logstash配置增量查询,可以只迁移有增量字段的索引数据。此方法适用于需要持续同步数据或对数据实时性有较高要求的场景。
  • 方案优势 高版本兼容性:适用于不同版本的Elasticsearch集群迁移。 高效的数据处理能力:Logstash支持批量读写操作,可以大幅度提高数据迁移的效率。 并发同步技术:利用slice并发同步技术,可以提高数据迁移的速度和性能,尤其是在处理大规模数据时。 配置简单:华为云Logstash的配置相对简单直观,通过配置文件即可实现数据的输入、处理和输出。 强大的数据处理功能:Logstash内置了丰富的过滤器,可以在迁移过程中对数据进行清洗、转换和丰富。 灵活的迁移策略:根据业务需求,可以灵活选择全量迁移或增量迁移,优化存储使用和迁移时间。
  • 应用场景 通过备份与恢复实现第三方Elasticsearch集群和华为云Elasticsearch集群之间的数据迁移,依赖存储仓库。常用于以下场景: 变更服务提供商:如果企业当前使用的是第三方Elasticsearch服务,但出于成本、性能或其他战略考虑,希望更换服务提供商至华为云。 集群整合:将分散在不同第三方Elasticsearch集群中的数据统一数据迁移到华为云Elasticsearch集群进行集中管理,以实现更高效的数据分析和查询。 跨版本迁移:将低版本的第三方Elasticsearch集群数据迁移到高版本的华为云Elasticsearch集群中。 技术栈统一:当企业已经在华为云上运行其他服务时,为了技术栈的统一和简化管理,可以选择将Elasticsearch集群也迁移至华为云。
  • 操作步骤 登录Elasticsearch所在的第三方友商云,创建一个支持s3协议的共享存储仓库,例如登录阿里云的进入OSS服务创建目录“patent-esbak”, 或者登录腾讯云进入COS服务创建目录“patent-esbak”。 在第三方Elasticsearch集群中创建快照备份仓库,用于存放Elasticsearch快照数据。 例如,在Elasticsearch中创建一个备份仓库“my_backup”,关联到存储仓库OSS。 PUT _snapshot/my_backup { # 存储仓库类型。 "type": "oss", "settings": { # 步骤1中存储仓库的内网访问 域名 。 "endpoint": "http://oss-xxx.example.com", # 存储仓库的用户ID和密码。认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密, 确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ak和sk。 "access_key_id": "ak", "secret_access_key": "sk", # 步骤1创建的存储仓库的bucket名称。 "bucket": "patent-esbak", # 是否打开快照文件的压缩功能。 "compress": false, # 配置此参数可以限制快照数据的分块大小。当上传的快照数据超过这个数值,数据就会被分块上传到存储仓库中。 "chunk_size": "1g", # 仓库的起始位置,默认是根目录。 "base_path": "snapshot/" } } 在第三方Elasticsearch集群中创建快照。 为所有索引创建快照。 例如,创建一个名为“snapshot_1”的快照。 PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true 为指定索引创建快照。 例如,创建一个名为“snapshot_test”的快照,该快照包含索引“patent_analyse”和“patent”。 PUT _snapshot/my_backup/snapshot_test { "indices": "patent_analyse,patent" } 在第三方Elasticsearch集群中查看集群的快照创建进度。 执行如下命令,可以查看所有快照信息。 GET _snapshot/my_backup/_all 执行如下命令,可以查看指定快照“snapshot_1”的信息。 GET _snapshot/my_backup/snapshot_1 通过华为云 对象存储迁移 服务 OMS 将快照数据从存储仓库迁移到对象存储服务OBS的“esbak”桶中。 OMS支持多种云服务商数据迁移到对象存储服务OBS中,具体请参见各云服务商迁移教程。 在OMS创建迁移任务时,“元数据迁移方式”一定要选择“保留元数据”,否则数据迁移会有异常。 在CSS服务的Elasticsearch集群中创建一个存储仓库关联到OBS,用于恢复第三方Elasticsearch的快照数据。 例如,在集群中创建一个“my_backup_all”的存储仓库,关联上一步OBS桶“esbak”。 PUT _snapshot/my_backup_all/ { "type" : "obs", "settings" : { # OBS的内网访问域名。 "endpoint" : "obs.xxx.example.com", "region" : "xxx", # 访问OBS的用户名和密码。认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险, 建议在配置文件或者环境变量中密文存放, 使用时解密, 确保安全;本示例以ak和sk保存在环境变量中为例, 运行本示例前请先在本地环境中设置环境变量ak和sk。 "access_key": "ak", "secret_key": "sk", # OBS的桶名称,和上一步迁移目标集群的OBS桶名保持一致。 "bucket" : "esbak", "compress" : "false", "chunk_size" : "1g", # 注意“snapshot”后面没有/。 "base_path" : "snapshot", "max_restore_bytes_per_sec": "100mb", "max_snapshot_bytes_per_sec": "100mb" } } 在CSS服务的Elasticsearch集群中通过快照恢复数据。 查看所有快照信息。 GET _snapshot 通过快照恢复数据。 恢复某一快照中的所有索引。例如恢复名为“snapshot_1”的快照的所有索引数据。 POST _snapshot/my_backup_all/snapshot_1/_restore?wait_for_completion=true 恢复某一快照中的部分索引。例如名为“snapshot_1”的快照中只恢复非“.”开头的索引。 POST _snapshot/my_backup/snapshot_1/_restore {"indices":"*,-.monitoring*,-.security*,-.kibana*","ignore_unavailable":"true"} 恢复某一快照中的指定索引,并重命名。例如在名为“snapshot_1”的快照中,将索引“index_1”恢复为“restored_index_1”,“index_2”恢复为“restored_index_2”。 POST /_snapshot/my_backup/snapshot_1/_restore { # 只恢复索引“index_1”和“index_2”,忽略快照中的其他索引。 "indices": "index_1,index_2" # 查找正在恢复的索引,该索引名称需要与提供的模板匹配。 "rename_pattern": "index_(.+)", # 重命名查找到的索引。 "rename_replacement": "restored_index_$1" } 查看快照恢复结果。 查看所有快照的恢复结果。 GET /_recovery/ 查看指定索引的快照恢复结果。 GET {index_name}/_recovery
  • 步骤3:搜索数据 在Elasticsearch集群中对数据进行全文检索和聚合结果显示。 全文检索 假设用户进入该电商网站,她想要查找名称包含“春装牛仔裤”的商品信息,可以搜索“春装牛仔裤”。 在Kibana执行如下搜索命令。 GET /my_store/_search { "query": {"match": { "productName": "春装牛仔裤" }} } 返回结果如下所示。 { "took" : 3, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 4, "relation" : "eq" }, "max_score" : 1.7965372, "hits" : [ { "_index" : "my_store", "_type" : "_doc", "_id" : "9xf6VHIBfClt6SDjw7H5", "_score" : 1.7965372, "_source" : { "productName" : "2018春装新款牛仔裤女装", "size" : "M" } }, { "_index" : "my_store", "_type" : "_doc", "_id" : "-Bf6VHIBfClt6SDjw7H5", "_score" : 1.7965372, "_source" : { "productName" : "2018春装新款牛仔裤女装", "size" : "S" } }, { "_index" : "my_store", "_type" : "_doc", "_id" : "-Rf6VHIBfClt6SDjw7H5", "_score" : 0.5945667, "_source" : { "productName" : "2017春装新款休闲裤女装", "size" : "L" } }, { "_index" : "my_store", "_type" : "_doc", "_id" : "-hf6VHIBfClt6SDjw7H5", "_score" : 0.5945667, "_source" : { "productName" : "2017春装新款休闲裤女装", "size" : "S" } } ] } } Elasticsearch支持IK分词,上面执行命令会将“春装牛仔裤”分词为“春装”和“牛仔裤”。 Elasticsearch支持全文检索,上面执行命令会在所有商品信息中搜索包含“春装”或“牛仔裤”的商品信息。 Elasticsearch与传统数据库不同,它能借助倒排索引在毫秒级返回结果。 Elasticsearch支持评分排序,在上面返回结果中,前两条商品信息中同时出现了“春装”和“牛仔裤”,后两条商品信息中只出现了“春装”,所以前两条比后两条与检索关键词的匹配度更高,分数更高,排序也更靠前。 聚合结果显示 该电商网站可以提供聚合结果显示功能,例如: 对“春装”对应的产品按照尺码分类,统计不同尺码的数量。 在Kibana执行如下聚合结果命令。 GET /my_store/_search { "query": { "match": { "productName": "春装" } }, "size": 0, "aggs": { "sizes": { "terms": { "field": "size" } } } } 返回结果如下所示。 { "took" : 3, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 4, "relation" : "eq" }, "max_score" : null, "hits" : [ ] }, "aggregations" : { "sizes" : { "doc_count_error_upper_bound" : 0, "sum_other_doc_count" : 0, "buckets" : [ { "key" : "S", "doc_count" : 2 }, { "key" : "L", "doc_count" : 1 }, { "key" : "M", "doc_count" : 1 } ] } } }
  • 场景描述 某女装品牌在网上经营电商业务,以前使用传统数据库来为用户提供商品搜索功能,但随着用户数量和业务的增长,使用传统数据库的弊端愈来愈明显。主要问题表现为响应速度慢、准确性低。为了改善用户体验从而避免用户流失,该电商网站开始使用 云搜索服务 为用户提供商品搜索功能,不仅解决了之前使用传统数据库产生的问题,而且实现了用户数量的增长。 假设该电商网站经营商品的数据如下所示: { "products":[ {"productName":"2017秋装新款文艺衬衫女装","size":"L"} {"productName":"2017秋装新款文艺衬衫女装","size":"M"} {"productName":"2017秋装新款文艺衬衫女装","size":"S"} {"productName":"2018春装新款牛仔裤女装","size":"M"} {"productName":"2018春装新款牛仔裤女装","size":"S"} {"productName":"2017春装新款休闲裤女装","size":"L"} {"productName":"2017春装新款休闲裤女装","size":"S"} ] }
  • 操作流程 以下是使用Elasticsearch集群完成数据搜索的操作步骤。 开始迁移数据前,请务必按准备工作指导完成必要操作。 步骤1:创建集群:创建一个Elasticsearch非安全集群用于搜索数据。 步骤2:导入数据:在Kibana上使用开源Elasticsearch API导入数据。 步骤3:搜索数据:在Elasticsearch集群中对数据进行全文检索和聚合结果显示。 步骤4:删除索引:当不再使用对应的索引数据时,可以删除对应索引节约资源。
  • 步骤2:导入数据 Elasticsearch集群支持通过多种方式导入数据,本示例选择在Kibana使用开源Elasticsearch API导入数据。 在Elasticsearch集群管理页面,选择已创建的“Sample-ESCluster”集群,单击操作列中的“Kibana”进入Kibana控制台。 在Kibana的左侧导航中选择“Dev Tools”,进入Console界面。 Console左侧区域为输入框,输入框右侧的三角形为执行命令按钮,Console右侧为结果输出区域。 图5 Console界面 在Console界面,执行如下命令创建索引“my_store”。 PUT /my_store { "settings": { "number_of_shards": 1 }, "mappings": { "properties": { "productName": { "type": "text", "analyzer": "ik_smart" }, "size": { "type": "keyword" } } } } 返回结果如下所示。 { "acknowledged" : true, "shards_acknowledged" : true, "index" : "my_store" } 在Console界面,执行如下命令,将数据导入到“my_store”索引中。 POST /my_store/_doc/_bulk {"index":{}} {"productName":"2017秋装新款文艺衬衫女装","size":"L"} {"index":{}} {"productName":"2017秋装新款文艺衬衫女装","size":"M"} {"index":{}} {"productName":"2017秋装新款文艺衬衫女装","size":"S"} {"index":{}} {"productName":"2018春装新款牛仔裤女装","size":"M"} {"index":{}} {"productName":"2018春装新款牛仔裤女装","size":"S"} {"index":{}} {"productName":"2017春装新款休闲裤女装","size":"L"} {"index":{}} {"productName":"2017春装新款休闲裤女装","size":"S"} 当返回结果信息中“errors”字段的值为“false”时,表示导入数据成功。
  • 准备工作 已 注册华为账号 并开通华为云,进行了实名认证,且在使用 云搜索 服务前检查账号状态,账号不能处于欠费或冻结状态。 如果您还没有华为账号,请参考以下步骤创建。 打开华为云网站。 在页面右上角单击“注册”,根据提示信息完成注册。 勾选服务条款, 单击“开通”。 实名认证,请参考: 个人账号:实名认证 企业账号:实名认证 已准备好源Elasticsearch集群“Source-ES”和目标Elasticsearch集群“Dest-ES”,且都是单节点的非安全集群。
  • 步骤4:启动迁移任务 在Logstash集群启动配置好的迁移任务。 在Logstash集群管理页面,选择已创建的“Sample-Logstash”集群,进入集群基本信息页面。 单击右侧“配置中心”,进入Logstash配置中心界面。 选择状态为“可用”的配置文件,单击“启动”,启动配置任务。管道列表中“事件”列显示配置任务处理的任务数量。 图10 启动配置任务 数据迁移完毕,检查目标Elasticsearch集群和源集群数据的一致性。例如,分别在源集群和目标集群执行_cat/indices命令,对比两者的索引信息是否一致。 在Elasticsearch集群管理页面,选择源Elasticsearch集群“Source-ES”或目标Elasticsearch集群“Dest-ES”,单击操作列中的“Kibana”进入Kibana控制台。 在Kibana的左侧导航中选择“Dev Tools”,进入Console界面。 在Console界面,执行如下命令查看索引信息。 _cat/indices
  • 操作流程 以下是使用Logstash集群将源Elasticsearch集群迁移到目标Elasticsearch集群的操作步骤。 开始迁移数据前,请务必按准备工作指导完成必要操作。 步骤1:获取Elasticsearch集群信息:获取源Elasticsearch集群和目标Elasticsearch集群的访问地址。 步骤2:创建Logstash集群:创建一个Logstash集群用于迁移Elasticsearch集群的数据。 步骤3:配置迁移任务:在Logstash集群配置Elasticsearch集群的迁移任务。 步骤4:启动迁移任务:在Logstash集群启动配置好的迁移任务。 步骤5:停止任务:当数据迁移完成,不再需要迁移任务时,您可以停止任务。 步骤6:删除集群:无需继续使用集群时,可删除集群释放资源。
  • 步骤3:配置迁移任务 在Logstash集群配置Elasticsearch集群的迁移任务。 在Logstash集群管理页面,选择已创建的“Sample-Logstash”集群,进入集群基本信息页面。 单击右侧“配置中心”,进入Logstash配置中心界面。 图6 Logstash配置中心界面 在配置中心界面,单击右上角“创建”,进入创建配置文件页面,编辑配置文件。 图7 配置任务 表5 创建配置文件参数说明 参数 说明 取值样例 名称 自定义配置文件名称。 只能包含字母、数字、中划线或下划线,且必须以字母开头。必须大于等于4个字符。 es-es 配置文件内容 展开上方“系统模板”,选择“elasticsearch”,单击操作列的“应用”,在配置文件内容中,基于模板注释填写配置项。 关键配置项请参见表6,其他配置项保持默认值。 隐藏内容列表 配置隐藏字符串列表后,在返回的配置内容中,会将所有在列表中的字串隐藏为“***”。 输入需要隐藏的敏感字串列表,按“Enter”创建。 列表最大支持20条,单个字串最大长度512字节。 不涉及 表6 配置项说明 配置 说明 取值样例 hosts 分别在input和output中填写源Elasticsearch集群和目标Elasticsearch集群的访问地址。获取方式请参见步骤1:获取Elasticsearch集群信息。 input hosts:http://10.62.179.32:9200 output hosts:http://10.62.179.33:9200 user 访问Elasticsearch集群的用户名。仅安全集群涉及,如果是非安全集群则此项使用“#”注释掉。 使用“#”注释掉 password 访问Elasticsearch集群的密码。仅安全集群涉及,如果是非安全集群则此项使用“#”注释掉。 使用“#”注释掉 index 需要迁移的索引信息,可以使用通配符设置。 index* 编辑完成后,单击“下一页”配置Logstash管道参数。 图8 配置管道参数 表7 管道参数说明 参数 说明 取值样例 pipeline.workers 并行执行管道的Filters和Outputs阶段的工作线程数。 4 pipeline.batch.size 单个工作线程在尝试执行其Filters和Outputs之前将从inputs收集的最大事件数,该值较大通常更有效,但会增加内存开销。 125 pipeline.batch.delay 创建管道事件批时,在将过小的批调度到管道工作线程之前,等待每个事件的时间。 50 query.type 用于事件缓冲的内部队列模型。 “memory”为基于内存的传统队列。 “persisted”为基于磁盘的ACKed持久化队列。 memory 配置完成后,单击“创建”,系统会自动进行配置文件校验,等待配置文件状态为“可用”,表示创建成功。 图9 配置文件校验
  • 与其他服务之间的关系 CSS与其他服务的关系如图1所示。 图1 CSS与其他服务的关系 表1 CSS服务于其他服务的关系 相关服务 交互功能 虚拟私有云(Virtual Private Cloud,简称VPC) 云搜索服务CSS的集群创建在虚拟私有云(VPC)的子网内,VPC通过逻辑方式进行网络隔离,为用户的集群提供安全、隔离的网络环境。详细请参考虚拟私有云用户指南。 弹性云服务器(Elastic Cloud Server,简称ECS) 云搜索服务CSS的集群中每个节点为一台弹性云服务器(ECS)。创建集群时将自动创建弹性云服务器作为节点。 云硬盘(Elastic Volume Service,简称EVS) 云搜索服务CSS使用云硬盘(EVS)存储索引数据。创建集群时,将自动创建云硬盘用于集群存储。 对象存储服务(Object Storage Service,简称OBS) 云搜索服务CSS的集群快照存储在对象存储服务(OBS)的桶中。详细请参考对象存储服务用户指南。 统一身份认证 服务(Identity and Access Management,简称 IAM ) 云搜索服务CSS使用统一身份认证服务(IAM)进行鉴权。详细请参考统一身份认证服务用户指南。 云监控服务 (Cloud Eye) 云搜索服务使用 云监控 服务实时监测集群的指标信息,保障服务正常运行。云搜索服务当前支持的监控指标为磁盘使用率和集群健康状态。用户通过磁盘使用率指标可以及时了解集群的磁盘使用情况。通过集群健康状态指标,用户可以了解集群的健康状态。详细请参考云监控服务用户指南。 云审计 服务(Cloud Trace Service,简称 CTS ) 云审计服务(CTS)可以记录与CSS云搜索服务相关的操作事件,便于日后的查询、审计和回溯。详细请参考云审计服务用户指南。
  • 原因分析 导致出现I/O Reactor STOPPED的原因,大致可以分为以下3类: 回调中抛出异常导致。 客户端并发太高导致。 在日志中发现异常后,查看ElasticSearch集群监控指标,如CPU使用率、网络连接数等。 当用户集群配置为5台16U128G的i3.4xlarge.8节点时,且每天上午5点左右会做大量bulk操作,写入大概100G-200G的数据,根据集群监控指标的CPU使用率、网络流入流出速率来看对ElasticSearch节点造成不了压力,网络连接数较高,其它节点情况也相同。但是,有的节点网络连接数高达近9000,5个节点瞬间有将近5万连接数,用户的代码大致是用同一个Rest Client多个线程并发且调用HLRC的bulkAsync接口。客户端一个节点,单是ES的连接就消耗了4-5万个连接数,这种情况很容易造成客户端节点句柄数耗尽,或者连接数耗尽。 ElasticSearch的Rest client导致。建议ElasticSearch完善Rest client,添加exception handler。 Apache(HLRC和LLRC都使用了Apache HTTPComponents Async Client)手册中提到,在与会话通道交互过程中有些I/O异常是可以预料的,这些异常可能会导致单个session终止,但不会影响I/O Reactor和其他session。但某些情况下,当I/O Reactor本身遇到内部问题是,例如底层NIO的一些类中的I/O异常或者没被handle的一些Runtime Exception。这些异常是致命的,会使I/O Reactor关闭。Apache官方建议重写IOReactorExceptionHandler接口。 图3 重写IOReactorExceptionHandler接口 但是尝试了重写ExceptionHandler并放到HLRC的配置中,并通过在回调中抛出异常来模拟异常场景,最后发现这种回调的异常并不会被IOReactorExceptionHandler捕获,运行脚本后也没有异常抛出,所以此处IOReactorExceptionHandler的实现并不好验证。通过ElasticSearch社区issue中其他开发者的验证,添加了IOReactorExceptionHandler后跑很久也不会有问题。所以建议添加IOReactorExceptionHandler,但是注意不要忽略所有异常。 Elasticsearch Rest Client需要有一个exception handler,而不是让用户通过设置IOReactorExceptionHandler来处理异常,且这种方式也不会解决所有的异常。
  • I/O Reactor STOPPED是什么问题? 首先根据调用栈可以定位到报错来自CloseableHttpAsyncClientBase中的90行,如下图所示: ensureRunning()方法是在每次请求执行开始的时候调用,用来确认client状态是否为ACTIVE,如果不是ACTIVE,则会报错。然后观察CloseableHttpAsyncClientBase中的status何时会变成STOPPED,发现有且仅有两处会set为STOPPED,如下图所示: 图1 第一处STOPPED 图2 第二处STOPPED 由于客户不会手动关闭客户端之后再调用接口,所以有且仅有第一处会导致status切换为STOPPED状态。 对于第一处STOPPED,reactorThread线程是用来在io events发生时调度io events,当内部抛出异常时,最终会将status改为STOPPED状态。然后在bulkAsync请求的回调中抛出异常验证status的状态切换,如下图所示: 当请求失败,status会切换为STOPPED且I/O Reactor将关闭,并使HLRC实例卡住。后续使用该HLRC实例调用任何请求都会失败。此处手动抛出异常是为了复现问题,生产环境中很难分辨是什么原因导致I/O Reactor关闭。
  • 统计图表类型 支持使用表格、柱状图、折线图等图表类型展示不同场景数据,详细请参考表1。 表1 图表类型 图表类型 使用场景 表格 表格是最常见的数据展示类型,通过对数据结构化的整理,实现数据的对比与统计。大多数场景均适用。 柱状图 柱状图描述的是分类数据,直观表现每一个分类项的大小对比关系。统计近一天各错误码类型出现的次数等分类统计场景适用。 折线图 折线图需要统计数据具备时序字段,依据时间顺序组织与聚合指标。可直观反映指标随时间的变化趋势。 饼图 饼图描述的是不同分类的占比情况,通过扇区大小来衡量各分类项的占比情况。错误码占比情况分析等占比统计场景适用。 数字图 数字图描述的是单个指标,一般选择具备有业务价值的关键性指标。统计天、周、月PV、UV等单指标场景适用。 数字折线图 折线图和数字图的组合。折线图用于表示数据趋势和变化的,数字图则展示关键性指标。在一些需要同时显示趋势和关键数据点的场合适用。 地图 地图通过图形的位置来表现数据的地理位置,通常来展示数据在不同地理区域上的分布情况。攻击IP地理分布等地理位置统计场景适用。 漏斗图 漏斗图适用于单流向单路径的业务流程,对各环节进行统计并用梯形面积表示某个环节业务量与上一个环节之间的差异。
  • 分析日志 登录 云日志 服务控制台,进入“日志管理”页面。 单击目标日志组或日志流名称,进入日志详情页面。 选择“ 日志分析 ”页签。 在可视化页面支持交互式分析,通过该模块配置简单的分析语句,查询可视化数据,配置可视化图表。设置过滤条件,通过添加指标、添加分组、添加排序进行数据分析,方便用户操作。 选择时间范围,参考SQL分析语法介绍输入SQL语句,单击“查询”,在下方区域通过不同类型图表展示搜索结果。 时间范围有三种方式,分别是相对时间、整点时间和自定义。您可以根据自己的实际需求,选择时间范围。 相对时间:表示查询距离当前时间1分钟、5分钟、15分钟等时间区间的日志数据。例如当前时间为19:20:31,设置相对时间1小时,表示查询18:20:31~19:20:31的日志数据。 整点时间:表示查询最近整点1分钟、15分钟等时间区间的日志数据。例如当前时间为19:20:31,设置整点时间1小时,表示查询18:00:00~19:00:00的日志数据。 自定义:表示查询指定时间范围的日志数据。 SQL查询约束有: 单次查询返回结果最多10W条。 当聚合结果超过10W时,聚合结果可能存在误差。 SQL查询语句中,string类型的where条件的键值有限制: 精确查找value需添加英文单引号, 模糊查找value需添加英文单引号或者双引号,key与SQL内置保留字段名称相同时需添加英文双引号。 建议使用where条件时,使用where "key"='value',或者where "key" like '%value%'。 SQL查询语句中,float和long类型的where条件不受限制,但当与关键词冲突时可能会导致查询异常,建议使用where "key"='value',或者where "key" like '%value%'进行查询。 日志搜索框支持自定义上下拖动调整高度。 输入搜索语法后,单击设置格式化sql和反格式化sql,优化搜索语句,提高搜索效率。 当设置时间范围内日志量超过10亿行时会触发迭代查询,可以通过迭代查询分多次完成全部日志的查询,界面会显示“查询状态:结果精确”。 根据SQL查询返回的数据,依照业务需求选择不同图表类型,呈现查询结果。详细请参考使用统计图表将日志可视化。 对查询结果可执行如下操作: 单击“新建”,在弹出的“创建可视化图表”中,根据业务需求填写“图表名称”,开启“同时添加到仪表盘”,单击“确定”,可视化图表保存成功。 单击“保存”,对在弹出的“保存可视化图表”中,根据业务需求填写“图表名称”,开启“同时添加到仪表盘”,单击“确定”,可视化图表保存成功;当选中某个可视化图表时,单击“保存”,可对该图表进行修改。 单击“另存为”,在弹出的“另存为可视化图表”中,根据业务需求填写“图表名称”,开启“同时添加到仪表盘”,单击“确定”,对已有可视化图表进行复制。 须先保存一个图表后,才可另存为可视化图表。 单击“下载”,可下载当前SQL查询结果的可视化数据,该文件为.csv。 单击按钮添加告警,在弹出的“新建告警规则”中,为选中的可视化图表配置创建SQL告警规则。 须先保存一个图表后,才能新建告警规则。 单击“展开图表”,可对当前日志流下的可视化图表展开;单击“收起图表”,可收起当前日志流下展开的可视化图表。
  • 相关操作 创建仪表盘后,单击仪表盘名称进入详情页,您可以编辑仪表盘中的图表、移除仪表盘中的图表、调整仪表盘中图表的位置等,详细请参考表3。 表3 相关操作 操作 说明 编辑仪表盘中的图表 将光标移至图表框右上角,单击,在下拉框中选择“编辑图表”,在可视化页面编辑图表,具体操作请参考分析LTS日志。 移除仪表盘中的图表 将光标移至图表框右上角,单击,在下拉框中选择“移除图表”,单击“保存设计”,可将已创建图表删除。 调整仪表盘中图表的位置 将光标移至待操作的图表框内,选中该图表,可将该图表移动至仪表盘内任意位置,单击“保存设计”,调整当前图表布局。 调整仪表盘中图表的大小 将光标移至待操作的图表框右下角边缘,选中该图表,可根据业务展示内容需求调整图表大小,单击“保存设计”,调整当前图表布局。 编辑仪表盘中的过滤器 将光标移至过滤器框右上角,单击,在下拉框中选择“编辑”,在添加过滤器页面编辑过滤器,具体操作请参考添加过滤器。 复制仪表盘中的过滤器 将光标移至过滤器框右上角,单击,在下拉框中选择“复制”,跳转到添加过滤器页面,单击“确定”即可复制过滤器。 删除仪表盘中的过滤器 将光标移至过滤器框右上角,单击,在下拉框中选择“删除”,在弹出的“删除过滤器”提示框中,单击“确定”即可删除过滤器。 调整仪表盘中过滤器的大小 将光标移至待操作的过滤器右下角边缘,可根据业务展示内容需求调整过滤器大小,单击“保存设计”,调整当前过滤器布局。 自动刷新 单击右上角的,开启仪表盘自动刷新功能,选择自动刷新的时间,可使仪表盘中的所有图表数据自动进行刷新。自动刷新的时间有1分钟、5分钟、15分钟。 手动刷新 选择待操作的仪表盘,单击可手动刷新当前页面。 全屏显示 选择待操作的仪表盘,单击,可全屏显示仪表盘。全屏后,勾选保持在线按钮,可以保持在线状态,会话一直有效,当前账号不会退出。 退出全屏显示 将光标移至屏幕上方,单击弹出的,或者单击,或者按键盘中的“Esc”可退出全屏模式。 全屏显示单个图表 选择待操作的仪表盘,单击取消退出编辑模式。将光标移至图表框右上角,单击,在下拉框中选择“全屏”,可全屏显示图表数据。 退出全屏显示单个图表 将光标移至屏幕上方,单击弹出的,或者单击,在下拉框中选择“退出全屏”,或者按键盘中的“Esc”可退出全屏模式。 手动刷新单个图表 选择待操作的仪表盘,将光标移至图表框右上角,单击,在下拉框中选择“刷新”,或者在全屏模式下,单击,在下拉框中选择“刷新”,可手动刷新当前图表页面。 查询时间设置 选择待操作的仪表盘,单击前面的下拉框。 时间范围有三种方式,分别是相对时间、整点时间和自定义。您可以根据自己的实际需求,选择时间范围。 说明: 相对时间:表示查询距离当前时间1分钟、5分钟、15分钟等时间区间的日志数据。例如当前时间为19:20:31,设置相对时间1小时,表示查询18:20:31~19:20:31的日志数据。 整点时间:表示查询最近整点1分钟、15分钟等时间区间的日志数据。例如当前时间为19:20:31,设置整点时间1小时,表示查询18:00:00~19:00:00的日志数据。 自定义:表示查询指定时间范围的日志数据。 查看图表详情 选择待操作的仪表盘,将光标移至图表框右上角,单击,在下拉框中选择“查看图表详情”,可查看图表详情。 添加告警 选择待操作的仪表盘,将光标移至图表框右上角,单击,在下拉框中选择“添加告警”,可新建告警规则。 复制 选择待操作的仪表盘,将光标移至图表框右上角,单击,在下拉框中选择“复制”,可复制图表到当前仪表盘。 复制到其他仪表盘 选择待操作的仪表盘,将光标移至图表框右上角,单击,在下拉框中选择“复制到其他仪表盘”,可将该图表复制到其他仪表盘。 复制搜索分析语句 选择待操作的仪表盘,将光标移至图表框右上角,单击,在下拉框中选择“复制搜索分析语句”,可复制该图表的搜索分析语句。 导出图表数据 选择待操作的仪表盘,将光标移至图表框右上角,单击,在下拉框中选择“导出图表数据”,可导出图表数据。
  • 创建仪表盘 登录云日志服务控制台,在左侧导航栏中选择“仪表盘 ”。 单击,在“添加仪表盘分组”对话框,自定义填写“分组名称”。 分组名称只支持英文、数字、中文、中划线、下划线及小数点,且不能以小数点、下划线开头或小数点结尾,长度不超过64。 单击“确定”,创建分组成功后。 单击“添加仪表盘”,进入“创建仪表盘”页面,参考表1填写仪表盘相关参数。 表1 创建仪表盘参数 参数名称 说明 仪表盘名称 自定义仪表盘名称,用于区分日志流下不同的仪表盘。 仅支持中英文、数字、中划线、下划线、小数点,不能以小数点开头和结尾,长度不超过255。 企业项目 选择业务需要的企业项目,默认为default。也可单击“查看企业项目”,在企业项目管理页面查看全部企业项目。 添加到仪表盘分组 将新建的仪表盘进行分组管理。 不开启“添加到仪表盘分组”,新建仪表盘会添加到系统自带的“默认分组”中。 开启“添加到仪表盘分组”,新建仪表盘按“分组类型”进行添加: 已有分组:选择已有的仪表盘分组。 新建分组:输入新建仪表盘分组名称。 简洁模式 仪表盘页面简介模式。 开启“简洁模式”,仪表盘界面不显示编辑、删除、添加过滤器等按钮。 关闭“简洁模式”,仪表盘界面显示编辑、删除、添加过滤器等按钮。 添加图表 添加可视化图表:将日志流的可视化图表加入仪表盘。 在“添加图表”区域中,鼠标悬浮在添加可视化图表模块,单击“开始添加图表”,进入添加可视化图表界面。 选择业务需要的日志流,根据业务需要勾选一个或多个图表名称前的,单击“确定”,进入仪表盘详情页后,调整图表信息,单击“保存设计”。 如果当前日志流未配置或没有当前需要的可视化图表,单击“前往添加图表”,新建图表。 使用仪表盘模板:支持选择自定义模板(用户从已创建的仪表盘中提取的模板)和系统模板(LTS提供的系统内置模板,用户无法修改): 在“添加图表”区域中,鼠标悬浮在使用仪表盘模板模块,单击“使用仪表盘模板”,进入使用仪表盘模板界面。 根据业务需要选择仪表盘模板,单击下一步选择业务需要的日志流,根据业务需要勾选一个或多个日志流名称前的,单击“确定”。 仪表盘创建成功后,在仪表盘列表生成一条仪表盘信息。 单击仪表盘操作列的编辑,修改仪表盘名称和简洁模式。 单击仪表盘操作列的移动分组,修改仪表盘分组。 单击仪表盘操作列的删除按钮即可删除删除仪表盘。
  • 新建可视化图表到仪表盘 在仪表盘目录下方,选中仪表盘分组,单击待操作的仪表盘名称进入详情页。 单击,在添加可视化图表界面中,选择相应日志流。单击“前往添加图表”。 在“添加图表”页面,单击“新建”,参照表2填写相关参数,填写完成后单击“确定”。 表2 创建图表 参数 说明 图表名称 自定义图表名称,用于区分日志流下不同的图表。 仅支持中英文、数字、中划线、下划线、空格、括号、小数点,不能以小数点、空格开头或结尾。长度为1-64个字符。 可视化对象 默认语句“SELECT * ”,表示查询该日志流内的结构化数据,其中*为结构化字段。 如需自行编辑SQL语句,请参考SQL分析语法介绍。 图表类型 LTS提供表格、柱状图、折线图等多种图表类型供用户选择。 同时添加到仪表盘 开启“同时添加到仪表盘”,勾选一个或多个仪表盘前面的,可将图表同步添加至勾选的仪表盘中。 关闭“同时添加到仪表盘”,则表示新建图表不在仪表盘显示。 单击“确定”,可视化图表创建成功。
  • 参考示例2:根据关键字出现的次数设置告警 如果您希望在一定时间范围内日志关键字出现的次数达到指定次数时,才触发告警,则您可以参考本示例设置查询分析语句和SQL告警规则。以下示例仅供参考,请以实际业务为准。 使用“SELECT count(*) as Error”在目标日志流查询当前Error总共出现90次。 图4 查询结果 查询语句:选择查询时间范围为5分钟,然后执行如下语句“SELECT count(*) as Error”,统计5分钟内出现Error关键字的次数。更多搜索语法请参考SQL分析语法介绍。 图5 查询语句 告警通知:创建上述告警规则后,只要日志中出现Error关键字超过2次,您就可以在“告警列表”收到告警通知。您还可以单击告警名称,查看告警详情,进行溯源。 图6 告警报错
共100000条