IBM Cloud Docs
GraphQL のセットアップ

GraphQL のセットアップ

GraphQL は API のための照会言語です。 単一の /graphql エンドポイント上で照会を実行できます。 GraphiQL は、標準装備のイントロスペクション・システムを使用することによりスキーマを介して情報を公開します。

GraphQL アナリティクス API エンドポイントは、エンタープライズ・レベルのプランでのみ使用可能です。

前提条件

続行するには、以下の権限が必要です。

  • インスタンス・レベルまたはゾーン・レベルのいずれかでのビューアーの権限が必要です。
  • ゾーン・レベルでのリーダーの権限が必要です。

GraphiQL ツール

GraphiQL を使用して、スキーマを検討し、GraphQL エンドポイント用の照会をテストすることができます。

  1. ダウンロードとインストールGraphiQL
  2. GraphiQL アプリケーションを開き、許可する HTTP ヘッダーを入力します。
  3. **「GraphQl エンドポイント (GraphQl Endpoint)」**フィールドに正しいエンドポイントを入力します。 使用https://api.cis.cloud.ibm.com/v1/<crn>/zones/<zoneid>/graphql

ウィンドウは照会ペインと応答ペインに分割されています。 照会ペインで、照会に挿入される照会変数を定義できます。

照会を構築するには、以下の手順に従います。

  1. POST「メソッド」**リスト・メニューで ** を選択します。
  2. **「HTTP ヘッダーの編集 (Edit HTTP Headers)」**をクリックします。
  3. X-Auth-User-Token または許可トークンを入力し、Content-Type を application/json に設定します。 それらを保存してください。

照会ペインで照会の構築を開始します。 Document Explorer を使用して、スキーマと文書を検討します。 Document Explorer には、データ・セット、ディメンション、運用、および関数についての使用可能なさまざまなオプションが表示されます。 Document Explorer で、「ゾーン」と「ドメイン」という語は同義語です。

以下のテスト・スニペットを照会ペインに貼り付け、応答ペインでの応答を監視します。datetime は必要に合わせて調整してください。

query {
   viewer {
      zones(filter: {zoneTag: "<your domain ID>"}) {
         httpRequests1hGroups(limit: 5, filter: { datetime_gt: "2020-08-30T04:00:00Z", datetime_lt: "2020-08-31T06:00:00Z"}) {
            sum {
              countryMap {
                bytes
                clientCountryName
              }
            }
            dimensions {
              date
              datetime
             }
          }
         firewallEventsAdaptiveGroups(limit: 10, filter: { datetime_gt: "2020-08-30T04:00:00Z", datetime_lt: "2020-08-31T06:00:00Z"}) {
               count
               dimensions {
                  clientCountryName
                  clientAsn
                  datetimeHour
               }
             }
          }
       }
     }

照会の基本

GraphQL はデータをグラフとして構造化します。 必要なデータを取得するために、グラフのエッジを検討できます。 照会フォーマットの例を以下に示します。

viewer {
      zones(filter:...) {
         requests(filter:...) {
           date, time, bytes,...
         }
      }
}

照会を実行しているユーザーの初期ノードは viewer です。 ビューアーは、1 つ以上のドメイン (ゾーン) にアクセスできます。 各ゾーンには、ゾーンのファイアウォール・イベントなど、異なるデータ・セットが含まれています。

集合データを表すノードには、groups サフィックスが含まれます (例: firewallEventsAdaptiveGroups)。 以下の例に示されているように、各グループは特定の構造に従います。

type ExampleGroup {
    count # No subfields, it is just the group size.
    sum {
        # fields that support summing (numbers, maps of numbers)
    }
    avg {
        # fields that support averaging (numbers)
    }
    uniq {
        # fields that support uniqueing (numbers, strings, enums, IPs, dates, etc.)
    }
}

以下の例は、有効なグループを示しています。

  httpRequests1mGroups {
    sum {
      bytes
    }
    uniq {
      uniques # unique IPs
    }
    dimensions {
      datetimeMinute
    }
  }

データ・セット

以下は、よく利用されるデータセットのリストである。 データセットの詳細については、GraphQLイントロスペクション・メカニズムを使用できます。

よく使われるGraphQLデータセット
データ・セット Node
ブラウザー・インサイト browserInsightsAdaptiveGroups
ファイアウォール・アクティビティー・ログ firewallEventsAdaptive firewallEventsAdaptiveByTimeGroups
ファイアウォール・アナリティクス firewallEventsAdaptiveGroups
ヘルス・チェック・アナリティクス healthCheckEvents healthCheckEventsGroups
HTTP リクエスト httpRequests1mGroups httpRequests1hGroups httpRequests1dGroups httpRequestsAdaptiveGroups
画像サイズ変更アナリティクス imageResizingRequests1mGroups
ロード・バランシング・アナリティクス loadBalancingRequests loadBalancingRequestsGroups
SYN 攻撃 (DoS 攻撃) synAvgPps1mGroups
エッジ機能メトリック workersInvocationsAdaptive

