INTEGRITY Dokumentace

Pomocí GraphQL vytvářejte widgety

Tento článek uvádí příklady dotazů, které můžete použít k naplnění vlastního dashboardu.

Pomocí tohoto postupu sestavte a otestujte dotazy:

Parametry a filtry

Tyto příklady používají ID účtu Cloudflare, na který se dotazujete. Můžete ho definovat jako proměnnou (accountTag) a odkazovat na ni ve svých dotazech.

Dotazy dále používají filtr, kterým určíte časový interval, jenž chcete dotazovat. Filtr definuje časový interval pomocí počátečního a koncového času. Atributy pro určení počátečního a koncového času se liší podle období, které chcete dotazovat. Více informací najdete v Filtrování kde najdete další informace o filtrech.

Následující příklad dotazuje data s datem větším nebo rovným date_geq a menší nebo rovno date_leq:

Nastavení časového intervalu účtu a dotazu
{
	"accountTag": "{account-id}",
	"filter": {
		"AND": [{ "date_geq": "2020-01-19" }, { "date_leq": "2020-01-20" }]
	}
}

Tato tabulka uvádí datové sady (uzly) Network Analytics a datetimeDimension který byste měli použít při dotazování na data pro daný výběr času.

Pokud potřebujete agregovaný pohled na data, použijte Groups dotazovací uzly. Například ipFlows1mAttacksGroups dataset představuje souhrnné přehledy útočné aktivity po jednotlivých minutách. Další podrobnosti naleznete v Datové sady.

Výběr časuUzel QuerydatetimeDimension
Minulý týdenipFlows1dGroupsdate
Minulý měsícipFlows1dGroupsdate
24 hodinipFlows1mGroupsdatetimeFifteenMinutes
12 hodinipFlows1mGroupsdatetimeFifteenMinutes
6 hodinipFlows1mGroupsdatetimeFiveMinutes
30 minipFlows1mGroupsdatetimeMinute
Custom rangeZávisí na vybraném rozsahuZávisí na vybraném rozsahu

Následující tabulka uvádí atributy počátečního a koncového času, které jsou platné pro uzly dotazů reprezentující různé časové rozsahy.

Uzel QueryFiltr počátečního dne/časuFiltr koncového data a času
ipFlows1mGroupsdatetimeMinute_geqdatetimeMinute_leq
ipFlows1mAttacksGroupsdate_geqdate_leq
ipFlows1hGroupsdatetimeHour_geqdatetimeHour_leq
ipFlows1dGroupsdate_geqdate_leq

Graf časové řady

Pomocí následujícího dotazu sestavte graf časové řady v Network Analytics:

Graf časové řady
query ipFlowTimeseries(
	$accountTag: string
	$filter: AccountIpFlows1mGroupsFilter_InputObject
) {
	viewer {
		accounts(filter: { accountTag: $accountTag }) {
			ipFlows1mGroups(
				limit: 1000
				filter: $filter
				orderBy: datetimeMinute_ASC
			) {
				dimensions {
					timestamp: datetimeMinute
					attackMitigationType
					attackId
				}
				sum {
					bits
					packets
				}
			}
		}
	}
}

Activity log

Tento dotaz vrací protokol aktivit shrnující minutové souhrny útočného provozu v IP tocích. Dotaz seskupuje data podle polí uvedených v dimensions objekt.

Dotaz na Activity log
query ipFlowEventLog(
	$accountTag: string
	$filter: AccountIpFlows1mAttacksGroupsFilter_InputObject
) {
	viewer {
		accounts(filter: { accountTag: $accountTag }) {
			ipFlows1mAttacksGroups(
				limit: 10
				filter: $filter
				orderBy: [min_datetimeMinute_ASC]
			) {
				dimensions {
					attackId
					attackDestinationIP
					attackDestinationPort
					attackMitigationType
					attackSourcePort
					attackType
				}
				avg {
					bitsPerSecond
					packetsPerSecond
				}
				min {
					datetimeMinute
					bitsPerSecond
					packetsPerSecond
				}
				max {
					datetimeMinute
					bitsPerSecond
					packetsPerSecond
				}
				sum {
					bits
					packets
				}
			}
		}
	}
}

karty Top N: zdroj

Tento dotaz vrací data o nejčastějších zdrojových IP adresách. Pole limit parametr řídí počet vrácených záznamů pro každý uzel. V následujícím kódu zvýrazněné řádky ukazují, kde nastavujete limit.

Dotaz karet Top N
query GetTopNBySource(
    $accountTag: string
    $filter: AccountIpFlows1mGroupsFilter_InputObject
    $portFilter: AccountIpFlows1mGroupsFilter_InputObject
  ) {
    viewer {
      accounts(filter: { accountTag: $accountTag }) {
        topNPorts: ipFlows1mGroups(
        limit: 5
        filter: $portFilter
        orderBy: [sum_(bits/packets)_DESC]
      ) {
        sum {
          count: (bits/packets)
        }
        dimensions {
          metric: sourcePort
          ipProtocol
        }
      }
      topNASN: ipFlows1mGroups(
        limit: 5
        filter: $filter
        orderBy: [sum_(bits/packets)_DESC]
      ) {
        sum {
          count: (bits/packets)
        }
        dimensions {
          metric: sourceIPAsn
          description: sourceIPASNDescription
        }
      }
        topNIPs: ipFlows1mGroups(
        limit: 5
        filter: $filter
        orderBy: [sum_(bits/packets)_DESC]
      ) {
        sum {
          count: (bits/packets)
        }
        dimensions {
          metric: sourceIP
        }
      }
        topNColos: ipFlows1mGroups(
          limit: 10
          filter: $filter
          orderBy: [sum_(bits/packets)_DESC]
        ) {
          sum {
            count: (bits/packets)
          }
          dimensions {
            metric: coloCity
            coloCode
          }
        }
        topNCountries: ipFlows1mGroups(
          limit: 10
          filter: $filter
          orderBy: [sum_(bits/packets)_DESC]
        ) {
          sum {
            count: (bits/packets)
          }
          dimensions {
            metric: coloCountry
          }
        }
        topNIPVersions: ipFlows1mGroups(
          limit: 2
          filter: $filter
          orderBy: [sum_(bits/packets)_DESC]
        ) {
          sum {
            count: (bits/packets)
          }
          dimensions {
            metric: ipVersion
          }
        }
      }
    }
  }

