事件监控功能为您提供上报自定义事件的接口,方便您将业务产生的异常事件采集上报到云监控,通过对上报的事件配置报警规则来接收报警通知。

云监控为您提供 OpenAPI、Java SDK 和阿里云命令行工具(CLI) 三种方式上报数据。

使用限制

  • 单云账号QPS限制为20。
  • 单次最多上报100个事件。
  • 单次最多上报500KB数据。

使用OpenAPI上报数据

  • 服务地址

    https://metrichub-cms-cn-hangzhou.aliyuncs.com

  • 请求语法
    POST /event/custom/upload HTTP/1.1 
    Authorization:<AuthorizationString>
    Content-Length:<Content Length>
    Content-MD5:<Content MD5>
    Content-Type:application/json
    Date:<GMT Date>
    Host: metrichub-cms-cn-hangzhou.aliyuncs.com
    x-cms-signature:hmac-sha1
    x-cms-api-version:1.0
    x-cms-ip:30.27.84.196
    User-Agent:cms-java-sdk-v-1.0
    [{"content":"EventContent","groupId":GroupId,"name":"EventName","time":"20171023T144439.948+0800"}]
  • 请求参数
    名称 类型 必选 描述
    name 字符串 事件名称
    groupId 数值 事件所属的应用分组Id
    time 字符串 事件发生时间
    content 字符串 事件详情
  • 请求头定义

    事件监控接口的请求头定义如下:

    Header 类型 说明
    Authorization 字符串 内容:AccessKeyId:SignString
    User-Agent 字符串 客户端说明
    Content-MD5 字符串 请求 Body 经过 MD5 计算后的字符串,计算结果为大写。如果没有 Body 部分,则不需要提供该请求头。
    Content-Length 数值 RFC 2616 中定义的 HTTP 请求 Body 长度。如果请求无 Body 部分,则不需要提供该请求头。
    Content-Type 字符串 只支持application/json
    Date 字符串 HTTP 请求中的标准时间戳头(遵循 RFC 1123 格式,使用 GMT 标准时间)Mon, 3 Jan 2010 08:33:47 GMT
    Host string HTTP 请求的完整 HOST 名字(不包括如 https:// 这样的协议头)。例如,metrichub-cms-cn-hangzhou.aliyuncs.com
    x-cms-api-version string api版本 ,当前: 1.0
    x-cms-signature string 签名算法,当前:hmac-sha1
    x-cms-ip string 上报事件的机器ip,10.1.1.1
  • 签名算法

    目前,上报事件数据只支持一种数字签名算法,即默认签名算法为hmac-sha1。

    1. 准备可用的阿里云访问秘钥

      给 API 请求生成签名,需使用一对访问秘钥(AccessKeyId/AccessKeySecret)。您可以使用已经存在的访问秘钥对,也可以创建新的访问秘钥对,但需要保证使用的秘钥对处在启用状态。

    2. 生成请求的签名字符串

      API 签名字符串由 HTTP 请求中的 MethodHeaderBody 信息一同生成。

      SignString = VERB + "\n"
                   + CONTENT-MD5 + "\n"
                   + CONTENT-TYPE + "\n"
                   + DATE + "\n"
                   + CanonicalizedHeaders + "\n"
                   + CanonicalizedResource

      上面公式中的\n表示换行转义字符,+(加号)表示字符串连接操作,其他各个部分定义如下:

      名称 定义 示例
      VERB HTTP 请求的方法名称 PUT、GET、POST 等
      CONTENT-MD5 HTTP 请求中 Body 部分的 MD5 值(必须为大写字母串) 875264590688CA6171F6228AF5BBB3D2
      CONTENT-TYPE 请求中 Body 部分的类型 application/json
      DATE HTTP请求中的标准时间戳头(遵循 RFC 1123 格式,使用 GMT 标准时间) Mon, 3 Jan 2010 08:33:47 GMT
      CanonicalizedHeaders 由 HTTP 请求中以 x-cms 和 x-acs为前缀的自定义头构造的字符串 x-cms-api-version:0.1.0\nx-cms-signature
      CanonicalizedResource 由 HTTP 请求资源构造的字符串(具体构造方法见下面详述) /event/custom/upload
      上表中CanonicalizedHeaders 的构造方式如下:
      1. 将所有以x-cmsx-acs 为前缀的 HTTP 请求头的名字转换成小写字母。
      2. 将上一步得到的所有 CMS自定义请求头按照字典序进行升序排序。
      3. 删除请求头和内容之间分隔符两端出现的任何空格。
      4. 将所有的头和内容用 \n 分隔符组合成最后的 CanonicalizedHeaders。

      上表中CanonicalizedResource 的构造方式如下:

      1. 将 CanonicalizedResource 设置为空字符串(””)。
      2. 放入要访问的URI,如/event/custom/upload
      3. 如请求包含查询字符串(QUERY_STRING),则在 CanonicalizedResource 字符串尾部添加 和查询字符串。

        其中QUERY_STRING 是URL中请求参数按字典序排序后的字符串,其中参数名和值之间用= 相隔组成字符串,并对参数名-值对按照字典序升序排序,然后以 & 符号连接构成字符串。其公式化描述如下:

        QUERY_STRING = "KEY1=VALUE1" + "&" + "KEY2=VALUE2"
    3. 生成请求的数字签名
      默认签名算法为hmac-sha1,整个签名公式如下:
      Signature = base16(hmac-sha1(UTF8-Encoding-Of(SignString),AccessKeySecret))
  • 响应元素

    HTTP 状态码返回 200。

  • 示例
    • 请求示例
      POST /event/custom/upload HTTP/1.1 
      Host: metrichub-cms-cn-hangzhou.aliyuncs.com
      x-cms-api-version:1.0
      Authorization:YourAccKey:YourAccSecret 
      Host:metrichub-cms-cn-hangzhou.aliyuncs.com"
      Date:Mon, 23 Oct 2017 06:51:11 GMT
      Content-Length:180
      x-cms-signature:hmac-sha1
      Content-MD5:E9EF574D1AEAAA370860FE37856995CD
      x-cms-ip:30.27.84.196
      User-Agent:cms-java-sdk-v-1.0
      Content-Type:application/json
      [{"content":"123,abc","groupId":100,"name":"Event_0","time":"20171023T144439.948+0800"}]
    • 返回示例
      {
        "code":"200",
        "msg":""//正常上报时返回msg为空
      }

使用Java SDK上报数据

  • Maven依赖
    <dependency>
        <groupId>com.aliyun.openservices</groupId>
        <artifactId>aliyun-cms</artifactId>
        <version>0.1.2</version>
    </dependency>
  • 示例代码
    public void uploadEvent() throws CMSException, InterruptedException {
            //初始化客户端
            CMSClient cmsClient = new CMSClient(endpoint, accKey, secret);
           //构建2个事件上报
             CustomEventUploadRequest request = CustomEventUploadRequest.builder()
                        .append(CustomEvent.builder()
                                .setContent("abc,123")
                                .setGroupId(101l)
                                .setName("Event001").build())
                        .append(CustomEvent.builder()
                                .setContent("abc,123")
                                .setGroupId(101l)
                                .setName("Event002").build())
                        .build();
                CustomEventUploadResponse response = cmsClient.putCustomEvent(request);
                List<CustomEvent> eventList = new ArrayList<CustomEvent>();
                eventList.add(CustomEvent.builder()
                        .setContent("abcd,1234")
                        .setGroupId(101l)
                        .setName("Event001").build());
                eventList.add(CustomEvent.builder()
                        .setContent("abcd,1234")
                        .setGroupId(101l)
                        .setName("Event002").build());
                request = CustomEventUploadRequest.builder()
                        .setEventList(eventList).build();
                response = cmsClient.putCustomEvent(request);
        }

使用阿里云命令行(CLI)上报数据

  • 准备工作

    拥有阿里云账号,并生成具有云监控权限的子账号AK(使用子账号安全性更好)。

    1. 创建子账号。

    2. 为子账号生成accesskeyid, accesskeysecrret。

    3. 为子账号授权云监控权限。

  • 安装阿里云命令行(CLI)工具

    系统要求:Linux、UNIX 或 Mac OS。

    • 方式一:下载安装包

      您可以在阿里云CLI GitHub上下载最新版的CLI工具,解压后即可使用。支持Mac、Linux和Windows平台(x64版本)终端。 解压后,您可以将aliyun文件移至/usr/local/bin目录下,或添加到$PATH环境变量中。

    • 方式二:编译源码

      请先安装并配置好Golang环境,并按照如下步骤下载源码并编译。

      ```
      $ mkdir -p $GOPATH/src/github.com/aliyun
      $ cd $GOPATH/src/github.com/aliyun
      $ git clone http://github.com/aliyun/aliyun-cli.git
      $ git clone http://github.com/aliyun/aliyun-openapi-meta.git
      $ cd aliyun-cli
      $ make install
      ```
  • 配置CLI

    在使用阿里云CLI前,您需要运行aliyun configure命令配置调用阿里云资源的AccessKey、地域、语言等。 您可以在阿里云控制台的AccessKey页面创建和查看您的AccessKey,或者联系您的系统管理员获取AccessKey。

    $ aliyun configure
    Configuring profile 'default' ...
    Aliyun Access Key ID [None]: <Your AccessKey ID>
    Aliyun Access Key Secret [None]: <Your AccessKey Secret>
    Default Region Id [None]: cn-hangzhou
    Default output format [json]: json
    Default Language [zh]: zh
  • 上报监控数据

    使用PutCustomEvent接口上报监控数据,示例如下:

    aliyun cms PutCustomEvent --EventInfo.1.EventName ErrorEvent  --EventInfo.1.Content helloworld --EventInfo.1.Time "20171013T170923.456+0800"  --EventInfo.1.GroupId 0

    上报成功后,返回状态码200。

    {
        "Message": "success",
        "RequestId": "AB4BCB36-A048-4BD7-9530-46802D5F23ED",
        "Code": "200"
    }
  • 错误编码
    错误代码 含义
    200 正常
    400 客户端请求中的语法错误
    403 校验失败、限速、没有授权
    500 服务器内部错误
  • 子账号授权说明

    使用子账号的AK上报事件数据时,需要对相应子账号授权云监控管理权限。如果子账号未授权云监控管理权限,上报数据时会提示“cannot upload event, please use ram to auth”。

    1. 登录RAM控制台
    2. 进入用户管理 菜单。
    3. 选择需要上报数据的子账号,在操作中单击添加权限

    4. 添加权限页面中,选择管理云监控的权限,并单击确定保存授权。