エラー

GraphQL Analytics API は、HTTPS 要求と JSON 応答に基づく RESTful API であり、使い慣れた HTTP 状況コード ( 404500504など) を返します。 GraphQL 仕様に従うと、 200 応答にエラーが含まれる可能性があります。これは、一般的な REST アプローチとは対照的です。

すべての応答にはエラー配列が含まれます。エラーがない場合、それはヌルとなります。 ヌル以外のエラーには、messagepath、および timestamp が含まれます。

以下のコードは、エラー応答の例です。

{
  "data": null,
  "errors": [
    {
      "message": "cannot request data older than 2678400s",
      "path": [
        "viewer",
        "zones",
        "0",
        "firewallEventsAdaptiveGroups"
      ],
      "extensions": {
        "timestamp": "2019-12-09T21:27:19.195060142Z"
      }
    }
  ]
}

制限

履歴データの保存限度は、以下の表に規定されています。

履歴データの制限
データ・ノード Enterprise
browserInsightsAdaptiveGroups 30 日間
firewallEventsAdaptiveByTimeGroups 30 日間
firewallEventsAdaptiveGroups 30 日間
healthCheckEventsGroups 90 日間
healthCheckEvents 90 日間
httpRequestsAdaptiveGroups 30 日間
httpRequests1dGroups 365 日間
httpRequests1hGroups 90 日間
httpRequests1mGroups 7 日間
loadBalancingRequestsGroups 30 日間
loadBalancingRequests 30 日間
synAvgPps1mGroups 7 日間

アカウント制限のための照会設定

データ・ノードの制限に関する特定の情報を取得するには、settings ノードを使用します。

設定ノードのフィールド
フィールド 説明
enabled 現在のプランでデータ・セット (ノード) が使用可能な場合、true を戻します。
maxDuration 1 つの照会で要求できる最大期間 (秒数) を規定します (データ・ノードによって異なります)。
maxNumberOfFields 1 つの照会で要求できるフィールドの最大数を規定します (データ・ノードによって異なります)。
maxPageSize 1 つの照会で戻すことのできるレコードの最大数を規定します (データ・ノードによって異なります)。
notOlderThan 照会で検索できるレコードの古さを制限します (秒数、データ・ノードとプランによって異なります)。

照会の例を以下に示します。

{
  viewer {
    zones(filter: { zoneTag: $zoneTag }) {
      settings {
        browserInsightsAdaptiveGroups {
          maxDuration
          maxNumberOfFields
          maxPageSize
          enabled
          notOlderThan
        }
      }
    }
  }
}

照会応答は以下のとおりです。

{
  "data": {
    "viewer": {
      "zones": [
        {
          "settings": {
            "browserInsightsAdaptiveGroups": {
              "enabled": true,
              "maxDuration": 2592000,
              "maxNumberOfFields": 30,
              "maxPageSize": 10000,
              "notOlderThan": 2595600
            }
          }
        }
      ]
    }
  },
  "errors": null
}

照会の制限

1 つの照会で戻すことのできるデータのボリュームは制限されており、ユーザーの日次のデータ・ボリュームには制限があります。 API によって適用される一般的なレート制限に加えて、以下の制限が適用されます。

  • ゾーンを範囲とする照会には、最大 10 のゾーンを含めることができます。
  • maxNumberOfFieldssettings に示されているように、照会は最大 30 のフィールドを要求できます。
  • 応答は最大 10,000 のレコードを戻すことができます。 この制限は、maxPageSizesettings に示されています。

照会で戻すレコードの上限は、limit 引数を使用して明示的に指定する必要があります。

ソート

orderBy 引数を使用して、照会結果の要素の順序をソートすることができます。 デフォルトで、結果はデータ・セット (テーブル) の 1 次キーによってソートされます。 ソート基準に別のフィールドを指定した場合、ページネーションのために一貫性のある結果を維持するために、1 次キーがソート・キーに組み込まれます。

ネストされた構造内での順序付けはサポートされていません。

ソートの例

生データのソート

firewallEventsAdaptive (orderBy: [clientCountryName_ASC]) {
    clientCountryName
}

複数のフィールドを使用した生データのソート

firewallEventsAdaptive (orderBy: [clientCountryName_ASC, datetime_DESC]) {
    clientCountryName
    datetime
}

集約関数によるグループ・ソート

httpRequests1hGroups (orderBy: [sum_bytes_DESC]){
    sum {
        bytes
        requests
    }
    dimensions {
        datetime
    }
}

ページネーション

ページ編集 (照会結果をより小さな部分に分割) は、 limitorderBy、およびフィルター・パラメーターを使用して行うことができます。 GraphQL Analytics API は、ページネーションのカーソルをサポートしていません。

  • limit (整数) は、戻すレコードの数を規定します。
  • orderBy (ストリング) は、データのソート順を規定します。

カーソルのない照会ページ

以下の例では、dateclientCountryName の関係が一意であると想定しています。