karty Top N: cíl

Tento dotaz vrací data o nejčastějších cílových IP adresách. Pole limit parametr řídí počet vrácených záznamů. V následujícím kódu zvýrazněné řádky ukazují, že dotaz vrací pět nejvyšších výsledků.

Karty Top N: Cíl
query GetTopNByDestination(
    $accountTag: string
    $filter: AccountIpFlows1mGroupsFilter_InputObject
    $portFilter: AccountIpFlows1mGroupsFilter_InputObject
  ) {
    viewer {
      accounts(filter: { accountTag: $accountTag }) {
        topNIPs: ipFlows1mGroups(
          filter: $filter
          limit: 5
          orderBy: [sum_(bits/packets)_DESC]
        ) {
          sum {
            count: (bits/packets)
          }
          dimensions {
            metric: destinationIP
          }
        }
        topNPorts: ipFlows1mGroups(
          filter: $portFilter
          limit: 5
          orderBy: [sum_(bits/packets)_DESC]
        ) {
          sum {
            count: (bits/packets)
          }
          dimensions {
            metric: destinationPort
            ipProtocol
          }
        }
      }
    }
  }

Příznaky TCP

Tento dotaz získává počet paketů TCP z minutových souhrnů IP toků a seskupuje výsledky podle hodnoty příznaku TCP. Používá limit: 8 a zobrazuje osm nejlepších výsledků seřazených sestupně.

Přidáním následujícího řádku do filtru určíte, že chcete zobrazit data TCP:

{ "ipProtocol": "TCP" }
Dotaz na příznaky TCP
query GetTCPFlags(
    $accountTag: string
    $filter: AccountIpFlows1mGroupsFilter_InputObject
  ) {
    viewer {
      accounts(filter: { accountTag: $accountTag }) {
        tcpFlags: ipFlows1mGroups(
          filter: $filter
          limit: 8
          orderBy: [sum_(bits/packets)_DESC]
        ) {
          sum {
            count: (bits/packets)
          }
          dimensions {
            tcpFlags
          }
        }
      }
    }
  }

Souhrn

Dotaz souhrnného přehledu shrnuje celkovou aktivitu, proto filtruje pouze podle vybraného časového intervalu a ignoruje všechny ostatní filtry uplatněné v analytice. Použijte různé dotazy podle toho, jaký časový interval chcete zkoumat a jaký provoz účet zaznamenává.

Pokud je časový interval absolutní, například od 25. března 09:00 do 25. března 17:00, proveďte dotaz na útoky v daném časovém rozmezí. Použijte příslušný uzel dotazu, například ipFlows1dGroups, pro časový interval.

Dotaz GetPreviousAttacks: načtení předchozích útoků
query GetPreviousAttacks($accountTag: string, $filter: filter) {
  viewer {
    accounts(filter: {accountTag: $accountTag}) {
      ${queryNode}(limit: 1000, filter: $filter) {
        dimensions {
          attackId
        }
        sum {
          packets
          bits
        }
      }
    }
  }
}

Pokud je časový interval relativní vůči aktuálnímu času, například posledních 24 hodin nebo posledních 30 minut, proveďte dotaz na ipFlows1mGroup uzel a zkontrolujte, zda v posledních pěti minutách probíhaly útoky. Útoky za posledních pět minut se klasifikují jako probíhající: Activity Log zobrazuje Present. Odpověď na dotaz uvádí attackID hodnoty probíhajících útoků.

Dotaz GetOngoingAttackIds: kontrola probíhajících útoků
query GetOngoingAttackIds($accountTag: string, $filter: filter) {
	viewer {
		accounts(filter: { accountTag: $accountTag }) {
			ipFlows1mGroups(limit: 1000, filter: $filter) {
				dimensions {
					attackId
				}
			}
		}
	}
}

Pokud útoky právě probíhají, proveďte dotaz na ipFlows1mAttacksGroups uzel, filtrování pomocí attackID hodnoty z předchozího dotazu. Následující dotaz vrací maximální rychlost v bitech a paketech.

Dotaz GetOngoingAttacks: načtení dat o probíhajících útocích
query GetOngoingAttacks($accountTag: string, $filter: filter) {
	viewer {
		accounts(filter: { accountTag: $accountTag }) {
			ipFlows1mAttacksGroups(limit: 1000, filter: $filter) {
				dimensions {
					attackId
				}
				max {
					bitsPerSecond
					packetsPerSecond
				}
			}
		}
	}
}

Pokud právě neprobíhají žádné útoky, použijte GetPreviousAttacks dotaz pro zobrazení dat o útocích v rámci absolutního časového intervalu.