← Analytics / analytics / graphql-api / tutorials
Pomocí GraphQL vytvářejte widgety
Tento článek uvádí příklady dotazů, které můžete použít k naplnění vlastního dashboardu.
- Parametry a filtry
- Graf časové řady
- Activity log
- karty Top N: zdroj
- karty Top N: cíl
- Příznaky TCP
- Souhrn
Pomocí tohoto postupu sestavte a otestujte dotazy:
- Nainstalujte a nakonfigurujte GraphiQL ↗ aplikaci pro autentizaci ke Cloudflare Analytics GraphQL API. Cloudflare doporučuje autentizaci pomocí tokenu. Více informací najdete v Nakonfigurujte token Analytics API, kde najdete další informace.
- Dotazy sestavte v nástroji GraphiQL. Pomocí introspektivní dokumentace v klientovi GraphQL můžete prozkoumat dostupné uzly. Další informace o dotazech najdete v Základy dotazování.
- Dotazy otestujte jejich spuštěním v GraphiQL, nebo je jako payload předejte v požadavku cURL na endpoint GraphQL API.
- Pomocí těchto dotazů ve své aplikaci poskytujte data pro widgety svého dashboardu.
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:
{
"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 času | Uzel Query | datetimeDimension |
|---|---|---|
| Minulý týden | ipFlows1dGroups | date |
| Minulý měsíc | ipFlows1dGroups | date |
| 24 hodin | ipFlows1mGroups | datetimeFifteenMinutes |
| 12 hodin | ipFlows1mGroups | datetimeFifteenMinutes |
| 6 hodin | ipFlows1mGroups | datetimeFiveMinutes |
| 30 min | ipFlows1mGroups | datetimeMinute |
| Custom range | Závisí na vybraném rozsahu | Zá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 Query | Filtr počátečního dne/času | Filtr koncového data a času |
|---|---|---|
| ipFlows1mGroups | datetimeMinute_geq | datetimeMinute_leq |
| ipFlows1mAttacksGroups | date_geq | date_leq |
| ipFlows1hGroups | datetimeHour_geq | datetimeHour_leq |
| ipFlows1dGroups | date_geq | date_leq |
Graf časové řady
Pomocí následujícího dotazu sestavte graf časové řady v Network Analytics:
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.
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.
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ů.
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" }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.
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ů.
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.
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.