照会の最初の N 件の結果を取得します。

結果の数を制限するには、limit パラメーターを追加します。 例えば、最初の 2 つのレコードを照会することができます。

firewallEventsAdaptive (limit: 2, orderBy: [datetime_ASC, clientCountryName_ASC]) {
    datetime
    clientCountryName
}

日付によるソート順を指定する場合は、日付と国の両方によるソート順を指定する場合よりも、戻される結果が明確ではなくなります。

照会応答は以下のとおりです。

{
  "firewallEventsAdaptive" : [
    {
      "datetime": "2018-11-12T00:00:00Z",
      "clientCountryName": "UM"
    },
    {
      "datetime": "2018-11-12T00:00:00Z",
      "clientCountryName": "US"
    }
  ]
}

フィルターを使用した次のページの照会

次の N 件の結果を取得するには、前の照会の最後の結果を除外するフィルターを指定します。 前の例を使用し、「より大」の演算子 (_gt) を clientCountryName フィールドに付加し、「以上」の演算子を datetime フィールドに付加することができます。 具体的に指定することにより、最適な結果を取得することができます。

firewallEventsAdaptive (limit: 2, orderBy: [datetime_ASC, clientCountryName_ASC], filter: {date_geq: "2018-11-12T00:00:00Z", clientCounterName_gt: "US"}) {
    date
    clientCountryName
}

照会応答は以下のとおりです。

{
  "firewallEventsAdaptive" : [
    {
      "datetime": "2018-11-12T00:00:00Z",
      "clientCountryName": "UY"
    },
    {
      "datetime": "2018-11-12T00:00:00Z",
      "clientCountryName": "UZ"
    }
  ]
}

前のページの照会

以前の N 件の結果を取得するには、フィルターとソート順を逆にします。

firewallEventsAdaptive (limit: 2, orderBy: [datetime_DESC, clientCountryName_DESC, filter: {date_leq: "2018-11-12T00:00:00Z", clientCountryName_lt: "UY"}]) {
  datetime
  clientCountryName
}

照会応答は以下のとおりです。

{
  "firewallEventsAdaptive" : [
    {
      "datetime": "2018-11-12T00:00:00Z",
      "clientCountryName": "US"
    },
    {
      "datetime": "2018-11-12T00:00:00Z",
      "clientCountryName": "UM"
    }
  ]
}

フィルタリング

フィルターは、照会を、特定のアカウントや一連のゾーン (ドメイン)、日付における要求、または特定の照会エージェントに制約します。 フィルターを使用しないと、パフォーマンスは低下し、重要ではないデータが結果に含まれる可能性があります。

構造

GraphQL フィルタは、 GraphQL 入力オブジェクトによって表されます。

以下のリソースでは、フィルターを引数として使用できます。

  • ゾーン (ドメイン)
  • テーブル (データ・セット)
  • アカウント

ゾーン (ドメイン) フィルター

ゾーン・フィルターを使用すると、ゾーンに関連したデータをゾーン (ドメイン) ID (zoneTag) によって照会できます。

zones(filter: {zoneTag: "your domain (zone) ID"}) {
    ...
}

ゾーン・フィルターは、以下の文法に準拠している必要があります。

filter
    { zoneTag: t }
    { zoneTag_gt: t }
    { zoneTag_in: [t, ...] }

複合フィルター (コンマ区切り、ANDOR) はサポートされていません。 ゾーンは常に英数字に基づいてソートされます。

テーブル (データ・セット) フィルター

テーブル・フィルターでは、少なくとも 1 つのノードを照会することが必要です。 AND 演算子を使用して、マルチノード・フィルターを作成し、結合することができます。

アカウント・フィルター

アカウント・レベルのフィルタリングがサポートされています。必須のフィルター・パラメーターがあります。 以下に例を示します。

accounts(filter: {accountTag: $accountTag}) {
    ...
}

オペレーター

演算子のサポートは、ノード・タイプとノード名に応じてさまざまです。 以下の演算子は、すべてのタイプでサポートされています。

サポートされている演算子
オペレーター 比較
gt より大きい
lt より小さい
geq 以上
leq 以下
neq 等しくない
in in

一般的な例:

{
  myQuery(
    filter: {
      clientCountry: "UK" # all objects having client country equal to "UK"
      datetime_gt: "2020-01-01 10:00:00" # all object having datetime greater than "2020-01-01 10:00:00"
    }
  )
}

特定のノードのフィルタリング:

httpRequests1hGroups(filter: {datetime: "2020-01-01 10:00:00"}) {
    ...
}

複数のフィールドでのフィルタリング:

httpRequests1hGroups(filter: {datetime_gt: "2018-01-01 10:00:00", datetime_lt: "2018-01-01 11:00:00"}) {
    ...
}

OR 演算子を使用したフィルタリング:

httpRequests1hGroups(filter: {
    datetime: "2020-01-01 10:00:00",
    OR:[{clientCountryName: "US"}, {clientCountryName: "UK"}]) {
    ...
}