跳转到内容
搜索文档

使用 GraphQL 按主机名查询 HTTP 事件

最后更新 查看 MarkdownAgent 设置

按主机名随时间聚合的 HTTP 指标

本示例将使用 GraphQL Analytics API 查询特定时间范围内按主机名聚合的 HTTP 事件指标。

以下 API 调用将请求自定义主机名 hostname.example.com 在四天内的访问次数和边缘响应字节数。请务必将 CLOUDFLARE_ZONE_TAGAPI_TOKEN1 替换为你的 zone ID 和 API 凭据,并根据需要调整 datetime_geqdatetime_leq 的值。

API 调用

echo '{ "query":
  "query RequestsAndDataTransferByHostname($zoneTag: string, $filter:filter) {
    viewer {
      zones(filter: {zoneTag: $zoneTag}) {
        httpRequestsAdaptiveGroups(limit: 10, filter: $filter) {
          sum {
            visits
            edgeResponseBytes
          }
          dimensions {
            datetimeHour
          }
        }
      }
    }
  }",
  "variables": {
    "zoneTag": "<CLOUDFLARE_ZONE_TAG>",
    "filter": {
      "datetime_geq": "2022-07-20T11:00:00Z",
      "datetime_lt": "2022-07-24T12:00:00Z",
      "clientRequestHTTPHost": "hostname.example.com",
      "requestSource": "eyeball"
    }
  }
}' | tr -d '\n' | curl --silent \
https://api.cloudflare.com/client/v4/graphql \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data @- | jq .

返回的结果将为 JSON 格式(按请求),因此将输出通过管道传给 jq 会更易于阅读,如下例所示:

{
  "data": {
    "viewer": {
      "zones": [
        {
          "httpRequestsAdaptiveGroups": [
            {
              "dimensions": {
                "datetimeHour": "2022-07-21T10:00:00Z"
              },
              "sum": {
                "edgeResponseBytes": 19849385,
                "visits": 4383
              }
            },
            {
              "dimensions": {
                "datetimeHour": "2022-07-21T06:00:00Z"
              },
              "sum": {
                "edgeResponseBytes": 20607204,
                "visits": 4375
              }
            },
            {
              "dimensions": {
                "datetimeHour": "2022-07-26T05:00:00Z"
              },
              "sum": {
                "edgeResponseBytes": 20170839,
                "visits": 4519
              }
            },
            {
              "dimensions": {
                "datetimeHour": "2022-07-23T08:00:00Z"
              },
              "sum": {
                "edgeResponseBytes": 20141860,
                "visits": 4448
              }
            },
            {
              "dimensions": {
                "datetimeHour": "2022-07-25T15:00:00Z"
              },
              "sum": {
                "edgeResponseBytes": 21070367,
                "visits": 4469
              }
            },
            {
              "dimensions": {
                "datetimeHour": "2022-07-28T08:00:00Z"
              },
              "sum": {
                "edgeResponseBytes": 19200774,
                "visits": 4345
              }
            },
            {
              "dimensions": {
                "datetimeHour": "2022-07-26T02:00:00Z"
              },
              "sum": {
                "edgeResponseBytes": 20758067,
                "visits": 4502
              }
            },
            {
              "dimensions": {
                "datetimeHour": "2022-07-20T19:00:00Z"
              },
              "sum": {
                "edgeResponseBytes": 22127811,
                "visits": 4443
              }
            },
            {
              "dimensions": {
                "datetimeHour": "2022-07-27T15:00:00Z"
              },
              "sum": {
                "edgeResponseBytes": 20480644,
                "visits": 4268
              }
            },
            {
              "dimensions": {
                "datetimeHour": "2022-07-27T17:00:00Z"
              },
              "sum": {
                "edgeResponseBytes": 19885704,
                "visits": 4287
              }
            }
          ]
        }
      ]
    }
  },
  "errors": null
}

zone 中消耗最高的前 10 个 URL

我们将使用 GraphQL Analytics API 查询 zone 中消耗最高的前 10 个 URL,帮助你识别资源用量最高的 URL。以下是一些配置说明:

  • 要按特定主机名筛选,在 "requestSource" 下方添加 "clientRequestHTTPHost": "'$2'" 这一行。
  • API_TOKEN 替换为使用 Read all resources 权限生成的 API 令牌。该脚本仅能访问令牌创建者可用的 zone。
  • 将 zone ID(zoneTag)作为参数 ARG=$1 传入。
  • 要计算当前日期和 30 天前的日期,在 Mac 上使用 gdate
    • CURRENTDATE=$(gdate -u +'%FT%TZ')
    • OLDDATE=$(gdate -d '-30 days' -u +'%FT%TZ')
  • 对于过去 30 天内的特定日期,将 CURRENTDATEOLDDATE 变量设置为 "YYYY-MM-DDTHH:MM:SSZ" 格式。

API 调用

curl --silent \
https://api.cloudflare.com/client/v4/graphql \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "query": "{viewer {zones(filter: {zoneTag: $zoneTag}) {topPaths: httpRequestsAdaptiveGroups(filter: $filter, limit: 10, orderBy: [sum_edgeResponseBytes_DESC]) {count sum {edgeResponseBytes} dimensions {metric: clientRequestPath}}}}}",
  "variables": {
    "zoneTag": "'$ARG'",
    "filter": {
      "AND": [
        {
          "datetime_geq": "'$OLDDATE'",
          "datetime_leq": "'$CURRENTDATE'"
        },
        {
          "requestSource": "eyeball"
        }
      ]
    }
  }
}' | jq -r 'try .data.viewer.zones[].topPaths[] | "\"\(.dimensions.metric)\": \(.sum.edgeResponseBytes)"' | sort

Footnotes

  1. 有关配置和权限的更多信息,请参阅 Configure an Analytics API token

这篇文档对您有帮助吗?