イベントモニタリングには、カスタムイベントをレポートするための API が複数用意されています。 これらの API を使用してイベント関連の例外を収集し、CloudMonitor にレポートできます。 イベント関連の例外発生時にアラート通知を受信できるようにアラートルールを構成することもできます。

CloudMonitor は、API、Java SDK、および Alibaba Cloud CLI を使用したデータのレポーティングに対応しています。

制限事項

  • 1 件の Alibaba Cloud アカウントから送信できるレポートリクエストの数は、1 秒あたり最大 20 件です。
  • 1 回のレポートで送信できるイベント数は、最大 100 件です。
  • 1 回のレポートで送信できるデータサイズは、最大 500 KB です。

API を使用したデータのレポート

  • エンドポイント

    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 String 必須 イベント名
    groupId Numerical 必須 イベントが属するアプリケーショングループの ID
    time String 必須 イベントの発生時刻
    content String 必須 イベントの詳細
  • リクエストヘッダーの定義

    下表に、イベントモニタリング用 API のリクエストヘッダーを示します。

    ヘッダー 説明
    Authorization 文字列 認証文字列。 内容: AccessKeyId:SignString
    User-Agent 文字列 クライアントの説明。
    Content-MD5 文字列 リクエスト本文の値で MD5 ハッシュを計算して取得した、すべて大文字の文字列。 リクエストに本文がない場合は不要。
    Content-Length 数値 RFC 2616 に定義された、HTTP リクエストの本文の長さ。 リクエストに本文がない場合は不要。
    Content-Type 文字列 HTTP リクエストの本文のタイプ。 有効な値: application および json。
    Date 文字列 HTTP リクエストの標準タイムスタンプヘッダー。 このヘッダーは、RFC 1123 形式に準拠し、GMT を使用 (例: Mon, 3 Jan 2010 08:33:47 GMT) 。
    Host 文字列 HTTP リクエストの完全なホスト名。 ( https:// などのプロトコルヘッダーは含まれない。 例: metrichub-cms-cn-hangzhou.aliyuncs.com)
    x-cms-api-version 文字列 API のバージョン。 現在のバージョンは 1.0。
    x-cms-signature 文字列 署名アルゴリズム。 現在サポートされている署名アルゴリズムは HMAC-SHA1 のみ。
    x-cms-ip 文字列 イベントをレポートするサーバーの IP アドレス (例: 10.1.1.1)。
  • 署名アルゴリズム

    現在サポートされている署名アルゴリズムは HMAC-SHA1 のみです。

    1. Alibaba Cloud AccessKey のペアを準備します。

      API リクエストのデジタル署名を生成するには、AccessKey ID と AccessKey Secret で構成されるAccessKey のペアを使用する必要があります。 既存の AccessKey のペアを使用することも、新しいペアを作成して使用することもできます。 AccessKey のペアは、アクティブである必要があります。

    2. リクエストの署名文字列を生成します。

      API 署名文字列は、HTTP リクエストのメソッドヘッダー、および 本文で構成されます。

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

      上記の式で、\n は改行エスケープ文字を示し、プラス記号 (+) は文字列連結演算子を示します。 他の部分は次のように定義されます。

      名前 定義
      VERB HTTP リクエストのメソッド名。 PUT、GET、および POST。
      CONTENT-MD5 HTTPリクエストの本文の MD5 の値。すべて大文字の文字列。 875264590688CA6171F6228AF5BBB3D2
      CONTENT-TYPE リクエストの本文のタイプ。 application/json
      DATE HTTP リクエストの標準タイムスタンプヘッダー。RFC1123 形式に従い、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-cms および x-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":""//The returned msg is null when the reporting is normal.
      }

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 {
            // Initialize the client.
            CMSClient cmsClient = new CMSClient(endpoint, accKey, secret);
           //Construct two events to be reported.
             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);
        }

Alibaba Cloud CLI を使用したデータのレポート

  1. 前提条件

    Alibaba Cloud アカウントおよびアカウントで使用する RAM ユーザーを作成し、また CloudMonitor 権限が付与された RAM ユーザー用のアクセスキーを生成します。

    1. RAM ユーザーを作成します。
    2. RAM ユーザーの AccessKey ID と AccessKey Secret を生成します。
    3. RAM ユーザーに CloudMonitor 権限を付与します。
  2. CMS SDK のインストール
    • Windows でのインストール方法は次のとおりです。
      cd C:\Python27\Scripts
      pip install aliyun-python-sdk-cms

      次のコマンドを実行して Logtail をアップグレードします。

      pip install --upgrade aliyun-python-sdk-cms
    • Linux でのインストール方法は次のとおりです。
      sudo pip install aliyun-python-sdk-cms

      次のコマンドを実行して Logtail をアップグレードします。

      sudo pip install —upgrade aliyun-python-sdk-cms
  3. モニタリングデータのレポート

    PutEvent API を使用して、モニタリングデータをレポートします。

    • Windows での例:
      aliyuncli.exe cms PutEvent --EventInfo "[{'content':'helloworld','time':'20171013T170923.456+0800','name':'ErrorEvent','groupId':'27147'}]"
    • Linux での例:
      aliyuncli cms PutEvent --EventInfo "[{'content':'helloworld','time':'20171023T180923.456+0800','name':'ErrorEvent','groupId':'27147'}]"
    • データのレポートが正常に処理された場合、、ステータスコード 200 が返されます。
      {
      "Code": "200"
      }
エラーコード
エラーコード 説明
200 正常
400 クライアントリクエストの構文エラー
403 検証失敗、制限速度、または権限不足
500 内部サーバーエラー
RAM ユーザーの認証

RAM ユーザーのアクセスキーでイベントデータをレポートするには、RAM ユーザーに CloudMonitor 権限を付与する必要があります。 権限を付与しなかった場合、データのレポート時に、「イベントをアップロードできません。認証に RAM を使用してください」というメッセージが表示されます。

  1. RAM コンソール にログインします。
  2. 左側のナビゲーションウィンドウで、[ユーザー] をクリックします。
  3. [ユーザー] ページで、RAM ユーザーに対応する [操作] 列の [許可] をクリックします。
  4. [許可] ページで [AliyunCloudMonitorFullAccess] を選択し、 [OK] を選択します。