华为云用户手册

  • 预留实例计费规则 预留实例的创建和释放由用户管理,根据预留实例的执行时长计费。通过预留实例,用户能够预热函数,从而彻底消除冷启动对延时的影响。 当用户调用API创建预留实例时,在预留实例创建成功后开始计费。 当用户调用API释放预留实例时,新的请求不会再路由到该预留实例上,因此该预留实例将在限定的时间内被释放,预留实例释放时停止计费。 图1 预留实例生命周期 如上图1所示,计费时长为T1~T4。 预留实例计量粒度为秒,不足一分钟,按照一分钟计费。超过一分钟,按照实际执行时长计费。 例如预留实例执行时长为51秒,按照1分钟计费。执行时长为61秒,则计费时长仍然为61秒。 执行时间费用的单位为GB-秒,指函数内存规格为1GB时,执行1秒的费用。
  • 适用计费项 函数工作流实际费用是由请求次数费用、执行时间费用、函数流节点执行次数和其他费用构成,各计费项按需计费说明请参见表1。 表1 计费项说明 计费项 说明 请求次数 在您使用函数的过程中会产生请求次数费用,请求次数是所有函数的请求总数。 执行时间费用 执行时间费用包含两个变量:执行时间和函数分配的内存大小。同时函数工作流又提供预留和按量两种类型的实例。以下介绍二者计算资源消耗的方式: 未使用预留实例的情况下,函数计算资源消耗是函数所选内存和函数执行时间的乘积,执行时间是从函数代码开始执行的时间算起到其返回或终止的时间为止,计量的粒度是1秒,不足1秒按1秒计费。 使用预留实例的情况下,函数计算资源消耗是函数所选内存和函数执行时间的乘积,执行时间是从实例创建成功后开始算起到用户调用API释放预留实例为止。如果预留实例存活时间不足1分钟,将按照 1 分钟计算,超过一分钟的部分,按照秒的粒度向上取整计算。 节点执行次数(函数流) 函数流中除开始、结束和异常分支节点外,其他节点都要统计执行次数计费。 其他费用 在您使用函数工作流服务过程中,如果搭配使用了其它华为云服务,如OBS、SMN等,则您需要为该服务支付额外的费用,具体费用请参考价格详情。
  • 计费周期 华为云函数工作流 FunctionGraph 按照实际使用量付费,没有最低消费。计费模式采用累计分档计费,按天结算,即每日3点后对前一日使用量进行扣费。例如,2023-05-11 00:00:00至2023-05-11 23:59:59期间产生的费用,通常会在2023-05-12 03:00:00左右完成扣费。 函数响应事件通知或调用(包括控制台的测试调用)开始执行时记为一次请求,请求次数是所有函数的请求总数。 未使用预留实例情况下,执行时间是从函数代码开始执行的时间算起到其返回或终止的时间为止。计量粒度是1秒,不足1秒按1秒计费,超过1秒按实际执行时间计算。 使用预留实例情况下,执行时间是从实例创建成功后开始算起到用户调用API释放预留实例为止。计量粒度是1秒,不足1分钟按1分钟计算,超过一分钟的部分,按照秒的粒度向上取整计算,比如运行时间为51秒,将按60秒计算;运行时间为60.5秒,则按61秒计算,以此类推。
  • 函数运行资源限制 表2 函数运行资源限制说明 资源 默认值 是否可通过用户自己调整配额 临时磁盘空间(“/tmp”空间) 512MB 否,如需调整请咨询函数工作流服务客服。 文件描述符 1024 否,如需调整请咨询函数工作流服务客服。 进程和线程数(总和) 1024 否,如需调整请咨询函数工作流服务客服。 单个请求最大执行时长 259200秒 是 函数同步调用请求正文有效负载大小 6MB 否,如需调整请咨询函数工作流服务客服。 函数同步调用响应正文有效负载大小 6MB 否,如需调整请咨询函数工作流服务客服。 函数异步调用请求正文有效负载大小 256KB 否,如需调整请咨询函数工作流服务客服。 函数导入的资源大小 zip格式压缩文件,大小50MB以内 否,如需调整请咨询函数工作流服务客服。 单个自定义镜像函数最大允许镜像大小 10GB 否,如需调整请咨询函数工作流服务客服。 函数导出资源包大小 50MB以内 否,如需调整请咨询函数工作流服务客服。 租户级别实例数限制 1000 是 函数最大申请内存 10G 否,如需调整请咨询函数工作流服务客服。 带宽 无限制 - 单条日志大小 无限制 - Initializer最大运行时间 259200秒 是 函数同步调用响应正文有效负载大小:返回的字符串或返回体序列化后的json字符串默认不大于6MB。具体数据大小会随FunctionGraph系统后台设置产生变化,因为系统后台判断的是序列化之后的数据大小,所以会存在字节级别的误差,误差范围为6MB±100bytes。 FunctionGraph控制台不建议调用执行时间超过90秒的函数;若需要调用执行时间超过90秒的函数,请使用异步调用的方式。 Kafka/DDS/GeminiDB Mongo/DIS触发器调用的请求正文有效负载大小为6M,APIG触发器调用的请求正文有效负载大小为4M。
  • 账户资源限制 账户资源总配额如下所示,配额查询及修改方法,请参考配额管理。 表1 账户资源说明表 资源 限制 是否可通过用户自己调整配额 单个账户下最大允许创建的函数个数 400 否,如需调整请咨询函数工作流服务客服。 单个函数下最大允许创建的版本个数 20 否,如需调整请咨询函数工作流服务客服。 单个函数下最大允许创建的别名个数 10 否,如需调整请咨询函数工作流服务客服。 单个函数版本下最大允许创建的DIS、GeminiDB Mongo、LTS、DDS、Kafka和TIMER触发器总数 10 否,如需调整请咨询函数工作流服务客服。 前端页面上传时,单个代码部署包大小(压缩为.zip/.jar文件) 40MB 否,如需调整请咨询函数工作流服务客服。 调用函数接口时,在线编辑单个函数代码部署包大小(压缩为.zip/.jar文件) 50MB 否,如需调整请咨询函数工作流服务客服。 调用函数接口时,单个代码部署包原始代码大小 zip格式:解压后原始代码大小为1500M OBS桶:最大可上传300M压缩后的代码包 否,如需调整请咨询函数工作流服务客服。 单个账户下最大允许部署包大小 10 GB 否,如需调整请咨询函数工作流服务客服。 单个账户下函数并发执行数 100 是 单个账户下创建预留实例个数 90(单个租户下函数并发执行数*90%) 是 单个函数下所有环境变量的大小 总长度不能超过4096个字符 否,如需调整请咨询函数工作流服务客服。 单个户下最多创建的函数流个数 200 是 单个函数流支持最多节点数 100 是 前端页面展示代码大小 20MB 否,如需调整请咨询函数工作流服务客服。
  • 版本说明 发布日期 版本说明 2022-11-14 新增“安全”章节。 2022-08-19 新增“图解函数工作流服务”章节。 2022-07-15 优化“与其他服务的关系”章节。 2022-05-30 VSCode插件更新。 2022-04-30 支持创建快速函数流 VPC配置情况下支持域名解析 2022-03-30 函数工作流全新改版。 2022-02-25 支持Python 3.9和Node.js 14.18。 2021-12-09 新增函数调用链。 说明: 该特性当前仅“华南-广州、华北-北京四”区域支持。 2021-11-16 新增HTTP函数。 新增函数流服务节点。 新增动态内存配置。 新增自定义镜像。 计费粒度精确到1ms。 新增CodeArts IDE Online支持JAVA、Python函数开发。 新增CodeArts IDE Online支持推送代码文件对比。 2021-07-05 新增加密配置公测上线。 新增开通云日志服务(LTS),使用更丰富的函数日志管理功能。 新增CodeArts IDE Online在线编辑功能。 新增函数工作流功能。 新增延长函数执行超时时间。 新增单函数运行最大实例数和单实例并发数。 说明: 以上新增特性当前仅“西南-贵阳一”和“华北-北京四”区域支持。 2021-06-30 依赖包列表展示ID。 2021-05-30 支持函数长时间(12h)运行。 2021-04-30 提供C#、python、Nodejs、Java语言SDK。 2021-03-30 新增OMS数据同步模板。 2020-12-30 新增APIC触发器。 新增APIG(专享版)触发器。 2020-10-30 新增GeminiDB Mongo触发器。 2020-09-30 DDS触发器支持并发。 2020-08-30 Kafka触发器支持并发,最大消息体为6MB。 2020-06-30 新增预留实例功能。 2020-05-30 新增支持Go 1.x Runtime。 2020-04-30 新增支持Node.js 10.16 Runtime。 新增支持Node.js 12.13 Runtime。 2020-03-30 删除工作流相关介绍。 新增支持C#(.NET Core 3.1)。 2020-02-25 支持配置企业项目。 2020-01-05 新增细粒度权限配置功能。 2019-12-31 新增Kafka触发器。 2019-11-26 函数模板分类优化。 新增筛选错误日志功能。 2019-10-16 总览界面新增月度统计功能。 2019-09-30 新增DDS触发器。 2019-08-16 支持测试事件持久化。 支持定制运行时。 支持挂载文件系统。 2019-5-27 函数服务代码在线编辑页面优化,新增函数在线测试及返回、快速创建多层级Python模块等。 函数模板支持与周边云服务集成。 函数新增PHP Runtime,支持PHP7.3,并支持在线编辑。 2019-3-15 函数新增版本分流功能。支持版本灰度发布,在创建别名时可以绑定多版本,并且可以设置主版本和灰度版本的权重。 函数新增支持配置VPC功能。用户支持创建虚拟私有云(VPC)并访问自己VPC内的资源,同时支持通过SNAT方式绑定EIP访问外网。 C#sdk增加json序列化和反序列接口。 2019-3-4 函数新增初始化功能。 函数工作流API2.0版上线。 2019-1-26 Sandbox AOS远程部署实现package、deploy命令合并。 函数内存配置新增了1792,2048,2560,3072,3584,4096 内存。 函数优化执行委托和配置委托功能。 函数支持分版本查看日志特性。 2018-12-25 Sandbox新增函数自动生成功能。 Sandbox新增支持Windows系统功能。 2018-11-30 函数新增函数应用导入导出功能。 新增函数执行委托与触发器委托可独立设置功能。 2018-11-16 函数实现与云监控服务的对接, 新增FunctionGraph监控说明。 函数新增依赖包管理模块,统一管理用户所有依赖包。 函数新增日志下载功能。 2018-11-2 新增支持C#Runtime,对于C#,FunctionGraph运行时目前支持C#(.NET Core 2.0)、C#(.NET Core 2.1)版本。 新增工具箱页面,提供sdk、cli、sandbox等工具的下载,以及在线费用计算器的使用。 2018-10-18 函数实现与云监控服务的对接,函数上报云监控服务的监控指标、指标的命名空间和维度,用户可以通过云监控服务提供的API接口来检索函数产生的监控指标和告警信息。 函数新增Node.js Runtime集成的三方件:smnsdk、express、fgs-express和request。 2018-09-29 增加函数应用分组功能。 增加函数多目录在线编辑功能。 2018-08-29 新增高危操作保护功能,在删除函数、工作流、触发器、版本、别名时进行确认。 新增函数禁用功能。 新增体验馆,指导使用FunctionGraph构建功能程序,并演示效果。 CLI工具能力增强,支持对话交互模式。 Sandbox工具能力增强,支持加载云端事件。 新增应用模板。 2018-07-28 新增支持Node.js 8.10 Runtime。 优化监控指标,平均延迟优化为最大运行时间、最小运行时间、平均运行时间三个指标。 APIG触发器增加超时配置。 Node.js Runtime集成常用三方件。 新增CTS触发器,实现与华为云云审计服务的对接,可以订阅对应云服务的资源操作事件,当对订阅的资源操作时,会触发函数执行,实现预期功能。 支持将函数代码及配置信息打包导出,支持通过导入的方式创建函数。 Java SDK加入了触发器事件结构体定义,目前支持DMS、DIS、SMN、LTS、TIMER、APIG等六种。在需要使用触发器的场景时,编写相关代码更简单。 2018-07-13 新增LTS触发器,实现了与华为云云日志服务的对接。可以使用FunctionGraph函数对使用云日志服务订阅的日志进行自定义分析。详情请参考使用LTS触发器。 修复已知问题。 2018-06-30 函数与工作流产品及资料合并,定名为FunctionGraph。 合并后的FunctionGraph正式转为商用。
  • 执行结果 执行结果由3部分组成:函数返回、执行摘要和日志。 表23 执行结果说明 参数项 执行成功 执行失败 函数返回 返回函数中定义的返回信息。 返回包含错误信息和堆栈异常报错信息的JSON文件。格式如下: { "errorMessage": "", "stackTrace": [] } errorMessage:Runtime返回的错误信息 stackTrace:Runtime返回的堆栈异常报错信息 执行摘要 显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 日志 打印函数日志,最多显示4KB的日志。 打印报错信息,最多显示4KB的日志。
  • Java的initializer入口介绍 函数服务目前支持以下Java运行环境。 Java 8 (runtime = Java8) Java 11(runtime = Java11) Initializer格式为: [包名].[类名].[执行函数名] 示例:创建函数时指定的initializer为com.huawei.Demo.my_initializer,那么FunctionGraph会去加载com.huawei包,Demo类中定义的my_initializer函数。 在函数服务中使用Java实现initializer接口,需要定义一个java函数作为initializer入口,一个最简单的initializer示例如下。 public void my_initializer(Context context) { RuntimeLogger log = context.getLogger(); log.log(String.format("ak:%s", context.getAccessKey())); } 函数名 my_initializer需要与实现initializer接口时的initializer字段相对应。 示例:实现initializer接口时指定的Initializer入口为com.huawei.Demo.my_initializer,那么FunctionGraph会去加载com.huawei包,Demo类中定义的my_initializer函数。 context参数 context参数中包含一些函数的运行时信息,例如:request id、临时AccessKey、function meta等。
  • 函数定义 函数有明确的接口定义,如下: 作用域 返回参数 函数名(函数参数,Context参数) 作用域:提供给FunctionGraph调用的用户函数必须定义为public。 返回参数:用户定义,FunctionGraph负责转换为字符串,作为HTTP Response返回。对于返回参数对象类型,HTTP Response该类型的JSON字符串。 函数名:用户定义函数名称。 用户定义参数,当前函数只支持一个用户参数。对于复杂参数,建议定义为对象类型,以JSON字符串提供数据。FunctionGraph调用函数时,解析JSON为对象。 Context:runtime提供函数执行上下文,其接口定义在SDK接口说明。 创建Java函数时,函数入口参数需要提供函数完整的名字空间,参数格式为:包名.类名.函数名。
  • 示例事件 SMN示例事件 { "record": [ { "event_version": "1.0", "smn": { "topic_urn": "urn:smn:{region}:0162c0f220284698b77a3d264376343a:{function_name}", "timestamp": "2018-01-09T07:11:40Z", "message_attributes": null, "message": "this is smn message content", "type": "notification", "message_id": "a51671f77d4a479cacb09e2cd591a983", "subject": "this is smn message subject" }, "event_subscription_urn": "urn:fss:{region}:0162c0f220284698b77a3d264376343a:function:default:read-smn-message:latest", "event_source": "smn" } ], "functionname": "test", "requestId": "7c307f6a-cf68-4e65-8be0-4c77405a1b2c", "timestamp": "Wed Nov 15 2017 12:00:00 GMT+0800 (CST)" } 表2 参数说明 参数 类型 示例值 描述 event_version String 1.0 事件协议的版本。 topic_urn String 参考示例 SMN事件唯一编号 type String notification 事件的类型 RequestID String 7c307f6a-cf68-4e65-8be0-4c77405a1b2c 请求ID。每个请求的ID取值唯一。 message_id String a51671f77d4a479cacb09e2cd591a983 消息ID。每条消息的ID取值唯一。 Message String this is smn message content 消息内容 event_source String smn 事件源 event_subscription_urn String 参考示例 添加的订阅唯一编号 timestamp String Wed Nov 15 2017 12:00:00 GMT+0800 (CST) 事件发生的时间 OBS示例事件 { "Records": [ { "eventVersion": "2.0", "eventTime": "2018-01-09T07:50:50.028Z", "requestParameters": { "sourceIPAddress": "103.218.216.125" }, "s3": { "configurationId": "UK1DGFPYUKUZFHNQ00000160CC0B471D101ED30CE24DF4DB", "object": { "eTag": "9d377b10ce778c4938b3c7e2c63a229a", "sequencer": "00000000160D9E681484D6B4C0000000", "key": "job.png", "size": 777835 }, "bucket": { "arn": "arn:aws:s3:::syj-input2", "name": "functionstorage-template", "ownerIdentity": { "PrincipalId": "0ed1b73473f24134a478962e631651eb" } } }, "Region": "{region}", "eventName": "ObjectCreated:Post", "userIdentity": { "principalId": "9bf43789b1ff4b679040f35cc4f0dc05" } } ] } 表3 参数说明 参数 类型 示例值 描述 eventVersion String 2.0 事件协议的版本。 eventTime String 2018-01-09T07:50:50.028Z 事件产生的时间。使用ISO-8601标准时间格式。 sourceIPAddress String 103.218.216.125 请求的源IP地址 s3 Map 参考示例 OBS事件内容 object Map 参考示例 object参数内容 bucket Map 参考示例 bucket参数内容 arn String arn:aws:s3:::syj-input2 Bucket的唯一标识符 ownerIdentity Map 参考示例 创建Bucket的用户ID Region String cn-north-1 Bucket所在的地域 eventName String ObjectCreated:Post 配置的触发函数的事件 userIdentity Map 参考示例 请求发起者的华为云账号ID APIG示例事件 { "body": "{\"test\":\"body\"}", "requestContext": { "apiId": "bc1dcffd-aa35-474d-897c-d53425a4c08e", "requestId": "11cdcdcf33949dc6d722640a13091c77", "stage": "RELEASE" }, "queryStringParameters": { "responseType": "html" }, "httpMethod": "GET", "pathParameters": { "path":"value" }, "headers": { "accept-language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2", "accept-encoding": "gzip, deflate, br", "x-forwarded-port": "443", "x-forwarded-for": "103.218.216.98", "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "upgrade-insecure-requests": "1", "host": "50eedf92-c9ad-4ac0-827e-d7c11415d4f1.apigw.region.cloud.com", "x-forwarded-proto": "https", "pragma": "no-cache", "cache-control": "no-cache", "x-real-ip": "103.218.216.98", "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" }, "path": "/apig-event-template", "isBase64Encoded": true } 通过APIG服务调用函数服务时,isBase64Encoded的值默认为true,表示APIG传递给FunctionGraph的请求体body已经进行Base64编码,需要先对body内容Base64解码后再处理。 函数必须按以下结构返回字符串。 { "isBase64Encoded": true|false, "statusCode": httpStatusCode, "headers": {"headerName":"headerValue",...}, "body": "..." } 表4 参数说明 参数 类型 示例值 描述 body String "{\"test\":\"body\"}" 记录实际请求转换为String字符串后的内容。 requestContext Map 参考示例 请求来源的API网关的配置信息、请求标识、认证信息、来源信息。 httpMethod String GET 记录实际请求的HTTP方法 queryStringParameters Map 参考示例 记录在API网关中配置过的Query参数以及实际取值。 pathParameters Map 参考示例 记录在API网关中配置过的Path参数以及实际取值。 headers Map 参考示例 记录实际请求的完整Header内容 path String /apig-event-template 记录实际请求的完整的Path信息 isBase64Encoded Boolean True 默认为true DIS示例事件 { "ShardID": "shardId-0000000000", "Message": { "next_partition_cursor": "eyJnZXRJdGVyYXRvclBhcmFtIjp7InN0cmVhbS1uYW1lIjoiZGlzLXN3dGVzdCIsInBhcnRpdGlvbi1pZCI6InNoYXJkSWQtMDAwMDAwMDAwMCIsImN1cnNvci10eXBlIjoiVFJJTV9IT1JJWk9OIiwic3RhcnRpbmctc2VxdWVuY2UtbnVtYmVyIjoiNCJ9LCJnZW5lcmF0ZVRpbWVzdGFtcCI6MTUwOTYwNjM5MjE5MX0", "records": [ { "partition_key": "shardId_0000000000", "data": "d2VsY29tZQ==", "sequence_number": "0" }, { "partition_key": "shardId_0000000000", "data": "dXNpbmc=", "sequence_number": "1" }, { "partition_key": "shardId_0000000000", "data": "RnVuY3Rpb25TdGFnZQ==", "sequence_number": "2" }, { "partition_key": "shardId_0000000000", "data": "c2VydmljZQ==", "sequence_number": "3" } ], "millis_behind_latest": "" }, "Tag": "latest", "StreamName": "dis-swtest" } 表5 参数说明 参数 类型 示例值 描述 ShardID String shardId-0000000000 数据下载分区的ID next_partition_cursor String 参考示例 下一个分区的游标 Records Map 参考示例 存储在DIS通道中的数据单元 partition_key String 参考示例 分区键 data String 参考示例 数据块,由数据生产者添加到数据通道 sequence_number Int 参考示例 每个记录的唯一标识符,由DIS服务自动分配 Tag String latest 通道的标签 StreamName String dis-swtest 通道名称 TIMER示例事件 { "version": "v1.0", "time": "2018-06-01T08:30:00+08:00", "trigger_type": "TIMER", "trigger_name": "Timer_001", "user_event": "User Event" } 表6 参数说明 参数 类型 示例值 描述 version String V1.0 事件协议的版本 time String 2018-06-01T08:30:00+08:00 事件产生的时间 trigger_type String TIMER 触发器的类型 trigger_name String Timer_001 触发器的名字 user_event String User Event 在创建触发器时配置的附加信息 LTS示例事件 { "lts": { "data": "ICB7CiAgICAibG9ncyI6W3sKICAgICAgICAgIm1lc3NhZ2UiOiIyMDE4LTA4LTA4LzA4OjA4OjA4IFtXUk5dIFt0ZXN0LmdvOjA4XVRoaXMgaXMgYSB0ZXN0IG1lc3NhZ2UuIiwKICAgICAgICAgInRpbWUiOjE1MzAwMDk2NTMwNTksCiAgICAgICAgICJob3N0X25hbWUiOiJlY3MtdGVzdCIsCiAgICAgICAgICJpcCI6IjE5Mi4xNjguMS4xIiwKICAgICAgICAgInBhdGgiOiJ2YXIvbG9nL3Rlc3QubG9nIiwKICAgICAgICAgImxvZ191aWQiOiI2NjNkNjkzMC03OTJkLTExZTgtOGIwOC0yODZlZDQ4OGNlNzAiLAogICAgICAgICAibGluZV9ubyI6MQogICAgIH1dLAogICAgIm93bmVyIjogIjYyODBlMTcwYmQ5MzRmNjBhNGQ4NTFjZjVjYTA1MTI5IiwKICAgICJsb2dfZ3JvdXBfaWQiOiAiOTdhOWQyODQtNDQ0OC0xMWU4LThmYTQtMjg2ZWQ0ODhjZTcwIiwKICAgICJsb2dfdG9waWNfaWQiOiAiMWE5Njc1YTctNzg0ZC0xMWU4LTlmNzAtMjg2ZWQ0ODhjZTcwIgogfQ==" } } 表7 Event中涉及的参数解释 参数 类型 示例值 描述 data Sting 参考示例 Base64编码后的数据 CTS示例事件 { "cts": { "time": "2018/06/26 08:54:07 GMT+08:00", "user": { "name": "userName", "id": "5b726c4fbfd84821ba866bafaaf56aax", "domain": { "name": "domainName", "id": "b2b3853af40448fcb9e40dxj89505ba" } }, "request": {}, "response": {}, "code": 204, "service_type": "vpc", "resource_type": "VPC", "resource_name": "workflow-2be1", "resource_id": "urn:fgs:{region}:2d1d891d93054bbaa69b9e866c0971ac:graph:workflow-2be1", "trace_name": "deleteGraph", "trace_type": "ConsoleAction", "record_time": "2018/06/26 08:54:07 GMT+08:00", "trace_id": "69be64a7-0233-11e8-82e4-e5d37911193e", "trace_status": "normal" } } 表8 参数说明 参数 类型 示例值 描述 User Map 参考示例 本次请求的发起用户信息 Request Map 参考示例 事件请求内容 Response Map 参考示例 事件响应内容 Code Int 204 事件响应码,例如200、400 service_type String vpc 发送方的简写,比如vpc,ecs等等 resource_type String VPC 发送方资源类型,比如vm,vpn等等 resource_name String workflow-2be1 资源名称,例如ecs服务中某个虚拟机的名称 trace_name String deleteGraph 事件名称,比如:startServer, shutDown等 trace_type String ConsoleAction 事件发生源头类型,例如ApiCall record_time string 2018/06/26 08:54:07 GMT+08:00 cts服务接受到这条trace的时间 trace_id String 69be64a7-0233-11e8-82e4-e5d37911193e 事件的唯一标识符 trace_status String normal 事件的状态 DDS示例事件 { "records": [ { "event_source": "dds", "event_name": "insert", "region": "{region}", "event_version": "1.0", "dds": { "size_bytes": "100", "token": "{\"_data\": \"825D8C2F4D0000001529295A100474039A3412A64BA89041DC952357FB4446645F696400645D8C2F8E5BECCB6CF5370D6A0004\"}", "full_document": "{\"_id\": {\"$oid\": \"5d8c2f8e5beccb6cf5370d6a\"},\"name\": \"dds\",\"age\": {\"$numberDouble\": \"52.0\"}}", "ns": "{\"db\": \"functiongraph\",\"coll\": \"person\"}" }, "event_source_id": "e6065860-f7b8-4cca-80bd-24ef2a3bb748" } ] } 表9 参数说明 参数 类型 示例值 描述 region String cn-north-1 DDS实例所在的地域 event_version String 1.0 事件协议的版本 event_source String dds 事件的来源 event_name String insert 事件的名字 size_bytes Int 100 消息的字节数 token String 参考示例 Base64编码后的数据 full_document String 参考示例 完整的文件信息 ns String 参考示例 列名 event_source_id e6065860-f7b8-4cca-80bd-24ef2a3bb748 参考示例 事件源唯一标识符 Kafka示例事件 { "event_version": "v1.0", "event_time": 1576737962, "trigger_type": "KAFKA", "region": "{region}", "instance_id": "81335d56-b9fe-4679-ba95-7030949cc76b", "records": [ { "messages": [ "kafka message1", "kafka message2", "kafka message3", "kafka message4", "kafka message5" ], "topic_id": "topic-test" } ] } 表10 参数说明 参数 类型 示例值 描述 event_version String v1.0 事件协议的版本 event_time String 2018-01-09T07:50:50.028Z 事件发生的时间 trigger_type String KAFKA 事件类型 region String cn-north-1 Kafka实例所在的地域 instance_id String 81335d56-b9fe-4679-ba95-7030949cc76b 创建的Kafka实例的唯一标识符。 messages String 参考示例 消息内容 topic_id String topic-test 消息的唯一标识符 GeminiDB示例事件 { "records": [ { "event_name": "\"insert\"", "event_version": "1.0", "event_source": "gemini_mongo", "region": "{region}", "gemini_mongo": { "full_document": "{\"_id\": {\"$oid\":\"5f61de944778db5fcded3f87\"},\"zhangsan\": \"zhangsan\"}", "ns": "{\"db\": \"zhangsan\",\"coll\": \"zhangsan\"}", "size_bytes": "100", "token": "{\"_data\": \"825F61DE940000000129295A1004A2D9AE61206C43A5AF47CAF7C5C00C5946645F696400645F61DE944778DB5FCDED3F870004\"}" }, "event_source_id": "51153d19-2b7d-402c-9a79-757163258a36" } ], "vernier": "{\"_data\": \"825F61DE940000000129295A1004A2D9AE61206C43A5AF47CAF7C5C00C5946645F696400645F61DE944778DB5FCDED3F870004\"}" } 表11 参数说明 参数 类型 示例值 描述 region String cn-north-1 GeminiDB实例所在的地域 event_source String gemini_mongo 事件的来源 event_version String 1.0 事件协议的版本 full_document String 参考示例 完整的文件信息 size_bytes Int 100 消息的字节数 token String 参考示例 Base64编码后的数据 vernier String 参考示例 游标 RabbitMQ示例事件 { "event_version": "v1.0", "event_time": 1576737962, "trigger_type": "RABBITMQ", "region": "{region}", "records": [ { "messages": [ "rabbitmq message1", "rabbitmq message2", "rabbitmq message3", "rabbitmq message4", "rabbitmq message5" ], "instance_id": "81335d56-b9fe-4679-ba95-7030949cc76b", "exchange": "exchange-test" } ] } 表12 参数说明 参数 类型 示例值 描述 event_version String v1.0 事件协议的版本 Region String cn-north-1 RabbitMQ实例所在的地域 instance_id String 81335d56-b9fe-4679-ba95-7030949cc76b 创建的RabbitMQ实例的唯一标识符。 EG示例事件 RocketMQ自定义事件源 { "datacontenttype": "application/json", "data": { "context": "yyyyy" }, "subject": "ROCKETMQ:region:domainId/projectId:ROCKETMQ:eventSourceName", "specversion": "1.0", "id": "016d5bd3-6231-4e9e-86ef-e451a070d598", "source": "eventSourceName", "time": "2023-04-07T11:51:10Z", "type": "ROCKETMQ:CloudTrace:RocketmqCall" } OBS应用事件源 { "channel_id":"b65779ed-d9d0-4a6c-b312-c767226964cf", "description":"", "name":"subscription-xeak", "sources":[ { "id":null, "name":"HC.OBS.DWR", "detail":{ "bucket":"eventbucket", "objectKeyEncode":true }, "filter":{ "source":[ { "op":"StringIn", "values":[ "HC.OBS.DWR" ] } ], "type":[ { "op":"StringIn", "values":[ "OBS:DWR:ObjectCreated:PUT", "OBS:DWR:ObjectCreated:POST" ] } ], "subject":{ "and":[ { "op":"StringStartsWith", "values":[ "/ddd" ] } ] }, "data":{ "obs":{ "bucket":{ "name":[ { "op":"StringIn", "values":[ "output-your" ] } ] } } } }, "provider_type":"OFFICIAL" } ], "targets":[ { "id":null, "name":"HC.FunctionGraph", "detail":{ "urn":"urn:fss:cn-north-7:c53626012ba84727b938ca8bf03108ef:function:A-nodejs-lqz:pylog:latest", "agency_name":"EG_AGENCY" }, "dead_letter_queue":null, "provider_type":"OFFICIAL", "transform":{ "type":"ORIGINAL", "value":"" } } ] } 云服务事件源: { "specversion":"1.0", "id":"eaf3b6a6-d525-11ed-a4ca-1baaeb906770", "source":"HC.OBS", "type":"OBS:CloudTrace:Others", "datacontenttype":"application/json", "subject":"OBS:cn-north-5:1d60cc02b9814b9e8cab1ff36886cacb/a5b94f2084a14e3eb8273dd224b89d9a:OBJECT", "time":"2023-04-07T09:21:53.271Z", "data":{ "code":"200", "source_ip":"10.62.9.176", "trace_type":"Others", "event_type":"data", "project_id":"a5b94f2084a14e3eb8273dd224b89d9a", "total_time":"138", "content_length":"6887848", "trace_id":"eaf3b6a6-d525-11ed-a4ca-1baaeb906770", "trace_name":"GET.OBJECT", "resource_type":"OBJECT", "trace_rating":"normal", "service_type":"OBS", "tracker_name":"obs-eg", "time":"1680859313271", "resource_name":"fangxin-sdk:SDK/nodejs-sdk.zip", "record_time":"1680859313271", "request_id":"000001875B05B4AB8411EF94DDE202C0", "user":{ "domain":{ "id":"1d60cc02b9814b9e8cab1ff36886cacb", "name":"hwstaff_pub_fcspaasw3" }, "name":"devuser", "id":"0d8880584b0090271f7cc00857a7c7b9" } } } 更多云服务事件源,请参见云服务事件源。 表13 参数说明 参数 类型 示例值 描述 datacontenttype String application/json 数据类型 data Map 见示例 数据 subject String 见示例 目标值 specversion String 1.0 版本 id String 见示例 唯一键值 source String eventSourceName 来源名称 time String 见示例 发布订阅时间 type String ROCKETMQ:CloudTrace:RocketmqCall 订阅类型
  • 云审计服务触发器CTS 可以编写FunctionGraph函数,根据CTS云审计服务类型和操作订阅所需要的事件通知,当CTS云审计服务获取已订阅的操作记录后,通过CTS触发器将采集到的操作记录作为参数传递(CTS示例事件)来调用FunctionGraph函数。经由函数对日志中的关键信息进行分析和处理,对系统、网络等业务模块进行自动修复,或通过短信、邮件等形式产生告警,通知业务人员进行处理。CTS触发器的使用请参考使用CTS触发器。
  • 对象存储服务OBS 可以编写FunctionGraph函数来处理OBS存储桶事件,例如对象创建事件或对象删除事件。当用户将一张照片上传到存储桶时,OBS存储桶调用FunctionGraph函数,实现读取图像和创建照片缩略图。OBS对象操作触发函数的过程请参考使用OBS触发器。 表1 OBS支持事件类型 事件 说明 ObjectCreated 表示所有创建对象的操作,包含Put、Post、Copy对象以及合并段。 Put 使用Put方法上传对象。 Post 使用Post方法上传对象。 Copy 使用copy方法复制对象。 CompleteMultipartUpload 表示合并分段任务。 ObjectRemoved 表示删除对象。 Delete 指定对象版本号删除对象。 DeleteMarkerCreated 不指定对象版本号删除对象。 多个事件类型可以作用于同一个目标对象,例如:同时选择“事件类型”复选框中的Put、Copy、Delete等方法作用于某目标对象,则用户往该桶中上传、复制、删除符合前后缀规则的目标对象时,均会发送事件通知给用户。ObjectCreated包含了Put、Post、Copy和CompleteMultipartUpload,如果选择了ObjectCreated,则不能再选择Put、Post、Copy或CompleteMultipartUpload。同理如果选择了ObjectRemoved,则不能再选择Delete或DeleteMarkerCreated。
  • API Gateway 可以通过HTTPS调用FunctionGraph函数,使用API Gateway自定义REST API和终端节点来实现。可以将各个API操作(如GET和PUT)映射到特定的FunctionGraph函数,当向该API终端节点发送HTTPS请求时(APIG示例事件),API Gateway会调用相应的FunctionGraph函数。HTTPS调用触发函数的使用过程请参考使用APIG触发器。
  • 函数样例工程包下载 本手册使用样例工程包下载地址如表4所示,可以下载到本地,创建函数时上传使用。 表4 样例工程包下载 函数 工程包下载 软件包校验文件 Node.js函数 fss_examples_nodejs.zip fss_examples_nodejs.sha256 Python函数 fss_examples_python2.7.zip fss_examples_python2.7_sha256 Java函数 fss_example_java8.jar fss_example_java8_sha256 Go函数 fss_examples_go1.8.zip fss_examples_go1.8_sha256 C#函数 fss_example_csharp2.0、fss_example_csharp2.1 fss_example_csharp2.0_sha256 fss_example_csharp2.1_sha256 PHP函数 fss_examples_php7.3.zip fss_examples_php7.3_sha256
  • 函数支持的运行时语言 FunctionGraph函数Runtime支持多种运行时语言:Python 、Node.js、Java、Go、C#、PHP及自定义运行时,说明如表1所示。 建议使用相关语言的最新版本。 表1 运行时说明 运行时语言 支持版本 SDK下载 Node.js 6.10、8.10、10.16、12.13、14.18、16.17、18.15 - Python 2.7、3.6、3.9、3.10 - Java 8、11、17(当前仅支持华北-乌兰察布二零二) Java SDK下载(软件包检验文件:fss-java-sdk_sha256) 说明: Java SDK集成了云服务OBS SDK。 Go 1.x Go1.x SDK(软件包检验文件:Go SDK_sha256) C# .NET Core 2.1、.NET Core 3.1、.NET Core 6.0(当前仅支持华北-乌兰察布二零二) CsharpSDK(软件包检验文件:fssCsharp_sha256) PHP 7.3 - 定制运行时 - -
  • Python Runtime集成的非标准库 表3 Python Runtime集成的非标准库 模块 功能 版本号 dateutil 日期/时间处理 2.6.0 requests http库 2.7.0 httplib2 httpclient 0.10.3 numpy 数学计算 1.13.1 redis redis客户端 2.10.5 obsclient OBS客户端 - smnsdk 访问SMN服务 1.0.1
  • Node.js Runtime集成的三方件 表2 Node.js Runtime集成的三方件 名称 功能 版本号 q 异步方法封装 1.5.1 co 异步流程控制 4.6.0 lodash 常用工具方法库 4.17.10 esdk-obs-nodejs OBS SDK 2.1.5 express 极简web开发框架 4.16.4 fgs-express 在FunctionGraph和API Gateway之上使用现有的Node.js应用程序框架运行无服务器应用程序和REST API 。提供的示例允许您使用Express框架轻松构建无服务器Web应用程序/服务和RESTful API 。 1.0.1 request 简化http调用,支持HTTPS并默认遵循重定向 2.88.0
  • 执行结果 执行结果由3部分组成:函数返回、执行摘要和日志。 表2 执行结果说明 参数项 执行成功 执行失败 函数返回 返回函数中定义的返回信息。 返回包含错误信息、错误类型和堆栈异常报错信息的JSON文件。格式如下: { "errorMessage": "", "errorType": "", "stackTrace": [] } errorMessage:Runtime返回的错误信息 errorType:错误类型 stackTrace:Runtime返回的堆栈异常报错信息 执行摘要 显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 日志 打印函数日志,最多显示4KB的日志。 打印报错信息,最多显示4KB的日志。
  • SDK接口 Context类中提供了许多上下文方法供用户使用,其声明和功能如表1所示。 表1 Context类上下文方法说明 方法名 方法说明 getRequestID() 获取请求ID。 getRemainingTimeInMilliSeconds () 获取函数剩余运行时间。 getAccessKey() 获取用户委托的AccessKey(有效期24小时),使用该方法需要给函数配置委托。 说明: 当前函数工作流已停止维护Runtime SDK 中getAccessKey接口,您将无法使用getAccessKey获取临时AK。 getSecretKey() 获取用户委托的SecretKey(有效期24小时),使用该方法需要给函数配置委托。 说明: 当前函数工作流已停止维护Runtime SDK 中getSecretKey接口,您将无法使用getSecretKey获取临时SK。 getSecurityAccessKey() 获取用户委托的SecurityAccessKey(有效期24小时),使用该方法需要给函数配置委托。 getSecuritySecretKey() 获取用户委托的SecuritySecretKey(有效期24小时),使用该方法需要给函数配置委托。 getSecurityToken() 获取用户委托的SecurityToken(有效期24小时),使用该方法需要给函数配置委托。 getUserData(string key) 通过key获取用户通过环境变量传入的值。 getFunctionName() 获取函数名称。 getRunningTimeInSeconds () 获取函数超时时间。 getVersion() 获取函数的版本。 getMemorySize() 分配的内存。 getCPUNumber() 获取函数占用的CPU资源。 getPackage() 获取函数组。 getToken() 获取用户委托的token(有效期24小时),使用该方法需要给函数配置委托。 getLogger() 获取context提供的logger方法,返回一个日志输出类,通过使用其info方法按“时间-请求ID-输出内容”的格式输出日志。 如调用info方法输出日志: log = context.getLogger() log.info("test") getAlias 获取函数的别名 getToken()、getAccessKey()和getSecretKey()方法返回的内容包含敏感信息,请谨慎使用,避免造成用户敏感信息的泄露。
  • Python的initializer入口介绍 FunctionGraph目前支持以下Python运行环境。 Python 2.7 (runtime = python2.7) Python 3.6 (runtime = python3) Python 3.9(runtime = python3) Initializer入口格式为: [文件名].[initializer名] 示例:实现initializer接口时指定的Initializer入口为main.my_initializer,那么FunctionGraph会去加载main.py中定义的my_initializer函数。 在FunctionGraph中使用Python编写initializer,需要定义一个Python函数作为initializer入口,一个最简单的initializer(以Python 2.7版本为例)示例如下。 def my_initializer(context): print 'hello world!' 函数名 my_initializer需要与实现initializer接口时的Initializer字段相对应,实现initializer接口时指定的Initializer入口为main.my_initializer ,那么函数服务会去加载main.py中定义的my_initializer函数。 context参数 context参数中包含一些函数的运行时信息,例如:request id、临时AccessKey、function meta等。
  • 函数定义 建议使用Python 3.6版本。 对于Python,FunctionGraph运行时支持Python 2.7版本、Python 3.6、Python3.9版本。 函数有明确的接口定义,如下所示。 def handler (event, context) 入口函数名(handler):入口函数名称,需和函数执行入口处用户自定义的入口函数名称一致。 执行事件(event): 函数执行界面由用户输入的执行事件参数, 格式为JSON对象。 上下文环境(Context):Runtime提供的函数执行上下文,其接口定义在SDK接口说明。
  • 添加引用 选择解决方案资源管理器中“test”工程,单击鼠标右键,选择“添加引用”,把下载的dll文件引用进来。如图4所示。 图4 添加引用 所引用的dll下载后放在一个lib文件中,一共有三个库:HC.Serverless.Function.Common.dll、HC.Serverless.Function.Common.JsonSerializer.dll、Newtonsoft.Json.dll。 选择“浏览”,单击“浏览(B) ”,把HC.Serverless.Function.Common.dll和HC.Serverless.Function.Common.JsonSerializer.dll引用进来,单击“确定”。如图5所示。 图5 引用文件 引用成功后界面如图6所示。 图6 完成引用
  • 执行结果 执行结果由3部分组成:函数返回、执行摘要和日志。 表3 执行结果说明 参数项 执行成功 执行失败 函数返回 返回函数中定义的返回信息。 返回包含错误信息和错误类型的JSON文件。格式如下: { "errorMessage": "", "errorType": "" } errorMessage:Runtime返回的错误信息 errorType:错误类型 执行摘要 显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 日志 打印函数日志,最多显示4KB的日志。 打印报错信息,最多显示4KB的日志。
  • 函数Handler定义 ASSEMBLY::NAMESPACE.CLASSNAME::METHODNAME .ASSEMBLY为应用程序的.NET程序集文件的名称,假设文件夹名称为HelloCsharp。 NAMESPACE、CLASSNAME即入口执行函数所在的namespace和class名称。 METHODNAME即入口执行函数名称。例如: 创建函数时Handler:HelloCsharp::Example.Hello::Handler。
  • SDK接口 Context接口 Context类中提供了许多属性供用户使用,如表1所示。 表1 Context对象说明 属性名 属性说明 String RequestId 请求ID。 String ProjectId Project Id String PackageName 函数所在分组名称 String FunctionName 函数名称 String FunctionVersion 函数版本 Int MemoryLimitInMb 分配的内存。 Int CpuNumber 获取函数占用的CPU资源。 String Accesskey 获取用户委托的AccessKey(有效期24小时),使用该方法需要给函数配置委托。 说明: 当前函数工作流已停止维护Runtime SDK 中String AccessKey接口,您将无法使用String AccessKey获取临时AK。 String Secretkey 获取用户委托的SecretKey(有效期24小时),使用该方法需要给函数配置委托。 说明: 当前函数工作流已停止维护Runtime SDK 中String SecretKey接口,您将无法使用String SecretKey获取临时SK。 String SecurityAccessKey 获取用户委托的SecurityAccessKey(有效期24小时),使用该方法需要给函数配置委托。 String SecuritySecretKey 获取用户委托的SecuritySecretKey(有效期24小时),使用该方法需要给函数配置委托。 String SecurityToken 获取用户委托的SecurityToken(有效期24小时),使用该方法需要给函数配置委托。 String Token 获取用户委托的Token(有效期24小时),使用该方法需要给函数配置委托。 Int RemainingTimeInMilliSeconds 函数剩余运行时间 String GetUserData(string key,string defvalue=" ") 通过key获取用户通过环境变量传入的值。 日志接口 FunctionGraph中C# SDK中接口日志说明如所示。 表2 日志接口说明 方法名 方法说明 Log(string message) 利用context创建logger对象: var logger = context.Logger; logger.Log("hello CSharp runtime test(v1.0.2)"); Logf(string format, args ...interface{}) 利用context创建logger对象: var logger = context.Logger; var version = "v1.0.2" logger.Logf("hello CSharp runtime test({0})", version);
  • 方式一 登录AOM华为云官网。 在AOM产品简介下方单击“AOM2.0控制台”,即可进入AOM 2.0服务页面。 图1 登录AOM官网 在弹出的“通知”对话框中仔细阅读从AOM 1.0切换到AOM 2.0计费方式变化的说明。 单击“授权”,然后在“云服务授权”页面中仔细阅读授权声明后,勾选“我已阅读并同意授权声明”。 单击“免费开通服务并授权”,即可免费开通AOM 2.0服务。 在页面左侧导航栏单击任意一个功能名称,如“仪表盘”,可进入该功能的操作界面。
  • 容器监控 登录AOM 2.0控制台。 在左侧导航栏单击“概览”,即可进入“概览”页面。 在“概览”页面切换为“容器视角”。 图1 切换视角 在快速入门区域,单击“容器监控”,进入“工作负载”页面。 图2 工作负载监控 在页面右上角设置工作负载信息的统计条件。 设置时间范围,查看已设时间范围内上报的工作负载。可通过如下两种方式设置时间范围: 方式一:使用AOM预定义好的时间标签,例如,近1小时、近6小时、近1天等,您可根据实际需要选择不同的时间粒度。 方式二:通过开始时间和结束时间,自定义时间范围,您最长可设置为30天。 设置信息的刷新频率。单击,根据需要从下拉列表中选择。 单击任一工作负载页签,即可在下方列表区域查看该工作负载的名称、状态、集群、命名空间等信息。 在工作负载列表上方可按集群、命名空间、实例名称等设置搜索条件,实现工作负载过滤显示。 单击右上角的,可实时获取到该工作负载的最新信息。 单击右上角的,通过选中/取消选中各展示项前的复选框,自定义列表项的展示/隐藏。 单击工作负载名称,可查看该工作负载的详细信息。 在“Pod实例”页签下,可查看该工作负载所有实例的概况。单击实例名称,可查看该实例下所有容器的资源使用与健康状态。 在“监控视图”页签下,可视化展示该工作负载的资源使用情况。 在“日志”页签下,可查看该工作负载的原始日志、实时日志详情和进行日志可视化,详情请参见搜索日志。 在“告警”页签下,可查看该工作负载的告警详情,详情请参见查看告警。 在“事件”页签下,可查看该工作负载的事件详情,详情请查看事件。
  • 配置告警行动规则 在“总览”页面切换为“容器视角”。 在快速入门区域,单击“配置告警行动规则”,进入告警行动规则页面。 在“告警行动规则”页签下,单击“创建告警行动规则”。 设置行动规则名称、类型等信息,参数说明如表5所示。 图6 创建告警行动规则 表5 告警行动规则参数说明 参数名称 说明 行动规则名称 行动规则的名称,只能由中文、数字、字母、下划线和中划线组成,且不能以下划线或中划线开头和结尾,最多可输入200个字符。 企业项目 所属的企业项目。 如果在全局页面设置为“ALL”,此处请从下拉列表中选择企业项目。 如果在全局页面已选择企业项目,则此处灰化不可选。 描述 行动规则的描述信息,最多可输入1024个字符。 行动规则类型 行动规则的类型。 指标或事件 当指标或事件满足对应的告警条件时,系统根据关联SMN主题与消息模板来发送告警通知。 日志 当日志数据满足对应的告警条件时,系统根据关联SMN主题与消息模板来发送告警通知。 行动方式 告警行动规则与SMN主题、消息模板关联的类型,请从下拉列表中选择。当前只支持“通知”类型。 主题 SMN主题,请从下拉列表中选择。 若没有合适的主题,请单击主题选择栏下方“创建主题”,在SMN界面创建。 消息模板 通知消息的模板,请从下列列表中选择。 若没有合适的消息模板,请单击消息模板选择栏右侧“创建消息模板”,新建消息模板。 设置完成后,单击“确定”。
  • 创建应用 登录AOM 2.0控制台。 在左侧导航栏单击“概览”,即可进入“概览”页面。 在“概览”页面切换为“应用视角”。 图1 切换视角 在快速入门区域,单击“创建应用”,进入“应用管理”页面。 创建应用。 单击右上角的“创建应用”,在弹出的“创建应用”页面中,设置创建应用的相关参数。 图2 创建应用 表1 创建应用参数说明 参数名称 说明 唯一标识 应用的唯一标识。 支持输入2~64个字符,只能由大小写字母、数字、下划线、中划线和点组成。 应用名称 应用的名称。 支持输入2~64个字符,只能由大小写字母、数字、下划线、中划线、点和中文字符组成。 企业项目 华为云企业项目,请从下列列表中选择。 如果现有的项目无法满足需求,可单击“创建项目”添加。 描述 应用的描述信息,最多可输入255个字符。 设置完成后,单击“确认”。 为创建的应用添加节点,包括组件和子应用。有以下两种方式: 应用创建完成后,单击“继续创建应用树节点”。 图3 创建子应用 在左侧导航栏中选择“应用管理”,进入“应用管理”页面。在左侧树节点的应用名称后,单击。 图4 应用树 配置节点信息,设置子节点类型和名称等信息。 图5 添加节点 表2 节点设置参数说明 参数类别 参数名称 说明 组件设置相关参数 组件名称 组件的名称。 支持输入2~64个字符,只能由大小写字母、数字、下划线、中划线、点和中文字符组成。 描述 组件的描述信息,最多可输入255个字符。 子应用设置相关参数 唯一标识 子应用的唯一标识。 支持输入2~64个字符,只能由大小写字母、数字、下划线、中划线和点组成。 子应用名称 子应用的名称。 支持输入2~64个字符,只能由大小写字母、数字、下划线、中划线、点和中文字符组成。 描述 子应用的描述信息,最多可输入255个字符。 同一个应用下,最多可创建3层子应用。 同一个应用下,最多可创建50个子应用。 同一个应用下,最多可创建50个组件。 设置完成后,单击“确认”。 根据主机、区域等信息为组件添加不同的环境,方便统一管理各资源或应用。 在左侧树节点,将光标移至待操作的组件名称后,单击。 在“添加环境”页面中,设置环境类型、主机类型等信息。 图6 添加环境 表3 添加环境 参数名称 说明 环境类型 环境的类型。目前支持环境类型有四种:开发、测试、预发布和生产。 主机类型 主机的类型。目前支持的主机类型有:LINUX和WINDOWS。 环境名称 环境的名称。 支持输入2~64个字符,只能由大小写字母、数字、下划线、中划线、点和中文字符组成。 区域 环境的区域,请从下拉列表中选择。 描述 环境的描述信息,最多可输入255个字符。 同一组件下最多可创建20个环境。 设置完成后,单击“确认”。 为组件创建对应环境后,即可为环境关联相关资源实例,后续可通过应用监控功能实时监控资源的使用情况。 在右侧选择需要的资源类型,建立应用与资源关联。 在左侧树节点选中待操作的环境,在右侧区域单击资源页签,在下方列表区域单击“关联资源”。 从资源列表中选择合适的资源实例。 资源列表仅展示与应用企业项目相同的资源。 图7 关联资源 设置完成后,单击“关联”。 如果关联的资源为云服务器ECS资源,需要单击“关联资源&安装Agent”,在关联资源后继续完成Agent安装。安装Agent的详情操作请参见安装UniAgent。
  • 配置告警行动规则 在“总览”页面切换为“应用视角”。 在快速入门区域,单击“配置告警行动规则”,进入“告警行动规则”页面。 在“告警行动规则”页签下,单击“创建告警行动规则”。 设置行动规则名称、类型等信息,参数说明如表8所示。 图11 创建告警行动规则 表8 告警行动规则参数说明 参数名称 说明 行动规则名称 行动规则的名称,只能由中文、数字、字母、下划线和中划线组成,且不能以下划线或中划线开头和结尾,最多可输入200个字符。 企业项目 所属的企业项目。 如果在全局页面设置为“ALL”,此处请从下拉列表中选择企业项目。 如果在全局页面已选择企业项目,则此处灰化不可选。 描述 行动规则的描述信息,最多可输入1024个字符。 行动规则类型 行动规则的类型。 指标或事件 当指标或事件满足对应的告警条件时,系统根据关联SMN主题与消息模板来发送告警通知。 日志 当日志数据满足对应的告警条件时,系统根据关联SMN主题与消息模板来发送告警通知。 行动方式 告警行动规则与SMN主题、消息模板关联的类型,请从下拉列表中选择。当前只支持“通知”类型。 主题 SMN主题,请从下拉列表中选择。 若没有合适的主题,请单击主题选择栏下方“创建主题”,在SMN界面创建。 消息模板 通知消息的模板,请从下列列表中选择。 若没有合适的消息模板,请单击消息模板选择栏右侧“创建消息模板”,新建消息模板。 设置完成后,单击“确定”。
共100000条