跳转到内容
搜索文档

GraphQL 分析 (GraphQL Analytics)

最后更新 查看 MarkdownAgent 设置

使用 GraphQL Analytics API 查看与匹配您流量的规则相关的 Cloudflare Network Firewall(前称 Magic Firewall)网络流量数据。这包含了您在 Network Firewall 仪表板中配置的自定义规则,以及作为 Network Firewall 托管规则Network Firewall IDS 功能一部分由 Cloudflare 托管的规则。

在开始之前,您必须拥有 API 令牌。关于 GraphQL Analytics 快速入门的更多帮助,请参阅 GraphQL Analytics API

获取 Cloudflare 账户 ID (Account ID)

要为对象构建 Network Firewall GraphQL 查询,您需要一个 Cloudflare 账户 ID (Account ID)。

获取您的 Cloudflare 账户 ID (Account ID)

  1. 登录到 Cloudflare 仪表板,然后选择您的账户。
  2. 您浏览器地址栏中的 URL 应该显示 https://dash.cloudflare.com/,后跟一个十六进制字符串。该十六进制字符串即为您的 Cloudflare 账户 ID。

获取防火墙规则的规则 ID (Rule ID)

要构建查询以收集特定规则的分析数据,您需要每条防火墙规则的规则 ID。

  1. 在 Cloudflare 仪表板中,前往 Firewall Policies (防火墙策略) 页面。
  2. Custom policies(自定义策略) 选项卡中,在列表中找到您需要获取其规则 ID 的规则,然后选择三个点图标 > Edit(编辑)
  3. 找到 ID 并选择复制按钮。
  4. 选择 Cancel(取消) 返回 Firewall Policies(防火墙策略) 页面。

通过 Cloudflare Network Firewall 查询示例探索 GraphQL 架构

在本节中,您将运行一个测试查询,以获取在 5 分钟时间间隔内所有已配置的 Network Firewall 规则的 5 分钟计数。您可以复制下面的代码并将其粘贴到 GraphiQL 中。

有关 Analytics 架构的更多信息,请参阅使用 GraphiQL 探索 Analytics 架构

query MagicFirewallExample($accountTag: string!, $start: Time, $end: Time) {
	viewer {
		accounts(filter: { accountTag: $accountTag }) {
			magicFirewallSamplesAdaptiveGroups(
				filter: { datetime_geq: $start, datetime_leq: $end }
				limit: 2
				orderBy: [datetimeFiveMinute_DESC]
			) {
				sum {
					bits
					packets
				}
				dimensions {
					datetimeFiveMinute
					ruleId
				}
			}
		}
	}
}

Cloudflare Network Firewall 查询示例

获取特定规则的的分析数据

使用下面的示例显示在过去一小时内前 10 个疑似恶意流量流的数据包和比特总数。在收到结果后,您可以按 5 分钟平均数据包速率进行排序。

对于每个流量流,显示以下信息:

  • 源和目标 IP 地址
  • 接收该流量的入站 (Ingress) Cloudflare 数据中心
  • 在一小时内接收的总流量体积(以比特和数据包为单位)
  • 防火墙规则采取的操作 (Actions)
query MagicFirewallObtainRules(
	$accountId: string!
	$ruleId: string
	$start: Time
	$end: Time
) {
	viewer {
		accounts(filter: { accountTag: $accountId }) {
			magicFirewallNetworkAnalyticsAdaptiveGroups(
				filter: { ruleId: $ruleId, datetime_geq: $start, datetime_leq: $end }
				limit: 10
				orderBy: [avg_packetRateFiveMinutes_DESC]
			) {
				sum {
					bits
					packets
				}
				dimensions {
					coloCity
					ipDestinationAddress
					ipSourceAddress
					outcome
				}
			}
		}
	}
}

获取 IDS 分析数据

使用下面的示例显示 Network Firewall IDS 在过去一小时内检测到的前 10 个流量流的数据包和比特总数。

通过将 verdict 设置为 drop 并且将 outcome 设置为 pass,我们正在过滤被标记为检测到(即 verdict 为 drop)但未被丢弃(例如,outcome 为 pass)的流量。这是因为目前 Network Firewall IDS 仅检测恶意流量,但并不丢弃该流量。

对于每个流量流,显示以下信息:

  • 源和目标 IP 地址。
  • 接收该流量的入站 Cloudflare 数据中心。
  • 在一小时内接收的总流量体积(以比特和数据包为单位)。
query MagicFirewallObtainIDS($accountTag: string!, $start: Time, $end: Time) {
	viewer {
		accounts(filter: { accountTag: $accountTag }) {
			magicIDPSNetworkAnalyticsAdaptiveGroups(
				filter: {
					datetime_geq: $start
					datetime_leq: $end
					verdict: drop
					outcome: pass
				}
				limit: 10
				orderBy: [avg_packetRateFiveMinutes_DESC]
			) {
				sum {
					bits
					packets
				}
				dimensions {
					coloCity
					ipDestinationAddress
					ipSourceAddress
				}
			}
		}
	}
}

或者,要检查所有被分析过的流量(但分为恶意流量和其他流量),可以使用下面的示例。响应将为每个 5 分钟时间戳包含两个条目。对于恶意流量,verdict 将设置为 drop;对于不匹配任何 IDS 规则的流量,verdict 将设置为 pass

query MagicFirewallTraffic($accountTag: string!, $start: Time, $end: Time) {
	viewer {
		accounts(filter: { accountTag: $accountTag }) {
			magicIDPSNetworkAnalyticsAdaptiveGroups(
				filter: { datetime_geq: $start, datetime_leq: $end }
				limit: 10
				orderBy: [avg_packetRateFiveMinutes_DESC]
			) {
				sum {
					bits
					packets
				}
				dimensions {
					coloCity
					ipDestinationAddress
					ipSourceAddress
					verdict
				}
			}
		}
	}
}

这篇文档对您有帮助吗?