华为云用户手册

  • 短语搜索 短语搜索用于准确匹配目标短语,例如搜索语句#"abc def",区分先后顺序,将匹配所有同时包含abc、def,且abc位于def前面的日志。短语搜索和关键词搜索的区别请参考表2。 短语搜索:在关键词搜索语法的基础上实现,短语搜索能够区分关键词的顺序,用于精准匹配目标短语,搜索结果更加精确。短语搜索适用于英文短语、中文短语的搜索,不支持模糊搜索。 关键词搜索:关键词搜索是基于分词实现,通过分词符先将搜索内容拆分为多个关键词,然后匹配日志。关键词搜索不会区分多个关键词在日志中出现的顺序,因此只要日志中按照搜索的与或非逻辑能命中关键词,该日志就会被搜索到。 表2 搜索区别 搜索方式 说明 示例 短语搜索 区分关键词的顺序,用于精准匹配目标短语,搜索结果更加精确。 假设您的日志流中存在两条原始日志,如下: 原始日志1:this service is lts 原始日志2:lts is service 则搜索:#"is lts",会命中1条日志;搜索:#"lts is",会命中1条日志。 关键词搜索 不区分关键词的顺序,按照搜索逻辑命中关键词即可。 假设您的日志流中存在两条原始日志,如下: 原始日志1:this service is lts 原始日志2:lts is service 则搜索:is lts,会命中2条日志;搜索:lts is,会命中2条日志。 使用限制如下: 短语搜索不支持搭配模糊搜索。 短语搜索中的星号(*)和问号(?)会被视为普通字符,因此短语搜索不支持搭配模糊搜索,可以用来搜索日志中的星号(*)和问号(?)。 短语搜索不支持对分词符进行搜索。 例如搜索语句#"var/log",其中 / 为分词符,搜索语句等同于#"var log",会搜索包含目标短语var log的日志。同理,搜索语句#"var:log"、#"var;log"等搜索的也是包含目标短语var log的日志。 中文搜索推荐采用短语搜索。 由于中文默认采用的是一元分词,每个汉字单独分词,搜索时会匹配同时包含搜索语句中每一个汉字的日志,本身便具有模糊搜索的特性,当需要更加精确的结果时,推荐采用短语搜索。
  • 服务信息 服务信息展示实例ID、项目ID、规格、服务版本、续费、购买服务及退订服务。 规格:显示服务当前许可的设备接入的数量。 服务版本:专业版。 路侧服务数量:显示服务当前的路侧服务数量。 续费:当需要续费已购买的服务时,可单击续费跳转至续费页面进行服务续费。 购买服务:单击购买服务跳转至购买页面进行服务购买。 退订服务:当您想退订当前服务时,请单击退订服务跳转至退订管理页面进行退订操作。 执行退订操作前,请确保待退订的云资源数据已完成备份或者迁移,退订完成后资源将被完全删除,且不可恢复,请谨慎操作。
  • 规格 实例类型 服务配置 配置规格 标准版 (平台支持200设备数联接或200TPS,平台部署的硬件支持选用鲲鹏、X86、ARM架构的各种硬件) 路侧服务 部署摄像头和雷达,感知路侧对象和事件,每个边缘计算节点(ITS800)上部署一套。 路侧服务部署的硬件支持选用鲲鹏、X86、ARM架构的各种硬件。 专业版 (平台支持1000设备数联接或1000TPS,平台部署的硬件支持选用鲲鹏、X86、ARM架构的各种硬件) 路侧服务 部署摄像头和雷达,感知路侧对象和事件,每个边缘计算节点(ITS800)上部署一套。 路侧服务部署的硬件支持选用鲲鹏、X86、ARM架构的各种硬件。
  • 使用限制 实例类型 描述 限制 标准版 数据上报并发处理能力 200TPS 数据上报时延 ≤200ms 北向数据推送并发处理能力 200TPS 北向API接口调用并发处理能力 200TPS 支持设备同时在线数目 200设备 平台最高扩容 支持平台最高扩容至千万级联接,百万级并发,支撑集团级数量设备接入 专业版 数据上报并发处理能力 1000TPS 数据上报时延 ≤200ms 北向数据推送并发处理能力 1000TPS 北向API接口调用并发处理能力 200TPS 支持设备同时在线数目 1000设备 平台最高扩容 支持平台最高扩容至千万级联接,百万级并发,支撑集团级数量设备接入
  • 响应示例 状态码: 200 OK,请求响应成功。 { "env_tags" : [ { "name" : "***", "business_id" : 162, "uuid" : "e9c8f632*********cbfcfa148c0", "descp" : null, "creator_id" : null, "env_id_list" : null, "id" : 72, "gmt_create" : "2022-10-25T02:18:44.000+00:00", "gmt_modify" : "2022-10-25T02:18:44.000+00:00" } ], "total_count" : 1 }
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 env_tags Array of CmdbTagEntity objects 环境标签数据列表。 total_count Integer 总条数。 表4 CmdbTagEntity 参数 参数类型 描述 name String 环境标签名称。 business_id Long 应用id。 uuid String UUID。 descp String 描述信息。 creator_id Long 创建者id。 env_id_list Array of integers 环境id列表。 id Long 环境标签id。 gmt_create String 创建时间。 gmt_modify String 修改时间。
  • 请求参数 表1 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 从 IAM 服务获取的用户Token。 x-business-id 是 Long 应用id。 表2 请求Body参数 参数 是否必选 参数类型 描述 business_id 是 Long 应用id。 keyword 否 String 关键字。 page_enable 否 Boolean 是否分页。 page_number 否 Integer 每页容量。 page_size 否 Integer 当前页码。
  • 响应示例 状态码: 200 OK,请求响应成功。 { "node_list" : [ { "node_type" : "Env", "node_name" : "apm-task:cn-east-204", "node_id" : "55", "env_id" : 55 }, { "node_type" : "Env", "node_name" : "apm-api:cn-east-204-az2", "node_id" : "45", "env_id" : 45 }, { "node_type" : "Env", "node_name" : "apm-archive:cn-east-204", "node_id" : "4394", "env_id" : 4394 }, { "node_type" : "Env", "node_name" : "apm-store:cn-east-204-az1", "node_id" : "46", "env_id" : 46 }, { "node_type" : "Env", "node_name" : "apm-store:cn-east-204-az2", "node_id" : "47", "env_id" : 47 }, { "node_type" : "Env", "node_name" : "apm-api:cn-east-204-az1", "node_id" : "48", "env_id" : 48 }, { "node_type" : "Env", "node_name" : "apm-pu-task:cn-east-204-az1", "node_id" : "4396", "env_id" : 4396 }, { "node_type" : "Env", "node_name" : "apm-pu-task:cn-east-204-az2", "node_id" : "4397", "env_id" : 4397 }, { "node_type" : "Env", "node_name" : "apm-deliver:cn-east-204", "node_id" : "1104", "env_id" : 1104 }, { "node_type" : "Env", "node_name" : "apm-merge:cn-east-204", "node_id" : "3568", "env_id" : 3568 }, { "node_type" : "Mysql", "node_name" : "Mysql", "node_id" : "Mysql", "env_id" : null }, { "node_type" : "Env", "node_name" : "apm-alarm:cn-east-204", "node_id" : "913", "env_id" : 913 }, { "node_type" : "Env", "node_name" : "config-web:cn-east-204", "node_id" : "51", "env_id" : 51 }, { "node_type" : "Env", "node_name" : "user", "node_id" : "user", "env_id" : null }, { "node_type" : "Env", "node_name" : "apm-access:cn-east-204-AZ1", "node_id" : "42", "env_id" : 42 }, { "node_type" : "Env", "node_name" : "apm-master:cn-east-204", "node_id" : "53", "env_id" : 53 }, { "node_type" : "Env", "node_name" : "apm-front:cn-east-204", "node_id" : "54", "env_id" : 54 }, { "node_type" : "Env", "node_name" : "apm-access:cn-east-204-AZ2", "node_id" : "43", "env_id" : 43 } ], "line_list" : [ { "from_node" : "user", "to_node" : "51", "direction" : "in", "collector" : "Url", "target_env_id" : 51, "hints" : { "rt" : "0.09", "count" : "272", "error" : "0" }, "filter_value" : "user" }, { "from_node" : "47", "to_node" : "51", "direction" : "in", "collector" : "Url", "target_env_id" : 51, "hints" : { "rt" : "10.28", "count" : "780", "error" : "0" }, "filter_value" : "47" }, { "from_node" : "4394", "to_node" : "51", "direction" : "in", "collector" : "Url", "target_env_id" : 51, "hints" : { "rt" : "29.49", "count" : "694", "error" : "0" }, "filter_value" : "4394" }, { "from_node" : "46", "to_node" : "51", "direction" : "in", "collector" : "Url", "target_env_id" : 51, "hints" : { "rt" : "10.41", "count" : "843", "error" : "0" }, "filter_value" : "46" }, { "from_node" : "4397", "to_node" : "51", "direction" : "in", "collector" : "Url", "target_env_id" : 51, "hints" : { "rt" : "41.54", "count" : "175", "error" : "0" }, "filter_value" : "4397" }, { "from_node" : "48", "to_node" : "51", "direction" : "in", "collector" : "Url", "target_env_id" : 51, "hints" : { "rt" : "39.47", "count" : "47", "error" : "0" }, "filter_value" : "48" }, { "from_node" : "4396", "to_node" : "51", "direction" : "in", "collector" : "Url", "target_env_id" : 51, "hints" : { "rt" : "36.15", "count" : "167", "error" : "0" }, "filter_value" : "4396" }, { "from_node" : "51", "to_node" : "Mysql", "direction" : "out", "collector" : "Mysql", "target_env_id" : 51, "hints" : { "rt" : "1.12", "count" : "97402", "error" : "14" }, "filter_value" : "Mysql" }, { "from_node" : "1104", "to_node" : "51", "direction" : "in", "collector" : "Url", "target_env_id" : 51, "hints" : { "rt" : "0.98", "count" : "156", "error" : "0" }, "filter_value" : "1104" }, { "from_node" : "913", "to_node" : "51", "direction" : "in", "collector" : "Url", "target_env_id" : 51, "hints" : { "rt" : "64.91", "count" : "686", "error" : "0" }, "filter_value" : "913" }, { "from_node" : "3568", "to_node" : "51", "direction" : "in", "collector" : "Url", "target_env_id" : 51, "hints" : { "rt" : "30.67", "count" : "563", "error" : "0" }, "filter_value" : "3568" }, { "from_node" : "54", "to_node" : "51", "direction" : "in", "collector" : "Url", "target_env_id" : 51, "hints" : { "rt" : "1.86", "count" : "682", "error" : "0" }, "filter_value" : "54" }, { "from_node" : "43", "to_node" : "51", "direction" : "in", "collector" : "Url", "target_env_id" : 51, "hints" : { "rt" : "1.03", "count" : "409", "error" : "0" }, "filter_value" : "43" }, { "from_node" : "42", "to_node" : "51", "direction" : "in", "collector" : "Url", "target_env_id" : 51, "hints" : { "rt" : "1.26", "count" : "401", "error" : "0" }, "filter_value" : "42" }, { "from_node" : "53", "to_node" : "51", "direction" : "in", "collector" : "Url", "target_env_id" : 51, "hints" : { "rt" : "3.78", "count" : "1035", "error" : "0" }, "filter_value" : "53" }, { "from_node" : "45", "to_node" : "51", "direction" : "in", "collector" : "Url", "target_env_id" : 51, "hints" : { "rt" : "31.25", "count" : "48", "error" : "0" }, "filter_value" : "45" }, { "from_node" : "55", "to_node" : "51", "direction" : "in", "collector" : "Url", "target_env_id" : 51, "hints" : { "rt" : "1.13", "count" : "94", "error" : "0" }, "filter_value" : "55" } ], "collector_config" : { "Mysql" : { "line_view_config" : { "metric_set" : "total", "filter_prefix" : null, "line_view_item_list" : [ { "function" : "SUM(invokeCount)", "as" : "count" }, { "function" : "SUM(totalTime)/SUM(invokeCount)", "as" : "rt" }, { "function" : "SUM(errorCount)", "as" : "errorCount" } ] }, "detail_view_config" : { "metric_set" : "connection", "group_by" : "db", "detail_view_item_list" : [ { "function" : "SUM(invokeCount)", "as" : "count" }, { "function" : "SUM(totalTime)/SUM(invokeCount)", "as" : "rt" }, { "function" : "SUM(errorCount)", "as" : "errorCount" } ] } }, "Url" : { "line_view_config" : { "metric_set" : "user", "filter_prefix" : "clusterId=", "line_view_item_list" : [ { "function" : "SUM(invokeCount)", "as" : "count" }, { "function" : "SUM(totalTime)/SUM(invokeCount)", "as" : "rt" }, { "function" : "SUM(errorCount)", "as" : "errorCount" } ] }, "detail_view_config" : null } }, "real_start_time" : 1667465696000, "real_end_time" : 1667466896000 }
  • 请求参数 表1 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 从IAM服务获取的用户Token。 x-business-id 是 Long 应用id。 表2 请求Body参数 参数 是否必选 参数类型 描述 target_business_id 是 Long 目标应用id。 env_tag_list 否 Array of integers 环境标签列表,可为空。 direction 否 String 方向,可为空。 end_time 是 String 结束时间。 start_time 是 String 开始时间。 filter_user 否 Boolean 过滤。
  • 请求示例 查询目标应用ID为6,开始时间戳为1667462525000,结束时间戳为1667463725000的应用全局拓扑图信息。 /v1/apm2/openapi/topology/business-search { "direction" : "", "end_time" : 1667463725000, "start_time" : 1667462525000, "filter_user" : true, "target_business_id" : 6, "env_tag_list" : [ ] }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 鉴权token。 表3 请求Body参数 参数 是否必选 参数类型 描述 rum_id 否 String 站点id。 start_timestamp 否 String 开始时间戳。 end_timestamp 否 String 结束时间戳。 timestamp 否 Long 上报时间戳。 url 否 String 请求url。 uuid 否 String 站点的标识。 custom_key 否 String 自定义事件名。 str_val 否 String 事件值。 type 否 String 类型。 ssid 否 String 标识符ssid。 t 否 String 函数类型。 rum_ids 否 Array of strings 站点id集合。
  • 购买服务 购买CraftArts IPDCenter服务需要 注册华为账号 并开通华为云。 账号开通后需要进行华为云账号的实名认证,请参考企业账号如何完成实名认证 、个人账号如何完成实名认证。 如果您使用IAM账号登录,则需要为IAM用户授权。 登录服务的IAM用户,需要至少具有资源购买权限,例如租户管理员权限“Tenant Administrator”或者全局管理员权限“FullAccess”。 进入购买CraftArts IPDCenter页面,根据实际需求选择配置,然后选择购买并支付。
  • 扩容仿真管理服务-基础版 登录CraftArts IPDCenter控制台。 在左侧菜单栏选择“工业仿真云平台服务”,进入“工业仿真云平台服务”页面。 在“工业仿真云平台服务”页面的服务区域,选择的“公有云服务”页签,单击“仿真管理服务-基础版”后的。 图1 仿真管理服务-基础版扩容入口 在扩容页面,设置扩容的“用户数”,确认扩容信息,单击“去支付”。 图2 配置扩容参数 进入支付页面,选择支付方式,确认付款,支付订单后即可完成扩容。 扩容完成后,可在“工业仿真云平台服务”页面的“公有云服务”区域,查看“仿真管理服务-基础版”扩容后的规格信息。
  • 扩容仿真计算服务 登录CraftArts IPDCenter控制台。 在左侧菜单栏选择“工业仿真云平台服务”,进入“工业仿真云平台服务”页面。 在“工业仿真云平台服务”页面的服务区域,选择的“公有云服务”页签,单击“仿真计算服务”后的。 图3 仿真计算服务扩容入口 在扩容页面,设置扩容的“节点数量”,确认扩容信息,单击“去支付”。 图4 配置扩容参数 进入支付页面,选择支付方式,确认付款,支付订单后即可完成扩容。 扩容完成后,可在“工业仿真云平台服务”页面的“公有云服务”区域,查看“仿真计算服务”扩容后的规格信息。
  • 操作步骤 进入CraftArts IPDCenter购买页面。 选择商品及商品配置项。 表1 商品及商品配置项 商品 部署位置 说明 公有云 智能边缘小站CloudPond IPDCenter基础服务 区域 - 资源所在区域,不同区域的云服务产品之间内网互不相通;请就近选择靠近您业务的区域,可减少网络时延,提高访问速度。 - 可用区 选择IPDCenter基础服务所属的可用区。 可选值来源于位置服务(Location Service,L CS )授予账号使用的对应边缘可用区(Availability Zone,AZ)。 计费模式 商品的计费模式,当前仅支持“包年/包月”的计费模式。 环境名称 根据您的使用场景,对用户环境进行标识,比如:xx研发生产环境,xx研发测试环境等。 企业项目 仅对开通企业项目的企业客户账号显示。如需使用该功能,请联系客服申请开通。 企业项目是一种云资源管理方式,企业项目管理服务提供统一的云资源按项目管理,以及项目内的资源管理、成员管理,默认项目为default。了解更多企业项目相关信息,请参见企业项目管理。 - 虚拟私有云 表示在华为云上构建的逻辑隔离的网络空间,一个虚拟私有云由至少一个子网组成。系统会为您在每个地域提供默认的虚拟私有云和子网。 如现有的虚拟私有云/子网不符合您的要求,可以在虚拟私有云控制台进行创建,具体操作请参见创建虚拟私有云和子网。 同一虚拟私有云内资源默认内网互通。 - 安全组 表示一个逻辑上的分组,为具有相同安全保护需求并相互信任的云服务器提供访问策略。系统会为您提供一个默认安全组,默认安全组的规则是在出方向上的数据报文全部放行,入方向访问受限,安全组内的云服务器无需添加规则即可互相访问。 如现有的安全组不符合您的要求,可以在虚拟私有云控制台进行创建,具体操作请参见创建安全组。 用户数 最小配额为100,最大配额为8000。 购买时长 提供包月、包年多种规格,您可按需选择。支持自动续费。 单击“立即购买”,查看订单信息,确认无误后,按照界面提示选择支付方式完成付款。
  • 操作步骤 进入购买CraftArts IPDCenter页面。 选择商品及商品配置项。 表1 商品及商品配置项 商品 部署位置 说明 公有云 智能边缘小站CloudPond IPDCenter基础服务 区域 - 资源所在区域,不同区域的云服务产品之间内网互不相通;请就近选择靠近您业务的区域,可减少网络时延,提高访问速度。 - 可用区 选择IPDCenter基础服务所属的可用区。 可选值来源于位置服务(Location Service,LCS )授予账号使用的对应边缘可用区(Availability Zone,AZ)。 计费模式 商品的计费模式,当前仅支持“包年/包月”的计费模式。 环境名称 根据您的使用场景,对用户环境进行标识,比如:xx研发生产环境,xx研发测试环境等。 企业项目 仅对开通企业项目的企业客户账号显示。如需使用该功能,请联系客服申请开通。 企业项目是一种云资源管理方式,企业项目管理服务提供统一的云资源按项目管理,以及项目内的资源管理、成员管理,默认项目为default。了解更多企业项目相关信息,请参见企业项目管理。 - 虚拟私有云 表示在华为云上构建的逻辑隔离的网络空间,一个虚拟私有云由至少一个子网组成。系统会为您在每个地域提供默认的虚拟私有云和子网。 如现有的虚拟私有云/子网不符合您的要求,可以在虚拟私有云控制台进行创建,具体操作请参见创建虚拟私有云和子网。 同一虚拟私有云内资源默认内网互通。 - 安全组 表示一个逻辑上的分组,为具有相同安全保护需求并相互信任的云服务器提供访问策略。系统会为您提供一个默认安全组,默认安全组的规则是在出方向上的数据报文全部放行,入方向访问受限,安全组内的云服务器无需添加规则即可互相访问。 如现有的安全组不符合您的要求,可以在虚拟私有云控制台进行创建,具体操作请参见创建安全组。 用户数 最小配额为100,最大配额为8000。 购买时长 提供包月、包年多种规格,您可按需选择。支持自动续费。 单击“立即购买”,查看订单信息,确认无误后,按照界面提示选择支付方式完成付款。
  • 上传镜像 镜像上传需要使用SWR镜像容器服务,开通及使用请参照 容器镜像服务 SWR_用户指南。 上传镜像 访问 SWR容器镜像 服务,在左侧导航栏选择“总览”,然后单击右上方“创建组织”。 创建名称为hw_swr的组织 获取SWR登录指令 访问SWR容器 镜像服务 ,在左侧导航栏选择“总览”,然后单击右上角“登录指令”。 复制登录指令到您推送镜像的本地机器上执行 tag镜像 使用tag命令将镜像重命名以确定上传位置和组织,获取上传位置和组织前缀请参考pull/push命令 docker tag edge_monitor:1.0.0 swr.cn-north-4.myhuaweicloud.com/hw_swr/edge_monitor:1.0.0 上传镜像 docker push swr.cn-north-4.myhuaweicloud.com/hw_swr/edge_monitor:1.0.0 查看上传结果 上传镜像后请在SWR将镜像设置为公开。 父主题: 前提条件
  • 开发插件 根据您的需要开发插件,提供了一个Demo工程来协助您更快地了解SDK。 下载Demo Demo下载地址:使用ModulSDK开发插件Demo。 SDK下载地址:ModuleSDK_Java。 导入ModuleSDK依赖包 选择项目名右键单击Open Project Structure,选择Libraries后,单击中间框上方“+”号,选择下载好的ModuleSDK,添加到工程模块。 该Demo包含三个模块: erp-integration:此模块主要演示It集成服务。 modbus-driver:此模块主要演示协议转换。 monitor-app:此模块主要演示数据处理。 以其中的数据处理样例即monitor-app模块为例演示如何开发一个插件并远程部署到边缘上进行数据处理。 如果您有兴趣,可以参考开发指南-插件侧开发,该文档详细讲述了实践的架构和业务。 父主题: 前提条件
  • 设备接入调测 本章节以MQTT.fx为例,介绍以MQTT原生协议接入IoT边缘节点,通过边缘节点上报设备属性至 物联网平台 。MQTT.fx是目前主流的MQTT客户端,可以快速验证是否可以与物联网平台服务交互发布或订阅消息。 访问这里,填写添加边缘设备后生成的设备ID和设备密钥,生成连接信息(ClientId、Username、Password)。 打开MQTT.fx软件,单击设置图标。 参考截图中配置鉴权参数,然后单击截图中“Apply”。 Broker Address:填写边缘节点服务器公网IP地址 Broker Port:填写边缘节点提供给南向MQTT(S)设备接入的端口,即7883 Client ID:设备ClientId,参考1获取 User Name:即设备ID,参考1获取 Password:加密后的设备密钥,参考1获取 在设备对接边缘节点场景中,需要在设备侧集成相应证书(证书文件),用于设备校验边缘节点的身份。 单击“Connect”,设备鉴权成功后,在IoT边缘控制台和物联网平台可以看到设备处于在线状态。如果模拟器右侧的红灯变成绿灯,说明与物联网平台的连接成功。 IoTEdge云服务上边缘节点显示子设备在线: 物联网平台显示边缘节点、子设备在线: 通过MQTT.fx模拟设备上报属性,并在物联网平台查看设备上报数据。 在Publish页签,填写设备属性上报Topic,及JSON消息体,单击“Publish”完成上报。 Topic:$oc/devices/iot_edge_test_0219/sys/properties/report 其中,iot_edge_test_0219为设备ID,请替换为实际值。 消息体: { "services" : [{ "service_id" : "sensor", "properties" : { "temp" : 25, "humi" : 11 }, "event_time" : "20210212T121212Z" } ] } 在物联网平台查看设备上报数据。 通过MQTT.fx订阅命令下发Topic,并在物联网平台下发控制命令,查看设备是否收到平台下发的命令。 在Subscribe页签,填写命令下发Topic,并单击“Subscribe”完成订阅。 Topic:$oc/devices/iot_edge_test_0219/sys/commands/# 其中,iot_edge_test_0219为设备ID,请替换为实际值。 在物联网平台执行命令下发。 进入设备详情页,选择“命令”页签,单击同步命令下发区域的“命令下发”,设置参数并单击“确定”完成命令下发。 选择命令:sensor: control_light light:ON 在MQTT.fx客户端查看,平台下发命令接收成功。
  • 安装专业版节点 使用root用户登录边缘节点服务器后台系统,使用SFTP工具或移动存储设备,将边缘节点的安装工具和配置文件的执行命令复制到节点的目录下。 图4 复制到节点目录中 解压installer安装包 例:sudo tar -zxvf edge-installer_1.0.9_x86_64.tar.gz -C /opt 其中edge-installer_1.0.9_x86_64.tar.gz为安装包文件名,请以下载的实际文件名为准。 图5 解压安装包 解压配置文件到/opt/IEF/Cert 例:sudo mkdir -p /opt/IEF/Cert; sudo tar -zxvf node_name.tar.gz -C /opt/IEF/Cert 其中node_name.tar.gz为配置文件名,请以下载的实际文件名为准。 图6 解压配置文件 执行安装命令,当最后一行提示“install_success”时,即代表安装成功,稍后可在“边缘节点”页查看节点状态。 cd /opt/edge-installer; sudo ./installer -op=install 图7 执行安装命令 如果安装过程异常或失败,请参见边缘节点纳管失败如何处理。 安装完IEF相关程序后,边缘节点会显示未安装状态,需等待10分钟左右,IEF相关配置初始化完成,才会拉起边缘节点相关应用,使边缘节点在线。
  • 应用管理概述 应用管理是IoT边缘提供的边缘应用管理能力,通过将系统预置的应用或用户自定义的应用部署到边缘节点,可在边侧进行协议解析、数据处理、本地子系统集成等能力拓展。当前IoT边缘支持容器化部署和安装包部署的方式,您可以制作镜像上传到容器镜像服务(SWR),也可以选择上传安装包到 对象存储服务 (OBS)。系统预置的应用如表1所示。 表1 系统预置应用 应用名称 应用类型 说明 $edge_hub 系统必选 边缘节点上的处理中心,负责设备和通信管理。 $edge_agent 系统必选 在边缘节点上管理边缘应用,包括部署、升级、运行监控。 $edge_access 系统可选 扩展边缘节点的协议接入能力,当前支持Modbus,OPC-UA协议接入。不推荐使用,推荐使用OT数采(以基于IoT边缘实现OT数采(OPCUA协议)为例,可开发自定义驱动应用)。 $edge_rule 系统可选 负责边缘设备数据的计算和处理,需与数据清洗配合使用。 $edge_apigw 系统可选 边缘节点的API网关,负责为边缘应用提供路由转发,正反向代理等能力,需与路由管理配合使用。 $industry_dc_bsi 系统可选 负责采集MES、ERP等子系统数据,对接到异构系统。系工业子系统数采应用,若想部署该应用,需购买工业子系统数采集成/采集服务。 $edge_omagent 系统可选 负责边缘节点远程监控和运维,提供日志上报、远程ssh、指标上报、文件上传下载能力。 $edge_keepalive 系统可选 边缘节点主备切换模块,保证节点的高可用。 $ot_dc_opcua 系统可选 边缘扩展协议接入。 $ot_dc_yk 系统可选 负责边缘OT数采。 $edge_push 系统可选 提供外部推送能力。 $edge_schedule 系统可选 边缘定时调度模块。 $edge_npu_plugin 系统可选 边缘管理NPU设备分配挂载应用。 父主题: 应用管理
  • 安装包部署 软件部署配置 部署方式选择安装包部署,"安装包地址"为{桶名/对象名}。如桶名为:“Demo”,对象名为:“ModuleSDK-Demo.zip”, 则安装包为obs://Demo/ModuleSDK-Demo.zip。 容器规格与高级配置请根据您的需要进行配置。 运行配置 输入端点、输出端点与demo中代码定义的端点一一对应,由于本例演示的是数采模块,因此不对端点进行配置。 部署配置请根据您的需要进行选择。 输入输出端点是非必需配置的,当有数据流转时需要配置,如OT应用(数据处理)。 驱动类应用和IT应用一般不需要配置。 配置确认 建议直接单击“立即发布”,方便后面直接部署应用的时候,能够获取到最新版本。
  • edge.h的接口函数介绍 所有接口函数定义的数据结构均呈现在edge_struct.h头文件中。 1. 初始化 接口描述: int edge_init(const char* workdir) 接口功能: 初始化sdk的工作环境,加载证书、读取配置等 表13 参数说明 参数名称 类型 参数描述 示例 workdir workdir 初始化文件所在目录,conf目录所在的目录,conf是存放证书文件以及日志配置的目录 conf在/code/api_test/workdir目录下,就填写/code/api_test/workdir 2. 注册回调接口 接口描述: int edge_set_callbacks(ST_MODULE_CBS* module_cbs, ST_DEVICE_CBS* device_cbs) 接口功能: 注册回调接口,登录、子设备添加、删除、设备消息、设备命令等都是异步通知的,故需要注册对应的处理函数。 表14 参数说明 参数名称 类型 参数描述 module_cbs ST_MODULE_CBS 模块回调函数结构体 device_cbs ST_DEVICE_CBS 设备回调函数结构体 表15 ST_MODULE_CBS模块相关的回调函数说明 参数名称 类型 参数描述 pfn_shadow_cb FN_SHADOW_ARRIVED* 模块影子回调函数类型,模块的配置可以使该接口接收 pfn_command_cb FN_COMMAND_ARRIVED* 发送到模块的命令的接收函数声明, pfn_connected FN_SDK_CONNECTED SDK连接到边缘hub的回调函数声明 pfn_disconnected FN_SDK_DISCONNECTED SDK和边缘hub断链的回调函数声明 表16 ST_DEVICE_CBS子设备相关的回调函数 参数名称 类型 参数描述 pfn_device_message_cb FN_MESSAGE_ARRIVED* 子设备消息回调 pfn_device_command_cb FN_COMMAND_ARRIVED* 子设备命令回调 pfn_device_event_cb FN_DEVICE_EVENT_ARRIVED* 子设备事件回调 pfn_sub_device_add_cb FN_SUB_DEVICE_ADD_ARRIVED* 子设备添加通知回调 pfn_sub_device_deleted_cb FN_SUB_DEVICE_DELETED_ARRIVED* 子设备删除通知回调 pfn_on_start_scan_cb FN_START_SCAN_ARRIVED* 收到子设备扫描通知回调 pfn_device_properties_set_cb FN_DEVICE_PROPERTIES_SET_ARRIVED* 收到子设备属性设置通知回调 pfn_device_properties_get_cb FN_DEVICE_PROPERTIES_GET_ARRIVED* 收到子设备属性获取通知回调 pfn_device_shadow_cb FN_DEVICE_SHADOW_ARRIVED* 收到子设备影子
  • edge.h回调函数说明 模块影子数据回调 函数描述: typedef EDGE_RETCODE (FN_SHADOW_ARRIVED)(const char* shadow, unsigned int shadow_len); 函数功能: 当下发模块配置时,通过此函数通知到用户,用户应用的配置也通过此函数通知。 表2 参数说明 参数名称 类型 参数描述 示例 shadow char* 模块影子数据(json字符串),第三方应用下发用户的配置数据 { “config”:”test” } shadow_len unsigned int 影子数据的长度 - 命令下发回调 函数描述: typedef EDGE_RETCODE (FN_COMMAND_ARRIVED)(const char* command_name, const char* device_id, const char* service_id, const char* request_id, const char* body, unsigned int body_len); 函数功能: 此函数声明用户命令下发通知,设备命令下发即使用此函数声明。 表3 参数说明 参数名称 类型 参数描述 command_name char* 设备命令名称,在设备关联的产品模型中定义。 device_id char* 命令对应的目标设备ID,命令下发对应的最终目标设备 service_id char* 设备的服务ID,在设备关联的产品模型中定义 request_id char* {request_id}用于唯一标识这次请求,响应该命令时需要带上。 body char* json字符串,设备命令的执行参数,具体字段在设备关联的产品模型中定义 body_len unsigned int - 消息下发回调 函数描述: typedef EDGE_RETCODE (FN_MESSAGE_ARRIVED)(const char* message_id, const char* message_name, const char* device_id, const char* body, unsigned int body_len); 函数功能: 此函数声明用于消息下发通知,平台使用此接口承接平台下发给设备的自定义格式的数据。 表4 参数说明 参数名称 类型 参数描述 message_id char* 消息名称 message_name char* 消息的唯一标识 device_id char* 命令对应的目标设备ID,命令下发对应的最终目标设备 body char* 消息内容。 body_len unsigned int 消息长度 事件下发回调 函数描述: typedef EDGE_RETCODE (FN_DEVICE_EVENT_ARRIVED)(const char* device_id, const char* body, unsigned int body_len); 函数功能: 此函数声明用于事件下发通知,平台使用此接口承接平台下发给设备的自定义格式的数据。 表5 参数说明 参数名称 类型 参数描述 示例 device_id char* 命令对应的目标设备ID,命令下发对应的最终目标设备 - body char* 事件内容。 { "object_device_id":"deviceId", "services":[ { "service_id":"serviceTest", "event_id":"eventTest", "event_type":"eventTypeTest", "event_time":"time", "paras":{ "test":"test" } } ] } body_len unsigned int 消息长度 - 子设备添加回调 函数描述: typedef EDGE_RETCODE (FN_SUB_DEVICE_ADD_ARRIVED)(const char* addSubDeviceInfo, unsigned int body_len); 函数功能: 此函数声明用于通知子设备添加,使用此接口承接平台添加成功子设备的通知。 表6 参数说明 参数名称 类型 参数描述 示例 addSubDeviceInfo char* 添加成功的子设备信息,具体格式见示例 {"devices": [{"parent_device_id":"c6b39067b03421a48", "node_id": "subdevice11", "device_id":"2bb77-063ad2f5a6cc", "name": "subDevice11", "description": null, "product_id":"c6b3b34663d3ea42f6", "fw_version": null, "sw_version": null, "status": "ONLINE" }],"version":1} body_len unsigned int 长度 - 子设备删除回调 函数描述: typedef EDGE_RETCODE (FN_SUB_DEVICE_DELETED_ARRIVED)(const char* deleteSubDeviceInfo, unsigned int body_len); 函数功能: 此函数声明用于通知子设备删除,使用此接口承接平台删除成功子设备的通知。 表7 参数说明 参数名称 类型 参数描述 示例 deleteSubDeviceInfo char* 删除成功的子设备信息,具体格式见示例 {"devices": [{"parent_device_id":"c6b39067b03421a48", "node_id": "subdevice11", "device_id":"2bb77-063ad2f5a6cc", "name": "subDevice11", "description": null, "product_id":"c6b3b34663d3ea42f6", "fw_version": null, "sw_version": null, "status": "ONLINE" }],"version":1} body_len unsigned int 长度 - 子设备扫描回调 函数描述: typedef EDGE_RETCODE (FN_START_SCAN_ARRIVED)(const char* protocol, const char* channel, const char* parentDeviceId,const char* scan_setting, unsigned int body_len); 函数功能: 此函数声明用于通知网关扫描子设备。 表8 参数说明 参数名称 类型 参数描述 protocol char* 协议 channel char* 通道信息 parentDeviceId char* 父设备ID scan_setting char* 扫描设备 body_len unsigned int 配置长度 子设备属性设置回调 函数描述: typedef EDGE_RETCODE (FN_DEVICE_PROPERTIES_SET_ARRIVED)(ST_PROPERTY_SET* sub_device_property_set); 函数功能: 此函数声明用于接收平台对子设备的属性设置。 表9 参数说明 参数名称 类型 参数描述 示例 sub_device_property_set ST_PROPERTY_SET* 属性设置 参见edge.h 子设备属性获取回调 函数描述: typedef EDGE_RETCODE (FN_DEVICE_PROPERTIES_GET_ARRIVED)(ST_PROPERTY_GET* sub_device_property_get); 函数功能: 此函数声明用于接收平台获取子设备的属性。 表10 参数说明 参数名称 类型 参数描述 示例 sub_device_property_get ST_PROPERTY_GET* 属性设置 参见edge.h 子设备影子回调 函数描述: typedef EDGE_RETCODE (FN_DEVICE_SHADOW_ARRIVED)(ST_DEVICE_SHADOW* sub_device_shadow); 函数功能: 此函数声明用于接收平台设置子设备的影子。 表11 参数说明 参数名称 类型 参数描述 示例 sub_device_property_get ST_DEVICE_SHADOW* 属性设置 参见edge.h 自定义topic 消息通知 回调 函数描述: typedef EDGE_RETCODE (FN_CUSTOMIZED_MESSAGE_ARRIVED)(const char* topic, const char* payload, unsigned int len); 函数功能: 此函数声明用于接收平台设置子设备的影子。 表12 参数说明 参数名称 类型 参数描述 topic char* 自定义topic payload char* 消息内容 len unsigned int 消息长度
  • 镜像包打包 上传打包的项目。 将jar文件上传到联网的linux机器上,如目录(/home/monitor)中 安装docker。 请确认使用的系统已经安装docker(docker版本需要高于17.06,推荐18.06),安装参照docker 安装教程 制作镜像。 搜索基础镜像,基础镜像需要集成jre。 docker search jre8 选择合适的镜像(镜像需要集成了jre且版本不低于8) NAME DESCRIPTION STARS OFFICIAL AUTOMATED livingobjects/jre8 Jre8 image 4 [OK] livingobjects/jre8镜像是docker hub第三方提供的镜像,非IoT团队发布,且IoT团队未提供任何官方镜像。该镜像在此仅做示例,IoT团队对该镜像的安全性不作保证。强烈建议用户自己封装镜像! 拉取镜像 docker pull livingobjects/jre8 编写dockerfile制作镜像 dockerfile内容参照如下(具体可参考编写高效的Dockerfile ) #Version 1.0.0 FROM livingobjects/jre8 #基础镜像来源 RUN mkdir -p /opt/iot/edge/monitor / && chmod -R 777 /opt/ #授权 COPY monitor /opt/iot/edge/monitor #复制文件到指定目录,此dockerfile文件位置:/home,jar包位置:/home/monitor USER root #用户名 EXPOSE 8080 CMD ["java", "-jar", "/opt/iot/edge/monitor/monitor-app.jar", "run"] #运行命令 构建镜像 docker build -t edge_monitor:1.0.0 /home --no-cache 查看打包完成的镜像 docker images REPOSITORY TAG IMAGE ID CREATED SIZE edge_monitor 1.0.0 93f9d964bcea 12 seconds ago 243MB 镜像上传。 上传镜像 开通容器镜像服务SWR 镜像上传需要使用SWR镜像容器服务,开通及使用请参照容器镜像服务 SWR_用户指南 获取SWR登录指令 请参照使用容器引擎客户端上传镜像第四节。 tag镜像 使用tag命令将镜像重命名以确定上传位置和组织,获取上传位置和组织前缀请参考pull/push命令 docker tag edge_monitor:1.0.0 swr.cn-north-4.myhuaweicloud.com/hw_swr/edge_monitor:1.0.0 上传镜像 docker push swr.cn-north-4.myhuaweicloud.com/hw_swr/edge_monitor:1.0.0 查看上传结果 上传镜像后请在SWR将镜像设置为公开。
  • 镜像包打包 构建需要打包的项目 构建项目,此处示例,构建好的文件存放在目录 /home/ModuleSDK-Demo 下 安装docker 请确认您使用的系统已经安装Docker(Docker版本需要高于17.06,推荐18.06),安装方法可参照docker 安装教程。 制作镜像 搜索基础镜像。 docker search dotnet 根据您的工程配置,选择合适的镜像。 镜像需要集成与您的工程配置兼容的.Net运行环境,下文使用的.Net版本仅作演示。 拉取镜像。 docker pull mcr.microsoft.com/dotnet/runtime:2.1 mcr.microsoft.com/dotnet/runtime:2.1 镜像是微软提供的镜像,非IoT团队发布,且IoT团队未提供任何官方镜像。该镜像在此仅做示例,IoT团队对该镜像的安全性不作保证,强烈建议用户自己封装镜像! 编写 Dockerfile 制作镜像。 创建 Dockerfile,内容示例如下(具体可参考编写高效的Dockerfile )。 下面提供了ModuleSDK-Demo镜像构建样例,仅作示例展示,请按需修改。 # 基础镜像来源 FROM mcr.microsoft.com/dotnet/runtime:2.1 # 指定工作目录 WORKDIR /app # 复制工程二进制文件和相关文件(即项目构建发布的产物) COPY ModuleSDK-Demo/ /app ENTRYPOINT ["dotnet", "ModuleSDK-Demo.dll"] 构建镜像 docker build -t modulesdk-demo:1.0.0 -f Dockerfile . 查看打包完成的镜像 docker images 可以看到modulesdk-demo这个镜像已经制作完成。 REPOSITORY TAG IMAGE ID CREATED SIZE modulesdk-demo 1.0.0 85ed3c3dc738 8 minutes ago 182MB 上述步骤演示的是直接复制已编译好的工程文件来构建镜像,您也可以采取在构建镜像时编译的方式,具体可参照.Net 官方文档的指引。 镜像上传 上传镜像 镜像上传需要使用镜像容器服务(SWR),首先需要开通容器镜像服务(SWR)。开通及使用请参照容器镜像服务(SWR)。 获取 SWR 登录指令 获取登录指令请参照获取指令。 访问密钥即AK/SK(Access Key ID/Secret Access Key),获取的AK/SK将用于登录。 登录 SWR 仓库 docker login -u [区域项目名]@[AK] -p [登录密钥] [镜像仓库地址] 可以直接从控制台获取登录命令,如下图。 镜像仓库地址 = swr.区域项目名称.myhuaweicloud.com 例如,华北-北京一对应的镜像仓库地址为:swr.cn-north-1.myhuaweicloud.com 修改镜像所属组织 修改镜像的组织名,以便推送到个人组织内。 docker tag [OPTIONS] [镜像名:版本号] [镜像仓库地址/所属组织/镜像名:版本号] 例如: docker tag modulesdk-demo:1.0.0 swr.cn-north-4.myhuaweicloud.com/iotedge/modulesdk-demo:1.0.0 上传镜像 docker push [镜像仓库地址/所属组织/镜像名:版本号] 例如: docker push swr.cn-north-4.myhuaweicloud.com/iotedge/modulesdk-demo:1.0.0 在我的镜像查看上传结果 上传镜像后请在 SWR 将镜像设置为公开。 查看镜像详情: 编辑镜像: 设置为公开: 这一步很重要,关系到后面能否正常部署应用。
  • 镜像包打包 上传需要打包的项目。将项目上传到网络能访问到的Linux机器上,放到目录下(比如 /home/MyCApp)。 安装docker。 请确认使用的系统已经安装docker(docker版本需要高于17.06,推荐18.06),安装方法可参照docker 安装教程。 制作镜像。 搜索基础镜像。 对基础镜像没有要求,可自行选择合适的基础镜像,以下选用带cmake的镜像作为示例 docker search cmake 选择合适的镜像(镜像需要集成了cmake且版本不低于3.9.5) NAME DESCRIPTION STARS OFFICIAL AUTOMATED lycantropos/cmake CMake Docker image 3 [OK] 拉取镜像 lycantropos/cmake镜像是docker hub第三方提供的镜像,非IoT团队发布,且IoT团队未提供任何官方镜像。该镜像在此仅做示例,IoT团队对该镜像的安全性不作保证。强烈建议用户自己封装镜像! docker pull lycantropos/cmake 添加启动脚本start.sh,放到项目文件下(和main.c在一个目录下)。 function log(){ echo `date "+%Y-%m-%d %T"`: $1 } log "[INFO] start execute process." # 这里的路径取决于项目保存的位置 cd /opt/iot/edge/MyCApp ./MyCApp MyCApp为可执行文件,生成步骤可参考生成可执行文件 编写 Dockerfile 制作镜像 创建 Dockerfile,命名为 myapp-dockerfile 内容参照如下(具体可参考编写高效的Dockerfile )。 下面提供myapp-dockerfile 样例,请根据具体需要修改。 注意myapp-dockerfile需要和项目放到一个目录下。 #Version 1.0.0 # 基础镜像来源 # 如果不采用在镜像中编译源文件的方式,可以任意选择基础镜像 FROM lycantropos/cmake # 创建镜像文件目录,并且授权 RUN mkdir -p /opt/iot/edge/MyCApp/conf && chmod -R 777 /opt ENV docker_path=/opt/iot/edge/MyCApp ENV LD_LIBRARY_PATH=${docker_path}:$LD_LIBRARY_PATH WORKDIR ${docker_path} # 复制工程或文件到指定目录 COPY MyCApp/MyCApp $docker_path # 将依赖库和配置文件放到对应目录下,确保编译的时候不会出错 COPY MyCApp/lib /usr/lib COPY MyCApp/conf $docker_path/conf COPY MyCApp/start.sh $docker_path # 指定容器将要监听的端口 USER root EXPOSE 8082 ENTRYPOINT ["/bin/bash", "/opt/iot/edge/MyCApp/start.sh"] 构建镜像 docker build -f ./myapp-dockerfile -t my_app_docker:v1.0.0 ./ 查看打包完成的镜像 docker images 可以看到my_app_docker这个镜像已经制作完成。 REPOSITORY TAG IMAGE ID CREATED SIZE my_app_docker v1.0.0 983b4e5aa72a 10 minutes ago 1.51GB 镜像上传 以上步骤可以通过体验馆熟悉流程。 上传镜像 镜像上传需要使用镜像容器服务(SWR),首先需要开通容器镜像服务(SWR)。开通及使用请参照容器镜像服务(SWR)。 获取 SWR 登录指令 获取登录指令请参照获取指令。 访问密钥即AK/SK(Access Key ID/Secret Access Key),获取的密钥和AK将用于登录。 登录 SWR 仓库 docker login -u [区域项目名]@[AK] -p [登录密钥] [镜像仓库地址] 可以直接从控制台获取登录命令,如下图。 镜像仓库地址 = swr.区域项目名称.myhuaweicloud.com 例如,华北-北京一对应的镜像仓库地址为:swr.cn-north-1.myhuaweicloud.com 修改镜像所属组织 修改镜像的组织名,以便推送到个人组织内。 docker tag [OPTIONS] [镜像名:版本号] [镜像仓库地址/所属组织/镜像名:版本号] 例如, docker tag my_app_docker:v1.0.0 swr.cn-north-4.myhuaweicloud.com/iotedge/my_app_docker:v1.0.0 上传镜像 docker push [镜像仓库地址/所属组织/镜像名:版本号] 例如, docker push swr.cn-north-4.myhuaweicloud.com/iotedge/my_app_docker:v1.0.0 在我的镜像查看上传结果 上传镜像后请在 SWR 将镜像设置为公开。 步骤一: 步骤二: 步骤三: 这一步很重要,关系到后面能否正常部署应用。
  • 请求示例 URI样例 PUT https://gaussdb-nosql.cn-north-7.myhuaweicloud.com/v3/619d3e78f61b4be68bc5aa0b59edcf7b/instances/944bdc55da6c4b33b260b34185ac86bein13/cold-volume 扩容实例的冷数据存储空间至1000GB { "size" : 1000 }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 参数解释: 用户Token。 约束限制: 不涉及。 取值范围: 不涉及。 默认取值: 不涉及。 表3 请求Body参数 参数 是否必选 参数类型 描述 size 是 Integer 参数解释: 待扩容后冷存储空间大小,单位:GB。 约束限制: 用户每次至少选择1GB扩容量,且必须为整数。 待扩容后的冷数据存储空间最大规格为100000GB。 取值范围: 不涉及。 默认取值: 不涉及。 is_auto_pay 否 String 参数解释: 扩容包年/包月实例的冷数据存储容量时可指定,表示是否自动从账户中支付,此字段不影响自动续订的支付方式。 约束限制: 不涉及。 取值范围: true,表示自动从账户中支付。 false,表示手动从账户中支付,默认为该方式。 默认取值: 不涉及。
  • URI PUT https://{Endpoint}/v3/{project_id}/instances/{instance_id}/cold-volume 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 参数解释: 用户在某一region下的project ID。获取方法请参见获取项目ID。 约束限制: 不涉及。 取值范围: 不涉及。 默认取值: 不涉及。 instance_id 是 String 参数解释: 实例ID。 约束限制: 不涉及。 取值范围: 不涉及。 默认取值: 不涉及。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全