diff --git a/cicd/massive-redirect/en.json b/cicd/massive-redirect/en.json index 7cc57b52e2..faf73589a7 100644 --- a/cicd/massive-redirect/en.json +++ b/cicd/massive-redirect/en.json @@ -165,7 +165,7 @@ }, { "from": "https://www.azion.com/en/documentation/products/real-time-metrics/", - "moved": "https://www.azion.com/en/documentation/products/observe/real-time-metrics/" + "moved": "https://www.azion.com/en/documentation/platform/real-time-metrics/" }, { "from": "https://www.azion.com/en/documentation/products/edge-pulse/", @@ -477,7 +477,7 @@ }, { "from": "https://www.azion.com/en/documentation/products/guides/azion-plugin-grafana/", - "moved": "https://www.azion.com/en/documentation/products/guides/azion-plugin-grafana-custom-dash/" + "moved": "https://www.azion.com/en/documentation/guides/platform/observability/azion-plugin-grafana-custom-dash/" }, { "from": "https://www.azion.com/en/documentation/services/custom-education-programs/", @@ -833,7 +833,7 @@ }, { "from": "https://www.azion.com/en/documentation/products/real-time-metrics/metrics-events-dash/", - "moved": "https://www.azion.com/en/documentation/products/real-time-metrics/metrics-dash/" + "moved": "https://www.azion.com/en/documentation/guides/platform/observability/metrics-dash/" }, { "from": "https://www.azion.com/en/documentation/products/edge-functions/runtime-apis/lua/cache/", @@ -917,7 +917,7 @@ }, { "from": "https://www.azion.com/en/documentacao/produtos/real-time-metrics-historico/", - "moved": "https://www.azion.com/en/documentation/products/historical-real-time-metrics/" + "moved": "https://www.azion.com/en/documentation/platform/real-time-metrics/" }, { "from": "https://www.azion.com/en/documentation/products/how-to/configurations/websocket", @@ -937,7 +937,7 @@ }, { "from": "https://www.azion.com/en/documentacao/produtos/real-time-metrics-historico/primeiros-passos/", - "moved": "https://www.azion.com/en/documentation/products/historical-real-time-metrics/" + "moved": "https://www.azion.com/en/documentation/platform/real-time-metrics/" }, { "from": "https://www.azion.com/en/documentacao/devtools/sdk/go/", @@ -1017,7 +1017,7 @@ }, { "from": "https://www.azion.com/en/docs/products/real-time-analytics/", - "moved": "https://www.azion.com/en/documentation/products/observe/real-time-metrics/" + "moved": "https://www.azion.com/en/documentation/platform/real-time-metrics/" }, { "from": "https://www.azion.com/en/documentation/products/edge-orchestrator/edge-node/credentials", @@ -1049,15 +1049,15 @@ }, { "from": "https://www.azion.com/en/documentation/products/real-time-metrics/first-steps/", - "moved": "https://www.azion.com/en/documentation/products/observe/real-time-metrics/first-steps/" + "moved": "https://www.azion.com/en/documentation/platform/real-time-metrics/quickstart/" }, { "from": "https://www.azion.com/en/documentation/products/historical-real-time-metrics/", - "moved": "https://www.azion.com/en/documentation/products/observe/historical-real-time-metrics/" + "moved": "https://www.azion.com/en/documentation/platform/real-time-metrics/" }, { "from": "https://www.azion.com/en/documentation/products/historical-real-time-metrics/first-steps/", - "moved": "https://www.azion.com/en/documentation/products/observe/historical-real-time-metrics/" + "moved": "https://www.azion.com/en/documentation/platform/real-time-metrics/" }, { "from": "https://www.azion.com/en/documentation/products/edge-application/cache-settings/", @@ -2926,5 +2926,65 @@ { "from": "https://www.azion.com/en/documentation/products/build/applications/origins/", "moved": "https://www.azion.com/en/documentation/platform/connectors/origins/" + }, + { + "from": "https://www.azion.com/en/documentation/products/observe/real-time-metrics/", + "moved": "https://www.azion.com/en/documentation/platform/real-time-metrics/" + }, + { + "from": "https://www.azion.com/en/documentation/products/observe/real-time-metrics/first-steps/", + "moved": "https://www.azion.com/en/documentation/platform/real-time-metrics/quickstart/" + }, + { + "from": "https://www.azion.com/en/documentation/products/observe/historical-real-time-metrics/", + "moved": "https://www.azion.com/en/documentation/platform/real-time-metrics/" + }, + { + "from": "https://www.azion.com/en/documentation/products/guides/use-real-time-metrics/", + "moved": "https://www.azion.com/en/documentation/platform/real-time-metrics/quickstart/" + }, + { + "from": "https://www.azion.com/en/documentation/products/guides/observe/add-filters-metrics/", + "moved": "https://www.azion.com/en/documentation/guides/platform/observability/add-filters-metrics/" + }, + { + "from": "https://www.azion.com/en/documentation/products/guides/observe/analyze-metrics/", + "moved": "https://www.azion.com/en/documentation/guides/platform/observability/analyze-metrics/" + }, + { + "from": "https://www.azion.com/en/documentation/products/guides/query-httpbreakdownmetrics-data-with-graphql/", + "moved": "https://www.azion.com/en/documentation/guides/platform/observability/query-httpbreakdownmetrics-data-with-graphql/" + }, + { + "from": "https://www.azion.com/en/documentation/products/real-time-metrics/data-transferred-dash/", + "moved": "https://www.azion.com/en/documentation/guides/platform/observability/data-transferred-dash/" + }, + { + "from": "https://www.azion.com/en/documentation/products/real-time-metrics/metrics-dash/", + "moved": "https://www.azion.com/en/documentation/guides/platform/observability/metrics-dash/" + }, + { + "from": "https://www.azion.com/en/documentation/products/guides/observe/integrate-grafana/", + "moved": "https://www.azion.com/en/documentation/guides/platform/observability/integrate-grafana/" + }, + { + "from": "https://www.azion.com/en/documentation/products/guides/azion-plugin-grafana-pre-built-dash/", + "moved": "https://www.azion.com/en/documentation/guides/platform/observability/azion-plugin-grafana-pre-built-dash/" + }, + { + "from": "https://www.azion.com/en/documentation/products/guides/azion-plugin-grafana-custom-dash/", + "moved": "https://www.azion.com/en/documentation/guides/platform/observability/azion-plugin-grafana-custom-dash/" + }, + { + "from": "https://www.azion.com/en/documentation/platform/real-time-metrics/first-steps/", + "moved": "https://www.azion.com/en/documentation/platform/real-time-metrics/quickstart/" + }, + { + "from": "https://www.azion.com/en/documentation/platform/real-time-metrics/historical-real-time-metrics/", + "moved": "https://www.azion.com/en/documentation/platform/real-time-metrics/" + }, + { + "from": "https://www.azion.com/en/documentation/guides/platform/observability/use-real-time-metrics/", + "moved": "https://www.azion.com/en/documentation/platform/real-time-metrics/quickstart/" } ] diff --git a/cicd/massive-redirect/pt-br.json b/cicd/massive-redirect/pt-br.json index beae66715a..1598ca3b7a 100644 --- a/cicd/massive-redirect/pt-br.json +++ b/cicd/massive-redirect/pt-br.json @@ -565,7 +565,7 @@ }, { "from": "https://www.azion.com/pt-br/documentacao/produtos/real-time-metrics-historico/primeiros-passos/", - "moved": "https://www.azion.com/pt-br/documentacao/produtos/observe/real-time-metrics-historico/" + "moved": "https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/" }, { "from": "https://www.azion.com/pt-br/documentacao/servicos/planos-de-servico/", @@ -581,7 +581,7 @@ }, { "from": "https://www.azion.com/pt-br/documentacao/produtos/real-time-metrics-historico/primeiros-passos", - "moved": "https://www.azion.com/pt-br/documentacao/produtos/observe/real-time-metrics-historico/" + "moved": "https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/" }, { "from": "https://www.azion.com/pt-br/documentacao/products/guides/personal-tokens/", @@ -841,7 +841,7 @@ }, { "from": "https://www.azion.com/pt-br/documentacao/produtos/real-time-metrics/", - "moved": "https://www.azion.com/pt-br/documentacao/produtos/observe/real-time-metrics/" + "moved": "https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/" }, { "from": "https://www.azion.com/pt-br/documentacao/produtos/dev-tools/", @@ -1077,7 +1077,7 @@ }, { "from": "https://www.azion.com/pt-br/documentacao/produtos/real-time-metrics-historico/", - "moved": "https://www.azion.com/pt-br/documentacao/produtos/observe/real-time-metrics-historico/" + "moved": "https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/" }, { "from": "https://www.azion.com/pt-br/documentacao/produtos/data-streaming/primeiros-passos/", @@ -1093,7 +1093,7 @@ }, { "from": "https://www.azion.com/pt-br/documentacao/produtos/real-time-metrics/primeiros-passos/", - "moved": "https://www.azion.com/pt-br/documentacao/produtos/observe/real-time-metrics/primeiros-passos/" + "moved": "https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/primeiros-passos/" }, { "from": "https://www.azion.com/pt-br/documentacao/produtos/edge-firewall/waf-rule-sets/", @@ -2942,5 +2942,61 @@ { "from": "https://www.azion.com/pt-br/documentacao/guias/midia-e-streaming/streaming/live-ingest-boas-praticas/", "moved": "https://www.azion.com/pt-br/documentacao/plataforma/connectors/boas-praticas/#live-ingest" + }, + { + "from": "https://www.azion.com/pt-br/documentacao/produtos/observe/real-time-metrics/", + "moved": "https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/" + }, + { + "from": "https://www.azion.com/pt-br/documentacao/produtos/observe/real-time-metrics/primeiros-passos/", + "moved": "https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/primeiros-passos/" + }, + { + "from": "https://www.azion.com/pt-br/documentacao/produtos/observe/real-time-metrics-historico/", + "moved": "https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/" + }, + { + "from": "https://www.azion.com/pt-br/documentacao/produtos/guias/usar-real-time-metrics/", + "moved": "https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/primeiros-passos/" + }, + { + "from": "https://www.azion.com/pt-br/documentacao/produtos/guias/observe/adicionar-filtros-metrics/", + "moved": "https://www.azion.com/pt-br/documentacao/guias/plataforma/observabilidade/adicionar-filtros-metrics/" + }, + { + "from": "https://www.azion.com/pt-br/documentacao/produtos/guias/observe/analisar-metricas/", + "moved": "https://www.azion.com/pt-br/documentacao/guias/plataforma/observabilidade/analisar-metricas/" + }, + { + "from": "https://www.azion.com/pt-br/documentacao/produtos/guias/consultar-dados-httpbreakdownmetrics-com-graphql/", + "moved": "https://www.azion.com/pt-br/documentacao/guias/plataforma/observabilidade/consultar-dados-httpbreakdownmetrics-com-graphql/" + }, + { + "from": "https://www.azion.com/pt-br/documentacao/produtos/real-time-metrics/data-transferred-dash/", + "moved": "https://www.azion.com/pt-br/documentacao/guias/plataforma/observabilidade/data-transferred-dash/" + }, + { + "from": "https://www.azion.com/pt-br/documentacao/produtos/real-time-metrics/metrics-dash/", + "moved": "https://www.azion.com/pt-br/documentacao/guias/plataforma/observabilidade/metrics-dash/" + }, + { + "from": "https://www.azion.com/pt-br/documentacao/produtos/guias/observe/integrar-grafana/", + "moved": "https://www.azion.com/pt-br/documentacao/guias/plataforma/observabilidade/integrar-grafana/" + }, + { + "from": "https://www.azion.com/pt-br/documentacao/produtos/guias/azion-plugin-grafana-dash-pre-configurado/", + "moved": "https://www.azion.com/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana-dash-pre-configurado/" + }, + { + "from": "https://www.azion.com/pt-br/documentacao/produtos/guias/azion-plugin-grafana/", + "moved": "https://www.azion.com/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana/" + }, + { + "from": "https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/real-time-metrics-historico/", + "moved": "https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/" + }, + { + "from": "https://www.azion.com/pt-br/documentacao/guias/plataforma/observabilidade/usar-real-time-metrics/", + "moved": "https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/primeiros-passos/" } ] diff --git a/src/content/docs/en/pages/build-journey/overview/overview.mdx b/src/content/docs/en/pages/build-journey/overview/overview.mdx index 5d46a78f8b..f926609e6d 100644 --- a/src/content/docs/en/pages/build-journey/overview/overview.mdx +++ b/src/content/docs/en/pages/build-journey/overview/overview.mdx @@ -33,7 +33,7 @@ Any cached content at the edge gets delivered directly in the response to the us After the mediation by the Azion Web Platform, the request reaches its origin that responds back. The edge once again processes this response before delivering it to the user. -After deploying your application, you can [observe metrics](/en/documentation/platform/real-time-metrics/#build) related to your application's data, such as access, data transfers, bandwidth, and requests. +After deploying your application, you can [observe metrics](/en/documentation/platform/real-time-metrics/build-dashboards/) related to your application's data, such as access, data transfers, bandwidth, and requests. diff --git a/src/content/docs/en/pages/build/applications/troubleshooting.mdx b/src/content/docs/en/pages/build/applications/troubleshooting.mdx index 44f244b057..e14606c070 100644 --- a/src/content/docs/en/pages/build/applications/troubleshooting.mdx +++ b/src/content/docs/en/pages/build/applications/troubleshooting.mdx @@ -74,7 +74,7 @@ Users report errors or slow responses, yet each request you send to the applicat A request you send shows one response, from one server, at one moment, as [Debug headers](/en/documentation/platform/applications/cache/cache-keys/#debug-headers) shows. A problem that touches some servers, some paths, or some hours does not show in a single response. -- **Read aggregated metrics**: [Real-Time Metrics](/en/documentation/platform/real-time-metrics/#applications) charts aggregated data for your applications, and keeps it over longer storage periods. +- **Read aggregated metrics**: [Real-Time Metrics](/en/documentation/platform/real-time-metrics/build-dashboards/#applications) charts aggregated data for your applications, and keeps it over longer storage periods. - **Read the raw log of each request**: [Real-Time Events](/en/documentation/platform/real-time-events/) holds the raw data of every request. - **Query only the data you need**: the GraphQL API returns [aggregated and raw data](/en/documentation/devtools/graphql/features/#datasets), limited to the fields a query asks for, as [Query usage data from Applications](/en/documentation/guides/platform/observability/query-applications-usage-data-with-graphql/) shows. - **Trace the rules that ran**: [Debug Rules](/en/documentation/platform/applications/main-settings/#debug-rules) logs them per request. diff --git a/src/content/docs/en/pages/devtools/azion-edge-runtime/javascript-examples/rest-apis/rest-apis.mdx b/src/content/docs/en/pages/devtools/azion-edge-runtime/javascript-examples/rest-apis/rest-apis.mdx index 0c250760fc..f9665ee0a2 100644 --- a/src/content/docs/en/pages/devtools/azion-edge-runtime/javascript-examples/rest-apis/rest-apis.mdx +++ b/src/content/docs/en/pages/devtools/azion-edge-runtime/javascript-examples/rest-apis/rest-apis.mdx @@ -107,6 +107,6 @@ Each example calls `fetch()` with a URL and an options object whose `method` fie Read the reference for the `fetch` implementation these snippets call. Check which other JavaScript APIs Azion Runtime supports. Confirm how many outbound requests a single invocation can make. - Read the consumption this function has generated, product by product. + Read the consumption this function has generated, product by product. diff --git a/src/content/docs/en/pages/guides/akamai-to-azion/akamai-to-azion-comprehensive-guide.mdx b/src/content/docs/en/pages/guides/akamai-to-azion/akamai-to-azion-comprehensive-guide.mdx index 5fb1d12285..24e254fb35 100644 --- a/src/content/docs/en/pages/guides/akamai-to-azion/akamai-to-azion-comprehensive-guide.mdx +++ b/src/content/docs/en/pages/guides/akamai-to-azion/akamai-to-azion-comprehensive-guide.mdx @@ -1183,7 +1183,7 @@ query HttpMetricsQuery { #### Reference documentation * [Real-Time Metrics](https://www.azion.com/en/documentation/platform/real-time-metrics/) -* [Real-Time Metrics first steps](https://www.azion.com/en/documentation/platform/real-time-metrics/first-steps/) +* [Real-Time Metrics first steps](/en/documentation/platform/real-time-metrics/quickstart/) * [Analyze metrics](https://www.azion.com/en/documentation/guides/platform/observability/analyze-metrics/) * [Grafana plugin custom dashboards](https://www.azion.com/en/documentation/guides/platform/observability/azion-plugin-grafana-custom-dash/) diff --git a/src/content/docs/en/pages/guides/aws-to-azion/aws-to-azion-comprehensive-guide.mdx b/src/content/docs/en/pages/guides/aws-to-azion/aws-to-azion-comprehensive-guide.mdx index 97f3e78d06..7f24cc9dd6 100644 --- a/src/content/docs/en/pages/guides/aws-to-azion/aws-to-azion-comprehensive-guide.mdx +++ b/src/content/docs/en/pages/guides/aws-to-azion/aws-to-azion-comprehensive-guide.mdx @@ -2701,8 +2701,8 @@ Reference the [Grafana plugin documentation](https://github.com/aziontech/grafan #### Reference documentation * [Real-Time Metrics](https://www.azion.com/en/documentation/platform/real-time-metrics/) -* [Real-Time Metrics first steps](https://www.azion.com/en/documentation/platform/real-time-metrics/first-steps/) -* [Historical Real-Time Metrics](https://www.azion.com/en/documentation/platform/real-time-metrics/historical-real-time-metrics/) +* [Real-Time Metrics first steps](/en/documentation/platform/real-time-metrics/quickstart/) +* [Historical Real-Time Metrics](/en/documentation/platform/real-time-metrics/) * [Analyze metrics](https://www.azion.com/en/documentation/guides/platform/observability/analyze-metrics/) * [Grafana plugin custom dashboards](https://www.azion.com/en/documentation/guides/platform/observability/azion-plugin-grafana-custom-dash/) * [Grafana plugin pre-built dashboards](https://www.azion.com/en/documentation/guides/platform/observability/azion-plugin-grafana-pre-built-dash/) diff --git a/src/content/docs/en/pages/guides/cloudflare-to-azion/cf-to-azion-comprehensive-guide.mdx b/src/content/docs/en/pages/guides/cloudflare-to-azion/cf-to-azion-comprehensive-guide.mdx index 3a3e925205..0e393d77ae 100644 --- a/src/content/docs/en/pages/guides/cloudflare-to-azion/cf-to-azion-comprehensive-guide.mdx +++ b/src/content/docs/en/pages/guides/cloudflare-to-azion/cf-to-azion-comprehensive-guide.mdx @@ -1576,8 +1576,8 @@ query HttpMetricsQuery { #### Reference documentation * [Real-Time Metrics](https://www.azion.com/en/documentation/platform/real-time-metrics/) -* [Real-Time Metrics first steps](https://www.azion.com/en/documentation/platform/real-time-metrics/first-steps/) -* [Historical Real-Time Metrics](https://www.azion.com/en/documentation/platform/real-time-metrics/historical-real-time-metrics/) +* [Real-Time Metrics first steps](/en/documentation/platform/real-time-metrics/quickstart/) +* [Historical Real-Time Metrics](/en/documentation/platform/real-time-metrics/) * [Analyze metrics](https://www.azion.com/en/documentation/guides/platform/observability/analyze-metrics/) * [Grafana plugin custom dashboards](https://www.azion.com/en/documentation/guides/platform/observability/azion-plugin-grafana-custom-dash/) * [Grafana plugin pre-built dashboards](https://www.azion.com/en/documentation/guides/platform/observability/azion-plugin-grafana-pre-built-dash/) diff --git a/src/content/docs/en/pages/guides/fastly-to-azion/fastly-to-azion-comprehensive-guide.mdx b/src/content/docs/en/pages/guides/fastly-to-azion/fastly-to-azion-comprehensive-guide.mdx index 01d8428aea..f15cb8f596 100644 --- a/src/content/docs/en/pages/guides/fastly-to-azion/fastly-to-azion-comprehensive-guide.mdx +++ b/src/content/docs/en/pages/guides/fastly-to-azion/fastly-to-azion-comprehensive-guide.mdx @@ -1328,7 +1328,7 @@ query HttpMetricsQuery { #### Reference documentation * [Real-Time Metrics](https://www.azion.com/en/documentation/platform/real-time-metrics/) -* [Real-Time Metrics first steps](https://www.azion.com/en/documentation/platform/real-time-metrics/first-steps/) +* [Real-Time Metrics first steps](/en/documentation/platform/real-time-metrics/quickstart/) * [Analyze metrics](https://www.azion.com/en/documentation/guides/platform/observability/analyze-metrics/) * [Grafana plugin custom dashboards](https://www.azion.com/en/documentation/guides/platform/observability/azion-plugin-grafana-custom-dash/) diff --git a/src/content/docs/en/pages/guides/grafana/example-dash-data-transferred.mdx b/src/content/docs/en/pages/guides/grafana/example-dash-data-transferred.mdx index b7c0272590..04b66226c7 100644 --- a/src/content/docs/en/pages/guides/grafana/example-dash-data-transferred.mdx +++ b/src/content/docs/en/pages/guides/grafana/example-dash-data-transferred.mdx @@ -1,34 +1,83 @@ --- title: Import the Data Transferred dashboard description: >- - Get a Grafana dashboard with the Data Transferred metrics of your - applications, read from the Real-Time Metrics GraphQL API. -meta_tags: 'graphql, grafana, dashboard, data transferred, observability, real-time metrics' + Chart the data and bandwidth your applications transfer in Grafana, with eight + panels that query the Real-Time Metrics GraphQL API. +meta_tags: 'real-time metrics, grafana, dashboard, data transferred, graphql' namespace: docs_grafana_data_transferred_dash_json permalink: /documentation/guides/platform/observability/data-transferred-dash/ --- import DocCardGroup from '@aziontech/webkit/doc-card-group' import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' -You can import a ready-made Grafana dashboard with the **Data Transferred** metrics from the [Real-Time Metrics](/en/documentation/platform/real-time-metrics/) GraphQL API. +You can import a Grafana dashboard that charts the data and bandwidth your applications transfer, read from [Real-Time Metrics](/en/documentation/platform/real-time-metrics/) through a GraphQL data source. Its eight panels are **Cache**, **Edge Offload**, **Saved Data**, **Missed Data**, **Total Bandwidth Usage**, **Bandwidth Offloaded**, **Saved Bandwidth**, and **Missed Bandwidth**. They read the same fields as the charts of the **Data Transferred** dashboard in Azion Console. To import the dashboard that the Azion plugin for Grafana installs instead, refer to [Import the pre-built Grafana dashboard](/en/documentation/guides/platform/observability/azion-plugin-grafana-pre-built-dash/). --- ## Prerequisites -- The Azion plugin configured on Grafana, with the Real-Time Metrics GraphQL API as the data source. Follow [Use a pre-built Grafana dashboard with Azion](/en/documentation/guides/platform/observability/azion-plugin-grafana-pre-built-dash/). -- A Grafana instance where you can import a dashboard. +- A Grafana instance where you can add a data source and import a dashboard. +- The GraphQL Data Source plugin, `fifemon-graphql-datasource`, installed on that instance. The dashboard binds to this plugin, not to the [Azion plugin for Grafana](/en/documentation/guides/platform/observability/integrate-grafana/). +- A [personal token](/en/documentation/guides/platform/account-and-billing/personal-tokens/) for your Azion account. +- At least one application with traffic in the range you chart, so the panels have data to draw. --- -## Import the dashboard +## Add the GraphQL data source -The JSON below is the dashboard model: eight panels that query the `httpMetrics` dataset through the `DS_AZION` data source input. To import the dashboard: +The API answers a query only when the request carries your personal token, so the data source sends it in a header. To add the data source in Grafana: -1. Follow [Use a pre-built Grafana dashboard with Azion](/en/documentation/guides/platform/observability/azion-plugin-grafana-pre-built-dash/) until the data source is saved and tested. -2. In Grafana, [import a dashboard](https://grafana.com/docs/grafana/latest/visualizations/dashboards/build-dashboards/import-dashboards/) with the JSON below as the model and `https://api.azionapi.net/metrics/graphql` as the URL. + + -The imported dashboard has eight panels. They are Cache, Edge Offload, Saved Data, Missed Data, Total Bandwidth Usage, Bandwidth Offloaded, Saved Bandwidth, and Missed Bandwidth. + In Grafana, add a data source of the type **GraphQL Data Source**. + + + + + Enter `https://api.azion.com/v4/metrics/graphql` as the URL of the data source. + + + + + Add the header `Authorization` with the value `Token [TOKEN VALUE]`. Replace `[TOKEN VALUE]` with your personal token. + + + + + +The data source sends each query to the v4 endpoint with your token. All eight panels query the `httpMetrics` dataset, so this one data source serves the whole dashboard. A data source set to the legacy host `https://api.azionapi.net/metrics/graphql` receives HTTP 403 and an HTML error page instead of data. + +--- + +## Import the dashboard JSON + +The dashboard model declares one data source input, `DS_AZION`, with the label `Azion` and the type `fifemon-graphql-datasource`. Grafana asks you to pick a data source for this input during the import. The model also lists Grafana 9.2.5 and version 1.0.0 of the plugin as its requirements. To import the dashboard: + + + + + Copy the JSON in this section. + + + + + In Grafana, [import a dashboard](https://grafana.com/docs/grafana/latest/visualizations/dashboards/build-dashboards/import-dashboards/) and paste the JSON as the dashboard model. + + + + + For the `Azion` input, select the GraphQL data source you added. + + + + + +Grafana saves a dashboard titled `Data Transferred`, with the tags `Azion`, `Applications`, and `Data Transferred`. It opens on the last 7 days and refreshes every 30 seconds. + +The dashboard model: ```json { @@ -1169,9 +1218,89 @@ The imported dashboard has eight panels. They are Cache, Edge Offload, Saved Dat --- +## Check the panels + +Each panel sends one query to the `httpMetrics` dataset and draws the rows under `httpMetrics` in the response, the panel's `dataPath`. Before it sends a query, Grafana replaces `${__from:date:iso}` and `${__to:date:iso}` with the dashboard's time range. The panels, in dashboard order: + +| Panel | Query | Fields | Grafana unit | +| --- | --- | --- | --- | +| Cache | `HttpCalculatedDataTransferred` | `dataTransferredIn`, `dataTransferredOut`, `dataTransferredTotal` | `decbytes` | +| Edge Offload | `HttpCalculatedEdgeOffload` | `offload` | `percent` | +| Saved Data | `HttpCalculatedSavedData` | `savedData` | `decbytes` | +| Missed Data | `HttpCalculatedMissedData` | `missedData` | `decbytes` | +| Total Bandwidth Usage | `HttpCalculatedBandwidthTotalData` | `bandwidthTotal` | `bps` | +| Bandwidth Offloaded | `HttpCalculatedBandwidthOffload` | `bandwidthOffload` | `percent` | +| Saved Bandwidth | `HttpCalculatedBandwidthSavedlData` | `bandwidthSavedData` | `bps` | +| Missed Bandwidth | `HttpCalculatedBandwidthMissedlData` | `bandwidthMissedData` | `bps` | + +Every query groups by `ts` and orders by `ts_ASC`, so each row is one time bucket, oldest first. The **Cache** query sets `limit: 2000`, and the other seven set `limit: 1000`. The bucket size follows the length of the range: for the default 7 days, each row covers one hour. For the full rule, refer to [How it works](/en/documentation/platform/real-time-metrics/how-it-works/#resolution). + +For a range of 24 hours, the **Cache** panel sends this query: + +```graphql +query HttpCalculatedDataTransferred { + httpMetrics( + limit: 2000 + filter: { + tsRange: { begin: "2026-10-01T14:25:25.000Z", end: "2026-10-02T14:25:25.000Z" }, + } + groupBy:[ts] + orderBy:[ts_ASC] + ) + { + ts + dataTransferredIn + dataTransferredOut + dataTransferredTotal + } +} +``` + +The API returns HTTP 200 with one row per minute that had traffic: + +```json +{ + "data": { + "httpMetrics": [ + { + "ts": "2026-10-01T16:04:00Z", + "dataTransferredIn": 13094.0, + "dataTransferredOut": 2649889.0, + "dataTransferredTotal": 2662983.0 + }, + { + "ts": "2026-10-01T16:06:00Z", + "dataTransferredIn": 7470.0, + "dataTransferredOut": 986551.0, + "dataTransferredTotal": 994021.0 + }, + { + "ts": "2026-10-01T16:07:00Z", + "dataTransferredIn": 28443.0, + "dataTransferredOut": 2109827.0, + "dataTransferredTotal": 2138270.0 + }, + … + ] + } +} +``` + +When a panel draws no line, the response to its query names the cause: + +- **An empty `httpMetrics` array**: your applications had no traffic in the selected range. +- **HTTP 401 with `{"detail": "Authentication credentials were not provided."}`**: the data source sends no `Authorization` header. +- **HTTP 403 with an HTML error page**: the data source points to the legacy host `https://api.azionapi.net/metrics/graphql`. + +For what each field measures, refer to [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/#data-transferred), where the **Cache** panel matches the **Edge Cache** chart. + +--- + ## Next steps - - + + + + diff --git a/src/content/docs/en/pages/guides/grafana/example-dash-metrics.mdx b/src/content/docs/en/pages/guides/grafana/example-dash-metrics.mdx index 943797fac6..57976f98d6 100644 --- a/src/content/docs/en/pages/guides/grafana/example-dash-metrics.mdx +++ b/src/content/docs/en/pages/guides/grafana/example-dash-metrics.mdx @@ -1,34 +1,125 @@ --- title: Import the Real-Time Metrics dashboard description: >- - Get a Grafana dashboard with requests, cache, status codes, and the top - request URIs and hosts, read from the Real-Time Metrics GraphQL API. -meta_tags: 'graphql, grafana, dashboard, requests, status codes, observability, real-time metrics' + Chart the requests, cache, HTTP methods, and status codes of your + applications in Grafana, with their top request URIs, user agents, and hosts. +meta_tags: 'real-time metrics, real-time events, grafana, dashboard, graphql' namespace: docs_grafana_metrics_events_dash_json permalink: /documentation/guides/platform/observability/metrics-dash/ --- import DocCardGroup from '@aziontech/webkit/doc-card-group' import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' -You can import a ready-made Grafana dashboard with request, cache, and status code metrics from the [Real-Time Metrics](/en/documentation/platform/real-time-metrics/) GraphQL API. +You can import a Grafana dashboard that charts requests, cache, HTTP methods, and status codes from [Real-Time Metrics](/en/documentation/platform/real-time-metrics/), and the top request URIs, user agents, and hosts from [Real-Time Events](/en/documentation/platform/real-time-events/). For the dashboard that the Azion plugin installs, refer to [Import the pre-built Grafana dashboard](/en/documentation/guides/platform/observability/azion-plugin-grafana-pre-built-dash/). + +The dashboard is a JSON model of eight panels in two rows. The **Metrics** row reads the `httpMetrics` dataset from the Real-Time Metrics GraphQL API. The **Events** row reads `workloadEvents`, a Real-Time Events dataset, from a second endpoint. Grafana needs one data source for each endpoint. --- ## Prerequisites -- The Azion plugin configured on Grafana, with the Real-Time Metrics GraphQL API as the data source. Follow [Use a pre-built Grafana dashboard with Azion](/en/documentation/guides/platform/observability/azion-plugin-grafana-pre-built-dash/). - A Grafana instance where you can import a dashboard. +- The GraphQL Data Source plugin (`fifemon-graphql-datasource`) on that instance. Every panel of the dashboard uses this plugin, not the [Azion plugin for Grafana](/en/documentation/guides/platform/observability/integrate-grafana/). +- A personal token. To create one, refer to [How to manage a personal token](/en/documentation/guides/platform/account-and-billing/personal-tokens/). +- An [application](/en/documentation/platform/applications/) with requests in the last two days, the range the dashboard opens on. --- -## Import the dashboard +## Add a data source for the metrics panels + +The five panels of the **Metrics** row send their queries to `https://api.azion.com/v4/metrics/graphql`. Do not use `https://api.azionapi.net/metrics/graphql`: that host answers `403` with an HTML error page. + +To add the metrics data source in Grafana: + + + + + In the Grafana menu, under **Administration**, select **Plugins**. + + + + + In **Search**, enter `GraphQL Data Source`, and select the plugin card. + + + + + + In **Name**, enter a name that says which endpoint the data source reads. For example: `Azion metrics`. + + + + + Set the URL to `https://api.azion.com/v4/metrics/graphql`. -The JSON below is the dashboard model: its panels query the `httpMetrics` and `workloadEvents` datasets through a GraphQL data source. To import the dashboard: + + -1. Follow [Use a pre-built Grafana dashboard with Azion](/en/documentation/guides/platform/observability/azion-plugin-grafana-pre-built-dash/) until the data source is saved and tested. -2. In Grafana, [import a dashboard](https://grafana.com/docs/grafana/latest/visualizations/dashboards/build-dashboards/import-dashboards/) with the JSON below as the model and `https://api.azionapi.net/metrics/graphql` as the URL. + Add an HTTP header named `Authorization` with the value `Token [TOKEN VALUE]`. Replace `[TOKEN VALUE]` with your personal token. -The imported dashboard's panels include Total Requests, Cache Requests, Status Codes, Top 10 Request URI, and Top 10 Hosts. + + + + +Grafana saves the data source and runs a test against the endpoint. Without the `Authorization` header, the endpoint answers `401` with `{"detail": "Authentication credentials were not provided."}`. + +--- + +## Add a data source for the events panels + +The three panels of the **Events** row query `workloadEvents`, a Real-Time Events dataset. The metrics endpoint does not serve that dataset and answers `400`: + +```json +{ + "detail": "Cannot query field \"workloadEvents\" on type \"Query\". Did you mean \"workloadMetrics\" or \"workloadBreakdownMetrics\"?" +} +``` + +The same queries run unchanged on `https://api.azion.com/v4/events/graphql`, with the same personal token. + +To add the events data source in Grafana: + + + + + In the Grafana menu, under **Administration**, select **Plugins**. + + + + + In **Search**, enter `GraphQL Data Source`, and select the plugin card. + + + + + + In **Name**, enter a name that says which endpoint the data source reads. For example: `Azion events`. + + + + + Set the URL to `https://api.azion.com/v4/events/graphql`. + + + + + Add an HTTP header named `Authorization` with the value `Token [TOKEN VALUE]`. Replace `[TOKEN VALUE]` with your personal token. + + + + + +Grafana saves the second data source. Each row of the dashboard then has an endpoint that serves its dataset. + +--- + +## Import the dashboard model + +The dashboard model opens on the last two days (`now-2d` to `now`), in the time zone of the browser, with no automatic refresh. It declares no data source inputs. Each panel names its data source by a fixed UID: `loKOM5K4k` in the **Events** row and `d863aedd-0f4f-48e4-ae94-bf0bc73120a6` in the **Metrics** row. The model also defines a hidden `host` variable that no panel query uses. + +The dashboard model: ```json { @@ -806,11 +897,135 @@ The imported dashboard's panels include Total Requests, Cache Requests, Status C } ``` +To import the dashboard in Grafana: + + + + + Copy the whole JSON object of the dashboard model. + + + + + For where the import sits in your Grafana version, refer to [Import dashboards](https://grafana.com/docs/grafana/latest/visualizations/dashboards/build-dashboards/import-dashboards/). + + + + + +Grafana lists the dashboard as `Dashboard Exemple - Azion`, the title the model sets. It holds three collapsed rows: an empty **Row title**, **Events**, and **Metrics**. + +--- + +## Connect each panel to its data source + +The panels of the imported dashboard keep the data source UIDs of the model, and those UIDs do not match the data sources you added. Connect each panel to the data source that serves its row. + +To connect a panel in Grafana: + + + + + Select **Events** or **Metrics** to expand the row that holds the panel. + + + + + + For a panel of the **Events** row, select your events data source. For a panel of the **Metrics** row, select your metrics data source. + + + + + +Repeat the steps for each of the eight panels. Each panel then sends its query to its own endpoint, for the range of the dashboard. + +--- + +## Set the Logs panel to the dashboard range + +The **Logs** panel, in the **Metrics** row, runs the `CountRowsByHost` query, which counts the `httpMetrics` rows of each host. Its query fixes the range at `2023-03-22T17:03:00` to `2023-03-22T18:05:00`. That range returns an empty `httpMetrics` array, so the panel shows no rows whatever range you pick in the dashboard. + +The edited query replaces the fixed range with the dashboard variables `${__from:date:iso}` and `${__to:date:iso}`, as the other panels do: + +```graphql +query CountRowsByHost { + httpMetrics( + limit: 1000 + filter: { + tsRange: {begin:"${__from:date:iso}", end:"${__to:date:iso}"} + } + aggregate: {count:rows} # {count:host} + groupBy: [host] + orderBy: [count_DESC] + ) + { + host + count + } +} +``` + +To edit the query in Grafana: + + + + + + Replace the query text of the panel with the edited query. + + + + + +Grafana fills both variables with the range of the dashboard. For the last two days, the metrics endpoint answers with one row per host, the largest count first: + +```json +{ + "data": { + "httpMetrics": [ + { + "host": "www.example.com", + "count": 492 + }, + … + ] + } +} +``` + +Each `count` is the number of `httpMetrics` rows recorded for that host in the range. + +--- + +## Check the panels + +Each panel queries one dataset and charts the fields in this table. When a panel charts its fields for the dashboard range, its data source works. + +| Row | Panel | Visualization | Dataset | Fields | +| --- | --- | --- | --- | --- | +| Events | **Top 10 requestUri** | Pie chart | `workloadEvents` | `requestUri`, `count` | +| Events | **TOp 10 User Agents** | Pie chart | `workloadEvents` | `httpUserAgent`, `count` | +| Events | **TOp 10 hosts** | Pie chart | `workloadEvents` | `host`, `count`, grouped by `host` and `status` | +| Metrics | **Total Req - Requests** | Time series | `httpMetrics` | `missedRequests`, `requestsOffloaded`, `requestsPerSecondOffloaded`, `edgeRequestsTotalPerSecond`, `missedRequestsPerSecond`, `savedRequestsPerSecond`, `httpRequestsTotal`, `httpsRequestsTotal`, `edgeRequestsTotal` | +| Metrics | **Total Req - Cache** | Time series | `httpMetrics` | `missedData`, `savedData`, `dataTransferredIn`, `dataTransferredOut`, `dataTransferredTotal` | +| Metrics | **Http Methods** | Time series | `httpMetrics` | `requestsHttpMethodGet`, `requestsHttpMethodPost`, `requestsHttpMethodHead`, `requestsHttpMethodOthers` | +| Metrics | **Logs** | Table | `httpMetrics` | `host`, `count` | +| Metrics | **Status Codes** | Time series | `httpMetrics` | `requestsStatusCode2xx`, `requestsStatusCode3xx`, `requestsStatusCode4xx`, `requestsStatusCode5xx` | + +The three **Events** panels count the `host` values of each group and keep 10 groups with `limit: 10`. Their `orderBy: [count_DESC]` line is commented out, so the query does not ask for the largest groups first. + +In **Status Codes**, a class field counts only the status codes of that class that have no field of their own. For example, `requestsStatusCode2xx` reads `0` when every 2xx response is a `200`, which `requestsStatusCode200` counts. For the per-code fields, refer to [Break down requests by status code](/en/documentation/guides/platform/observability/break-down-requests-by-status-code/). + +For the type and meaning of each `httpMetrics` field, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#httpmetrics-applications-waf). + --- ## Next steps - - + + + + diff --git a/src/content/docs/en/pages/guides/graphql/bot-manager-breakdown-data.mdx b/src/content/docs/en/pages/guides/graphql/bot-manager-breakdown-data.mdx index c8336d12b9..186910dbf3 100644 --- a/src/content/docs/en/pages/guides/graphql/bot-manager-breakdown-data.mdx +++ b/src/content/docs/en/pages/guides/graphql/bot-manager-breakdown-data.mdx @@ -142,5 +142,5 @@ For the description of every field, refer to [botManagerBreakdownMetrics](/en/do - + diff --git a/src/content/docs/en/pages/guides/graphql/httpBreakdownMetrics-dataset.mdx b/src/content/docs/en/pages/guides/graphql/httpBreakdownMetrics-dataset.mdx index eabb80be8a..28dc051240 100644 --- a/src/content/docs/en/pages/guides/graphql/httpBreakdownMetrics-dataset.mdx +++ b/src/content/docs/en/pages/guides/graphql/httpBreakdownMetrics-dataset.mdx @@ -1,37 +1,42 @@ --- -title: "Query the httpBreakdownMetrics Dataset" -description: This guide will explain how to query data from the httpBreakdownMetrics dataset using the GraphiQL playground. -meta_tags: graphql, graphql playground, security metrics, applications, requests +title: Query the httpBreakdownMetrics dataset +description: List the client IP addresses with the most blocked requests from the httpBreakdownMetrics dataset, with curl or the GraphiQL playground. +meta_tags: 'real-time metrics, graphql, httpbreakdownmetrics, requests, ip address' namespace: docs_guides_query_httpBreakdownMetrics_graphql permalink: /documentation/guides/platform/observability/query-httpbreakdownmetrics-data-with-graphql/ --- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' -The **httpBreakdownMetrics** dataset provides real-time, detailed, aggregated data on HTTP request events blocked. This dataset is part of the Real-Time Metrics GraphQL. +You can list the client IP addresses with the most blocked requests with the GraphQL API, from `curl` or the GraphiQL playground. -This data is retained and available for up to *90* days. +The `httpBreakdownMetrics` dataset of [Real-Time Metrics](/en/documentation/platform/real-time-metrics/) splits the requests to your applications by values such as `remoteAddress`, the IP address of the client, `geolocCountryName`, and `requestPath`. For each combination of values, it counts `requests`, `blockedRequests`, and `wafThreatRequests`. For every field and filter of the dataset, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#httpbreakdownmetrics). -This guide will explain how to query data from the httpBreakdownMetrics dataset using the GraphiQL playground. +The dataset returns hour buckets, even for a range of one hour. For how the range sets the bucket size, refer to [How Real-Time Metrics works](/en/documentation/platform/real-time-metrics/how-it-works/#resolution). Real-Time Metrics keeps the data of `httpBreakdownMetrics` for 90 days. For the retention of every dataset, refer to [Real-Time Metrics limits](/en/documentation/platform/real-time-metrics/limits/#data-retention). --- -## Querying data +## Prerequisites -This example queries the top 20 blocked `remoteAddress` entries. To know more about the available fields, check the [Real-Time Metrics GraphQL API Fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/) documentation. +- A personal token, for `curl`. To create one, refer to [How to manage a personal token](/en/documentation/guides/platform/account-and-billing/personal-tokens/). +- `curl`, or the GraphiQL playground. The playground needs a browser session signed in to your Azion account, or it returns an error. To open it, refer to [GraphiQL Playground](/en/documentation/devtools/graphql/graphql-playground/). -1. Access the GraphiQL playground in this link: `https://api.azion.com/v4/metrics/graphql`. - - You must be logged in to your Azion account. Otherwise, you'll receive an error message. -2. Send a query following this format: +--- + +## List the addresses with the most blocked requests + +This query adds up `blockedRequests` for each `remoteAddress` over one hour, and returns the 20 addresses with the highest totals: ```graphql -query { +query TopBlockedAddresses { httpBreakdownMetrics( aggregate: { sum: blockedRequests } groupBy: [remoteAddress] - orderBy: [sum_DESC], - limit: 20, - filter: { - tsGte: "2024-10-21T11:00:00" - tsLt: "2024-10-21T12:00:00" + orderBy: [sum_DESC] + limit: 20 + filter: { + tsGte: "2026-10-02T13:00:00" + tsLt: "2026-10-02T14:00:00" } ) { remoteAddress @@ -40,112 +45,54 @@ query { } ``` -Where: +Each argument shapes the result: -| Field | Description | -|----------|----------| -| `sum: blockedRequests` | Returns the total number of requests blocked within the specified time range, after applying any filters | -| `groupBy` | Specifies the fields by which the query results should be grouped. Example: `[remoteAddress]` | -| `orderBy` | Specifies the order in which the results should be returned. Examples: `[sum_DESC]`, for descending order, and `[sum_ASC]`, for ascending order | -| `limit` | Specifies the maximum number of results to return. Example: `20` for retrieving the top 20. System maximum: `10,000` | -| `filter` | Defines the criteria used to filter the data returned by the query | -| `tsGte` | A subfield of `filter`. Specifies the start time (greater than or equal to) for the data query, ensuring results include records from this timestamp onward. Format: "YYYY-MM-DDTHH:mm:ss"; example: `"2024-10-21T11:00:00"` | -| `tsLt` | A subfield of `filter`. Specifies the end time (less than) for the data query, filtering out any records with timestamps equal to or after this timestamp. Format: "YYYY-MM-DDTHH:mm:ss"; example: `"2024-10-21T12:00:00"` | +- `aggregate: { sum: blockedRequests }` totals the blocked requests that pass the filter. The alias `totalBlocked: sum` renames that total in the response. +- `groupBy: [remoteAddress]` returns one total per client IP address. +- `orderBy: [sum_DESC]` lists the highest total first. `[sum_ASC]` lists the lowest first. +- `limit: 20` caps the response at 20 rows. For the maximum, refer to [Real-Time Metrics limits](/en/documentation/platform/real-time-metrics/limits/#graphql-api). +- `filter` keeps only the data that matches its conditions. Here, the conditions set the time range. +- `tsGte` sets the start of the range, which the result includes. `tsLt` sets the end, which the result excludes. -3. You'll receive a response similar to this: +Both dates take the `YYYY-MM-DDTHH:mm:ss` format. Replace the dates in the example with the hour you want to read. `tsGte` and `tsLt` are an alternative to `tsRange`, the range filter of the [Real-Time Metrics quickstart](/en/documentation/platform/real-time-metrics/quickstart/). -```graphql +To run the query with `curl`, send a `POST` request to `https://api.azion.com/v4/metrics/graphql`. Replace `[TOKEN VALUE]` with your personal token: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query TopBlockedAddresses { httpBreakdownMetrics(aggregate: { sum: blockedRequests }, groupBy: [remoteAddress], orderBy: [sum_DESC], limit: 20, filter: { tsGte: \"2026-10-02T13:00:00\", tsLt: \"2026-10-02T14:00:00\" }) { remoteAddress totalBlocked: sum } }"}' +``` + +The API answers `200` with one row per address: + +```json { "data": { "httpBreakdownMetrics": [ { - "remoteAddress": "192.168.0.1", - "totalBlocked": 6732 - }, - { - "remoteAddress": "10.0.0.2", - "totalBlocked": 5872 - }, - { - "remoteAddress": "172.16.0.3", - "totalBlocked": 3958 - }, - { - "remoteAddress": "192.168.1.4", - "totalBlocked": 3952 - }, - { - "remoteAddress": "10.0.1.5", - "totalBlocked": 3806 - }, - { - "remoteAddress": "172.16.1.6", - "totalBlocked": 3730 - }, - { - "remoteAddress": "192.168.2.7", - "totalBlocked": 3378 - }, - { - "remoteAddress": "10.0.2.8", - "totalBlocked": 3318 - }, - { - "remoteAddress": "172.16.2.9", - "totalBlocked": 3284 - }, - { - "remoteAddress": "192.168.3.10", - "totalBlocked": 3282 - }, - { - "remoteAddress": "10.0.3.11", - "totalBlocked": 2958 - }, - { - "remoteAddress": "172.16.3.12", - "totalBlocked": 2884 - }, - { - "remoteAddress": "192.168.4.13", - "totalBlocked": 2530 - }, - { - "remoteAddress": "10.0.4.14", - "totalBlocked": 2348 - }, - { - "remoteAddress": "172.16.4.15", - "totalBlocked": 2004 - }, - { - "remoteAddress": "192.168.5.16", - "totalBlocked": 1902 - }, - { - "remoteAddress": "10.0.5.17", - "totalBlocked": 1538 - }, - { - "remoteAddress": "172.16.5.18", - "totalBlocked": 1440 - }, - { - "remoteAddress": "192.168.6.19", - "totalBlocked": 1390 - }, - { - "remoteAddress": "10.0.6.20", - "totalBlocked": 1314 + "remoteAddress": "192.0.2.1", + "totalBlocked": 0 } ] } } ``` -Where: +Each row pairs an address with its total of blocked requests, highest first, up to 20 rows. In this example, a single address sent the 71 requests of that hour, and none was blocked, so `totalBlocked` reads `0`. + +An empty `httpBreakdownMetrics` array means no request matched: check that the range falls inside the 90 days of retention. A request without the `Authorization` header returns `401`. + +To run the query in the GraphiQL playground instead, paste the query from the first block. + +--- + +## Next steps -| Field | Description | -|----------|----------| -| `remoteAddress` | Specifies the IP address of the source making the request. Example: `10.0.6.20` | -| `totalBlocked` | Refers to the total number of times requests from this IP address have been blocked. This field is the result of a sum. Example: `1314` | + + + + + + diff --git a/src/content/docs/en/pages/guides/graphql/query-edge-application-usage-data.mdx b/src/content/docs/en/pages/guides/graphql/query-edge-application-usage-data.mdx index 307c94551b..d7aa6dbed0 100644 --- a/src/content/docs/en/pages/guides/graphql/query-edge-application-usage-data.mdx +++ b/src/content/docs/en/pages/guides/graphql/query-edge-application-usage-data.mdx @@ -122,6 +122,6 @@ You now have, for each workload, the number of requests WAF inspected in the per - + diff --git a/src/content/docs/en/pages/guides/real-time-metrics/break-down-requests-by-status-code.mdx b/src/content/docs/en/pages/guides/real-time-metrics/break-down-requests-by-status-code.mdx new file mode 100644 index 0000000000..1341998ed8 --- /dev/null +++ b/src/content/docs/en/pages/guides/real-time-metrics/break-down-requests-by-status-code.mdx @@ -0,0 +1,348 @@ +--- +title: Break down requests by status code +description: Split your applications' requests by status code, narrow them to one class, rank the hosts that return errors, and compare each code with the origin's answer. +meta_tags: 'real-time metrics, graphql, console, requests by status' +namespace: docs_guides_rtm_requests_by_status +permalink: /documentation/guides/platform/observability/break-down-requests-by-status-code/ +--- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' +import Tabs from '~/components/webkit/Tabs.vue' + +You can split the requests of your [applications](/en/documentation/platform/applications/) by the HTTP status code they returned, in Azion Console or with the GraphQL API. [Real-Time Metrics](/en/documentation/platform/real-time-metrics/) reads these numbers from the `httpMetrics` dataset. For what each chart of the **Status Codes** dashboard measures, refer to [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/#status-codes). + + +Console +API + + +## Prerequisites + +- An Azion account. To create one, refer to [Create an account](/en/documentation/fundamentals/creating-account/). +- An application served by a [workload](/en/documentation/platform/workloads/), with requests in the range you want to read. + + + + + +- Access to Azion Console. To sign in, refer to [How to access Azion Console](/en/documentation/guides/platform/account-and-billing/how-to-access-azion-console/). + + + + + +- A personal token. To create one, refer to [How to manage a personal token](/en/documentation/guides/platform/account-and-billing/personal-tokens/). +- `curl`. + + + + + +--- + +## Open the status breakdown + +The breakdown counts the requests of every application in your account, one count per status code. + + + + + +To open the breakdown in Azion Console: + + + + + Access [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + The page opens on the **Build** category, the **Applications** tab, and the **Data Transferred** dashboard. + + + + + +The dashboard shows four line charts, **HTTP Status Codes 2XX** to **HTTP Status Codes 5XX**, and the **Requests by Status and Upstream Status** table. Each legend entry totals one series over the range, which starts at **Last 5 minutes**. To read a longer period, refer to [Filters and time range](/en/documentation/platform/real-time-metrics/filters-and-time-range/#time-range). + + + + + +To read the breakdown with the GraphQL API, send a `POST` request to `https://api.azion.com/v4/metrics/graphql`. The query sums `requests` and groups the sums by `status`. + +Replace `[TOKEN VALUE]` with your personal token, and the `begin` and `end` values with your range: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query RequestsByStatus { httpMetrics(limit: 100, filter: { tsRange: { begin: \"2026-10-01T14:25:25\", end: \"2026-10-02T14:25:25\" } }, aggregate: { sum: requests }, groupBy: [status], orderBy: [sum_DESC]) { status sum } }"}' +``` + +The API answers `200` with one row per status code, the most frequent first: + +```json +{ + "data": { + "httpMetrics": [ + { + "status": 200, + "sum": 1253 + }, + { + "status": 496, + "sum": 210 + }, + { + "status": 501, + "sum": 198 + }, + { + "status": 304, + "sum": 140 + }, + … + ] + } +} +``` + +In this example, 12 status codes share 1,985 requests, the same number that `requestsTotal` returns for the range. `limit: 100` keeps every code: without `limit`, the API returns 10 rows. For every field of the dataset, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#httpmetrics-applications-waf). + + + + + +--- + +## Narrow it to one status class + +A filter on the status code keeps one class, such as the 5XX server errors. This section keeps the codes from 500 to 599. + + + + + +To filter the dashboard in Azion Console: + + + + + In the filter row, select the filter icon, whose tooltip reads **Add filter**. + + + + + In **Filter**, select **Status**. + + + + + In **Operator**, select **Between**. + + + + + Enter `500` in **Begin** and `599` in **End**. + + + + + +A chip under the filter row reads `Status between: (500,599)`. The **Requests by Status and Upstream Status** table now lists only the pairs whose status is in that range, so a server error is no longer hidden behind the most frequent `200` responses. + + + + + +To filter with the API, add `statusRange` to `filter`, next to `tsRange`: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query ServerErrorsByStatus { httpMetrics(limit: 100, filter: { tsRange: { begin: \"2026-10-01T14:25:25\", end: \"2026-10-02T14:25:25\" }, statusRange: { begin: 500, end: 599 } }, aggregate: { sum: requests }, groupBy: [status], orderBy: [sum_DESC]) { status sum } }"}' +``` + +The API answers `200` with the 5XX codes alone: + +```json +{ + "data": { + "httpMetrics": [ + { + "status": 501, + "sum": 198 + }, + { + "status": 502, + "sum": 31 + }, + { + "status": 504, + "sum": 1 + } + ] + } +} +``` + +In this example, the class totals 230 requests. To total a class, sum `requests` with `statusRange`, as above: `requestsStatusCode5xx` returns 199 for the same range, because it counts only the 5XX codes that have no field of their own. For each class field, refer to [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/#status-codes). + + + + + +--- + +## Find the hosts that return the errors + +With the class filter in place, you can check which hosts return those errors. The API ranks every host in one query. In Azion Console, a second filter narrows the dashboard to one host at a time. + + + + + +To narrow the 5XX responses to one host in Azion Console, keep the **Status** filter and add a second one: + + + + + In the filter row, select the filter icon, whose tooltip reads **Add filter**. + + + + + In **Filter**, select **Host**. + + + + + In **Operator**, select **Equals**. + + + + + Enter the host to check, such as `www.example.com`. + + + + + +A second chip reads `Host equals: www.example.com`. The **HTTP Status Codes 5XX** chart and the table now count only the 5XX responses of that host. To check another host, select the **Host** chip and change its value. + + + + + +To rank the hosts with the API, keep `statusRange` and group by `host` instead of `status`: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query ServerErrorsByHost { httpMetrics(limit: 10, filter: { tsRange: { begin: \"2026-10-01T14:25:25\", end: \"2026-10-02T14:25:25\" }, statusRange: { begin: 500, end: 599 } }, aggregate: { sum: requests }, groupBy: [host], orderBy: [sum_DESC]) { host sum } }"}' +``` + +The API answers `200` with the hosts that returned 5XX responses, the most errors first: + +```json +{ + "data": { + "httpMetrics": [ + { + "host": "www.example.com", + "sum": 199 + }, + { + "host": "api.example.com", + "sum": 28 + }, + { + "host": "static.example.com", + "sum": 3 + } + ] + } +} +``` + +In this example, one host returned 199 of the 230 server errors. `limit: 10` keeps the ten hosts with the most errors. + + + + + +--- + +## Find what the origin answered + +The status code is what the client received. The upstream status is what the origin returned. When both carry the same error code, the error came from the origin. + + + + + +In Azion Console, keep the **Status** filter and read the **Requests by Status and Upstream Status** table. Each row pairs a **Status** with an **Upstream Status**, and **Total** counts the requests with that pair. The table lists the 10 most frequent pairs. + + + + + +To pair the two codes with the API, group by `status` and `upstreamStatus`. The query keeps the 5XX filter and the ten most frequent pairs, as the Console table does: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query ServerErrorsByUpstreamStatus { httpMetrics(limit: 10, filter: { tsRange: { begin: \"2026-10-01T14:25:25\", end: \"2026-10-02T14:25:25\" }, statusRange: { begin: 500, end: 599 } }, aggregate: { sum: requests }, groupBy: [status, upstreamStatus], orderBy: [sum_DESC]) { status upstreamStatus sum } }"}' +``` + +The API answers `200` with one row per pair: + +```json +{ + "data": { + "httpMetrics": [ + { + "status": 501, + "upstreamStatus": 501, + "sum": 198 + }, + { + "status": 502, + "upstreamStatus": 502, + "sum": 21 + }, + { + "status": 502, + "upstreamStatus": 0, + "sum": 10 + }, + { + "status": 504, + "upstreamStatus": 504, + "sum": 1 + } + ] + } +} +``` + +In this example, the origin returned every `501` and `504`, and 21 of the 31 `502` responses. The other 10 `502` responses carry `upstreamStatus` `0`. + + + + + +--- + +## Next steps + + + + + + + diff --git a/src/content/docs/en/pages/guides/real-time-metrics/find-top-waf-threat-sources.mdx b/src/content/docs/en/pages/guides/real-time-metrics/find-top-waf-threat-sources.mdx new file mode 100644 index 0000000000..89d90a4fe7 --- /dev/null +++ b/src/content/docs/en/pages/guides/real-time-metrics/find-top-waf-threat-sources.mdx @@ -0,0 +1,304 @@ +--- +title: Find the top sources of WAF threats +description: List the countries, attack families, and IP addresses that send the most WAF threats to your applications, in Azion Console or with the GraphQL API. +meta_tags: 'real-time metrics, graphql, console, top waf threats' +namespace: docs_guides_rtm_top_waf_threats +permalink: /documentation/guides/platform/observability/find-top-waf-threat-sources/ +--- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' +import Tabs from '~/components/webkit/Tabs.vue' + +You can find the countries, attack families, and IP addresses that send the most [WAF](/en/documentation/platform/firewall/#waf) threats in Azion Console or with the GraphQL API. For what each chart on the WAF dashboards measures, refer to [Secure dashboards](/en/documentation/platform/real-time-metrics/secure-dashboards/). For the log of each request WAF flagged, refer to [Real-Time Events](/en/documentation/platform/real-time-events/). + +[Real-Time Metrics](/en/documentation/platform/real-time-metrics/) reads these numbers from two datasets. The `httpMetrics` dataset groups the threats by country and by attack family. The `httpBreakdownMetrics` dataset groups them by the IP address that sent them. Every example on this page covers the last 7 days. + +--- + +Select your interface once. The prerequisites and each task below show only that path. + + +Console +API + + +## Prerequisites + +- An Azion account. To create one, refer to [Create an account](/en/documentation/fundamentals/creating-account/). +- An [application](/en/documentation/platform/applications/) served by a [workload](/en/documentation/platform/workloads/), with requests in the last 7 days. +- A firewall that runs a WAF rule set on the requests to your application, in *Blocking* or *Logging* mode. To set one up, refer to [Create and apply a WAF rule set](/en/documentation/guides/application-security/firewall-and-waf/create-waf-rule-set/). + + + + + +- Access to Azion Console. To sign in, refer to [How to access Azion Console](/en/documentation/guides/platform/account-and-billing/how-to-access-azion-console/). + + + + + +- A personal token. To create one, refer to [How to manage a personal token](/en/documentation/guides/platform/account-and-billing/personal-tokens/). +- `curl`. + + + + + +--- + +## Find the countries + +Real-Time Metrics counts the threats by the country each request came from. The WAF dashboard and the `httpMetrics` dataset both carry this count. + + + + + +To find the countries in Azion Console: + + + + + Access [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + + + + The **WAF** tab opens on its only dashboard, **Threats**. + + + + + In the time-range picker, in the **Quick** tab, under **Commonly used**, select **Last 7 days**. + + + + + After the range changes, the **Refresh** button beside the picker reads **Update**. + + + + + Find the two **Top WAF Threat Requests by Country** charts. + + + + +The bar chart draws one bar per country, with the number of threats WAF blocked from it. The pie shows the share of each country. Both list the 20 countries with the most threats, and both leave out the threats WAF logged without blocking. When WAF blocked no threat in the range, each chart reads `No data available`. + + + + + +To find the countries with the GraphQL API, send a `POST` request to `https://api.azion.com/v4/metrics/graphql`. The query groups the `httpMetrics` dataset by `geolocCountryName` and selects three WAF counts for each country. + +Replace `[TOKEN VALUE]` with your personal token, and the `begin` and `end` values with the 7 days you want to read: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query TopWafThreatSourcesByCountry($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 10, filter: { tsRange: { begin: $begin, end: $end } }, groupBy: [geolocCountryName], orderBy: [wafRequestsThreat_DESC]) { geolocCountryName wafRequestsThreat wafRequestsBlocked wafRequestsAllowed } }","variables":{"begin":"2026-09-25T14:21:50","end":"2026-10-02T14:21:50"}}' +``` + +The API answers `200` with one row per country, at most 10: + +```json +{ + "data": { + "httpMetrics": [ + { + "geolocCountryName": "United States", + "wafRequestsThreat": 0, + "wafRequestsBlocked": 0, + "wafRequestsAllowed": 0 + }, + { + "geolocCountryName": "Brazil", + "wafRequestsThreat": 0, + "wafRequestsBlocked": 0, + "wafRequestsAllowed": 0 + } + ] + } +} +``` + +Each row holds three counts for one country: + +- `wafRequestsBlocked`: threats WAF blocked. +- `wafRequestsThreat`: threats WAF logged without blocking. +- `wafRequestsAllowed`: requests WAF allowed. + +The rows run from the highest `wafRequestsThreat` down. To rank the countries by blocked threats, replace `wafRequestsThreat_DESC` with `wafRequestsBlocked_DESC`. A row whose three counts are `0`, as in this example, means WAF reported no request from that country in the range. + +For every WAF field of the dataset, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#httpmetrics-applications-waf). + + + + + +--- + +## Find the attack families + +WAF assigns each threat to an attack family, such as SQL injection or cross-site scripting. Real-Time Metrics counts the threats in each family, on the WAF dashboard and in the `httpMetrics` dataset. + + + + + +To find the attack families in Azion Console: + + + + + Access [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + + + + The **WAF** tab opens on its only dashboard, **Threats**. + + + + + In the time-range picker, in the **Quick** tab, under **Commonly used**, select **Last 7 days**. + + + + + + Find the **WAF Threat Requests by Family Attack** chart. + + + + +The chart draws one bar per attack family, with the number of threats WAF blocked in it, for the 10 families with the most. When WAF blocked no threat in the range, the chart reads `No data available`. For what each family name means, refer to [Secure dashboards](/en/documentation/platform/real-time-metrics/secure-dashboards/#waf). + +To see which of your hosts received the blocked threats, read **WAF Threat Requests by Host** on the same dashboard. It draws one line per host, up to 16 hosts. + + + + + +To find the attack families with the GraphQL API, send a `POST` request to `https://api.azion.com/v4/metrics/graphql`. The query groups the `httpMetrics` dataset by `wafAttackFamily`. + +Replace `[TOKEN VALUE]` with your personal token, and the `begin` and `end` values with the 7 days you want to read: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query ThreatsByAttackFamily($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 10, filter: { tsRange: { begin: $begin, end: $end } }, groupBy: [wafAttackFamily], orderBy: [wafRequestsThreat_DESC]) { wafAttackFamily wafRequestsThreat wafRequestsBlocked } }","variables":{"begin":"2026-09-25T14:21:50","end":"2026-10-02T14:21:50"}}' +``` + +The API answers `200` with one row per attack family, at most 10: + +```json +{ + "data": { + "httpMetrics": [ + { + "wafAttackFamily": "-", + "wafRequestsThreat": 0, + "wafRequestsBlocked": 0 + } + ] + } +} +``` + +Each row counts, for one family, the threats WAF logged without blocking in `wafRequestsThreat` and the threats it blocked in `wafRequestsBlocked`. In this example, WAF identified no threat in the range. The response then holds one row, `"wafAttackFamily": "-"`, with `0` in both counts. + + + + + +--- + +## Find the IP addresses + +The IP address of a threat is the remote address that sent the request. Only the Threats Breakdown dashboard and the `httpBreakdownMetrics` dataset carry it. + + + + + +To find the IP addresses in Azion Console: + + + + + Access [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + + + + + The tab opens on its only dashboard, also named **Threats Breakdown**. + + + + + In the time-range picker, in the **Quick** tab, under **Commonly used**, select **Last 7 days**. + + + + + + Find the **Top WAF Threat Requests by IP** chart. + + + + +The chart draws one bar per IP address, with the number of requests from it that WAF identified as threats. It lists the 10 addresses with the most. When WAF identified no threat in the range, the chart reads `No data available`. + + + + + +To find the IP addresses with the GraphQL API, send a `POST` request to `https://api.azion.com/v4/metrics/graphql`. The query sums `wafThreatRequests` from the `httpBreakdownMetrics` dataset, grouped by `remoteAddress`. The `wafThreatRequestsGt: 0` filter keeps only the addresses that sent threats. + +Replace `[TOKEN VALUE]` with your personal token, and the `begin` and `end` values with the 7 days you want to read: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query TopWafThreatSourcesByIp($begin: DateTime!, $end: DateTime!) { httpBreakdownMetrics(limit: 10, filter: { tsRange: { begin: $begin, end: $end }, wafThreatRequestsGt: 0 }, aggregate: { sum: wafThreatRequests }, groupBy: [remoteAddress], orderBy: [sum_DESC]) { remoteAddress sum } }","variables":{"begin":"2026-09-25T14:21:50","end":"2026-10-02T14:21:50"}}' +``` + +The API answers `200` with one row per address, at most 10: + +```json +{ + "data": { + "httpBreakdownMetrics": [] + } +} +``` + +Each row holds one address in `remoteAddress` and its threat requests in `sum`, from the highest down. An empty array, as in this example, means that no address sent a request WAF identified as a threat in the range. Keep the `wafThreatRequestsGt: 0` filter: without it, the query also returns the busiest addresses with a `sum` of `0`. + +For every field of the dataset, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#httpbreakdownmetrics). + + + + + +To act on the sources you found, block the addresses or countries with a [network list](/en/documentation/platform/firewall/network-shield/network-lists/), or adjust the [WAF rule set](/en/documentation/platform/firewall/waf/rules-set/) against the top attack families. + +--- + +## Next steps + + + + + + + diff --git a/src/content/docs/en/pages/guides/real-time-metrics/measure-cache-offload.mdx b/src/content/docs/en/pages/guides/real-time-metrics/measure-cache-offload.mdx new file mode 100644 index 0000000000..bc8d2c2e62 --- /dev/null +++ b/src/content/docs/en/pages/guides/real-time-metrics/measure-cache-offload.mdx @@ -0,0 +1,319 @@ +--- +title: Measure cache offload for a domain +description: Filter Real-Time Metrics to one domain and read how much of its data and requests came from cache, in Azion Console or with the GraphQL API. +meta_tags: 'real-time metrics, graphql, console, cache offload' +namespace: docs_guides_rtm_cache_offload +permalink: /documentation/guides/platform/observability/measure-cache-offload/ +--- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' +import Tabs from '~/components/webkit/Tabs.vue' + +You can measure how much of one domain's traffic your applications serve from cache with [Real-Time Metrics](/en/documentation/platform/real-time-metrics/), in Azion Console or with the GraphQL API. + +Three measures answer the question. *Offload* is the share of data or requests that the data center delivered from its cache. *Saved* counts the data or requests it delivered from cache, without fetching the content from the origin. *Missed* counts what it delivered after fetching the content from the origin. For the full definition of each chart, refer to [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/#data-transferred). + +The examples read the last 24 hours of the host `www.example.com`. Replace it with a domain your workload answers on. + +--- + +Select your interface once. The prerequisites and every task below show only that path. + + +Console +API + + +## Prerequisites + +- An Azion account. To create one, refer to [Create an account](/en/documentation/fundamentals/creating-account/). +- An [application](/en/documentation/platform/applications/) served by a [workload](/en/documentation/platform/workloads/), with requests to the domain in the last 24 hours. + + + + + +- Access to Azion Console. To sign in, refer to [How to access Azion Console](/en/documentation/guides/platform/account-and-billing/how-to-access-azion-console/). + + + + + +- A personal token. To create one, refer to [How to manage a personal token](/en/documentation/guides/platform/account-and-billing/personal-tokens/). +- `curl`. + + + + + +--- + +## Filter to the domain + +With no filter, the cache charts cover every application of the account. A filter on the host keeps only the requests to that domain. + + + + + +To filter the dashboards to one domain in Azion Console: + + + + + Access [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + The page opens on the **Build** category, the **Applications** tab, and the **Data Transferred** dashboard. + + + + + In the time-range picker, in the **Quick** tab, under **Commonly used**, select **Last 24 hours**. + + + + + + In the filter row, select the filter icon, whose tooltip reads **Add filter**. + + + + + In **Filter**, select **Host**. + + + + + In **Operator**, select **Equals**. + + + + + Enter `www.example.com` as the value. + + + + + +A chip under the filter row reads `Host equals: www.example.com`. Every chart of **Data Transferred** now shows only the requests to that domain, over the last 24 hours. + +To keep every domain of one workload instead, select the **Domain** field, labeled **Workload** on some accounts, and select the workload from its list. + + + + + +In the API, the `hostEq` filter keeps the requests of one host, next to the `tsRange` filter that sets the period. Before you read the cache values, confirm that the host has requests in the range. + +Send a `POST` request to `https://api.azion.com/v4/metrics/graphql`. Replace `[TOKEN VALUE]` with your personal token, and the host and dates with your own: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query RequestsForHost($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 1, filter: { tsRange: { begin: $begin, end: $end }, hostEq: \"www.example.com\" }) { requestsTotal } }","variables":{"begin":"2026-10-01T14:25:25","end":"2026-10-02T14:25:25"}}' +``` + +The API answers `200` with the request count of the host: + +```json +{ + "data": { + "httpMetrics": [ + { + "requestsTotal": 982 + } + ] + } +} +``` + +In this example, the host received 982 requests in the range. A `requestsTotal` of `0` means no request to that host reached your applications in the range. Correct the host or the dates before you read the cache values. + + + + + +--- + +## Read the offload of data and requests + +Real-Time Metrics measures the cache in two units. The **Data Transferred** dashboard counts bytes, and the **Requests** dashboard counts requests. + + + + + +To read the offload of the domain in Azion Console, with the host filter applied: + + + + + On the **Data Transferred** dashboard, find the **Offload** entry in the legend of the **Edge Offload** chart. + + + + + In the legends of the **Saved Data** and **Missed Data** charts, find the byte totals of the range. + + + + + + In the **Requests Offloaded** chart, find the **Requests Offloaded** entry in the legend. + + + + + In the legends of the **Saved Requests** and **Missed Requests** charts, find the request totals of the range. + + + + +The host filter stays applied on **Requests**. Both dashboards read the `httpMetrics` dataset, and only a switch to a dashboard that reads another dataset clears the filters. + +The aggregation tag of **Edge Offload** and **Requests Offloaded** reads **Average**. Their legends show the average of the chart's points, not the share over the whole range. For the share of data over the whole range, divide the **Saved Data** total by the sum of the **Saved Data** and **Missed Data** totals. + + + + + +To read the same values with the API, select the cache fields of the `httpMetrics` dataset with the same filter: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query CacheOffloadForHost($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 1, filter: { tsRange: { begin: $begin, end: $end }, hostEq: \"www.example.com\" }) { requestsTotal requestsOffloaded savedRequests missedRequests dataTransferredTotal offload savedData missedData bandwidthOffload } }","variables":{"begin":"2026-10-01T14:25:25","end":"2026-10-02T14:25:25"}}' +``` + +The API answers `200` with one row for the host: + +```json +{ + "data": { + "httpMetrics": [ + { + "requestsTotal": 982, + "requestsOffloaded": 5.19, + "savedRequests": 51.0, + "missedRequests": 931.0, + "dataTransferredTotal": 114490585.0, + "offload": 0.51, + "savedData": 577373.0, + "missedData": 113387464.0, + "bandwidthOffload": 0.51 + } + ] + } +} +``` + +The row covers the whole range. Read the fields as follows: + +- `requestsOffloaded` is the percentage of requests served from cache: `savedRequests` divided by `requestsTotal`. Here, 51 of 982 requests, or 5.19%. +- `offload` is the percentage of data served from cache: `savedData` divided by the sum of `savedData` and `missedData`. Here, 0.51%. +- `bandwidthOffload` is the same share, measured on bandwidth. +- `savedData` and `missedData` are in bytes. + +In this example, `savedRequests` and `missedRequests` add up to `requestsTotal`: 51 plus 931 is 982. For every field of the dataset, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#httpmetrics-applications-waf). + + + + + +--- + +## Find what reached the origin + +Missed data and missed requests are the content the data center fetched from your origin before it delivered it. The higher they are, the more of the domain's demand your origin handles. When the application uses [Tiered Cache](/en/documentation/platform/applications/cache/tiered-cache/), the **Tiered Cache Offload** chart of the **Tiered Cache** tab shows the share of data that the Tiered Cache layer delivered to the data center without fetching it from the origin. + + + + + +To find the missed content of the domain in Azion Console, with the host filter applied: + + + + + On the **Data Transferred** dashboard, find the **Missed Data** entry in the legend of the **Missed Data** chart. + + + + + + In the **Missed Requests** chart, find the **Missed Requests** entry in the legend. + + + + + In the **Missed Requests** chart, place the cursor on the highest point. The tooltip shows the value at that point. + + + + +The peaks of **Missed Requests** show when the data center sent the most requests of the domain to your origin. The tooltip shows only in a window wider than 540 px. + + + + + +To see how the requests of the host split by cache status, group them by `upstreamCacheStatus`, the status of the local cache for each request. The query sums `requests` for each status, the largest first: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query RequestsByCacheStatus($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 20, filter: { tsRange: { begin: $begin, end: $end }, hostEq: \"www.example.com\" }, aggregate: { sum: requests }, groupBy: [upstreamCacheStatus], orderBy: [sum_DESC]) { upstreamCacheStatus sum } }","variables":{"begin":"2026-10-01T14:25:25","end":"2026-10-02T14:25:25"}}' +``` + +The API answers `200` with one row for each cache status: + +```json +{ + "data": { + "httpMetrics": [ + { + "upstreamCacheStatus": "-", + "sum": 334 + }, + { + "upstreamCacheStatus": "REVALIDATED", + "sum": 301 + }, + { + "upstreamCacheStatus": "MISS", + "sum": 281 + }, + { + "upstreamCacheStatus": "HIT", + "sum": 50 + }, + { + "upstreamCacheStatus": "EXPIRED", + "sum": 16 + } + ] + } +} +``` + +In this example, 50 of the 982 requests carry `HIT`. The other 932 carry `-`, `REVALIDATED`, `MISS`, or `EXPIRED`. For every value of `upstreamCacheStatus`, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#httpmetrics-applications-waf). + + + + + +--- + +## Next steps + + + + + + + diff --git a/src/content/docs/en/pages/guides/real-time-metrics/use-real-time-metrics.mdx b/src/content/docs/en/pages/guides/real-time-metrics/use-real-time-metrics.mdx deleted file mode 100644 index 81ebf0ed9d..0000000000 --- a/src/content/docs/en/pages/guides/real-time-metrics/use-real-time-metrics.mdx +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: How to use Real-Time Metrics -description: Find out how to use Real-Time Metrics and view your charts on Azion. -meta_tags: >- - real time, edge computing, observe, observability, metrics, data, events, - security -namespace: docs_use_real_time_metrics -permalink: /documentation/guides/platform/observability/use-real-time-metrics/ ---- - -import DocButton from '~/components/webkit/DocButton.vue'; -import Tag from '~/components/webkit/Tag.vue' - - -**Real-Time Metrics** provides real-time access to metrics through charts. Charts exhibit data as soon as your applications and other products begin to have incoming accesses and traffic. - - - -:::note -The new Real-Time Metrics provides data and metrics starting from **October 15th, 2022**. If you want to view metrics for up to 2 years and before October 15th, 2022, see [Historical Real-Time Metrics](/en/documentation/platform/real-time-metrics/historical-real-time-metrics/). -::: - ---- - -## Configuring products and a data interval - -Access [Azion Console](https://console.azion.com) and select **Products menu** > **Real-Time Metrics** on the **Observe** section. - -To analyze your metrics, you first need to select a product and configure a data interval: - -1. Select one of the three available categories on the dropdown menu: - - Build Secure Observe - -2. Select a tab according to the product you want to view: - -- **Build** - - Applications Tiered Cache Functions Image Processor - -- **Secure** - - WAF Edge DNS - -- **Observe** - - Data Stream - -3. On **Time range**, select a time period from the options to fetch the data that'll be exhibited on the charts: - - Last Hour Last 24 Hours Last 7 Days Last 30 Days Last 6 Months - -4. If you want to use a different date from the options, click the calendar fields and select a beginning and ending date and time. -5. If you've selected the **Applications** product tab, select between one of the four subtabs: - - Data Transferred Requests Status Codes Bandwidth Saving - -All charts from all tabs are automatically refreshed after applying a time range. - ---- - -## Viewing charts and metrics - -There are a few best practices you can use to improve your metrics analysis. - - - -If you're looking to complement your analysis with more extensive and detailed information on the metrics you viewed on the charts, you can explore Real-Time Event's logs. - - \ No newline at end of file diff --git a/src/content/docs/en/pages/main-menu/reference/observe/real-time-metrics/first-steps.mdx b/src/content/docs/en/pages/main-menu/reference/observe/real-time-metrics/first-steps.mdx index e01e46be3d..b06604db86 100644 --- a/src/content/docs/en/pages/main-menu/reference/observe/real-time-metrics/first-steps.mdx +++ b/src/content/docs/en/pages/main-menu/reference/observe/real-time-metrics/first-steps.mdx @@ -1,25 +1,285 @@ --- -title: Real-Time Metrics first steps -description: See the first steps for Real-Time Metrics. -meta_tags: >- - real time, edge computing, observe, observability, metrics, data, events, - security +title: Real-Time Metrics quickstart +description: Read the request and data-transfer totals of your applications in Azion Console or with one GraphQL query, then narrow them to 24 hours and one host. +meta_tags: 'real-time metrics, quickstart, console, graphql, api, metrics' namespace: docs_real_time_metrics_first_steps -permalink: /documentation/platform/real-time-metrics/first-steps/ +permalink: /documentation/platform/real-time-metrics/quickstart/ --- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' +import Tabs from '~/components/webkit/Tabs.vue' -Before beginning to use **Real-Time Metrics**, make sure you have a [Azion Console](https://console.azion.com) account. You can find more information on creating one on the [documentation page](/en/documentation/fundamentals/creating-account/). +This guide instructs you through reading your first traffic numbers in [Real-Time Metrics](/en/documentation/platform/real-time-metrics/), in Azion Console or with the GraphQL API. -Real-Time Metrics is a default product activated for all Azion accounts. If you want to check if it's active on yours: +- Read the total requests and the total data transferred of your applications. +- Set the time range to the last 24 hours. +- Narrow both totals to one host. -To access Real-Time Metrics: +Real-Time Metrics creates nothing, and there is nothing to turn on: it is active on every Azion account. It reads the metrics your applications and other products generate as they receive traffic, and charts them as soon as traffic arrives. Two things stand behind every number on this page: -1. [On Console](https://console.azion.com), on the upper-left corner, select the **Products menu**, represented by three horizontal lines. -2. On the **OBSERVE** section, select **Real-Time Metrics NEW**. +1. An **application** that has already served requests. Those requests are the data. +2. The `httpMetrics` **dataset**, which records the requests of your applications. The charts of the **Applications** tab and the GraphQL API both read it, so both interfaces return the same totals for the same range and filter. -You'll be redirected to Real-Time Metrics' page, with the Applications tab open by default. +Real-Time Metrics shows aggregated numbers. For the logs behind each number, refer to [Real-Time Events](/en/documentation/platform/real-time-events/). -For a step by step on how to configure the product, see the [How to use Real-Time Metrics](/en/documentation/guides/platform/observability/use-real-time-metrics/) guide. +--- + +Select your interface once. The prerequisites and each stage below show only that path. + + +Console +API + + +## Prerequisites + +- An Azion account. To create one, refer to [Create an account](/en/documentation/fundamentals/creating-account/). +- An [application](/en/documentation/platform/applications/) served by a [workload](/en/documentation/platform/workloads/), with requests in the last 24 hours. +- A host the workload answers on, such as `www.example.com`. Stage 3 filters by it. + + + + + +- Access to Azion Console. To sign in, refer to [How to access Azion Console](/en/documentation/guides/platform/account-and-billing/how-to-access-azion-console/). + + + + + +- A personal token. To create one, refer to [How to manage a personal token](/en/documentation/guides/platform/account-and-billing/personal-tokens/). +- `curl`. + + + + + +--- + +## 1. Open the request metrics of your applications + +With no filter, Real-Time Metrics counts the requests and the data transferred of every application in your account. + + + + + +To read both totals in Azion Console: + + + + + Access [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + The page opens on the **Build** category, the **Applications** tab, and the **Data Transferred** dashboard. + + + + + In the **Edge Cache** chart, find the **Data Transferred Total** entry in the legend. + + + + + + In the **Total Requests** chart, find the **Edge Requests Total** entry in the legend. + + + + +Both charts cover **Last 5 minutes**, the range the page opens on. Each legend entry reads ` - `, where the total sums the whole range. + +The category dropdown also offers **Secure** and **Observe**, each with its own product tabs. For the full layout, refer to [Filters and time range](/en/documentation/platform/real-time-metrics/filters-and-time-range/#screen-layout). + + + + + +To read both totals with the GraphQL API, send a `POST` request to `https://api.azion.com/v4/metrics/graphql`. The query selects `requestsTotal` and `dataTransferredTotal` from the `httpMetrics` dataset, and the variables set a one-hour range. + +Replace `[TOKEN VALUE]` with your personal token, and the `begin` and `end` values with the hour you want to read: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query TrafficLastHour($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 1, filter: { tsRange: { begin: $begin, end: $end } }) { requestsTotal dataTransferredTotal } }","variables":{"begin":"2026-10-02T13:25:25","end":"2026-10-02T14:25:25"}}' +``` + +The API answers `200` with one row: + +```json +{ + "data": { + "httpMetrics": [ + { + "requestsTotal": 0, + "dataTransferredTotal": 0.0 + } + ] + } +} +``` + +The row holds the totals for the range. A `0` means no request reached your applications in that hour. The API requires a range: a query without `tsRange` returns `400` with `To execute queries it is mandatory to provide the desired time interval.` + +For every field of the dataset, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#httpmetrics-applications-waf). + + + + + +--- + +## 2. Set the time range to the last 24 hours + +The time range sets the period that every total covers. In both interfaces, this stage reads the same 24 hours. + + + + +To set the range in Azion Console: + + + + + In the filter row, select the time-range picker. + + + + + In the **Quick** tab, under **Commonly used**, select **Last 24 hours**. + + + + + After the range changes, the **Refresh** button beside the picker reads **Update**. + + + + +Every chart reloads for the last 24 hours, and the **Edge Requests Total** legend entry now totals that period. + +For a custom start and end, or to reload the charts on a timer, refer to [Filters and time range](/en/documentation/platform/real-time-metrics/filters-and-time-range/#time-range). + + + + + +The `tsRange` filter sets the period with `begin` and `end`. To read the last 24 hours with the API, send the same query with `begin` 24 hours before `end`. The operation name says what the range covers: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query TrafficLast24Hours($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 1, filter: { tsRange: { begin: $begin, end: $end } }) { requestsTotal dataTransferredTotal } }","variables":{"begin":"2026-10-01T14:25:25","end":"2026-10-02T14:25:25"}}' +``` + +The API answers `200` with the totals for those 24 hours: + +```json +{ + "data": { + "httpMetrics": [ + { + "requestsTotal": 1985, + "dataTransferredTotal": 149684815.0 + } + ] + } +} +``` + +In this example, the applications served 1,985 requests and 149,684,815 bytes. `dataTransferredTotal` is in bytes, the sum of the data transferred in and out. + + + + + +--- + +## 3. Filter by one host + +A filter keeps only the requests that match it, and every total follows. This stage keeps the requests to the host `www.example.com`. Replace it with a host your workload answers on. + + + + + +To filter the dashboard in Azion Console: + + + + + In the filter row, select the filter icon, whose tooltip reads **Add filter**. + + + + + In **Filter**, select **Host**. + + + + + In **Operator**, select **Equals**. + + + + + Enter `www.example.com` as the value. + + + + + +A chip under the filter row reads `Host equals: www.example.com`. Every chart now shows only the requests to that host, over the last 24 hours. + +To filter by workload instead of host, select the **Domain** field, labeled **Workload** on some accounts, and select the workload from its list. For every field and operator, refer to [Filters and time range](/en/documentation/platform/real-time-metrics/filters-and-time-range/#filters). + + + + + +To filter with the API, add `hostEq` to `filter`, next to `tsRange`. The query keeps the 24-hour range of stage 2: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query TrafficForHost($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 1, filter: { tsRange: { begin: $begin, end: $end }, hostEq: \"www.example.com\" }) { requestsTotal dataTransferredTotal } }","variables":{"begin":"2026-10-01T14:25:25","end":"2026-10-02T14:25:25"}}' +``` + +The API answers `200` with the totals of that host alone: + +```json +{ + "data": { + "httpMetrics": [ + { + "requestsTotal": 982, + "dataTransferredTotal": 114490585.0 + } + ] + } +} +``` + +In this example, the host served 982 of the 1,985 requests of stage 2. For the other operators a filter accepts, refer to [GraphQL queries](/en/documentation/devtools/graphql/queries/#operators). + + + + + +--- +## Next steps + + + + + + diff --git a/src/content/docs/en/pages/main-menu/reference/observe/real-time-metrics/historical-real-time-metrics/historical-real-time-metrics.mdx b/src/content/docs/en/pages/main-menu/reference/observe/real-time-metrics/historical-real-time-metrics/historical-real-time-metrics.mdx deleted file mode 100644 index 0fd3291a56..0000000000 --- a/src/content/docs/en/pages/main-menu/reference/observe/real-time-metrics/historical-real-time-metrics/historical-real-time-metrics.mdx +++ /dev/null @@ -1,221 +0,0 @@ ---- -title: Historical Real-Time Metrics -description: >- - Historical Real-Time Metrics is an Observe product that provides you with real - time access to metrics, through graphs, so you can analyze the events of your - applications and products configured on Azion. -meta_tags: 'real time, edge computing, observe, observability, metrics, data, events' -namespace: docs_products_historical_real_time_metrics -permalink: /documentation/platform/real-time-metrics/historical-real-time-metrics/ ---- - -**Real-Time Metrics** has two versions: **Historical** and **New**. If you want to access data of up to 2 years before the date of October 15th, 2022, [contact the Support team](/en/documentation/support/#3-service-channels) and request access to **Historical Real-Time Metrics**. This version will remain available until the end of 2024, when it'll be discontinued. - -You can already use the [New Real-Time Metrics](/en/documentation/platform/real-time-metrics/) and will be able to continue using it. - -**Historical Real-Time Metrics** is an [Observe](/en/documentation/) product that provides you with real-time access to metrics, through graphs, so you can analyze the events of your applications and products configured on Azion. It also helps you optimize the use of Azion products and how your content is delivered. - -By analyzing data through Real-Time Metrics, you can check and track the behavior of your applications in near real time. Real-Time Metrics gives you the opportunity to: - -- Gain insights on the performance of your application. -- Examine the availability of your content. -- Quantify accesses and traffic to your content. -- See bandwidth savings. -- Find security threats in real time. -- Troubleshoot problems in real time. -- Compare your application's data through different data intervals. - -You can combine your metrics analysis with [Real-Time Events](/en/documentation/platform/real-time-events/) to further inspect your logs. - -### Access - -To access Real-Time Metrics, [contact the Support team](https://tickets.azion.com/en/support/loginen/support/login/new) and request access to **Historical Real-Time Metrics**. You'll receive the access link to the data source you want to analyze. - ---- - -## Data consideration - -When comparing the data displayed on Real-Time Metrics and Azion Billing data, you may find differences. Real-Time Metrics focuses on performance, using an at-most-once approach, while Billing seeks precision, using an exactly-once approach. If you find such differences, you should consider Azion Billing data as the correct one. - -On average, the difference between the two is smaller than 1%. See [Azion Pricing](/en/documentation/fundamentals/pricing/) and the [Billing documentation](/en/documentation/fundamentals/billing-and-subscriptions/) for more information. - ---- - -## Tabs navigation - -After selecting one of the product's tabs, you'll see the available graphs for that specific product according to the data on your account. If you select Data Stream, for example, you'll see graphs related to the streams configured in your account. - -The products also have subtabs, which separate different types of metrics for the same product, and some have several subtabs. The tabs and subtabs are divided as: - -- Data Stream - - Data Streamed - - Data Stream Requests - -- Applications - - Data Transferred - - Requests - - Status Codes - - HTTP Methods - - WAF - - Bandwidth Saving - -- Functions - - Invocations - -- Edge DNS - - Standard Queries - -- Image Processor - - Requests - ---- - -## Filters - -After you select the product you'll be analyzing, you need to configure the filters to fetch data for your graphs. - -On Real-Time Metrics' screen, just before the section with the charts, you find the filters according to the product you've chosen. Find out more about the configurations for each product tab next. - -### Data Stream - -- **Time Range**: dropdown menu to select the period you want to use to exhibit data on your graphs. You can choose between: - - - Last Hour - - Last 3 Hours - - Last 6 Hours - - Last 24 Hours - - Last 3 Days - - Last 7 Days - - Last 15 Days - - Last 30 Days - - Custom - -If you select **Custom** for a time range, you need to manually set up the beginning and ending dates in the two calendar fields. - -After you configure the **Time range**, you can select the **Filter** button to apply your configurations. Your filter configurations apply to all subtabs of the data source even as you change subtabs. - -### Applications - -- **Configurations**: dropdown menu to select the Applications you want to use to exhibit data on your graphs. - -- **Time Range**: dropdown menu to select the period you want to use to exhibit data on your graphs. You can choose between: - - - Last Hour - - Last 3 Hours - - Last 6 Hours - - Last 24 Hours - - Last 3 Days - - Last 7 Days - - Last 15 Days - - Last 30 Days - - Custom - -If you select **Custom** for a time range, you need to manually set up the beginning and ending dates in the two calendar fields. - -After you configure the **Time range**, you can select the **Filter** button to apply your configurations. Your filter configurations apply to all subtabs of the data source, even as you change subtabs. - -### Functions - -- **Functions**: dropdown menu to select the function or functions you want to use to exhibit data on your graphs. - -- **Time Range**: dropdown menu to select the period you want to use to exhibit data on your graphs. You can choose between: - - - Last Hour - - Last 3 Hours - - Last 6 Hours - - Last 24 Hours - - Last 3 Days - - Last 7 Days - - Last 15 Days - - Last 30 Days - - Custom - -If you select **Custom** for a time range, you need to manually set up the beginning and ending dates in the two calendar fields. - -After you configure the **Time range**, you can select the **Filter** button to apply your configurations. - -### Edge DNS - -- **Zones**: dropdown menu to select the zone or zones from your Edge DNS you want to use to exhibit data on your graphs. - -- **Time Range**: dropdown menu to select the period you want to use to exhibit data on your graphs. You can choose between: - - - Last Hour - - Last 3 Hours - - Last 6 Hours - - Last 24 Hours - - Last 3 Days - - Last 7 Days - - Last 15 Days - - Last 30 Days - - Custom - -If you select **Custom** for a time range, you need to manually set up the beginning and ending dates in the two calendar fields. - -After you configure the **Time range**, you can select the **Filter** button to apply your configurations. - -### Image Processor - -- **Time Range**: dropdown menu to select the time period you want to use to exhibit data on your graphs. You can choose between: - - - Last Hour - - Last 3 Hours - - Last 6 Hours - - Last 24 Hours - - Last 3 Days - - Last 7 Days - - Last 15 Days - - Last 30 Days - - Custom - -If you select **Custom** for a time range, you need to manually set up the beginning and ending dates in the two calendar fields. - -After you configure the **Time range**, you can select the **Filter** button to apply your configurations. - ---- - -## Graph's information - -In the second section of Real-Time Metrics, right after the filters, you find all the available graphs for your account. - -After you select a data source and, possibly, subtab, you can analyze your data for each graph. - -Each graph has the following properties: - -![Historical Real-Time Metrics graph properties location on Azion Console's screen.](https://www.azion.com/assets/docs/images/uploads/graph-historical-real-time-metrics.png) - -- 1. **Title**: descriptive name for the graph. -- 2. **Interval**: automatic data time interval to fetch your data. Data can be fetched in intervals of: minutes, hours, or days. -- 3. **CSV**: button to download and export the points presented on the graph according to the data displayed, the time range applied, and the presented interval. -- 4. **Graph series**: representation of data categories. - - Example: in a line graph that shows the number of requests over time, you can have several series, each one representing a different domain. Each series will have data points connected by a line to exhibit how the number of requests varied over time for each domain. -- 5. **Time interval line**: the x-axis of the graph, representing the time period line for the data on the graph. -- 6. **Legend**: reflects and describes data and series from the y-axis. You can select and deselect each legend item to change the data displayed on the graph. - ---- - -## Metrics' monitoring - -To monitor your metrics, you find a set of several graphs with specific data, divided according to data sources. They're divided into tabs: - -**Data Stream** _-_ **Applications** _-_ **Functions** _-_ **Edge DNS** _-_ **Image Processor** - -You can find detailed information about each tab and subtabs and about each of the graphs available on the [New Real-Time Metrics documentation](/en/documentation/platform/real-time-metrics/). - -Navigation between tabs may be different between the Historical and the New versions, but you can try searching for the title of the graph to find the description. - ---- - -## Limits - -When configuring filters, on the fields: - -- Configurations (Applications) -- Functions (Functions) -- Zones (Edge DNS) - -You can choose *up to 4 items* at a time. - - - - diff --git a/src/content/docs/en/pages/main-menu/reference/observe/real-time-metrics/real-time-metrics.mdx b/src/content/docs/en/pages/main-menu/reference/observe/real-time-metrics/real-time-metrics.mdx index 504cd619e9..f19fd7fd7a 100644 --- a/src/content/docs/en/pages/main-menu/reference/observe/real-time-metrics/real-time-metrics.mdx +++ b/src/content/docs/en/pages/main-menu/reference/observe/real-time-metrics/real-time-metrics.mdx @@ -1,705 +1,118 @@ --- title: Real-Time Metrics -description: >- - Real-Time Metrics provides you with real-time access to metrics and helps you - optimize the use of Azion products and how your content is delivered. -meta_tags: >- - real time, edge computing, observe, observability, metrics, data, events, - security +description: Read the traffic, cache, security, function, DNS, and stream metrics of your Azion products as charts in Azion Console or through the GraphQL API. +meta_tags: 'real-time metrics, observe, metrics, dashboards, graphql, observability' namespace: documentation_products_real_time_analytics permalink: /documentation/platform/real-time-metrics/ --- -import Tag from '~/components/webkit/Tag.vue'; -import DocButton from '~/components/webkit/DocButton.vue'; +import DocButton from '~/components/webkit/DocButton.vue' +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' -**Real-Time Metrics** is an [Observe](/en/documentation/) product that provides you with real-time access to metrics, through charts, so you can analyze the events of your applications and products configured on Azion. It also helps you optimize the use of Azion products and how your content is delivered. +A metric is a number computed from many requests over a slice of time, such as a count of requests, a sum of bytes, or the share of content served from cache. A metrics dashboard plots those numbers as charts, one point per minute, hour, or day, so you see how traffic changes without reading each request. A log is the opposite view: one record per request, with its details. -By analyzing data through Real-Time Metrics, you can check and track the behavior of your applications in near real time. Real-Time Metrics gives you the opportunity to: +**Real-Time Metrics** aggregates the metrics that the Azion products serving your traffic generate, and shows them as charts in [Azion Console](https://console.azion.com/) and through the [GraphQL API](/en/documentation/devtools/graphql/). It is an Observe product that creates nothing in your account and has nothing to turn on: it is active on every account, and its charts follow your traffic within minutes. Use Real-Time Metrics to quantify requests and data transferred, see the bandwidth that cache saves, and check the availability and performance of your content through status codes and request times. Use it also to find security threats and bots, count function invocations and DNS queries, troubleshoot a drop or a spike, and compare one period with another. -- Gain insights on the performance of your application. -- Examine the availability of your content. -- Quantify accesses and traffic to your content. -- See bandwidth savings. -- Find security threats in real time. -- Troubleshoot problems in real time. -- Compare your application's data through different data intervals. - -Real-Time Metrics fetches your data and metrics using [Azion GraphQL API](/en/documentation/devtools/graphql/) and generates charts based on its response. The maximum time for data aggregation to occur is **10 minutes**. - -You can combine your metrics analysis with [Real-Time Events](/en/documentation/platform/real-time-events/) to further inspect your logs. - -See the [first steps for Real-Time Metrics](/en/documentation/platform/real-time-metrics/first-steps/). - -## Grafana plugin - -Real-Time Metrics also has an [Azion Grafana plugin](https://github.com/aziontech/grafana-plugin) integration available for local installation. With it, you can use Grafana’s interface to create dashboards and complement your metrics visualization. - -Your dashboards can be created using GraphQL queries. You can use it to view and create: - -- Top X metrics (such as IP addresses or blocked countries). -- Security metrics. -- Customized alerts. -- Specific status codes. - -See how to: - -- [Customize your own dashboard](/en/documentation/guides/platform/observability/azion-plugin-grafana-custom-dash/) -- [Use use a pre-built dashboard to view Data Transferred graphs](/en/documentation/guides/platform/observability/azion-plugin-grafana-pre-built-dash/) + + --- -## Data storage - -Azion stores your metrics' events and logs for 2 years, but the new Real-Time Metrics provides data and metrics starting from **October 15th, 2022**. - -If you want to view metrics for up to 2 years and before October 15th, 2022: - - - ---- - -## Data consideration - -When comparing the data displayed on Real-Time Metrics and Azion Billing data, you may find differences. Real-Time Metrics focuses on performance, using an at-most-once approach, while Billing seeks precision, using an exactly-once approach. If you find such differences, you should consider Azion Billing data as the correct one. - -On average, the difference between the two is smaller than 1%. See [Azion Pricing](/en/documentation/fundamentals/pricing/) and the [Billing documentation](/en/documentation/fundamentals/billing-and-subscriptions/) for more information. - ---- - -## Product choice to view metrics - -**Real-Time Metrics** allows you to analyze your applications' metrics through several products, indicated by separate tabs according to their category. You can choose to visualize your metrics through the following categories: - -- Build -- Secure -- Observe - -After selecting the category you want, you can select a product to view metrics. - -On the **Build** tab, you'll find metrics related to: - -- Applications -- Tiered Cache -- Functions -- Image Processor - -On the **Secure** tab, you'll find metrics related to: - -- WAF -- Edge DNS -- Bot Manager -- Threats Breakdown - -On the **Observe** tab, you'll find metrics related to: - -- Data Stream - -After selecting one of the category tabs and the product tab, you'll see the available charts for that specific product according to the data on your account. If you select Data Stream, for example, you'll see charts related to the streams configured in your account. - -Some products, such as **Applications**, can also have subtabs, which separate different types of metrics for the same product. Each set of charts composes a dashboard. Find out more about each tab, subtab, and charts in the [Metrics' monitoring with charts](#metrics-monitoring-with-charts) section. - -You must subscribe and activate the following products to view their metrics: - -- Data Stream -- Functions -- Edge DNS -- Image Processor -- Tiered Cache -- Bot Manager +## Metrics query + +Every chart is the answer to a GraphQL query. This query reads the total requests and the total data transferred of every application in the account: + +```graphql +query TrafficLast24Hours($begin: DateTime!, $end: DateTime!) { + httpMetrics( + limit: 1 + filter: { tsRange: { begin: $begin, end: $end } } + ) { + requestsTotal + dataTransferredTotal + } +} +``` + +- `httpMetrics` is the dataset, the aggregated metrics of the requests that your applications serve. Each kind of traffic has its own dataset. +- `tsRange` sets the period with `begin` and `end`. Every query must carry a time range, or the API answers `400`. +- `requestsTotal` and `dataTransferredTotal` are computed fields: each holds a total for the whole range. `dataTransferredTotal` is in bytes, the sum of the data transferred in and out. +- The query groups by nothing, so the API returns one row that holds the totals. + +Sent to `https://api.azion.com/v4/metrics/graphql` with a personal token and the variables `{"begin": "2026-10-01T14:25:25", "end": "2026-10-02T14:25:25"}`, the query answers `200`: + +```json +{ + "data": { + "httpMetrics": [ + { + "requestsTotal": 1985, + "dataTransferredTotal": 149684815.0 + } + ] + } +} +``` + +In this example, the applications of the account served 1,985 requests and 149,684,815 bytes in those 24 hours. If you know GraphQL, you know the query model: any GraphQL client that sends a `POST` request with a token reads the same numbers as the Console. To send this query with `curl` and narrow it to one host, refer to the [Real-Time Metrics quickstart](/en/documentation/platform/real-time-metrics/quickstart/). For every field of each dataset, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/). --- -## Data interval +## From traffic to a chart -After you decide which product you'll be analyzing, you need to configure a data interval to fetch data for your charts. +Real-Time Metrics does not collect anything you configure. It reads what the products serving your traffic already record, after Azion aggregates it. -On **Real-Time Metrics'** screen, just before the section with the charts, you find the date interval filter, with two parts: +```mermaid +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "13px"}, "flowchart": {"nodeSpacing": 12, "rankSpacing": 12, "padding": 6, "wrappingWidth": 70, "minNodeWidth": 40, "useMaxWidth": true}}}%% +flowchart LR + Req["Request"] --> P["Azion products"] + P --> Agg["Aggregation"] + Agg --> DS["Datasets"] + DS --> API["GraphQL API"] + API --> Con["Console charts"] + API --> Q["Your queries"] +``` -- **Time range**: options to select the time period you want to use to exhibit data on your charts. By default, it comes with the **Last Hour** range selected, but you can choose between: +1. A client sends a request, and the product that handles it, such as an application or WAF, records it as an event. +2. Azion aggregates the events into metrics per time bucket, such as a count of requests or a sum of bytes. Aggregation takes up to 10 minutes, so the newest points of a chart can still rise. +3. The metrics are stored in datasets, one per kind of traffic, such as `httpMetrics` for the requests of your applications. +4. The GraphQL API at `https://api.azion.com/v4/metrics/graphql` answers queries on those datasets. +5. Each chart in Azion Console sends a query to that same API, so a chart and a query you write read the same numbers. +6. Your own queries, and Grafana dashboards, read the same datasets through the API. - - Last Hour - - Last 24 Hours - - Last 7 Days - - Last 30 Days - - Last 6 Months - -When you select **Last Hour**, Real-Time Metrics automatically refreshes your data every one minute. - -- **Date calendar**: calendar field with the date and time of your chosen time range. When you select a time range, it automatically sets the begin and end dates. If you want to use a different time range, you need to manually set up the beginning and ending dates in the calendar fields. - -The timezone used is the same as the one configured in your user preferences. - -After you configure the **Time range** and **Date calendar** fields, your charts are refreshed to fetch the data related to the new configured data interval. - - +For the path of a request, the size of each point, and how counting differs from Billing, refer to [How Real-Time Metrics works](/en/documentation/platform/real-time-metrics/how-it-works/). --- -## Filters +## Your own charts -**Real-Time Metrics** allows you to filter your analysis, receiving specific fields and values. You can add a single or multiple filters depending on the analysis you want to conduct. +The GraphQL API that every Console chart queries is also the route to charts of your own. You can group, filter, or extend a chart's query over a range the chart does not draw, and plot the result where you choose. - - -:::tip -After you apply a filter, the URL path on Azion Console is updated with an encoded parameter. You can copy and share it with other users so they can view the charts with the same filters applied. -::: +- **From a chart**: **Copy query** in a chart's menu copies the exact query and variables that the chart sends. To run the copied text, refer to [Copy query](/en/documentation/platform/real-time-metrics/filters-and-time-range/#copy-query). +- **From a guide**: worked queries [break down requests by status code](/en/documentation/guides/platform/observability/break-down-requests-by-status-code/), [measure cache offload for a domain](/en/documentation/guides/platform/observability/measure-cache-offload/), [find the top sources of WAF threats](/en/documentation/guides/platform/observability/find-top-waf-threat-sources/), and [query the httpBreakdownMetrics dataset](/en/documentation/guides/platform/observability/query-httpbreakdownmetrics-data-with-graphql/). Cache offload is the share of content that Azion delivers without fetching it from your origin. +- **In Grafana**: the Azion data source plugin queries Real-Time Metrics from a local Grafana instance that allows unsigned plugins. To set it up, refer to [Install the Azion plugin for Grafana](/en/documentation/guides/platform/observability/integrate-grafana/). Then [import the pre-built Grafana dashboard](/en/documentation/guides/platform/observability/azion-plugin-grafana-pre-built-dash/) or [build a custom Grafana dashboard](/en/documentation/guides/platform/observability/azion-plugin-grafana-custom-dash/). Two dashboards also ship as JSON: [Import the Data Transferred dashboard](/en/documentation/guides/platform/observability/data-transferred-dash/) and [Import the Real-Time Metrics dashboard](/en/documentation/guides/platform/observability/metrics-dash/). --- -## Chart view - -On the second section of **Real-Time Metrics**, after the configuration filters, you find all the available charts. - -:::note -The last point of the graph may appear as a downward metric. This occurs because the last data are still being aggregated, and thus appear to be dropping. For example: it's 3:40 PM now and you've requested data for the last 3 days. The data from 3-4 PM is still being calculated and aggregated, so the graph visualization may seem to have drop in the metrics. -::: - -Each chart displays the following properties: +## Scope and limits -- **Title**: descriptive name for the graph. -- **Type of chart**: tag representing who created the chart and to whom it's available for. - - **Azion Chart**: chart displayed by default by Azion's servers. -- **Context menu**: extra options of actions related to the chart. - - **(?) Open Help Center**: opens a Help Center article, which you can use to discover more about each chart and find a few tips and practical examples. - - **Copy Query**: to copy the query of that specific chart to your clipboard. - - **Export CSV**: to download and export the points presented on that specific chart according to the data displayed. - - **Show Mean Line/Hide Mean Line**: to exhibit or stop exhibiting the average value of the chart. Each point of the chart is summed and divided by the total number of points, generating a mean for the data shown on that specific chart and time period. - - **Show Mean Line per series**: to exhibit or stop exhibiting the average value for each data series in the chart. Instead of calculating a single mean for all points, it calculates and overlays a mean line for each individual series, helping to compare trends across different data sets. -- **Description**: a short text that explains what data that specific chart displays. -- **Aggregator**: type of aggregation being used in the query to generate the metrics on the chart. Either `Sum` or `Avg`. -- **Variation tag**: information shown on chart with only one series. It provides a percentage comparing the previous and current values of the chart in the corresponding time period. The tag shows a **↑** if the current value is larger, a **↓** if the previous value was larger, and no sign if the value is the same. Example: if you're using the "Last hour" period and it's 10:00, the chart shows data for the period from 9:00-10:00, and the feedback will show a comparison with the data from 8:00-9:00. The colors indicate whether the metric is improving or worsening based on its direction (increase or decrease). For example, **+10% (green)** in OFFLOAD means the OFFLOAD metric is better when it increases, while MISSED DATA appears in **red** when it increases, indicating the opposite behavior. -- **Graph series**: representation of data categories. - - Example: in a line graph that shows the number of requests over time, you can have several series, each one representing a different domain. Each series will have data points connected by a line to exhibit how the number of requests varied over time for each domain. -- **Tooltip**: information available by hovering the cursor over the graph series, which displays the value and the name of each series of that specific point in a descending order, according to the value. This feature isn't available for viewports smaller than 540px. -- **Time interval line**: the x-axis of the graph, representing the time period line for the data on the graph. -- **Legend**: a list that reflects and describes series and data from the y-axis, based on the chart's aggregation type. You can select and deselect each legend item to change the data displayed on the graph. - -Legends can be displayed differently according to the type of chart and amount of series represented on it. They can appear on the *bottom* of the chart or on the *right side*, and the legend exhibits a maximum of *16 series* per graph. - -:::note -When you use the **Copy Query** button and paste it on the [GraphQL playground](https://console.azion.com/metrics/graphql), you need to move what's exhibited under "VARIABLES" to the "**QUERY VARIABLES**" section, on the bottom of the page. -::: +- **Interfaces**: you read Real-Time Metrics on the **Real-Time Metrics** page of Azion Console, in the **Observe** group of the menu, and through the GraphQL API with a [personal token](/en/documentation/guides/platform/account-and-billing/personal-tokens/). For how the API is structured, refer to [GraphQL API overview](/en/documentation/devtools/graphql/overview/). Grafana reads it through the Azion plugin. The Azion CLI has no metrics command, and Terraform has nothing to manage, because Real-Time Metrics creates no object. +- **Dashboards**: the Console groups the dashboards in three categories, **Build**, **Secure**, and **Observe**, each with one tab per product. **Build** holds [Applications](/en/documentation/platform/applications/), [Tiered Cache](/en/documentation/platform/applications/cache/tiered-cache/), [Functions](/en/documentation/platform/functions/), and [Image Processor](/en/documentation/platform/applications/#image-processor), described in [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/). **Secure** holds [WAF](/en/documentation/platform/firewall/#waf), [Edge DNS](/en/documentation/platform/edge-dns/), [Bot Manager](/en/documentation/platform/firewall/#bot-manager), and **Threats Breakdown**, described in [Secure dashboards](/en/documentation/platform/real-time-metrics/secure-dashboards/). **Observe** holds [Data Stream](/en/documentation/platform/data-stream/), described in [Observe dashboards](/en/documentation/platform/real-time-metrics/observe-dashboards/). A product's dashboard reports data only after that product is active in your account. +- **Controls**: one time range and one set of filters apply to every chart of a dashboard. The range starts at **Last 5 minutes** and reaches at most 730 days back, with no future dates. Filters narrow the charts by a field, such as a host, or by a typed query. A chart's menu copies its query or exports its points as a CSV file. For every control, refer to [Filters and time range](/en/documentation/platform/real-time-metrics/filters-and-time-range/), and for the tasks, refer to [Filter a Real-Time Metrics dashboard](/en/documentation/guides/platform/observability/add-filters-metrics/) and [Export a chart's data and query](/en/documentation/guides/platform/observability/analyze-metrics/). +- **Data**: every value is aggregated, never a single request, and a metric takes up to 10 minutes to aggregate. Each point covers a minute, an hour, or a day, depending on the length of the range. For the range at which each size applies, refer to [Resolution](/en/documentation/platform/real-time-metrics/how-it-works/#resolution). +- **Retention and limits**: most datasets keep 2 years of data. A query returns at most 10,000 rows and selects at most 37 fields. For every bound and the response past it, refer to [Real-Time Metrics limits](/en/documentation/platform/real-time-metrics/limits/). +- **Billing**: Real-Time Metrics is included with the platform at no additional charge, as [Pricing](/en/documentation/fundamentals/pricing/#real-time-metrics) states. It counts each event once or not at all, so its totals can differ from Billing, on average by less than 1%. When they differ, Billing is the reference. For the two counting approaches, refer to [Counting and Billing](/en/documentation/platform/real-time-metrics/how-it-works/#counting-and-billing). +- **Logs and user experience**: Real-Time Metrics shows totals, not the requests behind them. The individual requests, the logs, are in [Real-Time Events](/en/documentation/platform/real-time-events/). To send the logs to a destination outside Azion, use Data Stream. To measure the experience of your real users, use [Edge Pulse](/en/documentation/platform/edge-pulse/), a Real User Monitoring (RUM) product. +- **Help**: [Best practices for Real-Time Metrics](/en/documentation/platform/real-time-metrics/best-practices/) covers which range and which source to trust for a number. [Troubleshoot Real-Time Metrics](/en/documentation/platform/real-time-metrics/troubleshooting/) covers an empty chart, a dropping last point, or totals that differ from Billing. The [glossary](/en/documentation/platform/real-time-metrics/glossary/) defines terms such as offload, dataset, and resolution. --- -## Metrics' monitoring with charts - -In the second section of Real-Time Metrics, right after the data interval filter, you find all the available charts for your account. - -Even after you configure a data interval filter, you can still navigate through tabs and change the product you want to view metrics from. After you select a tab and, possibly, subtab, you can analyze your data for each chart. - -Next, you can find detailed information about each tab and subtabs and about each of the charts available: - -- [Build](#build) - - [Applications](#edge-applications) _-_ [Tiered Cache](#tiered-cache) _-_ [Functions](#edge-functions) _-_ [Image Processor](#image-processor) - -- [Secure](#secure) - - [WAF](#waf) _-_ [Edge DNS](#edge-dns) _-_ [Bot Manager](#bot-manager) - -- [Observe](#observe) - - [Data Stream](#data-stream) - ---- - -## Build - -### Applications - -The **Applications** tab displays metrics related to the accesses of your [Applications](/en/documentation/platform/applications/) configured in your account. You find four subtabs with different charts: [Data Transferred](#data-transferred), [Requests](#requests), [Status Codes](#status-codes), and [Bandwidth Saving](#bandwidth-saving). - -#### Data Transferred - -Find out more about each chart: - -import EdgeCaching from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/edge-caching/index.md" - - - -**Data Transferred In** flow: - -![Cache graph information flow for Data Transferred In, representing data being transferred from the end user to the edges and from the edges to the client’s origin.](/assets/docs/images/uploads/edge-applications-in.png) - -**Data Transferred Out** flow: - -![Cache graph information flow for Data Transferred Out, representing data being transferred from the client’s origin to the edges and from the edges to the end user.](/assets/docs/images/uploads/edge-applications-out.png) - -**Data Transferred** flow: - -![Cache graph information flow for Data Transferred, representing all data being transferred from both Data Transferred In and Data Transferred Out.](/assets/docs/images/uploads/edge-applications.png) - -If you have [Tiered Cache](/en/documentation/platform/applications/cache/tiered-cache/) enabled, your Cache graph will exhibit: - -- **Data Transferred In**: data transferred from the end user to the edges, and from the edges to the tiered cache layer. - -![Cache with Tiered Cache enabled graph information flow for Data Transferred In, representing data being transferred from the end user to the edges and from the edges to the tiered cache layer.](/assets/docs/images/uploads/tiered-cache-enabled-edge-applications-in.png) - -- **Data Transferred Out**: data transferred from the tiered cache layer to the edges, and from the edges to the end user. - -![Cache with Tiered Cache enabled graph information flow for Data Transferred Out, representing data being transferred from the tiered cache layer to the edges and from the edges to the end user.](/assets/docs/images/uploads/tiered-cache-enabled-edge-applications-out.png) - -- **Data Transferred Total**: all data that was transferred in the process; value of Data Transferred In + Data Transferred Out. - -![Cache with Tiered Cache enabled graph information flow for Data Transferred, representing all data being transferred from both Data Transferred In and Data Transferred Out.](/assets/docs/images/uploads/tiered-cache-enabled-edge-applications.png) - -import EdgeOffload from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/edge-offload/index.md" - -import SavedData from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/saved-data/index.md" - -import MissedData from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/missed-data/index.md" - -import TotalBandwidthUsage from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/total-bandwidth-usage/index.md" - -import BandwidthOffloaded from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/bandwidth-offloaded/index.md" - -import SavedBandwidth from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/saved-bandwidth/index.md" - -import MissedBandwidth from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/missed-bandwidth/index.md" - - - - - - - - - -#### Requests - -Find out more about each chart: - -import TotalRequests from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/total-requests/index.md" - -import RequestsOffloaded from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/requests-offloaded/index.md" - -import SavedRequests from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/saved-requests/index.md" - -import MissedRequests from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/missed-requests/index.md" - -import TotalRequestsPerSecond from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/total-requests-per-second/index.md" - -import RequestsPerSecondOffloaded from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/requests-per-second-offloaded/index.md" - -import SavedRequestsPerSecond from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/saved-requests-per-second/index.md" - -import MissedRequestsPerSecond from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/missed-requests-per-second/index.md" - -import RequestsByMethod from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/requests-by-method/index.md" - - - - - - - - - - - -###### Average Request Time - -The **Average Request Time** graph shows the average duration of requests over a specified period. It measures how long, on average, a server or application takes to process and respond to a request. -With this information, you can quickly identify trends and patterns in request processing times, such as bottlenecks or issues requiring attention. If you identify these issues, you can address them with solutions such as: - -- [Improve your database queries](/en/documentation/devtools/graphql/queries/) for optimal performance. -- [Define cache policies](/en/documentation/guides/application-performance/cache-and-purge/cache-settings/) and [Advanced Cache Key](/en/documentation/guides/application-performance/cache-and-purge/advanced-cache-key/). -- [Configure multiple origins with load balancing algorithms](/en/documentation/guides/application-performance/availability/multiple-origins/). - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses averages of seconds to show your data. Example: 1.7/s - -### Practical example - -You can use the Metrics filters to refine your analysis by focusing on specific criteria, such as host, status code, request method, or geographic location. For example, in the **Filter** section, you can use **Host**, **Equals**, and **example.com** to see the average request time for each host. - -###### Requests by Scheme - -The **Requests by Scheme** graph displays the total number of requests over the selected period, categorized by scheme. - -It breaks down traffic into: - -- **HTTP**: requests transmitted without encryption, which may be vulnerable to interception. -- **HTTPS**: requests secured with encryption, ensuring data integrity and confidentiality. - -With this information, you can analyze how requests are being handled and identify trends in secure (encrypted) versus non-secure traffic. Read more on [How to configure HTTP and HTTPS ports for origins and delivery address](/en/documentation/guides/application-development/getting-started/configure-ports/). - -#### Status Codes - -Find out more about each chart: - -import HttpStatusCodes2xx from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/http-status-codes-2xx/index.md" - -import HttpStatusCodes3xx from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/http-status-codes-3xx/index.md" - -import HttpStatusCodes4xx from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/http-status-codes-4xx/index.md" - -import HttpStatusCodes5xx from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/http-status-codes-5xx/index.md" - - - - - - -###### Requests by Status and Upstream Status - -The **Requests by Status and Upstream Status** table shows the total number of processed requests, categorized by both Status Codes (responses generated by your application or infrastructure) and Upstream Status Codes (responses returned by upstream servers or external services). - -The table is divided into: - -- **Status**: indicates how requests were processed at the edge, such as successful responses (2XX), client errors (4XX), or server errors (5XX). -- **Upstream Status**: provides insights into responses from external services or backend servers, helping identify connectivity issues, timeouts, or failures in upstream dependencies. -- **Total**: the sum of the requests according to the Status and Upstream Status. - -By analyzing this graph, you can detect trends in request handling, pinpoint sources of errors, and optimize your infrastructure for better performance and reliability. - -The graph includes the 10 most frequent request cases, but you can apply filters to access more specific information. - -#### Bandwidth Saving - -import BandwidthSaving from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/bandwidth-saving/bandwidth-saving/index.md" - - - -#### Requests Breakdown - -###### IP Address Information - -The **IP Address Information** table provides an overview of the distribution of requests based on different geographical and network attributes, breaking them down by: - -- **Remote Address**: individual IP addresses making requests. -- **ASN**: Autonomous System Number, the network operator or organization responsible for the IP address. -- **Country**: the specific country from which the requests are coming. -- **Region**: the geographic location from which the requests originate. -- **Total**: the total number of requests associated with a specific Remote Address. - -By examining this data, you can identify regional traffic patterns, detect unusual activity from specific countries or networks, and take targeted security actions. For example, you can create a [network list based on user’s IP addresses or geolocation](/en/documentation/guides/application-security/bots-and-network/blocklists-ip-addresses-edge/) to block these requests. - -The table displays the 10 most frequently used Remote Addresses, but you can apply filters to access more specific information. - -### Tiered Cache - -The Tiered Cache tab displays metrics related to the data of your applications using [Tiered Cache](/en/documentation/platform/applications/cache/tiered-cache/) configured in your account. - -Find out more about each chart: - -import L2Caching from "~/includes/docs_help_center/en/real-time-metrics/l2-caching/caching-offload/l2-caching/index.md" - - - -**Tiered Cache** flow: - -![Tiered Cache graph information flow for Tiered Cache, representing all data being transferred from both Tiered Cache In and Tiered Cache Out.](/assets/docs/images/uploads/tiered-cache.png) - -**Tiered Cache In** flow: - -![Tiered Cache graph information flow for Tiered Cache In, representing data being transferred from the edges to the tiered cache layer and from Tiered Cache to the client’s origin.](/assets/docs/images/uploads/tiered-cache-in.png) - -**Tiered Cache Out** flow: - -![Tiered Cache graph information flow for Tiered Cache Out, representing data being transferred from the client’s origin to the tiered cache layer and from the Tiered Cache to the edges.](/assets/docs/images/uploads/tiered-cache-out.png) - -import L2Offload from "~/includes/docs_help_center/en/real-time-metrics/l2-caching/caching-offload/l2-offload/index.md" - - - -### Functions - -The **Functions** tab displays metrics related to the invocations of the [Functions](/en/documentation/platform/functions/) configured in your account. - -Find out more about the chart: - -import TotalInvocations from "~/includes/docs_help_center/en/real-time-metrics/edge-functions/invocations/total-invocations/index.md" - - - -### Image Processor - -The **Image Processor** tab displays metrics related to the requests made to your images processed through [Image Processor](/en/documentation/platform/applications/#image-processor) configured in your account. - -Find out more about each chart: - -import TotalRequestsIp from "~/includes/docs_help_center/en/real-time-metrics/image-processor/requests/total-requests/index.md" - -import TotalRequestsPerSecondIp from "~/includes/docs_help_center/en/real-time-metrics/image-processor/requests/total-requests-per-second/index.md" - - - - ---- - -## Secure - -### WAF - -The **WAF** tab displays metrics related to [threats protected by WAF](/en/documentation/platform/firewall/#waf) in your account. - -Find out more about each chart: - -import ThreatsVsRequests from "~/includes/docs_help_center/en/real-time-metrics/waf/threats/threats-vs-requests/index.md" - -import CrossSiteScriptingXssThreats from "~/includes/docs_help_center/en/real-time-metrics/waf/threats/cross-site-scripting-xss-threats/index.md" - -import RemoteFileInclusionRfiThreats from "~/includes/docs_help_center/en/real-time-metrics/waf/threats/remote-file-inclusion-rfi-threats/index.md" - -import SqlInjectionThreats from "~/includes/docs_help_center/en/real-time-metrics/waf/threats/sql-injection-threats/index.md" - -import OtherThreats from "~/includes/docs_help_center/en/real-time-metrics/waf/threats/other-threats/index.md" - - - - - - - -###### Top WAF Threat Requests by Country Pie Graph - -The **Top WAF Threat Requests by Country** pie graph shows the distribution of requests identified as threats by the Web Application Firewall (WAF). - -It breaks down the data by country, highlighting the top sources of flagged requests. The graph displays percentages, allowing you to quickly assess which regions generate the most WAF-detected threats over the selected period. - -You can use this alongside the bar graph that shows the total number of detected threats, providing a deeper analysis to identify trends and patterns in the origins of the threats. - -With this information, you can set up security policies. For example, you can create a [network list based on the user's geolocation](/en/documentation/guides/application-security/bots-and-network/blocklists-ip-addresses-edge/) to block these requests. - -###### Top WAF Threat Requests by Country Bar Graph - -The **Top WAF Threat Requests by Country** bar graph shows the distribution of requests identified as threats by the Web Application Firewall (WAF). - -It breaks down the data by country, highlighting the top sources of flagged requests. The graph displays the number of threats by country, allowing you to quickly assess which regions generate the most WAF-detected threats over the selected period. - -You can use this alongside the pie graph that displays the distribution of requests identified as threats in percentages, providing a deeper analysis to identify trends and patterns in the origins of the threats. - -With this information, you can set up security policies. For example, you can create a [network list based on the user’s geolocation](/en/documentation/guides/application-security/bots-and-network/blocklists-ip-addresses-edge/) to block these requests. - -###### WAF Threat Requests by Family Attack - -The **WAF Threat Requests by Family Attack** graph displays the total number of requests identified as threats by the WAF, categorized by attack family over the selected period. - -> The graph is divided into: -> -> - **SQL**: attempts to exploit SQL injection vulnerabilities to manipulate database queries. -> - **SQL, XSS**: requests that combine SQL injection with Cross-Site Scripting (XSS) attacks. -> - **SQL, TRAVERSAL**: attacks leveraging both SQL injection and path traversal techniques to access restricted files or directories. -> - **OTHERS, SQL**: less common SQL-related attack patterns grouped. -> - **RFI**: Remote File Inclusion attacks that attempt to load external malicious scripts. -> - **TRAVERSAL**: directory traversal attempts to access unauthorized files or directories. -> - **SQL, RFI**: attacks that combine SQL injection and Remote File Inclusion techniques. -> - **SQL, XSS, RFI**: multi-vector attacks that leverage SQL injection, Cross-Site Scripting (XSS), and Remote File Inclusion (RFI). -> - **OTHERS**: attack patterns that don’t fit into the predefined categories. - -This graph helps you quickly identify which attack families are generating the most flagged requests, allowing for a clearer analysis of threat patterns and setting up policies to contain these threats. For example, by [creating a WAF Rules Set](/en/documentation/guides/application-security/firewall-and-waf/create-waf-rule-set/), you can protect your Applications against specific threat families. - -> **How does a WAF Rules Set work?** -> -> Each threat receives a score and it's processed according to the sensitivity level set. -> -> If there's more than one case for the same threat type, the score will increase. -> -> After creating a rule set, you must [create a Rules Engine rule](/en/documentation/guides/application-security/firewall-and-waf/create-waf-rule-set/) to execute the criteria and behavior. For example, if a request has a high SQL score (criteria), it'll be dropped (behavior). - -###### WAF Threat Requests by Host - -The **WAF Threat Requests by Host** graph displays the total number of requests identified as threats by the WAF, categorized by the top hosts generating the most flagged requests over the selected period. - -This graph helps you quickly identify which hosts are responsible for the highest volume of detected threats. By analyzing this data, you can take targeted security measures to mitigate risks, protect your applications, and take proactive steps to mitigate potential risks. For example: - -- [Analyze flagged request logs](/en/documentation/platform/firewall/) to identify patterns or potential vulnerabilities that need addressing. -- [Adjust WAF Rules Sets](/en/documentation/guides/application-security/firewall-and-waf/create-waf-rule-set/) to strengthen filtering policies to block or challenge suspicious requests from high-risk hosts. -- [Implement rate limiting](/en/documentation/platform/firewall/rules-engine/#set-rate-limit) and restrict the number of requests from specific hosts to prevent abuse. -- [Define blocklists](/en/documentation/guides/application-security/bots-and-network/blocklists-ip-addresses-edge/) with identified threat sources to prevent repeated attacks. - -### Edge DNS - -The **Edge DNS** tab displays metrics related to [queries made to the DNS](/en/documentation/platform/edge-dns/) configured in your account. - -Find out more about the chart: - -The Total Queries graph shows you the total amount of queries received by your DNS configured on [Edge DNS](/en/documentation/platform/edge-dns/). - -By using Edge DNS, your domains are hosted and managed on Azion. Then, whenever a query is made to your DNS during the period you've selected in the time range, the graph displays it. - -### Bot Manager - -The **Bot Manager** tab displays metrics related to Bot Manager activity. It has two sections: **Overview** and **Breakdown**. - -:::note -To visualize these graphs, you must be subscribed to Azion Bot Manager. Contact the [Sales team](https://www.azion.com/en/contact/) for more details on the subscription. -::: - -Find out more about each chart: - -#### Overview - -##### Bad Bot Hits - -The Bad Bot Hits graph shows the total number of requests identified as bad bots within the defined period. - -Azion Bot Manager analyzes incoming requests and gives them a score. If the score is equal to or greater than the predetermined threshold you set when configuring Bot Manager, the request is considered a bad bot, and the defined action is executed. Otherwise, the request is processed. - -##### Good Bot Hits - -The Good Bot Hits graph shows the number of requests identified as good bots within the defined period. - -Azion Bot Manager analyzes incoming requests and gives them a score. If the score is equal to or greater than the predetermined threshold you set when configuring Bot Manager, the request is considered a bad bot, and the defined action is executed. Otherwise, the request is processed normally. Good bots are classified as allowed traffic, and their requests proceed as usual. - -##### Bot Hits - -The Bot Hits graph shows the total number of requests identified as bots within the defined period. A request is considered a bot when it exhibits non-human characteristics or behavior, including abnormal patterns, missing or unusual request headers, suspicious user-agent strings, requests from IP addresses with a history of malicious activity, failing challenges such as CAPTCHAs, or automation tools. - -In this context, bots can be either good or bad. Good bots, like search engine crawlers, are permitted. Bad bots, however, engage in harmful activities like scraping data, launching attacks, or overloading systems. - -Azion Bot Manager analyzes incoming requests and gives them a score. If the score is equal to or greater than the predetermined threshold you set when configuring Bot Manager, the request is considered a bad bot, and the defined action is executed. Otherwise, the request is processed. - -##### Transactions - -The Transactions graph shows a sum referring to the total number of requests evaluated by Azion Bot Manager. - -##### Bot Traffic - -The Bot Traffic graph shows the evolution of bot traffic over time. It presents historical data by identifying the traffic into: - -- **Legitimate**: the request wasn't identified as an attack and there's enough data to ensure it isn't an attack, being considered legitimate human users. -- **Bad Bot**: the request reached the score threshold or it was identified as an attack. -- **Good Bot**: the request wasn't identified as an attack and matched any of the commonly used good bots, such as search engines. -- **Under Evaluation**: the request wasn't identified as a bot, but there isn't enough data to ensure it isn't an attack, being considered suspicious access. - -It helps to identify periods of suspicious activity and allows you to detect patterns and anomalies. By hovering over the lines in the graph, a card will appear with more detailed information about the date, time, and the number of bots in each category. - -###### Top Bot Traffic - -The **Top Bot Traffic** graph is a pie chart that displays the distribution of bot traffic in percentages over the selected period. It categorizes traffic into: - -- **Legitimate**: the request wasn't identified as an attack and there's enough data to ensure it isn't an attack, being considered legitimate human users. -- **Bad Bot**: the request reached the score threshold or it was identified as an attack. -- **Good Bot**: the request wasn't identified as an attack and matched one of the commonly used good bots, such as search engines. -- **Under Evaluation**: the request wasn't identified as a bot, but there isn't enough data to ensure it isn't an attack, being considered suspicious access. - -This graph helps you quickly assess the proportion of bot traffic, detect anomalies, and identify trends in malicious or suspicious activity. - -By hovering over the graph, a card will appear with the total number of requests for each category. - -##### Top Bot Action - -The Top Bot Action graph shows the actions performed by Azion Bot Manager for accesses identified as bots. - -These actions could be: - -- **Allow**: allowed the continuation of the request. If the score is less than the predetermined threshold, the request is processed, being `allow` the default action. -- **Deny**: delivered a standard **Status Code 403** response. -- **Drop**: terminated the request without a response to the user. -- **Redirect**: allowed the request to be redirected to a new URL/location when the security threshold is reached, including CAPTCHA challenges. -- **Custom_html**: delivered customized HTML content to the user in a threshold violation. -- **Random_delay**: made the function wait for a random period between *1 and 10 seconds* before allowing the request to proceed. -- **Hold_connection**: held the request, keeping the connection open for *1 minute* before dropping it. - -##### Bot CAPTCHA line graph - -The Bot CAPTCHA metric refers to the results of the challenge returned for requests classified as bots. This metric is presented in two graphics: a pie and a line graph. - -In the case of the line graph, it displays the traffic identified as bots over time, being: - -- **Solved**: if the challenge was solved. In this case, the bot completed the CAPTCHA challenge, providing the correct response and proceeding. -- **Not Solved**: if the challenge wasn't solved or was solved incorrectly. In this case, the bot either failed to complete the challenge provided an incorrect response, or didn't attempt to solve it, triggering the defined action for blocked or suspicious bots. - -By hovering over the lines in the graph, a card will appear with more detailed information about the date and time, as well as the number of bots that either passed or failed the CAPTCHA. - -##### Top Bot CAPTCHA Pie Graph - -The Bot CAPTCHA metric refers to the results of the challenge returned for requests classified as bots. This metric is presented in two graphics: a pie and a line graph. - -In the case of the pie graph, it displays the percentage of bots that either passed or failed the CAPTCHA, being: - -- **Solved**: if the challenge was solved. In this case, the bot completed the CAPTCHA challenge, providing the correct response and proceeding. -- **Not Solved**: if the challenge wasn't solved or was solved incorrectly. In this case, the bot either failed to complete the challenge provided an incorrect response, or didn't attempt to solve it, triggering the defined action for blocked or suspicious bots. - -It helps to adjust the difficulty or frequency of challenges to improve bot detection. It's also useful for optimizing user experience and the effectiveness in bot mitigation. - -##### Top Bot Classifications - -The Top Bot Classifications graph shows you the *sum* of requests classified according to the tactics used and the purpose of the bots, including Crawling, Brute Force, Scraping, Bad Bot Signatures, Malicious Browser Behavior, Scripted Bots, Enterprise Bots, Reputation Intelligence, Monitoring Bots, and Malicious Intent Detected, among others. - -##### Bot Activity Map - -The Bot Activity Map displays the geographic origin of bot attacks. - -Countries are color-coded based on the number of detected bot attacks: - -- **Red**: more than 1,000,000 requests. -- **Light red**: between 100,000 and 1,000,000 requests. -- **Orange**: between 10,000 and 99,999 requests. -- **Light orange**: between 1,000 and 9,999 requests. -- **Yellow**: between 1 and 999 requests. - -This information helps you identify regional patterns and implement geo-blocking and other region-specific mitigation strategies. - -#### Breakdown - -##### Impacted URLs - -The Impacted URLs graph shows the total number of distinct URLs bots request. - -##### Top Impacted URLs - -The Top Impacted URLs graph shows the total number of requests detected as bots, broken down by the most affected URLs. - -This allows you to identify which URLs are most frequently targeted by bots, empowering you to analyze patterns and define more protective measures. - -##### Top Bad Bot IPs - -The Top Bad Bot IPs graph shows the total number of requests detected as bad bots from different IP addresses, listing those with the highest activity. - -You can use this data to: - -- Identify IP addresses frequently used by bad bots to attack your site. -- Discover trends and patterns in bad bot activity. -- Block or limit traffic from risky IP addresses. -- Gain insights to respond quickly to bad bots attacks. - -### Threats Breakdown - -###### Top WAF Threat Requests by IP - -The **Top WAF Threat Requests by IP** graph shows the sum of requests identified as threats by WAF, broken down by the top IP addresses. It displays the total number of requests detected as threats for each IP. - -With this information, you can quickly identify your traffic and focus on creating policies to stop the biggest threats. For example, you can create a [network list based on user's IP addresses](/en/documentation/guides/application-security/bots-and-network/blocklists-ip-addresses-edge/) to block these requests. - -> For a more detailed view of the threats occurring against your domains, see your logs through [Real-Time Events](/en/documentation/platform/real-time-events/). - ---- - -## Observe - -### Data Stream - -The Data Stream tab displays metrics related to the data and requests of the [stream](/en/documentation/platform/data-stream/) configured in your account. - -Find out more about each chart: - -import TotalDataStreamed from "~/includes/docs_help_center/en/real-time-metrics/data-streaming/requests/total-data-streamed/index.md" - -import TotalRequestsDts from "~/includes/docs_help_center/en/real-time-metrics/data-streaming/requests/total-requests/index.md" - - - - ---- - -## Limits - -:::tip -**Increase limits** \ -You can request to increase the limits based on your plan. Contact the [technical support team](/en/documentation/support/) to request it. -::: - -These are the **default limits**: +## Next steps -| Scope | Limit | -| ------- | ----- | -| Log retention | 24 months | -| UI queries | 120 requests per minute | -| GraphQL API data transferred | 10,000 lines | -| GraphQL API maximum fields | 35 fields | -| GraphQL API maximum payload | 5 GB | -| GraphQL API queries | 120 requests per minute | + + + + + + diff --git a/src/content/docs/en/pages/main-menu/reference/secure/edge-dns/edge-dns.mdx b/src/content/docs/en/pages/main-menu/reference/secure/edge-dns/edge-dns.mdx index 69ca72d84e..4dd3724470 100644 --- a/src/content/docs/en/pages/main-menu/reference/secure/edge-dns/edge-dns.mdx +++ b/src/content/docs/en/pages/main-menu/reference/secure/edge-dns/edge-dns.mdx @@ -231,7 +231,7 @@ To confirm your DNS zone is processing requests correctly, use the following dia Track DNS query patterns and identify potential issues using Azion's Observe products: -- **[Real-Time Metrics](/en/documentation/platform/real-time-metrics/#edge-dns)**: View aggregated charts showing query volumes, response codes, and geographic distribution over time. +- **[Real-Time Metrics](/en/documentation/platform/real-time-metrics/secure-dashboards/#edge-dns)**: View aggregated charts showing query volumes, response codes, and geographic distribution over time. - **[GraphQL API](/en/documentation/devtools/graphql/features/#datasets)**: Query raw and aggregated DNS data for custom analysis and integration with monitoring tools. diff --git a/src/content/docs/en/pages/main-menu/release-notes/release-notes.mdx b/src/content/docs/en/pages/main-menu/release-notes/release-notes.mdx index ab3da502cc..a31d4eda9c 100644 --- a/src/content/docs/en/pages/main-menu/release-notes/release-notes.mdx +++ b/src/content/docs/en/pages/main-menu/release-notes/release-notes.mdx @@ -1457,7 +1457,7 @@ Read more on [Real-Time Events](/en/documentation/platform/real-time-events/) an You can now view metrics related to **Bot Manager** activity through the Real-Time Metrics interface. This new dashboard provides a complete view with two sections: Overview and Breakdown. It displays metrics for monitoring traffic, bot hits, common actions, impacted URLs, and requests flagged as bad bots from different IP addresses, among other metrics. -Check on [Metrics' monitoring charts](/en/documentation/platform/real-time-metrics/#metrics-monitoring-with-charts). You can also [query Bot Manager data with GraphQL API](/en/documentation/guides/platform/observability/query-bot-manager-data-with-graphql/). +Check on [Metrics' monitoring charts](/en/documentation/platform/real-time-metrics/secure-dashboards/#bot-manager). You can also [query Bot Manager data with GraphQL API](/en/documentation/guides/platform/observability/query-bot-manager-data-with-graphql/). --- diff --git a/src/content/docs/en/pages/observe-journey/data-stream/troubleshoot/understand-metrics.mdx b/src/content/docs/en/pages/observe-journey/data-stream/troubleshoot/understand-metrics.mdx index 33655b593f..6b45fb30d2 100644 --- a/src/content/docs/en/pages/observe-journey/data-stream/troubleshoot/understand-metrics.mdx +++ b/src/content/docs/en/pages/observe-journey/data-stream/troubleshoot/understand-metrics.mdx @@ -20,7 +20,7 @@ Once you [create a stream](/en/documentation/guides/platform/observability/use-d To monitor how Data Stream streams your logs: - + diff --git a/src/content/docs/en/pages/observe-journey/real-time-events/integrations/integrate-grafana.mdx b/src/content/docs/en/pages/observe-journey/real-time-events/integrations/integrate-grafana.mdx index c8a405c4c0..bf4421e111 100644 --- a/src/content/docs/en/pages/observe-journey/real-time-events/integrations/integrate-grafana.mdx +++ b/src/content/docs/en/pages/observe-journey/real-time-events/integrations/integrate-grafana.mdx @@ -1,33 +1,93 @@ --- -title: How to integrate Azion with Grafana +title: Install the Azion plugin for Grafana description: >- - Integrate with the Azion data source plugin on Grafana to create and visualize - charts and tables. -meta_tags: 'azion, edge, observe, observability, logs, grafana, analytics' + Install the Azion data source plugin on a local Grafana instance and connect + it to your Azion account with a personal token. +meta_tags: 'grafana, plugin, real-time metrics, real-time events, data source' namespace: docs_integrate_grafana permalink: /documentation/guides/platform/observability/integrate-grafana/ --- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' -The Azion data source plugin on Grafana allows you to visualize the data from your existing applications on Azion on a Grafana dashboard with charts and tables. It queries data from [Real-Time Metrics](/en/documentation/platform/real-time-metrics/) and [Real-Time Events](/en/documentation/platform/real-time-events/), which use the [GraphQL APIs](/en/documentation/devtools/graphql/overview/). +You can install the Azion data source plugin on a local Grafana instance and connect it to your Azion account from Grafana. The plugin shows data from your applications on Azion as charts and tables in Grafana dashboards. It reads [Real-Time Metrics](/en/documentation/platform/real-time-metrics/) and [Real-Time Events](/en/documentation/platform/real-time-events/) through the [GraphQL API](/en/documentation/devtools/graphql/overview/), and you build each dashboard from GraphQL queries. + +Grafana dashboards complement the charts that Real-Time Metrics shows in Azion Console. Use them for top X metrics such as IP addresses or blocked countries, security metrics, specific status codes, and customized alerts. + +--- + +## Prerequisites + +- An Azion account. To create one, go to the [Azion Console sign-up page](https://console.azion.com/signup). +- A personal token for your account. To create one, refer to [Personal tokens](/en/documentation/guides/platform/account-and-billing/personal-tokens/). +- One or more [applications](/en/documentation/platform/applications/) on your account, with traffic. +- A Grafana instance that you run locally. For Grafana itself, refer to [Grafana](https://grafana.com/). --- -## Requirements +## Install the plugin + +The Azion plugin installs on a local Grafana instance, and that instance must allow unsigned plugins. The plugin repository holds the installation instructions. -To use the Azion data source plugin, you need: +To install the plugin on your local Grafana instance: -- An [Azion account](https://console.azion.com/signup). -- A [personal token](/en/documentation/fundamentals/personal-tokens/) to authenticate your account. -- One or more [applications](/en/documentation/platform/applications/) created on your account. -- [Access to Grafana](https://grafana.com/). +Follow the local installation instructions in the [Azion plugin repository](https://github.com/aziontech/grafana-plugin/blob/dev/README.md#install-azion-plugin-on-local-grafana-install-locally). The repository itself is [aziontech/grafana-plugin](https://github.com/aziontech/grafana-plugin). + +After the installation, the Azion plugin is available in the plugin list of your Grafana instance. --- -## Installing the plugin on Grafana +## Create the Azion data source + +A data source connects the Azion plugin to your account. Grafana authenticates every query of the data source with your personal token. + +To create the data source in Grafana: + + + + + In the Grafana menu, go to **Administration** > **Plugins**. + + + -Currently, to use the Azion data source plugin, you must install it locally and enable your account to use unsigned plugins. See the documentation on [the plugin's GitHub repository](https://github.com/aziontech/grafana-plugin/blob/dev/README.md#install-azion-plugin-on-local-grafana-install-locally) for a step-by-step on how to install it. + In **Search**, enter `Azion`. + + + + + + Grafana opens the configuration page of the new data source. + + + + + In the **Settings** tab, enter a descriptive **Name**. + + + + + In **Personal Token**, enter the personal token of your Azion account. + + + + + Select **Save & test**. Grafana saves the data source and runs a quick test of the authentication. + + + + +The authentication test passes, and the Azion data source is saved in your Grafana instance. Your Grafana dashboards use it to query Real-Time Metrics and Real-Time Events. + +--- -:::note -Azion focuses on an on-premise approach. This plugin is only available with local instances. -::: +## Next steps + + + + + + diff --git a/src/content/docs/en/pages/observe-journey/real-time-metrics/integrations/grafana-plugin-custom-dash.mdx b/src/content/docs/en/pages/observe-journey/real-time-metrics/integrations/grafana-plugin-custom-dash.mdx index a7b1e9e8b4..89c14cebcc 100644 --- a/src/content/docs/en/pages/observe-journey/real-time-metrics/integrations/grafana-plugin-custom-dash.mdx +++ b/src/content/docs/en/pages/observe-journey/real-time-metrics/integrations/grafana-plugin-custom-dash.mdx @@ -1,64 +1,152 @@ --- -title: "Customize a Grafana Dashboard with Azion Plugin" -description: >- - The Azion data source plugin on Grafana allows you visualize the data from - your existing applications on Azion on a Grafana dashboard. -meta_tags: 'azion, edge, observe, observability, logs, grafana, analytics' +title: Build a custom Grafana dashboard +description: Add a Grafana panel that plots Real-Time Metrics data through the Azion data source, map its response fields, and save the dashboard. +meta_tags: 'grafana, azion plugin, dashboard, graphql, real-time metrics' namespace: docs_plugin_grafana_customize permalink: /documentation/guides/platform/observability/azion-plugin-grafana-custom-dash/ --- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' -import DocButton from '~/components/webkit/DocButton.vue'; +You can build a Grafana dashboard of your own, with panels that send GraphQL queries to [Real-Time Metrics](/en/documentation/platform/real-time-metrics/) through the Azion data source plugin. Each panel plots the data you choose in its query. To import the ready-made Data Transferred dashboard instead, refer to [Import the pre-built Grafana dashboard](/en/documentation/guides/platform/observability/azion-plugin-grafana-pre-built-dash/). -With the Azion data source plugin on Grafana, you can customize your own dashboard to visualize the data you need. +## Prerequisites - +- A local Grafana instance with the Azion plugin installed and an Azion data source created. To set up both, refer to [Install the Azion plugin for Grafana](/en/documentation/guides/platform/observability/integrate-grafana/). +- An [application](/en/documentation/platform/applications/) that served requests in the range the panel plots. --- -## Customizing a dashboard on Grafana +## Add a panel that queries Real-Time Metrics -After [installing a Grafana instance locally](https://github.com/aziontech/grafana-plugin/blob/dev/README.md#install-azion-plugin-on-local-grafana-install-locally) on your machine and authorizing the Azion plugin, open it. +A panel holds one GraphQL query, and the Azion data source sends it to the Real-Time Metrics API. The query on this page reads the `httpMetrics` dataset, which records the requests of your applications. It returns the data transferred per minute over 24 hours: -Follow the next steps: +```graphql +query DataTransferredOverTime { + httpMetrics( + limit: 2000 + filter: { tsRange: { begin: "2026-10-01T14:25:25.000Z", end: "2026-10-02T14:25:25.000Z" } } + groupBy: [ts] + orderBy: [ts_ASC] + ) { + ts + dataTransferredIn + dataTransferredOut + dataTransferredTotal + } +} +``` -1. On the left-side menu, click on **Dashboards**. The dashboard page opens. -2. Next to the search bar, click **New** > **New Dashboard**. -3. On the **Add panel** card, select **Add a new panel**. -4. On the second section of the page, below the preview, on **Data source** dropdown menu, select **Azion**. -5. On the code box, add the query you want to use. - - See the [GraphQL API guides](/en/documentation/devtools/graphql/overview/) for a few examples of queries. +Replace the `begin` and `end` values with the range you want to plot. Without `limit`, the API returns 10 rows, so `limit: 2000` keeps every minute of a 24-hour range. -The five fields below can be used to complete your setup depending on what type of visualization you're using and what you want to see on your graphs: +The query returns one row for each minute that had traffic, in time order: -- **Data path**: add the value **Metrics**. -- **Time path**: inform a timestamp. The field is dot-delimited. -- **Time format**: inform a time format in [moment.js format](https://momentjs.com/docs/#/parsing/string/). -- **Group by**: use the field you want to use to group your data aggregation. -- **Alias by**: use to change the value and name of a field shown in the legend. +```json +{ + "data": { + "httpMetrics": [ + { + "ts": "2026-10-01T16:04:00Z", + "dataTransferredIn": 13094.0, + "dataTransferredOut": 2649889.0, + "dataTransferredTotal": 2662983.0 + }, + { + "ts": "2026-10-01T16:06:00Z", + "dataTransferredIn": 7470.0, + "dataTransferredOut": 986551.0, + "dataTransferredTotal": 994021.0 + }, + … + ] + } +} +``` -6. On the right side of the page, on the **Visualization** list, select the visualization type you want to use. Example: **Time series**. -7. On the upper-right corner, click **Save** to apply your configurations. +The values are in bytes, and `dataTransferredTotal` is the sum of `dataTransferredIn` and `dataTransferredOut`. For every field of the dataset, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#httpmetrics-applications-waf). + +To add the panel in Grafana: + + + + + In the Grafana menu, select **Dashboards**. + + + + + Select **New** > **New Dashboard**. + + + + + In the **Add panel** card, select **Add a new panel**. + + + + + In the **Data source** list, select **Azion**. + + + + + In the query code box, paste the `DataTransferredOverTime` query. + + + + +The panel preview reads the rows of the query through the Azion data source. + +:::tip +To start from a Real-Time Metrics chart in Azion Console, open the chart's **More options** menu and select **Copy query**. The copied text holds the query under `# QUERY` and the values of its variables under `# VARIABLES`. Write each value into the query in place of its variable before you paste it. For the steps, refer to [Export a chart's data and query](/en/documentation/guides/platform/observability/analyze-metrics/). +::: --- -## Read more on Grafana +## Map the response fields -- [Create and use dashboards](https://grafana.com/docs/grafana/latest/dashboards/) -- [Grafana dashboard best practices](https://grafana.com/docs/grafana/latest/dashboards/build-dashboards/best-practices/) -- [Add and manage variables](https://grafana.com/docs/grafana/latest/dashboards/variables/) -- [Configuring time series in ISO8601](https://momentjs.com/docs/#/parsing/string/) -- [Configuring time series in custom format](https://momentjs.com/docs/#/parsing/string-format/) -- [Visualizations](https://grafana.com/docs/grafana/latest/panels-visualizations/visualizations/) -- [Configuring a legend](https://grafana.com/docs/grafana/latest/panels-visualizations/visualizations/configure-legend/) -- [Configuring value mappings](https://grafana.com/docs/grafana/latest/panels-visualizations/configure-value-mappings/) +Five optional fields tell the panel how to read the rows the query returns. Which ones a panel needs depends on its visualization and on what the graph shows. The five fields take these values: + +| Field | What it takes | +| --- | --- | +| **Data path** | The value `Metrics`. | +| **Time path** | The path to the timestamp of each row, delimited by dots. The `DataTransferredOverTime` query returns the timestamp in `ts`. | +| **Time format** | The format of that timestamp, written in moment.js format. | +| **Group by** | The field that groups the aggregated data into series. | +| **Alias by** | The name and value a field shows in the legend. | --- -### Trademarks +## Choose a visualization and save + +The visualization sets how the panel draws the rows. A query grouped by `ts`, such as `DataTransferredOverTime`, returns one row per time bucket. + +To finish the panel in Grafana: -[Grafana Cloud](https://grafana.com/products/cloud/) is a trademark of Grafana Labs. We are not affiliated with, endorsed or sponsored by Grafana Labs or its affiliates. + + + In the **Visualization** list, select a visualization type. For example: **Time series**. + + + + Select **Save** to apply the configuration. + + + + +The dashboard keeps the panel with its query, its field mapping, and its visualization. + +--- +## Next steps + + + + + + diff --git a/src/content/docs/en/pages/observe-journey/real-time-metrics/integrations/grafana-plugin-prebuilt-dash.mdx b/src/content/docs/en/pages/observe-journey/real-time-metrics/integrations/grafana-plugin-prebuilt-dash.mdx index 181c2c02b6..323c40e9b0 100644 --- a/src/content/docs/en/pages/observe-journey/real-time-metrics/integrations/grafana-plugin-prebuilt-dash.mdx +++ b/src/content/docs/en/pages/observe-journey/real-time-metrics/integrations/grafana-plugin-prebuilt-dash.mdx @@ -1,71 +1,85 @@ --- -title: "Use a Pre-Built Grafana Dashboard with Azion" +title: Import the pre-built Grafana dashboard description: >- - The Azion data source plugin on Grafana makes it possible to visualize the - data from your existing applications on Azion on a Grafana dashboard. -meta_tags: 'azion, edge, observe, observability, logs, grafana, analytics, metrics' + Import the Data Transferred dashboard that ships with the Azion plugin for + Grafana, and view the data your applications transfer. +meta_tags: 'grafana, azion plugin, dashboard, data transferred, real-time metrics' namespace: docs_plugin_grafana_prebuilt permalink: /documentation/guides/platform/observability/azion-plugin-grafana-pre-built-dash/ --- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' -import DocButton from '~/components/webkit/DocButton.vue'; +You can import the **Data Transferred** dashboard that ships with the Azion plugin for Grafana, and open it in Grafana with no panel to configure. Through the Azion data source, the dashboard reads from [Real-Time Metrics](/en/documentation/platform/real-time-metrics/) the data your [Applications](/en/documentation/platform/applications/) transfer. To build your own panels instead, refer to [Build a custom Grafana dashboard](/en/documentation/guides/platform/observability/azion-plugin-grafana-custom-dash/). To import a dashboard from a JSON file, refer to [Import the Data Transferred dashboard](/en/documentation/guides/platform/observability/data-transferred-dash/). -With the Azion data source plugin on Grafana, you can customize your own dashboard to visualize the data you need. +--- + +## Prerequisites - +- A Grafana instance with the Azion plugin installed and an Azion data source created. To set up both, refer to [Install the Azion plugin for Grafana](/en/documentation/guides/platform/observability/integrate-grafana/). +- A data source that holds a personal token from Azion Console and passed **Save & test**. **Save & test** checks that the token authenticates to your Azion account. To create the token, refer to [Personal tokens](/en/documentation/guides/platform/account-and-billing/personal-tokens/). --- -## Using the pre-built dashboard on Grafana +## Import the Data Transferred dashboard -After [installing a Grafana instance locally](https://github.com/aziontech/grafana-plugin/blob/dev/README.md#install-azion-plugin-on-local-grafana-install-locally) on your machine and authorizing the Azion plugin, open it. +The plugin lists the **Data Transferred** dashboard on the **Dashboards** tab of the Azion data source, next to its **Settings** tab. To import the dashboard into Grafana: -Follow the next steps: + + -1. On the left-side menu, on the **Administration** dropdown menu, select **Plugins**. -2. On the **Search** box, type `Azion`. -3. Select the `Azion` card. -4. Click the **Create an Azion data source** button. + In Grafana, open the configuration page of the Azion data source you created. -A new page opens to configure your data source. + + + -On the **Settings** tab: + In the list, select **Data Transferred**. -1. On **Name**, give a descriptive name to your data source. -2. On **Personal Token**, add the token you've created on the [Personal Tokens page on Azion Console](/en/documentation/fundamentals/personal-tokens/). -3. Click **Save & test**. Grafana will run a quick test to see if your authentication is correct. + + + -On the **Dashboards** tab: +Grafana adds the **Data Transferred** dashboard to your Grafana account. -1. Select the **Data Transferred** dashboard option. -2. Click the **Import** button. +--- -The pre-built dashboard is imported to your account. To access it: +## Open the dashboard -1. On the left-side menu, click **Dashboards**. -2. Select the **Data Transferred** dashboard option from the list under **General**. +Grafana lists the imported dashboard under **General**. To open it: -You'll automatically be able to view and analyze the Application Data Transferred data from Real-Time Metrics. You can also save this dashboard as a copy on **Dashboard Settings** and edit it as you wish, without losing the original view. + + ---- + In the Grafana menu, select **Dashboards**. -## Read more on Grafana + + -- [Create and use dashboards](https://grafana.com/docs/grafana/latest/dashboards/) -- [Grafana dashboard best practices](https://grafana.com/docs/grafana/latest/dashboards/build-dashboards/best-practices/) -- [Add and manage variables](https://grafana.com/docs/grafana/latest/dashboards/variables/) -- [Configuring time series in ISO8601](https://momentjs.com/docs/#/parsing/string/) -- [Configuring time series in custom format](https://momentjs.com/docs/#/parsing/string-format/) -- [Visualizations](https://grafana.com/docs/grafana/latest/panels-visualizations/visualizations/) -- [Configuring a legend](https://grafana.com/docs/grafana/latest/panels-visualizations/visualizations/configure-legend/) -- [Configuring value mappings](https://grafana.com/docs/grafana/latest/panels-visualizations/configure-value-mappings/) + Under **General**, select **Data Transferred**. + + + + +The dashboard shows the Applications **Data Transferred** data from Real-Time Metrics, with no further setup. For what each Data Transferred metric measures in Azion Console, refer to [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/#data-transferred). --- -### Trademarks +## Keep an editable copy -[Grafana Cloud](https://grafana.com/products/cloud/) is a trademark of Grafana Labs. We are not affiliated with, endorsed or sponsored by Grafana Labs or its affiliates. +A copy lets you change panels and still keep the original view of the imported dashboard. To edit the dashboard without losing that view, save it as a copy from its **Dashboard Settings**. +The copy takes your edits, and the original **Data Transferred** dashboard keeps its view. For more information on editing a dashboard, refer to [Create and use dashboards](https://grafana.com/docs/grafana/latest/dashboards/) in the Grafana documentation. +--- +## Next steps + + + + + + diff --git a/src/content/docs/en/pages/observe-journey/real-time-metrics/monitor-metrics/add-filters.mdx b/src/content/docs/en/pages/observe-journey/real-time-metrics/monitor-metrics/add-filters.mdx index 8b9f054cf1..902b805c2b 100644 --- a/src/content/docs/en/pages/observe-journey/real-time-metrics/monitor-metrics/add-filters.mdx +++ b/src/content/docs/en/pages/observe-journey/real-time-metrics/monitor-metrics/add-filters.mdx @@ -1,14 +1,316 @@ --- -title: How to add filters on Real-Time Metrics -description: >- - Filter your analysis with the specific variables and type of data you want to - access. -meta_tags: 'azion, edge, observe, observability, charts, aggregated, data' +title: Filter a Real-Time Metrics dashboard +description: Narrow every chart of a Real-Time Metrics dashboard to the requests you need, and apply the same filters to a GraphQL query. +meta_tags: 'real-time metrics, filters, dashboards, graphql, azion query language' namespace: docs_add_filters_metrics permalink: /documentation/guides/platform/observability/add-filters-metrics/ --- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' +import Tabs from '~/components/webkit/Tabs.vue' -import Filters from "~/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/adding-filters/index.md" +You can narrow the charts of a [Real-Time Metrics](/en/documentation/platform/real-time-metrics/) dashboard in Azion Console, or apply the same filters to a query with the GraphQL API. For every field, operator, and value type a filter accepts, refer to [Filters and time range](/en/documentation/platform/real-time-metrics/filters-and-time-range/#filters). - +With no filter, a dashboard counts the data of your whole account. A filter keeps only the data whose field matches a value, such as the host, the status code, the request method, or the country. In the GraphQL API, these fields are `host`, `status`, `requestMethod`, and `geolocCountryName`. +Select your interface once. The prerequisites and each task on this page show only that path. + + +Console +API + + +## Prerequisites + +- An [application](/en/documentation/platform/applications/) with requests in the time range you read. +- A host your [workload](/en/documentation/platform/workloads/) answers on, such as `www.example.com`, to combine filters. + + + + + +- Access to Azion Console. To sign in, refer to [How to access Azion Console](/en/documentation/guides/platform/account-and-billing/how-to-access-azion-console/). + + + + + +- A personal token. To create one, refer to [How to manage a personal token](/en/documentation/guides/platform/account-and-billing/personal-tokens/). +- `curl`. + + + + + +--- + +## Add a filter + +This task keeps the requests that returned an error, with a status code of 400 or higher. Every chart of the dashboard then counts only those requests. + + + + + +To filter the dashboard by status code in Azion Console: + + + + + Access [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + The page opens on **Build** › **Applications** › **Data Transferred**. + + + + + In the filter row, select the filter icon, whose tooltip reads **Add filter**. + + + + + In **Filter**, select **Status**. + + + + + In **Operator**, select **Greater Than or Equal**. + + + + + Enter `400` as the value. + + + + + +A chip under the filter row reads `Status greater than or equal: 400`. Every chart of the dashboard now counts only the requests with a status code of 400 or higher. + + + + + +To apply the same filter with the GraphQL API, send a `POST` request to `https://api.azion.com/v4/metrics/graphql`. In `filter`, the `statusGte` key keeps the status codes of 400 or higher, next to the `tsRange` that every query requires. The query sums `requests` for each status code. + +Replace `[TOKEN VALUE]` with your personal token, and the `begin` and `end` values with the period you want to read: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query ErrorRequestsByStatus($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 100, filter: { tsRange: { begin: $begin, end: $end }, statusGte: 400 }, aggregate: { sum: requests }, groupBy: [status], orderBy: [sum_DESC]) { status sum } }","variables":{"begin":"2026-10-01T14:25:25","end":"2026-10-02T14:25:25"}}' +``` + +The API answers `200` with one row for each status code of 400 or higher: + +```json +{ + "data": { + "httpMetrics": [ + { + "status": 496, + "sum": 210 + }, + { + "status": 501, + "sum": 198 + }, + { + "status": 495, + "sum": 73 + }, + { + "status": 404, + "sum": 55 + }, + { + "status": 502, + "sum": 31 + }, + { + "status": 401, + "sum": 12 + }, + { + "status": 400, + "sum": 1 + }, + { + "status": 499, + "sum": 1 + }, + { + "status": 504, + "sum": 1 + } + ] + } +} +``` + +Each row holds one status code and its request count in the range. A filter key is a field name followed by its operator, such as `statusGte` or `hostEq`. For every operator, refer to [GraphQL queries](/en/documentation/devtools/graphql/queries/#operators). + + + + + +--- + +## Combine filters + +Each filter you add narrows the data again, so the charts keep only the data that matches every filter. This task adds a host to the status filter from Add a filter, to read the errors of one host. Replace `www.example.com` with a host your workload answers on. + + + + + +To add a second filter in Azion Console: + + + + + In the filter row, select the filter icon, whose tooltip reads **Add filter**. + + + + + In **Filter**, select **Host**. + + + + + In **Operator**, select **Equals**. + + + + + Enter `www.example.com` as the value. + + + + + +A second chip reads `Host equals: www.example.com`, next to the status chip. Every chart now counts only the requests to that host with a status code of 400 or higher. + +The **Filter** popover states `Each combination of operator can only be used once.` To keep any of several values of one field, use the `in` form of the query input, described in Filter with the query input. + + + + + +To combine filters with the API, add each one as a key of `filter`. This query adds `hostEq` to the `statusGte` filter: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query ErrorRequestsForHost($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 100, filter: { tsRange: { begin: $begin, end: $end }, statusGte: 400, hostEq: \"www.example.com\" }, aggregate: { sum: requests }, groupBy: [status], orderBy: [sum_DESC]) { status sum } }","variables":{"begin":"2026-10-01T14:25:25","end":"2026-10-02T14:25:25"}}' +``` + +The API answers `200` with the error responses of that host alone: + +```json +{ + "data": { + "httpMetrics": [ + { + "status": 501, + "sum": 198 + }, + { + "status": 404, + "sum": 29 + }, + { + "status": 504, + "sum": 1 + } + ] + } +} +``` + +In this example, the host returned 228 of the 582 error responses of the account. + +To keep any of several values of one field, use the `In` operator with a list. For example, `statusIn: [404, 502]` in place of `statusGte: 400` returns two rows over the same range: `404` with 55 requests and `502` with 31. + + + + + +--- + +## Filter with the query input + +The query input in the filter row takes filters as one typed expression in Azion Query Language. It also keeps several values of one field at once, which a single **Equals** filter cannot do. This task keeps the requests that returned `404` or `502`. + +To filter with the query input in Azion Console: + + + + + Access [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + + + + In the filter row, select the query input, whose placeholder reads `Filter using Azion Query Language syntax...`. + + + + + Enter `status in (404, 502)`. + + While you type, the input suggests fields, then operators, then values. `Ctrl` + `Space`, or `Cmd` + `Space`, opens the suggestions. + + + + + Press `Enter`. + + + + +Every chart of the dashboard now counts only the requests that returned `404` or `502`. + +To keep a range of values instead, use `between` with exactly two values: `status between (400, 499)` keeps the status codes from 400 to 499. For the syntax of each operator in the query input, refer to [Filters and time range](/en/documentation/platform/real-time-metrics/filters-and-time-range/#query-input). When the input shows a validation message and **Refresh** stays disabled, refer to [Troubleshoot Real-Time Metrics](/en/documentation/platform/real-time-metrics/troubleshooting/). + +--- + +## Edit or remove a filter + +Each applied filter shows as a chip under the filter row. Selecting a chip reopens that filter, and its remove icon deletes it. + +To edit a filter in Azion Console: + + + + + Under the filter row, select the chip of the filter. + + The **Filter** popover opens with the values of that filter. A lock icon replaces the arrow of the field, because the field cannot change. + + + + + + +The chip shows the new operator or value, and every chart of the dashboard follows the changed filter. + +To remove a filter, select the remove icon on its chip, and repeat for each filter you want to remove. The chip disappears, and the charts stop applying that filter. + +Switching to a dashboard that reads another dataset clears every filter and keeps the time range. + +--- + +## Next steps + + + + + + + diff --git a/src/content/docs/en/pages/observe-journey/real-time-metrics/monitor-metrics/analyze-metrics.mdx b/src/content/docs/en/pages/observe-journey/real-time-metrics/monitor-metrics/analyze-metrics.mdx index 7ddcd37142..62d0505d5f 100644 --- a/src/content/docs/en/pages/observe-journey/real-time-metrics/monitor-metrics/analyze-metrics.mdx +++ b/src/content/docs/en/pages/observe-journey/real-time-metrics/monitor-metrics/analyze-metrics.mdx @@ -1,31 +1,207 @@ --- -title: How to analyze metrics on Real-Time Metrics -description: Understand how to analyze metrics through the available charts. -meta_tags: 'azion, edge, observe, observability, metrics, charts, graphs' +title: Export a chart's data and query +description: Download the points of a Real-Time Metrics chart as a CSV file, or copy its GraphQL query and run it in the GraphiQL Playground or with curl. +meta_tags: 'real-time metrics, export csv, copy query, graphql' namespace: docs_analyze_metrics permalink: /documentation/guides/platform/observability/analyze-metrics/ --- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' -import DocButton from '~/components/webkit/DocButton.vue'; +You can export the points of a [Real-Time Metrics](/en/documentation/platform/real-time-metrics/) chart, or copy its GraphQL query, from the chart menu in Azion Console. A copied query runs in the GraphiQL Playground or with `curl`. To narrow the data before you export it, refer to [Filter a Real-Time Metrics dashboard](/en/documentation/guides/platform/observability/add-filters-metrics/). -Your analysis using **Real-Time Metrics** depends on the [product you choose](/en/documentation/platform/real-time-metrics/#product-choice-to-view-metrics) to use and its available fields. Each product has specific fields that generate the charts providing information on access, behavior, and performance of your applications and related products. +The examples on this page use the **Edge Cache** chart of the **Data Transferred** dashboard, under **Build** › **Applications**. -Once you've chosen a product to view charts and conduct an analysis, you can: +--- + +## Prerequisites + +- Access to Azion Console. To sign in, refer to [How to access Azion Console](/en/documentation/guides/platform/account-and-billing/how-to-access-azion-console/). +- A chart with data in the selected time range. To read your first numbers, refer to [Real-Time Metrics quickstart](/en/documentation/platform/real-time-metrics/quickstart/). +- A personal token and `curl`, to send a copied query from a terminal. To create a token, refer to [How to manage a personal token](/en/documentation/guides/platform/account-and-billing/personal-tokens/). + +--- + +## Export a chart's points as CSV + +**Export CSV** downloads the points of one chart as a comma-separated values (CSV) file. The file covers the time range and the filters set in the filter row. + +To export a chart in Azion Console: + + + + + Access [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + + + + Select the category, the product tab, and the dashboard. For example, select **Build**, **Applications**, and **Data Transferred**. + + + + + The file holds only the points that the range and the filters select. For each control, refer to [Filters and time range](/en/documentation/platform/real-time-metrics/filters-and-time-range/). + + + + + In the chart card, select the menu button, labeled **More options**. + + + + + +The browser downloads a file named after the chart, such as `Edge Cache.csv`. + +On a time chart, the file holds one line per point that the chart plots. The first line names the columns: `ts`, then one column per series, named after its field. For **Edge Cache**, the first line reads `ts;dataTransferredTotal;dataTransferredOut;dataTransferredIn`. + +Each following line holds the time of one point, such as `10/02/2026, 11:15:00 AM`, then the value of each series. The values carry no unit: the **Edge Cache** columns are in bytes. For the separator and date rules, refer to [Export CSV](/en/documentation/platform/real-time-metrics/filters-and-time-range/#export-csv). + +--- + +## Copy a chart's query + +**Copy query** puts the GraphQL query of one chart and its variables on the clipboard. The menu item opens nothing, so you paste the text where you want to run it. + +To copy the query in Azion Console: + + + + + Access [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + + + + Select the category, the product tab, and the dashboard. For example, select **Build**, **Applications**, and **Data Transferred**. + + + -- Add filters. -- Choose a data interval. -- Use the **Get help** tags to learn more about each chart. + In the chart card, select the menu button, labeled **More options**. -Real-Time Metrics provides a standard view with graphs exhibiting pre-defined fields, but you can add filters to view more specific data. + + + - +The clipboard holds the chart's query for the time range and the filters of the dashboard. For the **Edge Cache** chart over 24 hours, the text reads: -To analyse metrics: +```text +# QUERY + +query ($tsRange_begin:DateTime!, $tsRange_end:DateTime!) { + httpMetrics ( + limit: 5000 + groupBy: [ts] + orderBy: [ts_ASC] + filter: { + tsRange: { + begin: $tsRange_begin + end: $tsRange_end + } + } + ) { + dataTransferredTotal + dataTransferredOut + dataTransferredIn + ts + } +} + + +# VARIABLES +{ + "tsRange_begin": "2026-10-01T14:25:25", + "tsRange_end": "2026-10-02T14:25:25" +} +``` + +The text is in two parts. Under `# QUERY`, the query reads the range from the variables `$tsRange_begin` and `$tsRange_end`. Under `# VARIABLES`, a JSON object holds their values. Each filter applied on the dashboard adds variables of its own. The query does not run without its variables, so each part goes to its own place. + +--- + +## Run the copied query + +A copied query calls the API that the chart reads, `https://api.azion.com/v4/metrics/graphql`. You can run it in the GraphiQL Playground or send it with `curl`. + +### Run the query in the GraphiQL Playground + +The GraphiQL Playground takes the query and its variables in two separate panes. + +To run the copied query in the GraphiQL Playground: + + + + + To reach it, refer to [GraphiQL Playground](/en/documentation/devtools/graphql/graphql-playground/). + + + + + In the query editor, paste the copied text from `# QUERY` up to the line before `# VARIABLES`. + + + + + In the variables pane, paste the JSON object that follows `# VARIABLES`. + + + + + +The playground sends the query with its variables and returns the rows of the chart as JSON. + +### Send the query with curl + +To send a copied query with `curl`, put the query on one line in the `query` key of the body. Put the JSON object that follows `# VARIABLES` in the `variables` key. To read another period, change `tsRange_begin` and `tsRange_end`. + +Replace `[TOKEN VALUE]` with your personal token, and send the request: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query ($tsRange_begin:DateTime!, $tsRange_end:DateTime!) { httpMetrics (limit: 5000 groupBy: [ts] orderBy: [ts_ASC] filter: { tsRange: { begin: $tsRange_begin end: $tsRange_end } }) { dataTransferredTotal dataTransferredOut dataTransferredIn ts } }","variables":{"tsRange_begin":"2026-10-01T14:25:25","tsRange_end":"2026-10-02T14:25:25"}}' +``` + +The API answers `200` with one row per minute that has traffic, oldest first: + +```json +{ + "data": { + "httpMetrics": [ + { + "dataTransferredTotal": 2662983.0, + "dataTransferredOut": 2649889.0, + "dataTransferredIn": 13094.0, + "ts": "2026-10-01T16:04:00Z" + }, + { + "dataTransferredTotal": 994021.0, + "dataTransferredOut": 986551.0, + "dataTransferredIn": 7470.0, + "ts": "2026-10-01T16:06:00Z" + }, + … + ] + } +} +``` + +In this example, the API returns 110 rows. Their `dataTransferredTotal` values add up to 149,684,815 bytes, the same 24-hour total that the [Real-Time Metrics quickstart](/en/documentation/platform/real-time-metrics/quickstart/) reads. The API leaves out the minutes with no traffic, such as 16:05, which the chart plots as zero. + +For every field of the `httpMetrics` dataset, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#httpmetrics-applications-waf). + +--- -1. Navigate through the page to see all available charts. -2. Hover over the points of the charts to view the specific data and time range. -3. Zoom in and out on the chart by scrolling up and down. -4. Use the **Context menu** to copy the chart's query, export the points in a `.CSV` file, enable the chart's mean line, or enable the chart's mean lines per series. -5. Take a look at the **Variation tag** to see how your data is behaving relative to the previous corresponding data interval. -6. Copy the URL path to share the filters you've applied with other Azion users. +## Next steps + + + + + + diff --git a/src/content/docs/en/pages/observe/real-time-metrics/best-practices.mdx b/src/content/docs/en/pages/observe/real-time-metrics/best-practices.mdx new file mode 100644 index 0000000000..bb3fa0aa42 --- /dev/null +++ b/src/content/docs/en/pages/observe/real-time-metrics/best-practices.mdx @@ -0,0 +1,191 @@ +--- +title: Best practices for Real-Time Metrics +description: Choose the range, scope, and source of each Real-Time Metrics number so that comparisons, cache checks, and API queries stay accurate. +meta_tags: 'real-time metrics, best practices, dashboards, time range, filters, graphql' +namespace: documentation_products_real_time_metrics_best_practices +permalink: /documentation/platform/real-time-metrics/best-practices/ +--- + +import FrameBox from '@aziontech/webkit/frame-box' +import ItemList from '@aziontech/webkit/item-list' +import DocItem from '@aziontech/webkit/doc-item' + +A metric answers a question about a trend: whether traffic grew, whether the cache serves more of it, when errors started. The answer holds only when the period, the scope, and the source of the number fit the question. Without that fit, a comparison that includes minutes still being counted shows a drop that did not happen. An account-wide average hides the one domain whose cache stopped working, and an API query with no row limit returns its first 10 rows without an error. + +These practices apply to the dashboards of [Real-Time Metrics](/en/documentation/platform/real-time-metrics/) in Azion Console and to queries to its GraphQL API. The mechanisms behind them are on [How Real-Time Metrics works](/en/documentation/platform/real-time-metrics/how-it-works/), and the value of every bound is on [Real-Time Metrics limits](/en/documentation/platform/real-time-metrics/limits/). + +In order, the practices cover which number to trust for billing, the length of the range, the newest minutes of a range, the scope of the cache charts, the path from a spike to its requests, copied queries, and the row limit of an API query. Each specimen is a query that ran against the GraphQL API, with its response. + +--- + +## Reconcile charges with Billing data, not Real-Time Metrics + +Real-Time Metrics and Billing count the same usage in two ways. Real-Time Metrics counts each event at most once, and Billing exactly once. The two differ by less than 1% on average, and when they differ, the Billing figure is the correct one. + +Use Real-Time Metrics for operations, such as seeing a traffic change within minutes, and Billing for what you pay. The cost is a second source: a usage report built from the dashboards carries a small gap against the invoice, so it cannot settle a charge. For the two counting approaches, refer to [Real-Time Info and Precise Billing](/en/documentation/fundamentals/billing-and-subscriptions/#real-time-info-and-precise-billing). + +To check it, compare one month's total in both: a gap of about 1% is the expected difference between the two approaches. + +--- + +## Choose a range short enough to keep the resolution you need + +Real-Time Metrics sizes each point of a time chart by the length of the selected range, not by the age of the data. A range shorter than 2.5 days plots one point per minute, and a longer one plots one point per hour or per day, as [How Real-Time Metrics works](/en/documentation/platform/real-time-metrics/how-it-works/) details. A spike of a few minutes stands out at minute resolution and flattens into its hour or day bucket on a longer range. + +Pick the shortest range that covers the question. For example, **Last 24 hours** plots one point per minute and shows when a change began, while **Last 7 days** and **Last 90 days** plot hours and days and show a trend. The cost is reach: minute resolution never covers more than 2.5 days. + +In the API, `tsRange` sets the range. This query over one day returns minute buckets: + +```graphql +query { + httpMetrics( + limit: 10000 + filter: { tsRange: { begin: "2026-10-01T14:21:50", end: "2026-10-02T14:21:50" } } + aggregate: { sum: requests } + groupBy: [ts] + orderBy: [ts_ASC] + ) { + ts + sum + } +} +``` + +The API answers `200`: + +```json +{ + "data": { + "httpMetrics": [ + { + "ts": "2026-10-01T16:04:00Z", + "sum": 74 + }, + { + "ts": "2026-10-01T16:06:00Z", + "sum": 14 + }, + { + "ts": "2026-10-01T16:07:00Z", + "sum": 82 + }, + … + ] + } +} +``` + +With `begin` set to `"2026-07-04T14:21:50"`, 90 days before `end`, the same query returns day buckets, such as `"ts": "2026-07-24T00:00:00Z"`. The `httpBreakdownMetrics` dataset, behind the **Request Breakdown** dashboard, returns hour buckets even for a 1-hour range. + +To check the resolution of a result, read the gap between two consecutive `ts` values: 60 seconds for minutes, 3,600 seconds for hours. + +--- + +## End every range you compare or store at least 10 minutes in the past + +A metric takes up to 10 minutes to aggregate, so a range that ends now can read lower than the complete window before it. The [variation tag](/en/documentation/platform/real-time-metrics/filters-and-time-range/#variation-tag), which compares the selected range with the preceding window of the same length, can show a drop that disappears a few minutes later. + +In the Console, set **End date** in the **Absolute** tab to a time slot at least 10 minutes back. In the API, set the `end` of `tsRange` at least 10 minutes before the query runs. A period that ended more than 10 minutes back is complete and returns the same values on every run, so query it once, keep the result, and later query only the period after it. On `httpBreakdownMetrics`, start and end each period on the hour: a range that began at 13:21:50 returned a row for the bucket that starts at 13:00, so two queries that split an hour can count it twice. + +The cost is the newest 10 minutes, which these ranges leave out: read them on a range that ends now, as provisional values. For the aggregation delay and the retention of each dataset, refer to [Real-Time Metrics limits](/en/documentation/platform/real-time-metrics/limits/). + +To check it, run the same query again a few minutes later: identical values confirm that the period was complete. + +--- + +## Filter to one domain before you read the cache charts + +The cache charts cover the whole account until you filter them. These are **Edge Offload**, **Saved Data**, and **Missed Data** on the [Data Transferred](/en/documentation/platform/real-time-metrics/build-dashboards/#data-transferred) dashboard, and **Requests Offloaded** on [Requests](/en/documentation/platform/real-time-metrics/build-dashboards/#requests), all for [Applications](/en/documentation/platform/applications/). An account-wide offload blends applications with different cache settings, so one domain whose content stopped coming from cache can hide behind the others. + +In the Console, filter the dashboard on **Domain** or **Workload**, whichever label your account shows, to keep one workload. In the API, the `hostEq` filter keeps the requests of one hostname: + +```graphql +query CacheOffloadForHost { + httpMetrics( + limit: 1 + filter: { + tsRange: { begin: "2026-10-01T14:25:25", end: "2026-10-02T14:25:25" } + hostEq: "www.example.com" + } + ) { + requestsTotal + requestsOffloaded + savedRequests + missedRequests + dataTransferredTotal + offload + savedData + missedData + bandwidthOffload + } +} +``` + +The API answers `200` with one row for the hostname: + +```json +{ + "data": { + "httpMetrics": [ + { + "requestsTotal": 982, + "requestsOffloaded": 5.19, + "savedRequests": 51.0, + "missedRequests": 931.0, + "dataTransferredTotal": 114490585.0, + "offload": 0.51, + "savedData": 577373.0, + "missedData": 113387464.0, + "bandwidthOffload": 0.51 + } + ] + } +} +``` + +The cost is scope: a Console filter applies to every chart of the dashboard, and switching to a dashboard that reads another dataset clears it. To measure one domain step by step, refer to [Measure cache offload for a domain](/en/documentation/guides/platform/observability/measure-cache-offload/). + +To check it, add `savedRequests` and `missedRequests`: they equal `requestsTotal`, and `requestsOffloaded` is the share served from cache, 51 of 982 requests, or 5.19%. + +--- + +## Find the requests behind a spike in Real-Time Events + +Real-Time Metrics holds counts aggregated per time bucket, not the requests behind them. A chart shows when a spike happened and how large it was, but not which requests made it. [Real-Time Events](/en/documentation/platform/real-time-events/) holds the raw event of each request. + +Narrow the dashboard first: set the range to the minutes of the spike, and filter on the field that isolates it, such as **Status**, or **Domain** or **Workload**. Then open Real-Time Events for the same period. For example, if **Missed Requests** rises at 14:05, a range from 14:00 to 14:30 filtered to one domain tells you which domain and which 30 minutes to read in Real-Time Events. The cost is a second product: Real-Time Events is billed on Storage and Data Scan, while Real-Time Metrics is included at no additional charge. + +To check it, confirm that the period you read in Real-Time Events starts and ends on the same minutes as the spike on the chart. + +--- + +## Start an API query from a chart's copied query + +**Copy query**, in a chart's menu, puts the GraphQL query behind that chart on the clipboard, with its dataset, fields, aggregation, and filters. An API query, or a panel in a [custom Grafana dashboard](/en/documentation/guides/platform/observability/azion-plugin-grafana-custom-dash/), then starts from a query the Console already runs. The text holds the line `# QUERY`, the query, the line `# VARIABLES`, and the variables as a JSON object. + +The cost is one extra move. The query reads its filter values from the variables, so it does not run on its own: paste the query into [GraphiQL Playground](/en/documentation/devtools/graphql/graphql-playground/) and the JSON after `# VARIABLES` into its variables pane. The copied query also keeps the chart's own `limit`, so check that value before you widen the range. For the clipboard format, refer to [Copy query](/en/documentation/platform/real-time-metrics/filters-and-time-range/#copy-query), and for the steps, to [Export a chart's data and query](/en/documentation/guides/platform/observability/analyze-metrics/). + +To check it, run the query once before you change it: a `200` with rows confirms that the variables came with it. + +--- + +## Set an explicit row limit in every API query + +A query with no `limit` argument returns 10 rows and no error. A one-day query by minute that had 110 rows returned its first 10. Set `limit` to the number of rows you expect, up to 10,000, and set `orderBy`, so you know which rows the limit keeps. The query in [Choose a range short enough to keep the resolution you need](/en/documentation/platform/real-time-metrics/best-practices/#choose-a-range-short-enough-to-keep-the-resolution-you-need) sets `limit: 10000` and `orderBy: [ts_ASC]`. + +The cost is a ceiling: above 10,000 rows, the API refuses the query with `400`. Shorten the range, or page through the rows with `offset`, as [GraphQL features](/en/documentation/devtools/graphql/features/) describes. For the exact error, refer to [GraphQL API limits](/en/documentation/devtools/graphql/limits/#query-rows-limit). + +To check it, count the rows of the result: a count equal to the `limit` means rows can be missing, so raise the limit or shorten the range. + +--- + +## Related resources + + + + The counting approach behind every chart, and the range lengths that switch the resolution. + The retention of each dataset and the bounds of the Console and the GraphQL API. + Every control above the charts, from the time-range picker to the chart menu. + The procedures that apply these practices, one task per guide. + + diff --git a/src/content/docs/en/pages/observe/real-time-metrics/build-dashboards.mdx b/src/content/docs/en/pages/observe/real-time-metrics/build-dashboards.mdx new file mode 100644 index 0000000000..6ad324080a --- /dev/null +++ b/src/content/docs/en/pages/observe/real-time-metrics/build-dashboards.mdx @@ -0,0 +1,363 @@ +--- +title: Build dashboards +description: Look up what each chart on the Applications, Tiered Cache, Functions, and Image Processor dashboards measures, and the field that returns it. +meta_tags: 'real-time metrics, dashboards, applications, cache, tiered cache, functions, image processor, charts' +namespace: documentation_products_real_time_metrics_build_dashboards +permalink: /documentation/platform/real-time-metrics/build-dashboards/ +--- + +import FrameBox from '@aziontech/webkit/frame-box' +import ItemList from '@aziontech/webkit/item-list' +import DocItem from '@aziontech/webkit/doc-item' + +The **Build** category of [Real-Time Metrics](/en/documentation/platform/real-time-metrics/) holds the dashboards of four product tabs: **Applications**, **Tiered Cache**, **Functions**, and **Image Processor**. Select **Build** in the category dropdown to open them. With no dashboard in the URL, Real-Time Metrics opens on **Build** › **Applications** › **Data Transferred**. + +Each dashboard below has a table with one row per chart, in the order the Console draws them. The **Aggregation** column holds the tag shown under each chart's description. With **Sum**, a legend entry shows the total over the selected range. With **Average**, it shows that total divided by the number of points. The prose under each table names the series a chart draws, the path of the data it counts, and its variation tag. That tag compares the selected range with the window of equal length immediately before it, and it appears only on a chart that draws one series. Each dashboard closes with the dataset and fields that return the same numbers through the GraphQL API, for a breakdown or a range the chart does not draw. For the time range and the filters that apply to every chart, refer to [Filters and time range](/en/documentation/platform/real-time-metrics/filters-and-time-range/). + +--- + +## Applications + +The **Applications** tab shows metrics on the traffic of the [Applications](/en/documentation/platform/applications/) configured in your account. It holds five dashboards, in this order in the dashboard selector: **Data Transferred**, **Requests**, **Status Codes**, **Bandwidth Saving**, and **Request Breakdown**. The first four read the `httpMetrics` dataset, and **Request Breakdown** reads `httpBreakdownMetrics`. + +### Data Transferred + +The **Data Transferred** dashboard measures the bytes and the bandwidth your applications move, and how much of that content the data center serves from its cache. Its **Edge Cache** chart counts the data that passes through [Cache](/en/documentation/platform/applications/#cache), which must be active in your account to report data. + +| Chart | What it measures | Unit | Aggregation | +| --- | --- | --- | --- | +| Edge Cache | Data transferred through Cache, split into data in, data out, and their total. | Bytes | Sum | +| Edge Offload | Share of data the data center delivered from its cache, without fetching it from the origin. | Percent | Average | +| Saved Data | Data the data center delivered from its cache, without fetching it from the origin. | Bytes | Sum | +| Missed Data | Data the data center delivered after fetching it from the origin. | Bytes | Sum | +| Total Bandwidth Usage | Bandwidth used to deliver your content. | Bits per second | Sum | +| Bandwidth Offloaded | Share of bandwidth delivered from the cache, without fetching the content from the origin. | Percent | Average | +| Saved Bandwidth | Bandwidth delivered from the cache, without fetching the content from the origin. | Bits per second | Sum | +| Missed Bandwidth | Bandwidth used to fetch content from the origin and deliver it to the client. | Bits per second | Sum | + +**Edge Cache** draws three series: **Data Transferred Total**, **Data Transferred Out**, and **Data Transferred In**. The path each series counts depends on whether the application uses [Tiered Cache](/en/documentation/platform/applications/cache/tiered-cache/), a second cache layer between the data center and your origin: + +| Series | Without Tiered Cache | With Tiered Cache | +| --- | --- | --- | +| Data Transferred In | Client → data center → origin | Client → data center → Tiered Cache layer | +| Data Transferred Out | Origin → data center → client | Tiered Cache layer → data center → client | +| Data Transferred Total | Data Transferred In + Data Transferred Out | Data Transferred In + Data Transferred Out | + +Each diagram below draws one series. The top row is the request, from the client toward the origin, and the bottom row is the response. A solid arrow is a leg the series counts, and a dotted arrow is a leg it does not count. + +```mermaid title="Data Transferred In, without Tiered Cache" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Client"] -- request --> D["Data center"] + D -- request --> O["Origin"] + O -. response .-> D + D -. response .-> C + linkStyle 0,1 stroke-width:3px +``` + +1. Counted: the request travels from the client to the data center, and from the data center to the origin. +2. Not counted: the response that returns to the client, which **Data Transferred Out** counts. + +```mermaid title="Data Transferred Out, without Tiered Cache" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Client"] -. request .-> D["Data center"] + D -. request .-> O["Origin"] + O -- response --> D + D -- response --> C + linkStyle 2,3 stroke-width:3px +``` + +1. Counted: the response travels from the origin to the data center, and from the data center to the client. +2. Not counted: the request that reaches the origin, which **Data Transferred In** counts. + +```mermaid title="Data Transferred Total, without Tiered Cache" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Client"] -- request --> D["Data center"] + D -- request --> O["Origin"] + O -- response --> D + D -- response --> C + linkStyle 0,1,2,3 stroke-width:3px +``` + +1. Counted: the request, from the client to the data center and on to the origin. +2. Counted: the response, from the origin to the data center and back to the client. + +```mermaid title="Data Transferred In, with Tiered Cache" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Client"] -- request --> D["Data center"] + D -- request --> T["Tiered Cache"] + T -. request .-> O["Origin"] + O -. response .-> T + T -. response .-> D + D -. response .-> C + linkStyle 0,1 stroke-width:3px +``` + +1. Counted: the request travels from the client to the data center, and from the data center to the Tiered Cache layer. +2. Not counted: the leg to the origin, which the **Tiered Cache** tab counts, and the response, which **Data Transferred Out** counts. + +```mermaid title="Data Transferred Out, with Tiered Cache" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Client"] -. request .-> D["Data center"] + D -. request .-> T["Tiered Cache"] + T -. request .-> O["Origin"] + O -. response .-> T + T -- response --> D + D -- response --> C + linkStyle 4,5 stroke-width:3px +``` + +1. Counted: the response travels from the Tiered Cache layer to the data center, and from the data center to the client. +2. Not counted: the request, which **Data Transferred In** counts, and the leg from the origin, which the **Tiered Cache** tab counts. + +```mermaid title="Data Transferred Total, with Tiered Cache" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Client"] -- request --> D["Data center"] + D -- request --> T["Tiered Cache"] + T -. request .-> O["Origin"] + O -. response .-> T + T -- response --> D + D -- response --> C + linkStyle 0,1,4,5 stroke-width:3px +``` + +1. Counted: the request, from the client to the data center and on to the Tiered Cache layer. +2. Counted: the response, from the Tiered Cache layer to the data center and back to the client. +3. Not counted: both legs between the Tiered Cache layer and the origin, which the **Tiered Cache** tab counts. + +With Tiered Cache, the traffic between the Tiered Cache layer and the origin is counted on the **Tiered Cache** tab instead. **Data Transferred In** sums the length of each request, and adds it a second time when the content is not a cache hit. **Data Transferred Out** sums the bytes sent, and adds the upstream bytes sent when the content is not a cache hit. + +**Edge Offload**, **Saved Data**, **Bandwidth Offloaded**, and **Saved Bandwidth** measure content the data center delivered to the client from its own cache: Client → data center → client. **Missed Data** and **Missed Bandwidth** measure content the data center fetched from the origin first: Client → data center → origin → data center → client. A higher offload or saved value means your cache policies serve more content from cache, and your origin handles less demand. For example, if an application transfers 1 GB with an average **Edge Offload** of 80%, the data center served 800 MB of it from cache. + +The Console scales each unit in steps of 1,000. Byte charts read `B`, `kB`, `MB`, `GB`, and `TB`, and bandwidth charts read bits per second as `bit/s`, `kb/s`, `Mb/s`, and `Gb/s`. Percentages show two decimals, such as `45.67%`. + +An increase shows as good on **Edge Offload**, **Saved Data**, **Total Bandwidth Usage**, **Bandwidth Offloaded**, and **Saved Bandwidth**, and as bad on **Missed Data** and **Missed Bandwidth**. **Edge Cache** draws three series, so it shows no variation tag. + +To query the same numbers, use the `httpMetrics` dataset. **Edge Cache** reads `dataTransferredIn`, `dataTransferredOut`, and `dataTransferredTotal`. The other charts, in table order, read `offload`, `savedData`, `missedData`, `bandwidthTotal`, `bandwidthOffload`, `bandwidthSavedData`, and `bandwidthMissedData`. For each field, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#httpmetrics-applications-waf). + +### Requests + +The **Requests** dashboard counts the requests made to the domains of your applications and how many the data center answered from its cache. It also splits them by method and scheme, and measures how long they take. + +| Chart | What it measures | Unit | Aggregation | +| --- | --- | --- | --- | +| Total Requests | Requests made to your domains, split by scheme. | Requests | Sum | +| Requests Offloaded | Share of requests the data center delivered from its cache, without fetching the content from the origin. | Percent | Average | +| Saved Requests | Requests delivered from the cache, without fetching the content from the origin. | Requests | Sum | +| Missed Requests | Requests delivered after fetching the content from the origin. | Requests | Sum | +| Total Requests per Second | Requests per second made to your domains. | Requests per second | Sum | +| Requests per Second Offloaded | Share of requests per second delivered from the cache. | Percent | Average | +| Saved Requests per Second | Requests per second delivered from the cache. | Requests per second | Sum | +| Missed Requests per Second | Requests per second delivered after fetching the content from the origin. | Requests per second | Sum | +| Requests by Method | Requests for each HTTP method. | Requests | Sum | +| Average Request Time | Average time to process a request and answer it. | Seconds | Average | +| Requests by Scheme | Requests for each scheme, HTTP or HTTPS. | Requests | Sum | + +**Total Requests** draws three series. **Http Requests Total** counts the requests served over HTTP, and **Https Requests Total** counts those served over HTTPS, which encrypts and verifies the connection. **Edge Requests Total** is the sum of the two. + +**Requests Offloaded**, **Saved Requests**, and their per-second charts measure requests the data center answered from its own cache: Client → data center → client. **Missed Requests** and **Missed Requests per Second** count requests the data center sent on to the origin: Client → data center → origin → data center → client. A higher saved count means your cache policies keep more requests away from your origin. For example, with 5 requests and an average **Requests Offloaded** of 80%, the data center answered 4 of the 5 from cache. On **Requests per Second Offloaded**, 5 requests in one second at 80% means 4 of them came from cache in that second. + +The per-second charts divide the requests in each time bucket by the length of the bucket in seconds: 60 for a minute bucket, 3,600 for an hour bucket. The bucket size follows the length of the selected range; for the ranges, refer to [How Real-Time Metrics works](/en/documentation/platform/real-time-metrics/how-it-works/). The Console shows these values with a `/s` suffix, such as `0.026/s`. + +**Requests by Method** draws one series per HTTP method found in the range, such as `GET`, which retrieves a resource, or `POST`, which sends data to the server. A `HEAD` request retrieves the information about a resource without its content. The chart shows how clients interact with the content on your domains. + +**Average Request Time** is a duration: the average time, in seconds, that the server or application takes to process a request and answer it. The Console formats it with the per-second suffix, such as `1.7/s`, which reads as 1.7 seconds. Use the chart to find trends in processing time, such as a bottleneck that needs attention. To shorten that time, refer to [Configure cache policies for an application](/en/documentation/guides/application-performance/cache-and-purge/cache-settings/), [Configure Advanced Cache Key for an application](/en/documentation/guides/application-performance/cache-and-purge/advanced-cache-key/), and [Balance traffic across multiple origins](/en/documentation/guides/application-performance/availability/multiple-origins/). + +**Requests by Scheme** draws one series per scheme. HTTP carries requests without encryption, which an attacker can intercept. HTTPS carries requests encrypted to keep the data intact and confidential. Use the chart to follow the share of encrypted traffic over time. For more information, refer to [Configure HTTP and HTTPS ports](/en/documentation/guides/application-development/getting-started/configure-ports/). + +An increase shows as good on **Requests Offloaded**, **Saved Requests**, **Total Requests per Second**, **Requests per Second Offloaded**, and **Saved Requests per Second**. It shows as bad on **Missed Requests**, **Missed Requests per Second**, **Average Request Time**, and **Requests by Scheme**. **Total Requests** draws three series and shows no variation tag. **Requests by Method** and **Requests by Scheme** show the tag only when one method or one scheme has data. On **Requests by Method**, the tag carries no arrow. + +To query the same numbers, use the `httpMetrics` dataset. **Total Requests** reads `edgeRequestsTotal`, `httpsRequestsTotal`, and `httpRequestsTotal`. The next seven charts, in table order, read `requestsOffloaded`, `savedRequests`, `missedRequests`, `edgeRequestsTotalPerSecond`, `requestsPerSecondOffloaded`, `savedRequestsPerSecond`, and `missedRequestsPerSecond`. **Requests by Method** and **Requests by Scheme** sum `requests` grouped by `requestMethod` and by `scheme`, and **Average Request Time** averages `requestTime`. The fields `requestsHttpMethodGet`, `requestsHttpMethodPost`, `requestsHttpMethodHead`, and `requestsHttpMethodOthers` return one total per method, with methods such as `PUT` and `PATCH` in `requestsHttpMethodOthers`. For each field, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#httpmetrics-applications-waf). + +### Status Codes + +The **Status Codes** dashboard sums the requests to the domains of your applications by the HTTP status code of the response. Every request to a domain of an application receives a status code, and each chart counts one class of codes. + +| Chart | What it measures | Unit | Aggregation | +| --- | --- | --- | --- | +| HTTP Status Codes 2XX | Successful responses: the request was received, understood, accepted, and processed, and the client received your content. | Requests | Sum | +| HTTP Status Codes 3XX | Redirections: the content was at another location, and the client needed one more action to reach it. | Requests | Sum | +| HTTP Status Codes 4XX | Client errors, such as a page that is not available or a request with bad syntax. The content was not delivered. | Requests | Sum | +| HTTP Status Codes 5XX | Server errors: the request seemed valid, but the server failed to deliver content that still exists. | Requests | Sum | +| Requests by Status and Upstream Status | Requests for each pair of status and upstream status, for the 10 most frequent pairs. | Requests | Sum | + +**HTTP Status Codes 2XX** draws one series per status code from 200 to 299 found in the range. **HTTP Status Codes 3XX** draws one per code from 300 to 399. **HTTP Status Codes 4XX** draws four series: **Requests Status Code 400**, **Requests Status Code 403**, **Requests Status Code 404**, and **Requests Status Code 4xx**. **HTTP Status Codes 5XX** draws **Requests Status Code 500**, **Requests Status Code 502**, **Requests Status Code 503**, and **Requests Status Code 5xx**. The **Requests Status Code 4xx** and **Requests Status Code 5xx** series count only the codes in their class that have no series of their own. For example, a 404 response counts in **Requests Status Code 404** and never in **Requests Status Code 4xx**. + +The codes these charts show most often: + +| Status code | Meaning | +| --- | --- | +| 200 | The content was delivered correctly. This is the standard success response. | +| 204 | The request completed, and there was no content to deliver. | +| 206 | Only part of the content was delivered, because the content was split into parts. | +| 301 | The request, and every later request, is redirected to another URL. | +| 302 | The request is redirected to another URL for a limited time. | +| 304 | The content was not modified, so the browser uses the file it already holds. | +| 400 | The server cannot process the request, generally because of a format error in the request. | +| 403 | The request is valid, but the user or the IP address is not authorized. | +| 404 | The requested file does not exist on the origin server. | +| 500 | The server met a generic, unexpected error. | +| 502 | A server acting as a gateway or proxy received an invalid response from the origin, generally because the origin is offline. | +| 503 | The server is not available, generally for a short time. | + +**Requests by Status and Upstream Status** is a table with three columns. **Status** is the code of the response the client received, generated by your application or by Azion's infrastructure. It can be a 2XX success, a 4XX client error, or a 5XX server error. **Upstream Status** is the code the origin or an external service returned, which exposes connectivity issues, timeouts, and failures behind your application. A request the origin did not answer, such as one answered from cache, carries upstream status `0` in the API, and a request for which no origin server can be selected carries `502`. **Total** is the number of requests with that pair of codes. Use the table to find which layer returns an error and to detect trends in how requests are handled. + +The table lists the 10 most frequent pairs. To reach the others, add a filter that narrows the chart to the requests you need, or query the dataset. To break requests down by any status code through the GraphQL API, refer to [Break down requests by status code](/en/documentation/guides/platform/observability/break-down-requests-by-status-code/). + +**HTTP Status Codes 2XX** and **HTTP Status Codes 3XX** show a variation tag, with no arrow, only when one status code has data. The 4XX and 5XX charts draw four series each and show no variation tag, and neither does the table. + +To query the same numbers, use the `httpMetrics` dataset. The 2XX and 3XX charts sum `requests` grouped by `status`, limited to their range of codes. The 4XX and 5XX charts read `requestsStatusCode400`, `requestsStatusCode403`, `requestsStatusCode404`, `requestsStatusCode4xx`, `requestsStatusCode500`, `requestsStatusCode502`, `requestsStatusCode503`, and `requestsStatusCode5xx`. The table sums `requests` grouped by `status` and `upstreamStatus`. The class fields follow the rule of the series: `requestsStatusCode2xx` counts no 200, 204, or 206 response, because `requestsStatusCode200`, `requestsStatusCode204`, and `requestsStatusCode206` count them. In the same way, `requestsStatusCode3xx` leaves out the 301, 302, and 304 responses. For each field, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#httpmetrics-applications-waf). + +### Bandwidth Saving + +The **Bandwidth Saving** dashboard holds one chart, the bytes that [Image Processor](/en/documentation/platform/applications/#image-processor) saved when it delivered the images it processed for your domains. Processing covers resizing, cropping, changing the quality, and every other Image Processor operation. The chart counts the saving on every processed image of the domain. + +| Chart | What it measures | Unit | Aggregation | +| --- | --- | --- | --- | +| Bandwidth Saving | Savings on every transmission of an image that Image Processor processed and delivered. | Bytes | Sum | + +**Bandwidth Saving** draws one series, **Bandwidth Images Processed Saved Data**, and an increase shows as good. The Console scales the bytes from `B` up to `TB` in steps of 1,000. + +To query the same number, read `bandwidthImagesProcessedSavedData` from the `httpMetrics` dataset. For the field, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#httpmetrics-applications-waf). + +### Request Breakdown + +The **Request Breakdown** dashboard holds one table chart, **IP Address Information**, which shows where the requests to your applications come from, by network and by place. It reads the `httpBreakdownMetrics` dataset. + +| Chart | What it measures | Unit | Aggregation | +| --- | --- | --- | --- | +| IP Address Information | Requests for each IP address, with its network, country, and region, for the 10 most frequent addresses. | Requests | Sum | + +The table has five columns: + +- **Remote Address**: the IP address that made the requests. +- **ASN**: the Autonomous System Number, which identifies the network operator or organization responsible for the IP address. +- **Country**: the country the requests come from. +- **Region**: the region the requests come from. +- **Total**: the number of requests from that remote address. + +The table lists the 10 remote addresses with the most requests. To reach the others, add a filter that narrows the chart to the requests you need. Use the table to find regional traffic patterns and unusual activity from one country or network, then act on it. For example, to block the requests of one address or country, refer to [Block requests by IP, ASN, or country](/en/documentation/guides/application-security/bots-and-network/blocklists-ip-addresses-edge/). The table shows no variation tag. + +To query the same numbers, sum `requests` from the `httpBreakdownMetrics` dataset grouped by `remoteAddress`, `geolocAsn`, `geolocCountryName`, and `geolocRegionName`. For each field, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#httpbreakdownmetrics). + +--- + +## Tiered Cache + +The **Tiered Cache** tab shows metrics on the applications that use Tiered Cache, which must be active in your account for the tab to report data. Tiered Cache adds a cache layer between the data center and your origin. The tab holds one dashboard, **Caching Offload**, so the Console shows no dashboard selector. + +| Chart | What it measures | Unit | Aggregation | +| --- | --- | --- | --- | +| Tiered Cache | Data transferred through the Tiered Cache layer, split into data in, data out, and their total. | Bytes | Sum | +| Tiered Cache Offload | Share of data the Tiered Cache layer delivered to the data center without fetching it from the origin. | Percent | Average | + +The **Tiered Cache** chart draws three series, and each one counts this path: + +| Series | Path counted | +| --- | --- | +| Data Transferred In | Data center → Tiered Cache layer → origin | +| Data Transferred Out | Origin → Tiered Cache layer → data center | +| Data Transferred Total | Data Transferred In + Data Transferred Out | + +Each diagram below draws one series of the **Tiered Cache** chart, with the request on the top row and the response on the bottom row. A solid arrow is a leg the series counts, and a dotted arrow is a leg it does not count. + +```mermaid title="Tiered Cache tab, Data Transferred In" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Client"] -. request .-> D["Data center"] + D -- request --> T["Tiered Cache"] + T -- request --> O["Origin"] + O -. response .-> T + T -. response .-> D + D -. response .-> C + linkStyle 1,2 stroke-width:3px +``` + +1. Counted: the request travels from the data center to the Tiered Cache layer, and from the Tiered Cache layer to the origin. +2. Not counted: the client legs, which the **Edge Cache** chart counts, and the response, which **Data Transferred Out** counts. + +```mermaid title="Tiered Cache tab, Data Transferred Out" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Client"] -. request .-> D["Data center"] + D -. request .-> T["Tiered Cache"] + T -. request .-> O["Origin"] + O -- response --> T + T -- response --> D + D -. response .-> C + linkStyle 3,4 stroke-width:3px +``` + +1. Counted: the response travels from the origin to the Tiered Cache layer, and from the Tiered Cache layer to the data center. +2. Not counted: the client legs, which the **Edge Cache** chart counts, and the request, which **Data Transferred In** counts. + +```mermaid title="Tiered Cache tab, Data Transferred Total" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Client"] -. request .-> D["Data center"] + D -- request --> T["Tiered Cache"] + T -- request --> O["Origin"] + O -- response --> T + T -- response --> D + D -. response .-> C + linkStyle 1,2,3,4 stroke-width:3px +``` + +1. Counted: the request, from the data center to the Tiered Cache layer and on to the origin. +2. Counted: the response, from the origin to the Tiered Cache layer and back to the data center. +3. Not counted: both legs between the client and the data center, which the **Edge Cache** chart counts. + +The traffic between the client and the data center is counted by the **Edge Cache** chart on the **Applications** tab instead. + +**Tiered Cache Offload** measures the share of data the Tiered Cache layer returned to the data center from its own cache: data center → Tiered Cache layer → data center. A higher percentage means the Tiered Cache layer answers more of the requests the data center cannot serve, and your origin handles less demand. For example, if 1 GB passes through the Tiered Cache layer with an average **Tiered Cache Offload** of 80%, the layer delivered 800 MB of it from cache. + +An increase on **Tiered Cache Offload** shows as good. The **Tiered Cache** chart draws three series and shows no variation tag. Byte values scale from `B` up to `TB`, and percentages show two decimals. + +To query the same numbers, use the `tieredCacheMetrics` dataset. The **Tiered Cache** chart reads `dataTransferredIn`, `dataTransferredOut`, and `dataTransferredTotal`, and **Tiered Cache Offload** reads `offload`. For each field, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#tieredcachemetrics-tiered-cache). + +--- + +## Functions + +The **Functions** tab shows metrics on the invocations of the [Functions](/en/documentation/platform/functions/) configured in your account, and Functions must be active for the tab to report data. The tab holds one dashboard, **Invocations**. + +| Chart | What it measures | Unit | Aggregation | +| --- | --- | --- | --- | +| Total Invocations | Times your functions ran, split by where each function is attached. | Invocations | Sum | + +Each execution of a configured function counts as one invocation. **Total Invocations** draws two series: **Edge Application Invocations** counts the functions that ran on an application, and **Edge Firewall Invocations** counts those that ran on a firewall. The chart draws two series, so it shows no variation tag. + +To query the same numbers, read `edgeApplicationInvocations` and `edgeFirewallInvocations` from the `edgeFunctionsMetrics` dataset. For each field, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#edgefunctionsmetrics-functions). + +--- + +## Image Processor + +The **Image Processor** tab shows metrics on the requests for the images that Image Processor processes. Image Processor must be active in your account for the tab to report data. The tab holds one dashboard, **Requests**. + +| Chart | What it measures | Unit | Aggregation | +| --- | --- | --- | --- | +| Total Requests | Requests for processed images that returned status 304 or a status from 199 to 299. | Requests | Sum | +| Total Requests per Second | Requests per second for processed images that returned status 304 or a status from 200 to 299. | Requests per second | Sum | + +Both charts count the requests for every processed image on the domain where Image Processor is configured, and both draw one series, **Requests**. **Total Requests** keeps the responses with status 304 or a status from 199 to 299. **Total Requests per Second** keeps status 304 or a status from 200 to 299, and returns the rate of those requests per second. An increase shows as good on both charts. + +To query the same numbers, sum `requests` from the `imagesProcessedMetrics` dataset, filtered to those status codes. For each field, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#imageprocessedmetrics-image-processor). + +--- + +## Related resources + + + + The time range, the filters, and the chart menu that apply to every chart on these dashboards. + How a metric reaches a chart, and which bucket size each time range returns. + Every field of the datasets named on this page, with its type and description. + Query the offload, saved, and missed values of one domain through the GraphQL API. + + diff --git a/src/content/docs/en/pages/observe/real-time-metrics/filters-and-time-range.mdx b/src/content/docs/en/pages/observe/real-time-metrics/filters-and-time-range.mdx new file mode 100644 index 0000000000..9db1cbc358 --- /dev/null +++ b/src/content/docs/en/pages/observe/real-time-metrics/filters-and-time-range.mdx @@ -0,0 +1,332 @@ +--- +title: Filters and time range +description: Look up every control above the Real-Time Metrics charts, from the time range and auto-refresh to filters, the query input, and the chart menu. +meta_tags: 'real-time metrics, filters, time range, auto-refresh, timezone, charts, export' +namespace: documentation_products_real_time_metrics_filters_and_time_range +permalink: /documentation/platform/real-time-metrics/filters-and-time-range/ +--- + +import FrameBox from '@aziontech/webkit/frame-box' +import ItemList from '@aziontech/webkit/item-list' +import DocItem from '@aziontech/webkit/doc-item' + +[Real-Time Metrics](/en/documentation/platform/real-time-metrics/) shows each dashboard in Azion Console under one set of controls: a category dropdown, product tabs, a filter row, and a dashboard selector. The time range and the filters you set in the filter row apply to every chart of the dashboard you are viewing. + +--- + +## Screen layout + +The Real-Time Metrics screen groups its dashboards by category and product. Under **Build**, the product tabs are [Applications](/en/documentation/platform/applications/), [Tiered Cache](/en/documentation/platform/applications/cache/tiered-cache/), [Functions](/en/documentation/platform/functions/), and [Image Processor](/en/documentation/platform/applications/#image-processor). Under **Secure**, they are [WAF](/en/documentation/platform/firewall/#waf), [Edge DNS](/en/documentation/platform/edge-dns/), [Bot Manager](/en/documentation/platform/firewall/#bot-manager), and **Threats Breakdown**. Under **Observe**, the one tab is [Data Stream](/en/documentation/platform/data-stream/). + +The controls sit in this order, from the top of the screen: + +| Control | Form | Behavior | +| --- | --- | --- | +| Category | A dropdown with **Build**, **Secure**, and **Observe** | Changing the category opens its first product and that product's first dashboard. | +| Product tabs | One tab per product of the category | Each tab opens the dashboards of one product. | +| Filter row | The filter button, the query input, the time-range picker, and the **Refresh** button, inside a card | Sets the data that every chart of the dashboard fetches. | +| Applied filters | One chip per filter, under the filter row | Each chip shows one filter and opens it for editing. | +| Dashboard selector | A segmented button, such as **Data Transferred** and **Requests** | Shows only when the product has more than one dashboard: **Applications** and **Bot Manager**. | +| Charts | Big-number cards in the first row, then the other charts in a 12-column grid | Charts that do not fit the screen continue down the page. | + +With no product or dashboard in the URL, the screen opens on **Build** › **Applications** › **Data Transferred**. While the charts load, four placeholder cards hold their place. Each dashboard and its charts are described in [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/), [Secure dashboards](/en/documentation/platform/real-time-metrics/secure-dashboards/), and [Observe dashboards](/en/documentation/platform/real-time-metrics/observe-dashboards/). + +--- + +## Time range + +The time range sets the period that every chart of the dashboard fetches. It is one date-range picker in the filter row, and the screen opens on **Last 5 minutes**. The picker has four tabs: + +| Tab | What it sets | +| --- | --- | +| **Quick** | A direction, **Last** or **Next**; a number, minimum 1, default 15; and a unit, default **Minutes**; then **Apply**. The **Commonly used** presets follow the row. | +| **Absolute**, **Relative** | One shared form: **Start date** and **End date** fields, a calendar in `dd/mm/yy` format, time slots every 30 minutes from `00:00` to `23:30`, an option labeled **From now**, and **Apply**. | +| **Now** | The **Set Now** button. The tab states: `Selecting 'Set Now' sets the time dynamically to the exact moment of each refresh.` | + +The unit dropdown of the **Quick** tab offers **Minutes**, **Hours**, **Days**, **Weeks**, **Months**, and **Years**. + +### Commonly used presets + +The **Quick** tab lists 12 presets in two columns, in this order: + +| Preset | Period covered | +| --- | --- | +| **Today** | The current day, from 00:00 to 23:59:59 | +| **This week** | The current week, from Sunday 00:00 to Saturday 23:59:59 | +| **Last 1 minute** | 1 minute | +| **Last 5 minutes** | 5 minutes | +| **Last 15 minutes** | 15 minutes | +| **Last 30 minutes** | 30 minutes | +| **Last 1 hour** | 1 hour | +| **Last 24 hours** | 24 hours | +| **Last 7 days** | 7 days | +| **Last 30 days** | 30 days | +| **Last 90 days** | 90 days | +| **Last 1 year** | 365 days | + +### Range bounds and display + +The calendar accepts dates from 730 days back up to the current moment, and a date outside that window is clamped to its nearest bound. A chosen boundary displays in the form `Mon D, YYYY @ HH:MM:SS`. + +After you change the range, the **Refresh** button reads **Update**. Select **Update** to load every chart for the new range. + +The length of the range also sets the resolution of the time charts: one point per minute, per hour, or per day. For the thresholds, refer to [How Real-Time Metrics works](/en/documentation/platform/real-time-metrics/how-it-works/). For how far back data goes, refer to [Real-Time Metrics limits](/en/documentation/platform/real-time-metrics/limits/). + +--- + +## Auto-refresh + +Real-Time Metrics reloads the charts on a timer only when you turn auto-refresh on. The control sits in the **Quick** tab of the time-range picker: + +| Control | Values | Default | +| --- | --- | --- | +| **Refresh Every** switch | On or off | Off | +| Interval | A number, minimum 1, editable only while the switch is on | 10 | +| Unit | **Seconds**, **Minutes**, or **Hours** | **Seconds** | + +Auto-refresh works with any range, and no preset turns it on by itself. To keep the end of the range at the moment of each refresh, use **Set Now** in the **Now** tab. + +Beside the picker, the **Refresh** button reloads every chart on demand. After you change the range or edit the query input without applying it, the button reads **Update** and applies the change. **Refresh** and **Update** are both disabled while the query input shows a validation error or the start of the range is after its end. + +--- + +## Timezone + +Real-Time Metrics reads and plots data in the timezone of your account. The charts convert the range with the account's UTC offset and shift each point on the x-axis by the same offset. + +The footer of the time-range picker shows `UTC:` followed by the account timezone, and a **UTC Offset:** selector. The selector's first option, such as `Account (UTC-03:00)`, is the account offset and the default. The other options read `(UTC +hh:mm)` followed by a timezone name, sorted by offset, and the **Search timezone** box narrows the list. + +On a time chart, x-axis ticks use the format `%b-%d %H:%M`, such as `Oct-02 11:15`. Tooltip titles use the `en-US` date and time format. + +--- + +## Filters + +With no filter, the charts of a dashboard show data for the whole account. A filter keeps only the data whose field matches a value, on every chart of the dashboard. To add, edit, or remove a filter step by step, refer to [Filter a Real-Time Metrics dashboard](/en/documentation/guides/platform/observability/add-filters-metrics/). + +### Filter popover + +The filter button is an icon with the tooltip **Add filter**. It opens the **Filter** popover, or a bottom sheet on a screen 768 px wide or narrower. The popover states: `Each combination of operator can only be used once.` + +| Control | Caption | Behavior | +| --- | --- | --- | +| Field | **Filter**, placeholder **Select a field** | A searchable list of the dashboard's fields, the most relevant first. | +| Operator | **Operator**, placeholder **Select an operator** | Hidden until you choose a field. When the field has one operator, it is selected and locked. | +| Value | Depends on the field type | Described in Value types. A field's description from the GraphQL schema can show as a note on the value input. | +| Buttons | **Cancel** and **Apply** | **Apply** stays disabled until the form is valid. | + +While the field list loads, the filter row shows a placeholder. + +### Fields + +The field list is not fixed. When a dashboard opens, Real-Time Metrics reads the filter inputs of the dashboard's dataset from the GraphQL schema and lists them as fields. A field label is the input name split into words, without its operator suffix, with each word capitalized: `upstreamCacheStatusEq` becomes **Upstream Cache Status**. Inputs whose schema description marks them as deprecated do not appear, and neither do a fixed set of excluded inputs such as `clientId`. + +For every field of a dataset and its type, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/). + +Some fields carry a list of values instead of free input: + +| Field | Values | +| --- | --- | +| **Domain** or **Workload** | The workloads of your account. The label depends on whether your account uses domains or workloads. | +| The Edge DNS zone field | Your Edge DNS zones, by name | +| The function field | Your functions, by name | +| **Classified**, and the bot category field | _Legitimate_, _Good Bot_, _Bad Bot_, _Under Evaluation_ | +| The challenge field | _Solved_, _Not Solved_ | +| **Action** | _Allow_, _Custom HTML_, _Deny_, _Drop_, _Hold Connection_, _Random Delay_, _Redirect_ | + +The field dropdown lists a few fields first, by dashboard. The remaining fields follow in alphabetical order: + +| Dashboard | Fields listed first | +| --- | --- | +| **Applications**: **Data Transferred**, **Requests**, **Status Codes**, **Bandwidth Saving**; **Image Processor**: **Requests** | **Domain** or **Workload**, **Status**, **Upstream Status**, **Upstream Cache Status**, **Request Time** | +| **Tiered Cache**: **Caching Offload** | **Upstream Bytes Received**, **Status**, **Upstream Status**, **Upstream Cache Status**, **Request Time** | +| **Functions**: **Invocations** | **Domain** or **Workload**, **Edge Function Id**, **Compute Time**, **Invocations**, **Edge Functions Instance Id List** | +| **Edge DNS**: **Standard Queries** | **Qtype**, **Requests**, **Source Loc Pop**, **Zone Id** | +| **Data Stream**: **Data Streamed** | **Domain** or **Workload**, **Status**, **Data Streamed**, **Endpoint Type**, **Requests** | + +The **Bot Manager** dashboards, **Request Breakdown**, and **Threats Breakdown** list every field in alphabetical order. + +### Operators + +The operators a field offers depend on its type. Each operator has a label in the **Operator** dropdown, a symbol on the applied-filter chip, a form in the query input, and the GraphQL operator the chart's query sends: + +| Operator | Chip symbol | Query-input form | GraphQL operator | +| --- | --- | --- | --- | +| **Equals** | `=` | `=` | `Eq` | +| **Not Equals** | `≠` | `<>` | `Ne` | +| **Contains** | `⊃` | `like` | `Like` | +| **Not Contains** | `⊅` | `ilike` | `Ilike` | +| **In** | `in` | `in` | `In` | +| **Between** | `≤` | `between` | `Range` | +| **Less Than** | `<` | `<` | `Lt` | +| **Less Than or Equal** | `≤` | `<=` | `Lte` | +| **Greater Than** | `>` | `>` | `Gt` | +| **Greater Than or Equal** | `≥` | `>=` | `Gte` | + +**Contains** and **Not Contains** wrap the value as `%value%` before the query runs. For what each GraphQL operator matches, refer to [GraphQL queries](/en/documentation/devtools/graphql/queries/#operators). + +### Value types + +The value input follows the type of the field: + +| Field type | Value input | +| --- | --- | +| Text, `String` | A text box | +| Integer, `Int` | A whole number | +| Decimal, `Float` | A number with 2 to 5 decimals | +| Range, `IntRange` or `FloatRange` | A **Begin** and **End** pair | +| A field with a list of values | A multi-select with a **Search** box, or a single select, both with the placeholder **Select** | + +A range needs a begin lower than its end. Otherwise, the popover shows `Begin must be different from end`, `Begin must be less than end`, `End must be different from begin`, or `End must be more than begin`. When a list of values cannot load, a `Loading failed` message appears. + +### Applied filters + +Each applied filter shows as a chip under the filter row, in the form ` : `, with the operator label in lowercase. A range shows as `(begin,end)` and an **In** list as `(a, b)`. Selecting a chip opens the **Filter** popover with that filter's values, and a lock icon replaces the field arrow, because the field cannot change. The remove icon on a chip deletes that filter. + +### Filter combination + +As the **Filter** popover states, each combination of operator can be used only once. The query input joins conditions with `and`, so the charts show only the data that matches every applied filter. To match any of several values of one field, use **In**. + +### Filters on a dashboard switch + +Switching to a dashboard that reads a different dataset clears the filters and keeps the time range. Filters whose field does not exist in the new dataset are dropped from the query. The dataset of each dashboard is listed in [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/). + +--- + +## Query input + +The query input in the filter row filters the dashboard with a typed expression in Azion Query Language. Its placeholder reads `Filter using Azion Query Language syntax...`. An expression follows these rules: + +- A condition is a field, an operator, and a value, separated by spaces: `status = 200`. +- A field name of more than one word goes in double quotes: `"Upstream Status"`. +- The `in` operator takes its values in parentheses, with no comma after the last one: `domain in (domain1, domain2)`. +- The `between` operator takes exactly two different values in parentheses: `status between (200, 300)`. +- Conditions join with `and`. + +While you type, the input suggests fields, then operators, then values. `Ctrl` + `Space`, or `Cmd` + `Space`, opens the suggestions; `Enter` applies the expression; and `Esc` closes the suggestions. + +### Validation messages + +The query input shows these messages as rendered, and **Refresh** stays disabled until the expression is valid: + +| Message | Cause | +| --- | --- | +| `please add spaces between the field, operator, and value. For example, write "status = 200" instead of "status=200".` | A condition has no spaces around its operator. | +| `composite fields must be included in quotes. e.g: "Upstream Status".` | A field name of more than one word is not in double quotes. | +| `some provided fields do not match the currently available ones. Please, check and try again.` | A field does not exist in the dashboard's dataset. | +| `there are fields with 'in' operator that need to be inside parentheses. Please, check and try again. e.g: domain in (domain1, domain2)` | The values of an `in` condition are not in parentheses. | +| `fields with 'in' operator that need the comma removed at the end of the values in parentheses. Please, check and try again.` | The value list of an `in` condition ends with a comma. | +| `Please enclose the values for the BETWEEN operator in parentheses. For example: status between (200, 300).` | The values of a `between` condition are not in parentheses. | +| `The BETWEEN operator requires its values to be enclosed in parentheses. For example: status between (200, 300).` | The values of a `between` condition are not in parentheses. | +| `The BETWEEN operator must have exactly two values. For example: status between (200, 300).` | A `between` condition has one value, or more than two. | +| `The two values for the BETWEEN operator must be different. For example: status between (200, 300).` | A `between` condition repeats the same value. | + +--- + +## Shareable URL + +The path of the Real-Time Metrics URL names the product tab and the dashboard, such as `https://console.azion.com/real-time-metrics/edge-applications/data-transferred` for **Applications** › **Data Transferred**. Another user of the account who opens that URL lands on the same dashboard. + +A URL can also carry a `filters` query parameter. Its value is a base64-encoded JSON object, and Real-Time Metrics reads its `external.tsRange` key, with `begin` and `end`, as the time range to open on. + +--- + +## Chart anatomy + +Each chart is a card. From the top, it carries the owner icon, the chart title, and the menu button; then the description; then the aggregation tag and, where it applies, the variation tag; then the chart itself. + +| Part | What it shows | +| --- | --- | +| Owner icon | An icon with no text for who owns the chart: the Azion logo, a group icon for the account, or a person icon for a user. Every chart Real-Time Metrics ships carries the Azion logo. | +| Title | The chart's name, such as **Edge Offload** or **Missed Data**. | +| Menu button | An icon button labeled **More options** that opens the chart menu. | +| Description | A short text on what the chart plots. | +| Aggregation tag | **Sum** or **Average**, with a calculator icon: the aggregation the chart's query uses. | +| Variation tag | The change against the preceding window of the same length, described in Variation tag. | +| Series | One category of data. For example, a requests chart can carry one series per domain, each a line of points over time. | +| X-axis | On a time chart, the period of the selected range. | +| Legend | One entry per series, in the form ` - `. | +| Tooltip | The name and value of each series at the point under the cursor, in descending order of value. | + +### Legend + +Each legend entry shows the series name and its total over the range. On a chart whose aggregation tag reads **Average**, the total is divided by the number of points. Select a legend entry to hide or show its series. + +A chart plots at most 16 series; further series are not added. The legend sits at the bottom of the chart by default. It moves to the right when the chart is wider than two grid columns and has more than five series, and it stays at the bottom in a window narrower than 1024 px. Ordered bar charts show no legend. + +### Tooltip and zoom + +The tooltip shows only in a window wider than 540 px. Charts whose x-axis is time can be zoomed: scroll up over the chart to zoom in, and scroll down to zoom out. Inside the range, a time bucket with no data plots as zero. + +### List charts + +A list chart is a table. Its column headers come from the field names: `sum` reads **Total**, `geolocCountryName` reads **Country**, `geolocAsn` reads **ASN**, `geolocRegionName` reads **Region**, and other names are title-cased. The table scrolls inside a 375 px height, and an empty table reads `No registers found.` + +### Chart states + +A chart card shows one of these states in place of the chart: + +| State | What shows | +| --- | --- | +| Loading | A placeholder in the chart's place | +| No data | `No data available` | +| Query error | `The chart can't be plotted. There was an issue loading the data.`, in place of the aggregation tag row | + +--- + +## Chart menu + +The **More options** button of a chart card opens the chart menu. Each item shows only when it applies to the chart: + +| Item | What it does | +| --- | --- | +| **Open Help Center** | Opens the chart's Help Center article in the Console side panel. | +| **Copy query** | Copies the chart's GraphQL query and its variables to the clipboard. It opens nothing. | +| **Export CSV** | Downloads a `.csv` file named after the chart, with the points as plotted. | +| **Show Mean Line**, **Hide Mean Line** | Draws or removes one line at the mean of all points. Shown on time charts with at least one series. | +| **Show Mean Line per series**, **Hide Mean Line per series** | Draws or removes one mean line per series, to compare series. Shown on time charts with two or more series. | + +### Copy query + +**Copy query** puts a text block on the clipboard: the line `# QUERY`, the chart's GraphQL query, then the line `# VARIABLES` and the variables as a JSON object. Both marker lines are GraphQL comments. The query reads its filter values from the variables, so it does not run on its own. To run it, paste the query into the GraphiQL Playground and move the JSON after `# VARIABLES` into the variables pane. For more information, refer to [GraphiQL Playground](/en/documentation/devtools/graphql/graphql-playground/). + +### Export CSV + +**Export CSV** writes the file with `;` as the separator and dates in the `en-US` form, month first with a 12-hour clock. The file holds the points as the chart plots them for the selected range and filters. + +### Mean lines + +A mean line is the sum of the chart's points divided by the number of points, for the selected range. Its legend entry reads `Mean Line - `. A mean line per series computes the same mean for each series, and its entry reads `Mean Line - - `. + +--- + +## Variation tag + +The variation tag compares the selected range with the window of the same length immediately before it. It shows on time charts whose result is a single series and on big-number cards. Charts by category, such as pie charts, ordered bar charts, and lists, never show it. + +The value is `(current − previous) / previous × 100`, shown as a percentage with two decimals. For example, with **Last 1 hour** selected at 10:00, the tag compares 09:00 to 10:00 with 08:00 to 09:00. + +When the change is between –0.01% and +0.01%, the tag reads **Can't compare**, in a warning color with a triangle icon. It also reads **Can't compare** when either value is missing or the previous value is 0. + +Otherwise, the color says whether the change is good for that chart: + +| Chart | Increase | Decrease | Example | +| --- | --- | --- | --- | +| An increase is good | Green | Red | **Edge Offload** | +| An increase is bad | Red | Green | **Missed Data** | +| Neither direction is good or bad | Blue | Blue | **Good Bot Hits**, **Transactions** | + +On a chart where an increase is good, the tag adds an up-right arrow for an increase and a down-left arrow for a decrease. Blue tags appear only on big-number cards. + +--- + +## Related resources + + + + The steps to add, edit, and remove a filter on a dashboard. + The steps to export a chart as CSV and run its query outside the Console. + Every Build dashboard, its dataset, and what each chart plots. + How far back the time range reaches, the series cap, and the other bounds. + + diff --git a/src/content/docs/en/pages/observe/real-time-metrics/glossary.mdx b/src/content/docs/en/pages/observe/real-time-metrics/glossary.mdx new file mode 100644 index 0000000000..5827a6b1a5 --- /dev/null +++ b/src/content/docs/en/pages/observe/real-time-metrics/glossary.mdx @@ -0,0 +1,37 @@ +--- +title: Glossary +description: Look up offload, saved data, dataset, aggregation tag, variation tag, resolution, and the other terms the Real-Time Metrics documentation uses. +meta_tags: 'real-time metrics, glossary, terms, metrics, offload, dataset' +namespace: documentation_products_real_time_metrics_glossary +permalink: /documentation/platform/real-time-metrics/glossary/ +--- + +This glossary defines the terms that [Real-Time Metrics](/en/documentation/platform/real-time-metrics/) uses on its dashboards in Azion Console and in its GraphQL API. + +| Term | Definition | +| --- | --- | +| aggregation tag | The tag under a chart's description that names how the chart combines the values it plots: **Sum** adds them, and **Average** averages them. The legend total follows the same rule, so on an **Average** chart it is divided by the number of points. [Filters and time range](/en/documentation/platform/real-time-metrics/filters-and-time-range/) describes every part of a chart card. | +| at-most-once | The counting approach of Real-Time Metrics, which favors performance: each event is counted once or not at all. Billing uses an exactly-once approach and counts each event precisely once, so the two can differ, and Billing is the figure to trust. [Real-Time Info and Precise Billing](/en/documentation/fundamentals/billing-and-subscriptions/#real-time-info-and-precise-billing) compares the two approaches. | +| Azion Query Language | The syntax of the query input in the filter row, where you write a condition as a field, an operator, and a value separated by spaces, such as `status = 200`, and join conditions with `and`. A field name of two or more words goes in quotes, such as `"Upstream Status"`. [Filters and time range](/en/documentation/platform/real-time-metrics/filters-and-time-range/) lists the operators and the validation messages. | +| bot | A request that shows the non-human characteristics of a [bot](https://www.azion.com/en/learning/bots/what-is-a-bot/): abnormal patterns, missing or unusual headers, a suspicious user-agent string, an IP address with a malicious history, a failed challenge such as a CAPTCHA, or signs of an automation tool. [Bot Manager](/en/documentation/platform/firewall/#bot-manager) classifies a bot as _Good Bot_, such as a search engine crawler, which is allowed, or _Bad Bot_, which scrapes data, launches attacks, or overloads systems. [Secure dashboards](/en/documentation/platform/real-time-metrics/secure-dashboards/) charts both classes, with _Legitimate_ and _Under Evaluation_ requests. | +| category | The top-level grouping of Real-Time Metrics dashboards, selected in the category dropdown: **Build**, **Secure**, or **Observe**. A category holds product tabs, and a product tab holds one or more dashboards. [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/), [Secure dashboards](/en/documentation/platform/real-time-metrics/secure-dashboards/), and [Observe dashboards](/en/documentation/platform/real-time-metrics/observe-dashboards/) document one category each. | +| dashboard | A set of charts that Real-Time Metrics shows together for one product, such as **Data Transferred** on the **Applications** tab. Every chart on a dashboard reads the same dataset, and a product with more than one dashboard shows a selector to switch between them. [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/) lists each Build dashboard and its charts. | +| Data Transferred In | The series that counts data traveling from the client toward the origin: from the client to the data center, then from the data center to the origin. With [Tiered Cache](/en/documentation/platform/applications/cache/tiered-cache/) on, that second leg ends at the Tiered Cache layer instead. The **Edge Cache** chart of the **Data Transferred** dashboard plots it from the `dataTransferredIn` field. | +| Data Transferred Out | The series that counts data traveling from the origin toward the client: from the origin to the data center, then from the data center to the client. With [Tiered Cache](/en/documentation/platform/applications/cache/tiered-cache/) on, that first leg starts at the Tiered Cache layer instead. The **Edge Cache** chart of the **Data Transferred** dashboard plots it from the `dataTransferredOut` field. | +| Data Transferred Total | The sum of Data Transferred In and Data Transferred Out, in bytes, plotted from the `dataTransferredTotal` field. It measures volume over the range, while bandwidth, as in **Total Bandwidth Usage**, measures the content your application delivers every second, in bits per second. Saved data counts only the bytes delivered without a trip to the origin, and [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/) documents all three charts. | +| dataset | A named collection of aggregated metrics that the GraphQL API exposes, such as `httpMetrics`, which holds the request events of Applications and Firewall. Each dashboard reads one dataset, and each chart on it queries fields of that dataset, as the query that **Copy query** copies to the clipboard shows. [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/) lists every dataset and its fields. | +| mean line | A line that a time chart can overlay at the average of its points: the sum of the points divided by their number, for that chart and range. **Show Mean Line** draws one line for the chart, and **Show Mean Line per series** draws one line per series on a chart with two or more series. [Filters and time range](/en/documentation/platform/real-time-metrics/filters-and-time-range/) describes the chart menu. | +| metric | An aggregated value that Real-Time Metrics computes from the events a product generates, such as a count of requests or of bytes per time bucket, and plots on a chart. The raw events behind a metric are in Real-Time Events. The [Learning Center](https://www.azion.com/en/learning/observability/what-are-metrics/) covers metrics in general. | +| missed data | Data that the data center delivered to the client after fetching the content from the origin, because the content was not in [cache](https://www.azion.com/en/learning/cdn/what-is-caching/): client → data center → origin → data center → client. The **Missed Data** chart sums it in bytes from the `missedData` field, and **Missed Requests** and **Missed Bandwidth** count the same case by requests and by bandwidth. [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/) documents the three charts. | +| offload | The percentage of content that the data center delivered to the client without fetching it from the origin, charted on [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/). Real-Time Metrics reports it by data in **Edge Offload**, by requests in **Requests Offloaded**, and by bandwidth in **Bandwidth Offloaded**. **Tiered Cache Offload** reports the share of data that the Tiered Cache layer delivered without fetching it from the origin. | +| Real-Time Events | The Observe product that holds the raw events products generate, such as the log of each request, while Real-Time Metrics shows those events aggregated into metrics over time. Use it to inspect the individual requests behind a change on a chart. [Real-Time Events](/en/documentation/platform/real-time-events/) documents the product. | +| request | One access to your application's content: Real-Time Metrics counts each access as one request. The **Total Requests** chart splits requests into **Http Requests Total** and **Https Requests Total**, and **Edge Requests Total** is their sum. [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/) documents every request chart. | +| Request Breakdown | The fifth dashboard of the **Applications** tab, and the only one that reads the `httpBreakdownMetrics` dataset instead of `httpMetrics`. Its **IP Address Information** table distributes requests by remote address, ASN, country, and region. [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/) documents the table. | +| resolution | The length of time that each point on a time chart covers: a minute, an hour, or a day. Real-Time Metrics picks it from the length of the selected range, not from the age of the data, so a longer range plots fewer and wider points. [How Real-Time Metrics works](/en/documentation/platform/real-time-metrics/how-it-works/) gives the range lengths that switch it. | +| saved data | Data that the data center delivered to the client from cache, without fetching the content from the origin: client → data center → client. The **Saved Data** chart sums it in bytes from the `savedData` field, and **Saved Requests** and **Saved Bandwidth** count the same case by requests and by bandwidth. Offload expresses the same case as a percentage, and [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/) documents each chart. | +| series | One line, bar, or slice of a chart, representing one category of data, such as one domain on a chart of requests over time. A chart can show several series, and the legend lists each one with its total over the range. [Filters and time range](/en/documentation/platform/real-time-metrics/filters-and-time-range/) describes the legend. | +| threat | A request that [WAF](/en/documentation/platform/firewall/#waf) identifies as an attack, which [Secure dashboards](/en/documentation/platform/real-time-metrics/secure-dashboards/) counts by type. Cross-Site Scripting (XSS) injects malicious client-side scripts into pages your visitors view, and Remote File Inclusion (RFI) includes remote files or scripts in your domain. SQL injection injects code that tries to read or attack data it has no permission to access, and **Other Threats** counts every other type. | +| Tiered Cache layer | The extra cache layer that [Tiered Cache](/en/documentation/platform/applications/cache/tiered-cache/) adds between the data center and the origin, described further in the [Learning Center](https://www.azion.com/en/learning/cdn/what-is-tiered-caching/). With Tiered Cache on, the **Edge Cache** chart counts data between the client, the data center, and the Tiered Cache layer. The **Tiered Cache** dashboard counts data between the data center, the Tiered Cache layer, and the origin. | +| `tsRange` | The filter argument of a [GraphQL query](/en/documentation/devtools/graphql/queries/) that sets its time interval with a `begin` and an `end` timestamp. A query needs a time interval, given by `tsRange` or by bounds such as `tsGte` and `tsLt`, or the API returns `400` with `To execute queries it is mandatory to provide the desired time interval.` Azion Console carries the selected range as `tsRange` in the `filters` parameter of a shared URL. | +| upstream status | The [status code](https://www.azion.com/en/learning/http-errors/http-status-codes-explained/) that the server behind Azion, such as your origin or an external service, returned for a request, recorded in the `upstreamStatus` field. The status is the code your application on Azion returned to the client, so the two can differ for one request. The **Requests by Status and Upstream Status** table counts requests by both, and [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/) documents it. | +| variation tag | The percentage tag beside the aggregation tag that compares the selected range with the window of equal length right before it. It appears on time charts with a single series and on big-number cards, and its color shows whether the change is good for that chart, so an increase in **Missed Data** shows in red. When there is nothing to compare, the tag reads **Can't compare**. | diff --git a/src/content/docs/en/pages/observe/real-time-metrics/how-it-works.mdx b/src/content/docs/en/pages/observe/real-time-metrics/how-it-works.mdx new file mode 100644 index 0000000000..3a89d98272 --- /dev/null +++ b/src/content/docs/en/pages/observe/real-time-metrics/how-it-works.mdx @@ -0,0 +1,135 @@ +--- +title: How Real-Time Metrics works +description: Follow a request until it becomes a point on a Real-Time Metrics chart, and see how aggregation, resolution, and counting shape each value. +meta_tags: 'real-time metrics, how it works, aggregation, resolution, retention, graphql, observe' +namespace: documentation_products_real_time_metrics_how_it_works +permalink: /documentation/platform/real-time-metrics/how-it-works/ +--- +import FrameBox from '@aziontech/webkit/frame-box' +import ItemList from '@aziontech/webkit/item-list' +import DocItem from '@aziontech/webkit/doc-item' + +A metric is a number computed from many events over a slice of time: a count of requests, a sum of bytes, or a share of content served from cache. Every request your traffic makes is recorded as an event, the events are added up per minute, hour, or day, and a chart plots one point per slice. The point is a total, so it arrives later than the requests it counts and says nothing about any single one of them. + +[Real-Time Metrics](/en/documentation/platform/real-time-metrics/) shows those totals. It creates nothing in your account: it reads the metrics that other Azion products generate while they serve your traffic, and it shows them as charts in [Azion Console](https://console.azion.com/) and through the [GraphQL API](/en/documentation/devtools/graphql/). To open your first dashboard, refer to the [Real-Time Metrics quickstart](/en/documentation/platform/real-time-metrics/quickstart/). + +The sections follow a request until it is a point on a chart: the path from a request to a chart, aggregation and its delay, the resolution of each point, how counting differs from Billing, metrics and events, the datasets each dashboard reads, and retention. + +--- + +## From a request to a chart + +The products that serve your traffic record what they do with each request or query: [Applications](/en/documentation/platform/applications/), [Cache](/en/documentation/platform/applications/#cache), [Tiered Cache](/en/documentation/platform/applications/cache/tiered-cache/), [Functions](/en/documentation/platform/functions/), [Image Processor](/en/documentation/platform/applications/#image-processor), [WAF](/en/documentation/platform/firewall/#waf), [Edge DNS](/en/documentation/platform/edge-dns/), [Bot Manager](/en/documentation/platform/firewall/#bot-manager), and [Data Stream](/en/documentation/platform/data-stream/). Real-Time Metrics changes nothing on these products. It reads what they record, after Azion aggregates it. + +This diagram follows one request until it becomes a point on a chart: + +```mermaid +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "13px"}, "flowchart": {"nodeSpacing": 12, "rankSpacing": 12, "padding": 6, "wrappingWidth": 70, "minNodeWidth": 40, "useMaxWidth": true}}}%% +flowchart LR + Req["Request"] --> Ev["Product events"] + Ev --> Agg["Aggregation"] + Agg --> DS["Datasets"] + DS --> API["GraphQL API"] + API --> Con["Console dashboards"] + API --> Gr["Grafana"] +``` + +1. A client sends a request, and the product that handles it, such as an application, serves it and records it as an event. +2. Azion aggregates the events into metrics, such as a count of requests or a sum of bytes per time bucket. Aggregation takes up to 10 minutes. +3. The metrics are stored in datasets, one per kind of traffic, such as `httpMetrics` for the requests that Applications and WAF handle. +4. The GraphQL API at `https://api.azion.com/v4/metrics/graphql` answers queries on those datasets. +5. Each chart in Azion Console is a query to that same API, so a dashboard and a query you write read the same numbers. +6. A Grafana dashboard can read the same datasets through the API. To set up Grafana, refer to [Install the Azion plugin for Grafana](/en/documentation/guides/platform/observability/integrate-grafana/). + +Because every chart is a GraphQL query, **Copy query** in a chart's menu copies the exact query and variables that the chart sends. You can run that query yourself, change its range, or break it down further. For the format of the copied text, refer to [Copy query](/en/documentation/platform/real-time-metrics/filters-and-time-range/#copy-query). + +### What a chart counts + +A request chart counts accesses: each time a client reaches your application's content, the application processes one request, and the chart counts one. When the content is not in cache, the data center fetches it from the origin before it answers the client. That whole trip, from the client to the data center, to the origin, and back, still counts as one request, and **Missed Requests** counts it once. + +The **Edge Cache** chart splits the same trip by direction instead. For example, on a cache miss, **Data Transferred In** counts the data that travels toward the origin, and **Data Transferred Out** counts the data that travels back to the client. A chart also counts only what its own product records. Several products, such as Tiered Cache and Functions, must be active in your account before their dashboards report data, and some charts apply a filter of their own. The **Image Processor** charts, for example, keep only 2XX and 304 responses. For the path and the filter of each chart, refer to [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/). + +--- + +## Aggregation and delay + +Aggregation takes time, so a total is not final the moment its requests are served. Azion aggregates events into the metrics of each time bucket, and a metric takes up to 10 minutes to aggregate. Until then, the bucket holds only the events counted so far. + +Two things shape the newest points of a line. When the selected range ends at the current minute, the Console does not plot the last bucket, which is still open. The buckets before it can still be aggregating, so the last points of a line can read lower than the traffic was. For example, with **Last 15 minutes** selected at 3:40 PM, the line ends before 3:40 PM, and the points between 3:30 PM and 3:39 PM can still rise as their events are counted. + +The delay is the cost of serving totals instead of raw events. The values of the most recent 10 minutes are a draft, while a range that ends 10 minutes or more in the past holds only aggregated points. Inside a range, a bucket with no events plots as zero, so a pause in traffic reads as a drop to zero. For how a chart shows each state, refer to [Chart states](/en/documentation/platform/real-time-metrics/filters-and-time-range/#chart-states). + +--- + +## Resolution + +A chart cannot plot every minute of a long range in a readable way, so each point covers a time bucket whose size follows the length of the selected range. The API picks the bucket size, and the Console aligns the points it receives to that size. The query a chart sends carries no interval of its own. + +| Length of the selected range | Each point covers | +| --- | --- | +| Shorter than 2.5 days (60 hours) | One minute | +| From 2.5 days to less than 60 days | One hour | +| 60 days or longer | One day | + +The bucket size depends on the length of the range, not on the age of the data. For example, a one-day range from last week still returns one point per minute. One dataset does not follow the table: `httpBreakdownMetrics` returns hour buckets even for a range of one hour. + +A per-second field, such as `requestsTotalPerSecond`, divides the total of a bucket by the length of that bucket in seconds. In an hour bucket, 71 requests read as 0.02 requests per second, which is 71 divided by 3,600. + +The tradeoff is detail. A long range shows a long trend in few points, but a short spike disappears into its bucket. A five-minute burst inside a day bucket adds to the total of that day, and a per-second value spreads it across all 86,400 seconds of the day. To see a spike, select a range shorter than 2.5 days around it. How a chart combines its points into a legend total, with **Sum** or **Average**, is described in [Chart anatomy](/en/documentation/platform/real-time-metrics/filters-and-time-range/#chart-anatomy). + +--- + +## Counting and Billing + +Real-Time Metrics focuses on performance, and Billing focuses on precision, so the two count events differently. Real-Time Metrics uses an at-most-once approach: each event is counted once or not at all, so an event can be missed but never counted twice. Billing uses an exactly-once approach, which counts each event precisely once. + +The two approaches can therefore give different totals for the same traffic. On average, the difference between Real-Time Metrics and Billing is smaller than 1%. When the two differ, Billing is the reference. For example, if the total requests of a month on the **Requests** dashboard differ from the requests in Azion Billing data, the Billing figure is the one to use. + +For how Billing records usage, refer to [Real-Time Info and Precise Billing](/en/documentation/fundamentals/billing-and-subscriptions/#real-time-info-and-precise-billing). + +--- + +## Metrics and events + +A metric is aggregated: it tells you how many requests arrived in a minute, not which ones. An event is raw: it holds one request and its details. Real-Time Metrics serves aggregated data, and [Real-Time Events](/en/documentation/platform/real-time-events/) serves the raw events, the logs, that the same products record. Each has its own GraphQL API and its own datasets. + +Use Real-Time Metrics to watch a trend or to compare ranges, and Real-Time Events to inspect the requests behind a change. For example, when **Missed Requests** rises in one hour, the logs of that hour in Real-Time Events show the individual requests behind the rise. To send the raw logs out of Azion instead, [Data Stream](/en/documentation/platform/data-stream/) delivers them in packets to a destination you configure. + +--- + +## Datasets + +A dataset is a named collection of aggregated metrics for one kind of traffic. Each product records its own fields, so what a dashboard can chart depends on the product it belongs to. In Azion Console, a category holds product tabs, a product tab holds one or more dashboards, and each dashboard reads one dataset. To query the same numbers through the GraphQL API, use these datasets: + +| Category | Product tab | Dataset to query | +| --- | --- | --- | +| **Build** | **Applications** | `httpMetrics`, and `httpBreakdownMetrics` for **Request Breakdown** | +| **Build** | **Tiered Cache** | `tieredCacheMetrics` | +| **Build** | **Functions** | `edgeFunctionsMetrics` | +| **Build** | **Image Processor** | `imagesProcessedMetrics` | +| **Secure** | **WAF** | `httpMetrics` | +| **Secure** | **Edge DNS** | `edgeDnsQueriesMetrics` | +| **Secure** | **Bot Manager** | `botManagerMetrics` for **Overview**, and `botManagerBreakdownMetrics` for **Breakdown** | +| **Secure** | **Threats Breakdown** | `httpBreakdownMetrics` | +| **Observe** | **Data Stream** | `dataStreamedMetrics` | + +Because a chart and a query read the same dataset, you can rebuild any chart as a query and then group it, filter it, or run it over a range the chart does not draw. [Build dashboards](/en/documentation/platform/real-time-metrics/build-dashboards/), [Secure dashboards](/en/documentation/platform/real-time-metrics/secure-dashboards/), and [Observe dashboards](/en/documentation/platform/real-time-metrics/observe-dashboards/) name the fields each chart reads. For the fields of every dataset, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/). + +--- + +## Retention + +Real-Time Metrics keeps each dataset for a fixed period, which differs by dataset. Past that period, a query returns an empty result instead of an error. For the period of each dataset, refer to [Data retention](/en/documentation/platform/real-time-metrics/limits/#data-retention). + +--- + +## Related resources + + + + How long each dataset is kept, and the bounds of the Console and the GraphQL API. + Which range to pick for a trend or a spike, and when to read Billing instead of a chart. + What to do when the last points drop, a chart is empty, or totals differ from Billing. + How the GraphQL API that every chart queries is structured, and how to call it. + + diff --git a/src/content/docs/en/pages/observe/real-time-metrics/limits.mdx b/src/content/docs/en/pages/observe/real-time-metrics/limits.mdx new file mode 100644 index 0000000000..8f4de1a2c4 --- /dev/null +++ b/src/content/docs/en/pages/observe/real-time-metrics/limits.mdx @@ -0,0 +1,87 @@ +--- +title: Real-Time Metrics limits +description: Check how long Real-Time Metrics keeps each dataset, the bounds of its Console charts and GraphQL API, and what each returns past its value. +meta_tags: 'real-time metrics, limits, retention, graphql, rate limit, fields, rows' +namespace: documentation_products_real_time_metrics_limits +permalink: /documentation/platform/real-time-metrics/limits/ +--- + +import FrameBox from '@aziontech/webkit/frame-box' +import ItemList from '@aziontech/webkit/item-list' +import DocItem from '@aziontech/webkit/doc-item' + +[Real-Time Metrics](/en/documentation/platform/real-time-metrics/) reads the metrics that other Azion products generate and shows them as charts in Azion Console and through the GraphQL API. This page states how long each dataset is kept, the bounds of the Console charts and of the API, and what a chart or a query does past each value. + +Real-Time Metrics is included with the platform at no additional charge. For how each product is billed, refer to [Pricing](/en/documentation/fundamentals/pricing/#real-time-metrics). The values on this page are the default limits. Azion can raise a default limit on request, based on your plan. To request an increase, contact the [technical support](/en/documentation/support/) team. + +--- + +## Data retention + +Real-Time Metrics keeps the metrics of each dataset for a fixed period. Past that period, the data is no longer returned: a query for an older range returns `200` and an empty array, with no error. + +| Dataset | Retention | +| --- | --- | +| Every dataset not listed below, including `botManagerMetrics` | 2 years | +| `httpBreakdownMetrics` | 90 days | +| `botManagerBreakdownMetrics` | 60 days | + +The `botManagerMetrics` and `botManagerBreakdownMetrics` datasets hold the metrics of [Bot Manager](/en/documentation/platform/firewall/#bot-manager). For the retention of the Bot Manager logs and metrics, refer to [Bot Manager logs](/en/documentation/platform/firewall/bot-manager/logs/#retention). + +For the fields of each dataset, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/). + +--- + +## Console + +The Real-Time Metrics page in Azion Console bounds the time range a reader can pick, the series and rows a chart shows, and the screen width that shows a tooltip. + +| Scope | Limit | Past the limit | +| --- | --- | --- | +| Start of the time range | 730 days before the current time | The calendar moves an earlier date to the earliest allowed date. | +| End of the time range | The current time | The calendar moves a future date to the current time. | +| Series per chart | 16 | A series after the 16th is not added to the chart or to its legend. | +| Rows in a table chart: **Requests by Status and Upstream Status** and **IP Address Information** | The 10 most frequent rows | Other rows do not appear. Add a filter to narrow the chart to the rows you need. | +| Tooltip on a chart | A browser window wider than 540 px | At 540 px and below, a chart shows no tooltip when you hover over a series. | + +Two further bounds apply to the Console. Queries from the Console are limited to 120 requests per minute. A metric takes up to 10 minutes to aggregate, so the values of the most recent minutes can be incomplete. + +For the picker, the presets, and the filter operators, refer to [Filters and time range](/en/documentation/platform/real-time-metrics/filters-and-time-range/). + +--- + +## GraphQL API + +The GraphQL API answers at `https://api.azion.com/v4/metrics/graphql`. Each `400` in the table arrives as a JSON body whose `detail` field holds the message. + +| Scope | Limit | Past the limit | +| --- | --- | --- | +| Rows per query, set with `limit` | 0 to 10,000. A query with no `limit` returns 10 rows. | `400` and `The value for the query limit is invalid (must be between 0 to 10000 rows).` | +| Selected fields per query | 37. The `ts` field counts toward the limit, and the aggregate output, such as `sum`, does not. | `400` and `You have exceeded the limit amount allowed for selected fields (37 fields).` | +| Time range | Required in every query, as `tsRange` or as `tsGt` and `tsLt` | `400` and `To execute queries it is mandatory to provide the desired time interval.` | +| Length of the time range | No maximum. A range of 800 days runs, while the Console picker starts at most 730 days back. | `200`. The result holds only the data that retention keeps. | +| Requests | 120 per minute | `429` and `You have reached the request rate limit!` | +| Rows read to answer one query | 10 billion | `500` and a message that starts with `An error occured while performing the requested operation.: Limit for rows or bytes to read exceeded, max rows: 10.00 billion`. Shorten the time range or add a filter. | + +One further bound applies: a GraphQL API payload carries at most 5 GB. + +For the limits shared by the Real-Time Metrics and Real-Time Events GraphQL APIs, refer to [GraphQL API limits](/en/documentation/devtools/graphql/limits/). + +--- + +## Resolution + +Real-Time Metrics groups the data points of a chart or a query into time buckets, and the bucket size depends on the length of the selected range. For the range at which each bucket size applies, refer to [How Real-Time Metrics works](/en/documentation/platform/real-time-metrics/how-it-works/). + +--- + +## Related resources + + + + How a metric reaches a chart, and which bucket size each time range returns. + What to do when a chart or a query stops at one of these limits. + Every status code and message the GraphQL API returns, with its cause. + Which time range and aggregation to choose, and which data to trust for billing. + + diff --git a/src/content/docs/en/pages/observe/real-time-metrics/observe-dashboards.mdx b/src/content/docs/en/pages/observe/real-time-metrics/observe-dashboards.mdx new file mode 100644 index 0000000000..fbb09f950e --- /dev/null +++ b/src/content/docs/en/pages/observe/real-time-metrics/observe-dashboards.mdx @@ -0,0 +1,49 @@ +--- +title: Observe dashboards +description: Look up what the Total Data Streamed and Total Requests charts on the Data Stream dashboard measure, and the fields that return them. +meta_tags: 'real-time metrics, dashboards, data stream, observe, charts' +namespace: documentation_products_real_time_metrics_observe_dashboards +permalink: /documentation/platform/real-time-metrics/observe-dashboards/ +--- + +import FrameBox from '@aziontech/webkit/frame-box' +import ItemList from '@aziontech/webkit/item-list' +import DocItem from '@aziontech/webkit/doc-item' + +The **Observe** category of [Real-Time Metrics](/en/documentation/platform/real-time-metrics/) holds one product tab, **Data Stream**, with one dashboard, **Data Streamed**. Select **Observe** in the category dropdown to open it. The Console opens the first product tab and dashboard of a category, and it shows no dashboard selector here, because the tab holds one dashboard. + +The table below has one row per chart, in the order the Console draws them. The **Aggregation** column holds the tag shown under each chart's description. Both charts carry **Sum**, so a legend entry shows the total over the selected range. For the time range and the filters that apply to every chart, refer to [Filters and time range](/en/documentation/platform/real-time-metrics/filters-and-time-range/). + +--- + +## Data Stream + +The **Data Stream** tab shows metrics on the data and the requests of the streams configured in your account. [Data Stream](/en/documentation/platform/data-stream/) sends your logs to the connectors you configure, and Real-Time Metrics shows what it sent. Data Stream must be active in your account, and at least one stream must be configured, for the tab to report data. + +| Chart | What it measures | Unit | Aggregation | +| --- | --- | --- | --- | +| Total Data Streamed | Data the streams in your account sent to their connectors. | Bytes | Sum | +| Total Requests | Lines the streams in your account sent to their connectors. | Lines | Sum | + +Data Stream sends your logs in packets. A stream sends one packet when it holds 2,000 records, every 60 seconds, or when the data reaches the maximum size you set. Some connectors use other values; for the values of each connector, refer to [Data Stream](/en/documentation/platform/data-stream/). + +Both charts draw from the packets a stream completed and sent to its connector. **Total Data Streamed** draws one series, **Data Streamed**, the bytes of every packet sent in the selected range. **Total Requests** draws one series, **Streamed Lines**. It sums the lines inside the packets sent in the selected range, not the packets themselves. The `streamedLines` field holds at most 2,000 per row, the number of records that fills one packet. + +The Console scales bytes in steps of 1,000, as `B`, `kB`, `MB`, `GB`, and `TB`. Line counts show in compact form, such as `1.2K`. + +Each chart draws one series, so each shows a variation tag. The tag compares the selected range with the window of equal length immediately before it, and an increase shows as good on both charts. + +To query the same numbers, use the `dataStreamedMetrics` dataset. **Total Data Streamed** sums `dataStreamed`, and **Total Requests** sums `streamedLines`. To split either total by connector type, group by `endpointType`. For each field, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#datastreamedmetrics-data-stream). + +--- + +## Related resources + + + + The time range, the filters, and the chart menu that apply to both charts on this dashboard. + How a metric reaches a chart, and which bucket size each time range returns. + Every field of the `dataStreamedMetrics` dataset, with its description. + Configure a stream, its connector, and the packet values that connector uses. + + diff --git a/src/content/docs/en/pages/observe/real-time-metrics/secure-dashboards.mdx b/src/content/docs/en/pages/observe/real-time-metrics/secure-dashboards.mdx new file mode 100644 index 0000000000..11e553a3df --- /dev/null +++ b/src/content/docs/en/pages/observe/real-time-metrics/secure-dashboards.mdx @@ -0,0 +1,195 @@ +--- +title: Secure dashboards +description: Look up what each chart on the WAF, Edge DNS, Bot Manager, and Threats Breakdown dashboards measures, and the field that returns it. +meta_tags: 'real-time metrics, dashboards, waf, edge dns, bot manager, threats, charts' +namespace: documentation_products_real_time_metrics_secure_dashboards +permalink: /documentation/platform/real-time-metrics/secure-dashboards/ +--- + +import FrameBox from '@aziontech/webkit/frame-box' +import ItemList from '@aziontech/webkit/item-list' +import DocItem from '@aziontech/webkit/doc-item' + +The **Secure** category of [Real-Time Metrics](/en/documentation/platform/real-time-metrics/) groups the dashboards of four product tabs: **WAF**, **Edge DNS**, **Bot Manager**, and **Threats Breakdown**. Select **Secure** in the category dropdown to open them, and Real-Time Metrics shows the first tab, **WAF**. **Bot Manager** is the only tab with two dashboards, so it is the only one that shows the dashboard selector. + +Each dashboard below has a table with one row per chart, in the order the Console draws them. A big-number card, which shows one total instead of a chart, moves to a first row above the other charts. The **Aggregation** column holds the tag shown under each chart's description, and every Secure chart reads **Sum**: a legend entry or a card shows the total over the selected range. The prose under each table names the series a chart draws, what each one counts, and its variation tag. That tag compares the selected range with the window of equal length immediately before it. It appears on a big-number card and on a time chart that draws one series, never on a pie, a bar chart, or a map. Each dashboard closes with the dataset and fields that return the same numbers through the GraphQL API. For the time range and the filters that apply to every chart, refer to [Filters and time range](/en/documentation/platform/real-time-metrics/filters-and-time-range/). + +--- + +## WAF + +The **WAF** tab shows how [WAF](/en/documentation/platform/firewall/#waf) handled the requests to the domains of your applications. WAF, the Web Application Firewall, analyzes each request for attacks such as SQL injection or cross-site scripting, and blocks or logs the requests it identifies as threats. The tab holds one dashboard, **Threats**, so the Console shows no dashboard selector. Every chart on it reads the `httpMetrics` dataset. + +| Chart | What it measures | Unit | Aggregation | +| --- | --- | --- | --- | +| Threats vs Requests | Requests WAF analyzed, split into threats it blocked, threats it logged without blocking, and requests it allowed. | Requests | Sum | +| Cross-Site scripting (XSS) Threats | Requests WAF identified as cross-site scripting attacks against your domains. | Requests | Sum | +| Remote File Inclusion (RFI) Threats | Requests WAF identified as remote file inclusion attacks against your domains. | Requests | Sum | +| SQL Injection Threats | Requests WAF identified as SQL injection attacks against your domains. | Requests | Sum | +| Other Threats | Requests WAF identified as attacks of any type other than XSS, RFI, or SQL injection. | Requests | Sum | +| Top WAF Threat Requests by Country | Share of the threats WAF blocked that came from each country, as a pie, for the 20 countries with the most. | Percent | Sum | +| Top WAF Threat Requests by Country | Threats WAF blocked from each country, as bars, for the 20 countries with the most. | Requests | Sum | +| WAF Threat Requests by Family Attack | Threats WAF blocked in each attack family, for the 10 families with the most. | Requests | Sum | +| WAF Threat Requests by Host | Threats WAF blocked on each host over time, one line per host. | Requests | Sum | + +**Threats vs Requests** draws three series, which compare the threats WAF stopped with the traffic it let through: + +- **Waf Requests Blocked**: requests WAF identified as threats and blocked, because the firewall rule runs WAF in *Blocking* mode. +- **Waf Requests Threat**: requests WAF identified as threats and did not block, because the firewall rule runs WAF in *Logging* mode. These requests reach your application. +- **Waf Requests Allowed**: requests WAF did not identify as threats. + +A firewall rule sets the mode when it runs a rule set. For the two modes and how WAF scores a threat, refer to [Rule sets](/en/documentation/platform/firewall/waf/rules-set/). + +**Cross-Site scripting (XSS) Threats**, **Remote File Inclusion (RFI) Threats**, and **SQL Injection Threats** each draw one series with every request of the selected range that carries that attack. A cross-site scripting attack injects malicious scripts that run in the browser of the visitors to your pages. A remote file inclusion attack makes your domain load a remote file or script. An SQL injection attack inserts code into a database query to read or attack data it must not reach. **Other Threats** draws the threats of every other type. The four series read **Waf Requests Xss Attacks**, **Waf Requests Rfi Attacks**, **Waf Requests Sql Attacks**, and **Waf Requests Others Attacks**. For the log of each request WAF flagged, refer to [Real-Time Events](/en/documentation/platform/real-time-events/). + +The two **Top WAF Threat Requests by Country** charts break down the same count by the country each threat came from. The pie shows the share of each country as a percentage, and the bar chart shows the number of threats behind each share, so read them together. Both list the 20 countries with the most threats. To block the requests of one country, create a network list by geolocation; refer to [Block requests by IP, ASN, or country](/en/documentation/guides/application-security/bots-and-network/blocklists-ip-addresses-edge/). + +**WAF Threat Requests by Family Attack** draws one bar per attack family, for the 10 families with the most threats. The `wafAttackFamily` value carries a `$` prefix, such as `$SQL`, which the Console removes from each bar label. Some families combine more than one attack type: + +| Family | Attack | +| --- | --- | +| SQL | SQL injection, which manipulates database queries. | +| SQL, XSS | SQL injection combined with cross-site scripting. | +| SQL, TRAVERSAL | SQL injection combined with path traversal, to reach restricted files or directories. | +| OTHERS, SQL | Less common patterns related to SQL, grouped together. | +| RFI | Remote file inclusion, which loads external malicious scripts. | +| TRAVERSAL | Directory traversal, which reaches files or directories without authorization. | +| SQL, RFI | SQL injection combined with remote file inclusion. | +| SQL, XSS, RFI | SQL injection, cross-site scripting, and remote file inclusion in one attack. | +| OTHERS | Patterns that fit none of the predefined families. | + +Use the chart to find which families cause most of the threats, then set the protection against them. For more information, refer to [Create and apply a WAF rule set](/en/documentation/guides/application-security/firewall-and-waf/create-waf-rule-set/). + +**WAF Threat Requests by Host** draws one line per host that received threats, up to 16 lines. Use it to find the hosts with the most threats and take measures on them: block the source addresses with a [network list](/en/documentation/platform/firewall/network-shield/network-lists/), adjust the [rule set](/en/documentation/platform/firewall/waf/rules-set/), or limit the request rate with the [Set Rate Limit](/en/documentation/platform/firewall/rules-engine/#set-rate-limit) behavior. + +The two country charts, the family chart, and the host chart filter on `wafBlock` and `wafLearning`, so they count only the threats WAF blocked. Threats WAF logged without blocking appear on **Threats vs Requests** and are left out of these four charts. + +An increase shows as bad on **Cross-Site scripting (XSS) Threats**, **Remote File Inclusion (RFI) Threats**, **SQL Injection Threats**, and **Other Threats**. **WAF Threat Requests by Host** shows the tag only when one host has data, and an increase there also shows as bad. **Threats vs Requests** draws three series and shows no variation tag, and neither do the country and family charts. + +To query the same numbers, use the `httpMetrics` dataset. **Threats vs Requests** reads `wafRequestsBlocked`, `wafRequestsThreat`, and `wafRequestsAllowed`. The four attack charts, in table order, read `wafRequestsXssAttacks`, `wafRequestsRfiAttacks`, `wafRequestsSqlAttacks`, and `wafRequestsOthersAttacks`. The country, family, and host charts sum `requests` grouped by `geolocCountryName`, `wafAttackFamily`, and `host`, filtered to `wafBlock` equal to `1` and `wafLearning` equal to `0`. To list the countries and addresses that send the most threats through the GraphQL API, refer to [Find the top sources of WAF threats](/en/documentation/guides/platform/observability/find-top-waf-threat-sources/). For each field, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#httpmetrics-applications-waf). + +--- + +## Edge DNS + +The **Edge DNS** tab counts the queries that [Edge DNS](/en/documentation/platform/edge-dns/) receives for the domains hosted and managed on Azion in your account. Edge DNS must be active in your account for the tab to report data. The tab holds one dashboard, **Standard Queries**, so the Console shows no dashboard selector. + +| Chart | What it measures | Unit | Aggregation | +| --- | --- | --- | --- | +| Total Queries | Queries your zones on Edge DNS received. | Queries | Sum | + +**Total Queries** draws one series, **Requests**, with every query made to your zones in the selected range. An increase shows as good. To count the queries of one zone, add a filter on **Zone Id**, which lists your zones by name. To count one record type, such as `A` or `AAAA`, add a filter on **Qtype**. For the filters, refer to [Filters and time range](/en/documentation/platform/real-time-metrics/filters-and-time-range/). + +To query the same number, sum `requests` from the `edgeDnsQueriesMetrics` dataset. The dataset also carries `zoneId` and `qtype`, to filter or group the count by zone or by record type. For each field, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#edgednsqueriesmetrics-edge-dns). + +--- + +## Bot Manager + +The **Bot Manager** tab shows how [Bot Manager](/en/documentation/platform/firewall/#bot-manager) classified the requests it evaluated, and which action it took on the bots. Bot Manager scores each request. A request whose score is equal to or greater than the threshold set in Bot Manager is a bad bot, and Bot Manager runs the action defined for it; any other request is processed as usual. The tab shows data only when your account is subscribed to Bot Manager; for the subscription, contact [Technical Support](/en/documentation/support/). The tab holds two dashboards, in this order in the dashboard selector: **Overview**, which reads the `botManagerMetrics` dataset, and **Breakdown**, which reads `botManagerBreakdownMetrics`. + +### Overview + +The **Overview** dashboard counts the requests Bot Manager evaluated by class, by action, by CAPTCHA result, by bot category, and by country. Its four big-number cards show in a first row above the charts. + +| Chart | What it measures | Unit | Aggregation | +| --- | --- | --- | --- | +| Bad Bot Hits | Requests classified as bad bots. | Requests | Sum | +| Good Bot Hits | Requests classified as good bots. | Requests | Sum | +| Bot Hits | Requests classified as bots, bad or good. | Requests | Sum | +| Transactions | Requests Bot Manager evaluated, in every class. | Requests | Sum | +| Bot Traffic | Evaluated requests over time, one line per class. | Requests | Sum | +| Top Bot Traffic | Share of evaluated requests in each class, as a pie. | Percent | Sum | +| Top Bot Action | Requests from bots for each action Bot Manager took, as a pie in totals and percentages. | Requests | Sum | +| Bot CAPTCHA | CAPTCHA challenge results for requests classified as bots, over time, split into solved and not solved. | Requests | Sum | +| Top Bot CAPTCHA | Share of solved and not solved CAPTCHA challenges, as a pie. | Percent | Sum | +| Top Bot Classifications | Requests from bots for each bot category, by the tactic and purpose of the bot, for the 10 categories with the most. | Requests | Sum | +| Bot Activity Map | Requests from bots by their country of origin, on a world map. | Requests | Sum | + +**Bad Bot Hits**, **Good Bot Hits**, **Bot Hits**, and **Transactions** each show one number, the total over the selected range, followed by the word `requests`. **Bot Hits** is the sum of **Bad Bot Hits** and **Good Bot Hits**. **Transactions** counts every request Bot Manager evaluated, including the legitimate requests and those under evaluation. + +**Bot Traffic** and **Top Bot Traffic** split the evaluated requests into four classes: + +- **Legitimate**: not identified as an attack, with enough data to confirm it is not one. These are legitimate human users. +- **Bad Bot**: reached the score threshold, or identified as an attack. +- **Good Bot**: not identified as an attack, and matched a commonly used good bot, such as a search engine crawler. Good bots are allowed traffic, and their requests proceed as usual. +- **Under Evaluation**: not identified as a bot, without enough data to confirm it is not an attack. This class marks suspicious access. + +Use **Bot Traffic** to find periods of suspicious activity, patterns, and anomalies; hovering a line shows the date, the time, and the requests in each class. Use **Top Bot Traffic** to weigh the share of bot traffic and spot anomalies and trends; hovering a slice shows the total requests of that class. + +**Top Bot Action** shows the action Bot Manager took on the requests it identified as bots: + +| Action | What Bot Manager did | +| --- | --- | +| Allow | Let the request continue. A request with a score below the threshold is processed, and `allow` is the default action. | +| Custom HTML | Delivered custom HTML content when the request reached the threshold. | +| Deny | Answered with a standard `403` status code. | +| Drop | Ended the request without a response. | +| Hold Connection | Kept the connection open for 1 minute, then dropped it. | +| Random Delay | Waited a random time between 1 and 10 seconds, then let the request continue. | +| Redirect | Redirected the request to another URL when it reached the threshold, including to a CAPTCHA challenge. | + +The Console shows the actions with these labels in the filter's value list. The GraphQL API returns them in the `action` field as `allow`, `custom_html`, `deny`, `drop`, `hold_connection`, `random_delay`, and `redirect`. + +**Bot CAPTCHA** and **Top Bot CAPTCHA** show the result of the CAPTCHA challenge returned to requests classified as bots. **Solved** counts the bots that completed the challenge with the correct answer and proceeded. **Not Solved** counts the bots that failed the challenge, answered it incorrectly, or did not attempt it, and the action defined for blocked or suspicious bots runs on them. **Bot CAPTCHA** draws the two results over time, and hovering a line shows the date, the time, and the number of bots that passed or failed. **Top Bot CAPTCHA** shows the percentage of each result. Use the two charts to adjust the difficulty or the frequency of the challenges, so that they stop bots without slowing down your visitors. + +**Top Bot Classifications** draws one bar per bot category, which names the tactic and the purpose Bot Manager identified, such as Crawling, Brute Force, Scraping, Bad Bot Signatures, Malicious Browser Behavior, Scripted Bots, Enterprise Bots, Reputation Intelligence, Monitoring Bots, and Malicious Intent Detected. **Top Bot Classifications** and **Top Bot Action** leave out the requests with no bot category and those in the category `Non-Bot Like`. + +**Bot Activity Map** colors each country by the number of requests from bad and good bots that came from it: + +| Color | Requests from the country | +| --- | --- | +| Red | More than 1,000,000 | +| Light red | 100,000 to 1,000,000 | +| Orange | 10,000 to 99,999 | +| Light orange | 1,000 to 9,999 | +| Yellow | 1 to 999 | + +Hovering a country shows its total after `Requests:`. Use the map to find regional patterns of bot attacks, then apply geo-blocking or a mitigation for one region. For more information, refer to [Block requests by IP, ASN, or country](/en/documentation/guides/application-security/bots-and-network/blocklists-ip-addresses-edge/). + +An increase shows as bad on **Bad Bot Hits**, **Bot Hits**, and **Bot CAPTCHA**, and as good on **Bot Traffic**. **Good Bot Hits** and **Transactions** show the change in blue in both directions, as neither direction is good or bad. **Bot Traffic** and **Bot CAPTCHA** show the tag only when one class or one result has data. The pies, the bar chart, and the map show no variation tag. + +To query the same numbers, sum `requests` from the `botManagerMetrics` dataset. **Bad Bot Hits** filters on `classified` equal to `bad bot`, **Good Bot Hits** on `good bot`, and **Bot Hits** and **Bot Activity Map** on both values. **Bot Traffic** and **Top Bot Traffic** group by `classified`, **Top Bot Action** by `action`, **Bot CAPTCHA** and **Top Bot CAPTCHA** by `challengeSolved`, **Top Bot Classifications** by `botCategory`, and **Bot Activity Map** by `geolocCountryName`. For worked queries, refer to [Query Bot Manager data with GraphQL](/en/documentation/guides/platform/observability/query-bot-manager-data-with-graphql/). For each field, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#botmanagermetrics). + +### Breakdown + +The **Breakdown** dashboard of the **Bot Manager** tab shows which URLs bots request and which IP addresses the bad bots come from. Its **Impacted URLs** card shows in a first row above the two bar charts. + +| Chart | What it measures | Unit | Aggregation | +| --- | --- | --- | --- | +| Impacted URLs | Distinct URLs that bots requested. | URLs | Sum | +| Top Bad Bot IPs | Requests from bad bots for each IP address, for the 10 addresses with the most. | Requests | Sum | +| Top Impacted URLs | Requests from bots for each URL, for the 10 URLs with the most. | Requests | Sum | + +**Impacted URLs** shows one number followed by the word `URLs`, and an increase shows as bad. **Top Bad Bot IPs** draws one bar per IP address. Use it to find the addresses bad bots use most, to follow trends in their activity, and to respond to an attack by blocking or limiting the traffic of those addresses. To block them, add them to a [network list](/en/documentation/platform/firewall/network-shield/network-lists/); to limit them, use the [Set Rate Limit](/en/documentation/platform/firewall/rules-engine/#set-rate-limit) behavior. **Top Impacted URLs** draws one bar per URL, labeled with the URL as requested: the host and the path, without arguments. Use it to find the URLs bots target most. The two bar charts show no variation tag. + +Bot Manager keeps the data of the two datasets for different periods. For each period, refer to [Logs](/en/documentation/platform/firewall/bot-manager/logs/#retention). + +To query the same numbers, use the `botManagerBreakdownMetrics` dataset. **Impacted URLs** reads `uniqRequestUrl`. **Top Bad Bot IPs** sums `badBotRequests` grouped by `remoteAddr`, and **Top Impacted URLs** sums `botRequests` grouped by `requestUrl`. For each field, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#botmanagerbreakdownmetrics). + +--- + +## Threats Breakdown + +The **Threats Breakdown** tab shows which IP addresses send the threats that [WAF](/en/documentation/platform/firewall/#waf) identifies in the requests to your applications. It holds one dashboard, also named **Threats Breakdown**, which reads the `httpBreakdownMetrics` dataset. + +| Chart | What it measures | Unit | Aggregation | +| --- | --- | --- | --- | +| Top WAF Threat Requests by IP | Requests WAF identified as threats for each IP address, for the 10 addresses with the most. | Requests | Sum | + +**Top WAF Threat Requests by IP** draws one bar per remote IP address, with the total of threat requests from it. Use it to focus your protection on the largest sources of threats. To block an address, create a network list by IP; refer to [Block requests by IP, ASN, or country](/en/documentation/guides/application-security/bots-and-network/blocklists-ip-addresses-edge/). For the log of each threat request, refer to [Real-Time Events](/en/documentation/platform/real-time-events/). The chart shows no variation tag. + +To query the same numbers, sum `wafThreatRequests` from the `httpBreakdownMetrics` dataset grouped by `remoteAddress`. Add the filter `wafThreatRequestsGt: 0` so that the result lists only the addresses that sent threats; without it, the query also returns addresses with a total of `0`. For the complete query, refer to [Find the top sources of WAF threats](/en/documentation/guides/platform/observability/find-top-waf-threat-sources/). For each field, refer to [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#httpbreakdownmetrics). + +--- + +## Related resources + + + + The time range, the filters, and the chart menu that apply to every chart on these dashboards. + How a metric reaches a chart, and which bucket size each time range returns. + Every field of the WAF, Edge DNS, and Bot Manager datasets named on this page. + Query the countries and IP addresses that send the most WAF threats through the GraphQL API. + + diff --git a/src/content/docs/en/pages/observe/real-time-metrics/troubleshooting.mdx b/src/content/docs/en/pages/observe/real-time-metrics/troubleshooting.mdx new file mode 100644 index 0000000000..a4a0b0b002 --- /dev/null +++ b/src/content/docs/en/pages/observe/real-time-metrics/troubleshooting.mdx @@ -0,0 +1,356 @@ +--- +title: Troubleshoot Real-Time Metrics +description: Find why a Real-Time Metrics chart is empty or low, why totals differ from Billing, and what the GraphQL API returns when it refuses a query. +meta_tags: 'real-time metrics, troubleshooting, no data, graphql errors, charts' +namespace: documentation_products_real_time_metrics_troubleshooting +permalink: /documentation/platform/real-time-metrics/troubleshooting/ +--- + +import FrameBox from '@aziontech/webkit/frame-box' +import ItemList from '@aziontech/webkit/item-list' +import DocItem from '@aziontech/webkit/doc-item' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' + +This page lists the symptoms that [Real-Time Metrics](/en/documentation/platform/real-time-metrics/) shows on a dashboard in Azion Console or in a GraphQL API response, each with its cause and its fix. The chart symptoms come first: low or missing points, empty and failed charts, the variation tag, totals that differ from Billing, the tooltip, the legend, copied queries, and the query input. The errors the GraphQL API returns close the page. + +--- + +## The newest points of a chart read lower than the rest + +The last points of a line fall below the traffic you expect, then rise when you refresh the dashboard a few minutes later. + +The Console does not plot the last bucket when the range ends at the current minute. The buckets before it may still be aggregating, for up to 10 minutes, so they can read low, as [Aggregation and delay](/en/documentation/platform/real-time-metrics/how-it-works/#aggregation-and-delay) explains. + +- **End the range 10 minutes back**: in the **Absolute** tab of the time range picker, set **End date** to a time slot at least 10 minutes in the past, then select **Apply**. +- **Refresh after the delay**: select **Refresh** once the newest minutes have finished aggregating. +- **In a GraphQL query**: set the `end` of `tsRange` at least 10 minutes before the query runs. The same query sent twice within those 10 minutes returns different values for its newest buckets, for the same reason. + +Every point of a range that ended 10 minutes or more in the past is final, and returns the same value on each refresh. + +--- + +## A chart shows No data available + +A chart card shows `No data available` in place of the chart, on one chart or on every chart of a product tab. + +The dataset holds no metrics for the selected range and filters. Three cases cause it: the product that records the metrics is not active in your account, no traffic reached that product in the range, or an applied filter matches no traffic. + +- **Activate the product behind the chart**: Real-Time Metrics reads only what these products record. + +| Tab or chart | Requirement | +| --- | --- | +| **Edge Cache** chart, **Build** › **Applications** › **Data Transferred** | [Cache](/en/documentation/platform/applications/#cache) active in your account | +| **Build** › **Tiered Cache** | [Tiered Cache](/en/documentation/platform/applications/cache/tiered-cache/) active in your account | +| **Build** › **Functions** | [Functions](/en/documentation/platform/functions/) active in your account | +| **Build** › **Image Processor** | [Image Processor](/en/documentation/platform/applications/#image-processor) active in your account | +| **Secure** › **Edge DNS** | [Edge DNS](/en/documentation/platform/edge-dns/) active in your account | +| **Secure** › **Bot Manager** | A subscription to [Bot Manager](/en/documentation/platform/firewall/#bot-manager), through [Technical Support](/en/documentation/support/) | +| **Observe** › **Data Stream** | [Data Stream](/en/documentation/platform/data-stream/) active, with at least one stream configured | + +- **Widen the time range**: the initial range, **Last 5 minutes**, is empty when no request arrived in those minutes. Select a preset such as **Last 24 hours**. +- **Remove a filter**: select the remove icon on each applied-filter chip until the chart plots. +- **Read an empty array as no data**: through the API, a dataset with no metrics for the range returns `200` and an empty array, not an error. A `tieredCacheMetrics` query on an account with no Tiered Cache traffic returns: + +```json +{ + "data": { + "tieredCacheMetrics": [] + } +} +``` + +Once the product records traffic in the range, the chart plots it, and a bucket with no events inside the range plots as zero. + +--- + +## A query for an older range returns an empty array + +A GraphQL query for an old range returns `200` and an empty array, while the same query for a recent range returns rows. + +Real-Time Metrics keeps each dataset for a fixed period, and past that period it returns no rows and no error. The period differs by dataset, so a breakdown dataset can return nothing for a range that another dataset still answers. + +A query for a range in 2023 returns: + +```json +{ + "data": { + "httpMetrics": [] + } +} +``` + +- **Start the range inside the retention period** of the dataset, which [Data retention](/en/documentation/platform/real-time-metrics/limits/#data-retention) lists. +- **Expect partial ranges to return what is kept**: a range that starts before the retention period still returns the rows inside it, with no error. +- **Store what you need to keep longer**: query a period once it is complete and save the result, as [Best practices for Real-Time Metrics](/en/documentation/platform/real-time-metrics/best-practices/#end-every-range-you-compare-or-store-at-least-10-minutes-in-the-past) describes. + +Inside the retention period, the query returns the rows that hold data. + +--- + +## A chart shows The chart can't be plotted + +A chart card shows `The chart can't be plotted. There was an issue loading the data.` in place of its aggregation tag row. + +Each chart sends its own query to the GraphQL API, and this chart's query returned an error instead of data. The other charts of the dashboard can still plot. + +- **Send the query again**: select **Refresh**. +- **Narrow the range or add a filter**: the API refuses a query past its request rate or the rows it reads, as [Real-Time Metrics limits](/en/documentation/platform/real-time-metrics/limits/#graphql-api) shows. +- **Read the error yourself**: in the chart's **More options** menu, select **Copy query**, then run the query in [GraphiQL Playground](/en/documentation/devtools/graphql/graphql-playground/). The response carries the message the chart does not show. + +After the fix, the chart plots its points, or the response names one of the errors under [The GraphQL API refuses a query](/en/documentation/platform/real-time-metrics/troubleshooting/#the-graphql-api-refuses-a-query). + +--- + +## The variation tag reads Can't compare + +The variation tag of a chart reads **Can't compare**, in a warning color with a triangle icon, instead of a percentage. + +The tag compares the selected range with the window of the same length immediately before it. It reads **Can't compare** when the change is between –0.01% and +0.01%, when either window has no value, or when the earlier window is 0. + +- **Read a change within ±0.01% as no change**: the totals of the two windows differ by less than 0.01%. +- **Choose a range whose earlier window had traffic**: for example, if an application started serving traffic 30 minutes ago, **Last 1 hour** compares with an hour that held no requests. +- **Compare complete windows**: end the range at least 10 minutes in the past, so neither window holds buckets that are still aggregating. + +When both windows hold a value and the change exceeds 0.01%, the tag shows the change as a percentage with two decimals, as [Variation tag](/en/documentation/platform/real-time-metrics/filters-and-time-range/#variation-tag) describes. + +--- + +## Real-Time Metrics totals differ from Billing + +The total of a dashboard or a query for a period differs from the usage that Azion Billing reports for the same period. + +Real-Time Metrics counts each event at most once, and Billing counts each event exactly once, so Real-Time Metrics can miss an event that Billing counts. On average, the two differ by less than 1%, as [Counting and Billing](/en/documentation/platform/real-time-metrics/how-it-works/#counting-and-billing) explains. + +- **Use the Billing figure for charges**: when the two differ, Billing is the reference, as [Real-Time Info and Precise Billing](/en/documentation/fundamentals/billing-and-subscriptions/#real-time-info-and-precise-billing) describes. +- **Use Real-Time Metrics for operations**: read the dashboards to see a traffic change within minutes, not to settle a charge. +- **Compare complete periods**: end the range at least 10 minutes in the past, so no bucket of the total is still aggregating. + +A gap of about 1% between the two is the expected difference, not a fault in either one. + +--- + +## A chart shows no tooltip + +A chart plots, but shows no values when you hover over a series. + +Azion Console shows the tooltip of a chart only in a browser window wider than 540 px. At 540 px and below, no chart shows a tooltip. + +- **Widen the browser window** past 540 px. +- **Read the totals in the legend**: each entry shows the series name and its total over the range. +- **Export the points**: in the chart's **More options** menu, select **Export CSV** to download the points as plotted. + +In a window wider than 540 px, the tooltip lists the name and value of each series at the point under the cursor. + +--- + +## A chart legend stops at 16 series + +A chart that splits its data into many series, such as one per domain, draws 16 of them, and its legend lists 16 entries. + +A chart plots at most 16 series. Any series after the 16th is not added to the chart or to its legend. + +- **Filter to the series you need**: add a filter on **Domain** or **Workload**, whichever label your account shows, with the **In** operator and the values you compare. +- **Query every series through the API**: select **Copy query** in the chart's **More options** menu, and run the query with a `limit` high enough for every row, up to 10,000. The copied query keeps the chart's own `limit`. + +With the filter applied, the chart draws each series the filter keeps, up to 16, and the API returns one row for each series. + +--- + +## A copied query does not run in GraphiQL + +A query pasted from **Copy query** into GraphiQL Playground does not run as pasted. + +**Copy query** copies a text block, not a request: the line `# QUERY`, the query, the line `# VARIABLES`, and the variables as a JSON object. The query reads its filter values from those variables, so the JSON belongs in the variables pane, not in the query editor. + +To run the copied query in GraphiQL Playground: + + + + + + The object starts after the `# VARIABLES` line. + + + + + + +The response holds a `data` object named after the dataset, with the rows behind the chart. For the clipboard format, refer to [Copy query](/en/documentation/platform/real-time-metrics/filters-and-time-range/#copy-query), and for the playground, to [GraphiQL Playground](/en/documentation/devtools/graphql/graphql-playground/). + +--- + +## The query input refuses a filter + +A message appears under the Azion Query Language input in the filter row, and **Refresh** stays disabled. + +The expression breaks a syntax rule of the input, or names a field that the dataset of the current dashboard does not have. The fields depend on the dashboard, so an expression that works on one dashboard can fail on another. + +- **Space the operator**: write `status = 200`, not `status=200`. +- **Quote names of more than one word**: write `"Upstream Status"`. +- **Close lists in parentheses**: write `domain in (domain1, domain2)`, with no comma after the last value. +- **Give between two different values**: write `status between (200, 300)`. +- **Pick fields from the suggestions**: `Ctrl` + `Space`, or `Cmd` + `Space`, lists only the fields of the current dashboard. + +When the expression is valid, the message clears and `Enter` applies it to the dashboard. Each message, verbatim, is listed in [Validation messages](/en/documentation/platform/real-time-metrics/filters-and-time-range/#validation-messages). + +--- + +## The GraphQL API refuses a query + +The GraphQL API answers at `https://api.azion.com/v4/metrics/graphql`. When it refuses a query, it returns a JSON body whose `detail` field holds the message. Each entry quotes the body the API returned. For every status code and message of the API, refer to [GraphQL API error responses](/en/documentation/devtools/graphql/error-responses/). + +### A query is refused with Authentication credentials were not provided + +The API answers `401` with this body: + +```json +{ + "detail": "Authentication credentials were not provided." +} +``` + +The request carries no `Authorization` header, and every query to the API needs a personal token. + +- **Send a personal token** in the `Authorization: Token [TOKEN VALUE]` header. To create one, refer to [How to manage a personal token](/en/documentation/guides/platform/account-and-billing/personal-tokens/). Test it with a minimal query: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"{ __typename }"}' +``` + +- **Replace an invalid or expired token**: the API answers `401` with other messages, listed in [GraphQL API error responses](/en/documentation/devtools/graphql/error-responses/). + +With a valid token, the API answers `200`: + +```json +{ + "data": { + "__typename": "Query" + } +} +``` + +### A query is refused because it has no time range + +The API answers `400` with this body: + +```json +{ + "detail": "To execute queries it is mandatory to provide the desired time interval." +} +``` + +Every query must set a time range in its `filter`, and this one sets none. + +- **Add `tsRange` to the filter**: for example, `filter: { tsRange: { begin: "2026-10-01T14:25:25", end: "2026-10-02T14:25:25" } }`. +- **Or set `tsGt` and `tsLt`** for the start and the end of the range. + +With a time range, the query returns `200` and the rows of that range. + +### A query is refused with You have exceeded the limit amount allowed for selected fields + +The API answers `400` with this body: + +```json +{ + "detail": "You have exceeded the limit amount allowed for selected fields (37 fields)." +} +``` + +The query selects more fields than one query accepts. The `ts` field counts toward the limit, and an aggregate output such as `sum` does not, as [Real-Time Metrics limits](/en/documentation/platform/real-time-metrics/limits/#graphql-api) shows. + +- **Drop the fields you do not read**, including `ts` when you do not group by time. +- **Split the selection into two queries** over the same range and filter. + +Within the limit, the query returns `200` with every selected field. + +### A query is refused with The value for the query limit is invalid + +The API answers `400` with this body: + +```json +{ + "detail": "The value for the query limit is invalid (must be between 0 to 10000 rows)." +} +``` + +The `limit` argument is above 10,000 or below 0. + +- **Set `limit` between 0 and 10,000.** +- **For more rows, shorten the range** or page through the rows with `offset`, as [GraphQL features](/en/documentation/devtools/graphql/features/) describes. +- **Do not drop `limit` to avoid the error**: a query without it is not refused, but it returns 10 rows. + +With a valid `limit`, the query returns up to that many rows. + +### A query is refused with Cannot query field + +The API answers `400` when a dataset or a field name does not exist. For a dataset, the message suggests the closest names: + +```json +{ + "detail": "Cannot query field \"imageProcessedMetrics\" on type \"Query\". Did you mean \"imagesProcessedMetrics\", \"edgeStorageMetrics\", \"ingestMetrics\" or \"dataStreamedMetrics\"?" +} +``` + +The query names a dataset or a field that the API does not have, such as `imageProcessedMetrics` for the `imagesProcessedMetrics` dataset. For a field, the message names the type it was looked up in, such as `Cannot query field "wafThreatFamilies" on type "HttpMetricsAggregatedFieldsLogType".` + +- **Take the dataset name the message suggests**, such as `imagesProcessedMetrics`. +- **Check the field in its dataset**: [Real-Time Metrics GraphQL fields](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/) lists the fields of each dataset. + +With names the API knows, the query returns `200`. + +### A query is refused with Argument has invalid value + +The API answers `400` when `groupBy` or `aggregate` names a field it does not accept on that dataset: + +```json +{ + "detail": "Argument \"groupBy\" has invalid value [remoteAddress].\nIn element #0: Expected type \"HttpMetricsGroupByFields\", found remoteAddress." +} +``` + +`groupBy` accepts only the dimensions of its own dataset, and `remoteAddress` is a dimension of `httpBreakdownMetrics`, not of `httpMetrics`. A computed field needs no `aggregate`, so `sum: uniqueSessions` on `connectedUsersMetrics` returns a message that starts with `Argument "aggregate" has invalid value {sum: uniqueSessions}.` + +- **Query the dataset that has the dimension**: group by `remoteAddress` on `httpBreakdownMetrics`, as [Find the top sources of WAF threats](/en/documentation/guides/platform/observability/find-top-waf-threat-sources/) does. +- **Select a computed field directly**: remove `aggregate`, and list the field, such as `uniqueSessions`, among the selected fields. + +With fields the dataset accepts, the query returns `200`. + +### A query is refused with You have reached the request rate limit + +The API answers `429` with the message `You have reached the request rate limit!`. + +More requests reached the API in one minute than it accepts, as [Real-Time Metrics limits](/en/documentation/platform/real-time-metrics/limits/#graphql-api) shows. + +- **Wait, then send the request again.** +- **Send fewer requests**: query a complete period once and keep the result, instead of querying the same period again. +- **Select several fields in one query** instead of one query per field. + +Below the rate limit, each request returns its data again. + +### A call to the legacy API host answers 403 Forbidden + +A query sent to `https://api.azionapi.net/metrics/graphql` answers `403` with an HTML page titled `Azion - Default error page` that reads `Forbidden`, not with JSON. + +`api.azionapi.net` is the legacy host of the API. Real-Time Metrics queries go to the v4 endpoint. + +- **Send the query to `https://api.azion.com/v4/metrics/graphql`**, with the `Authorization: Token [TOKEN VALUE]` header. +- **Update a Grafana data source that uses the legacy URL**, as [Import the Data Transferred dashboard](/en/documentation/guides/platform/observability/data-transferred-dash/) shows. + +On the v4 endpoint with a valid token, the query returns `200` and a JSON body. + +--- + +## Related resources + + + + The retention of each dataset and every bound the fixes on this page refer to. + How aggregation, resolution, and counting shape the value of each point. + The time range picker, the filter operators, the chart states, and the chart menu. + Every status code and message the GraphQL API returns, with its cause. + + diff --git a/src/content/docs/en/pages/secure-journey/firewall-advanced-configurations/monitor-and-calibrate-bot-manager.mdx b/src/content/docs/en/pages/secure-journey/firewall-advanced-configurations/monitor-and-calibrate-bot-manager.mdx index cd1cb85e37..8d788a11db 100644 --- a/src/content/docs/en/pages/secure-journey/firewall-advanced-configurations/monitor-and-calibrate-bot-manager.mdx +++ b/src/content/docs/en/pages/secure-journey/firewall-advanced-configurations/monitor-and-calibrate-bot-manager.mdx @@ -125,7 +125,7 @@ Four values carry the calibration. `score` is the total the function calculated, `bot_category` is a comma-joined list of the categories of the rules that matched, so a line classified `legitimate` can still name bad-bot categories. For every field a line carries and for the four values `classified` takes, refer to [Logs](/en/documentation/platform/firewall/bot-manager/logs/#fields). -The score is on the line and nowhere else. The two Real-Time Metrics GraphQL datasets count requests by classification, action, mode, host, geography, and the URLs bot traffic reached, and neither carries a score, so a score distribution is read from the report log rather than from a query. Those datasets answer the aggregate questions instead: refer to [Query Bot Manager data with GraphQL](/en/documentation/guides/platform/observability/query-bot-manager-data-with-graphql/) for the classification counts, to [Query the top URLs bots reach with GraphQL](/en/documentation/guides/platform/observability/query-bot-manager-breakdown-data-with-graphql/) for the URLs, and to [Real-Time Metrics](/en/documentation/platform/real-time-metrics/#bot-manager) for the same data as charts. +The score is on the line and nowhere else. The two Real-Time Metrics GraphQL datasets count requests by classification, action, mode, host, geography, and the URLs bot traffic reached, and neither carries a score, so a score distribution is read from the report log rather than from a query. Those datasets answer the aggregate questions instead: refer to [Query Bot Manager data with GraphQL](/en/documentation/guides/platform/observability/query-bot-manager-data-with-graphql/) for the classification counts, to [Query the top URLs bots reach with GraphQL](/en/documentation/guides/platform/observability/query-bot-manager-breakdown-data-with-graphql/) for the URLs, and to [Real-Time Metrics](/en/documentation/platform/real-time-metrics/secure-dashboards/#bot-manager) for the same data as charts. --- diff --git a/src/content/docs/en/pages/secure-journey/troubleshoot/edge-firewall-understand-metrics.mdx b/src/content/docs/en/pages/secure-journey/troubleshoot/edge-firewall-understand-metrics.mdx index f7cf0c7214..562f020af3 100644 --- a/src/content/docs/en/pages/secure-journey/troubleshoot/edge-firewall-understand-metrics.mdx +++ b/src/content/docs/en/pages/secure-journey/troubleshoot/edge-firewall-understand-metrics.mdx @@ -20,7 +20,7 @@ Once you create an firewall and [activate the Web Application Firewall (WAF) mod To monitor how WAF processes requests and threats: - + diff --git a/src/content/docs/en/pages/secure-journey/troubleshoot/intelligent-dns-understand-metrics.mdx b/src/content/docs/en/pages/secure-journey/troubleshoot/intelligent-dns-understand-metrics.mdx index 5aba027f05..fcdc9eda32 100644 --- a/src/content/docs/en/pages/secure-journey/troubleshoot/intelligent-dns-understand-metrics.mdx +++ b/src/content/docs/en/pages/secure-journey/troubleshoot/intelligent-dns-understand-metrics.mdx @@ -21,7 +21,7 @@ Once you host your domains and create zones on [Edge DNS](/en/documentation/guid To monitor queries received by your configured DNS: - + --- diff --git a/src/content/docs/en/pages/secure/bot-manager/logs.mdx b/src/content/docs/en/pages/secure/bot-manager/logs.mdx index b1945a6149..4b82691e91 100644 --- a/src/content/docs/en/pages/secure/bot-manager/logs.mdx +++ b/src/content/docs/en/pages/secure/bot-manager/logs.mdx @@ -109,7 +109,7 @@ Raising a threshold relabels the traffic as well as stopping the action from fir `bot_category` is derived from the rules the request matched, and it is a comma-joined list rather than one value. A request that matched rules from two categories carries both, as `Bad Bot Signatures, Malicious Intent detected`. Because the categories follow the rules and the verdict follows the threshold, a line classified `legitimate` can still name bad-bot categories: the categories say which rules fired, and `classified` says whether their total crossed the threshold. -The pairs the two fields take, and how a request earns each one, are below. [Real-Time Metrics](/en/documentation/platform/real-time-metrics/#bot-manager) groups its charts by the same pairs. +The pairs the two fields take, and how a request earns each one, are below. [Real-Time Metrics](/en/documentation/platform/real-time-metrics/secure-dashboards/#bot-manager) groups its charts by the same pairs. | `classified` | `bot_category` | How the request is identified | | --- | --- | --- | @@ -175,7 +175,7 @@ Azion CLI does not return these lines. While an instance scores live traffic, `a Data Stream forwards the report line to an endpoint you configure, reading it from the Functions data source, which requires a subscription to [Functions](/en/documentation/platform/functions/). The forwarding is real time, so a dashboard or an alert built on that endpoint sees a line as the function writes it. The fields an endpoint receives depend on its type. For more information, refer to [Endpoints](/en/documentation/platform/data-stream/#endpoints). -Real-Time Metrics carries a **Bot Manager** page with an **Overview** dashboard and a **Breakdown** dashboard. Its charts aggregate the classification the log carries: **Top Bot Action**, for one, groups requests by the action the function applied. Metrics are generated almost in real time, with an aggregation interval of up to 60 seconds. For more information, refer to [Real-Time Metrics](/en/documentation/platform/real-time-metrics/#bot-manager). +Real-Time Metrics carries a **Bot Manager** page with an **Overview** dashboard and a **Breakdown** dashboard. Its charts aggregate the classification the log carries: **Top Bot Action**, for one, groups requests by the action the function applied. Metrics are generated almost in real time, with an aggregation interval of up to 60 seconds. For more information, refer to [Real-Time Metrics](/en/documentation/platform/real-time-metrics/secure-dashboards/#bot-manager). Two GraphQL datasets carry the same aggregated data for querying. `botManagerMetrics` groups by the classification, the action, the mode, the CAPTCHA result, the host, and the geography of a request. `botManagerBreakdownMetrics` groups by the URLs bot traffic reached and the IP addresses it came from. The fields of each are listed on the Real-Time Metrics GraphQL API Fields page, under [botManagerMetrics](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#botmanagermetrics) and [botManagerBreakdownMetrics](/en/documentation/devtools/graphql/gql-real-time-metrics-fields/#botmanagerbreakdownmetrics). diff --git a/src/content/docs/en/pages/secure/firewall/best-practices.mdx b/src/content/docs/en/pages/secure/firewall/best-practices.mdx index 1aa83eb587..e1909c7819 100644 --- a/src/content/docs/en/pages/secure/firewall/best-practices.mdx +++ b/src/content/docs/en/pages/secure/firewall/best-practices.mdx @@ -377,7 +377,7 @@ Write the threshold beside any figure you take from a classification chart. To c ### Forward the Bot Manager report log to a destination you own -Report lines surface in [Real-Time Events](/en/documentation/platform/real-time-events/), and [Data Stream](/en/documentation/platform/data-stream/#endpoints) forwards them from the Functions data source to an endpoint you configure. [Real-Time Metrics](/en/documentation/platform/real-time-metrics/#bot-manager) keeps only counts, and the URLs bot traffic reached [for 60 days](/en/documentation/platform/firewall/bot-manager/logs/#retention), so three months back they have no answer on the platform. A copy in a destination you own lasts for as long as you keep it. +Report lines surface in [Real-Time Events](/en/documentation/platform/real-time-events/), and [Data Stream](/en/documentation/platform/data-stream/#endpoints) forwards them from the Functions data source to an endpoint you configure. [Real-Time Metrics](/en/documentation/platform/real-time-metrics/secure-dashboards/#bot-manager) keeps only counts, and the URLs bot traffic reached [for 60 days](/en/documentation/platform/firewall/bot-manager/logs/#retention), so three months back they have no answer on the platform. A copy in a destination you own lasts for as long as you keep it. [Observation mode](/en/documentation/platform/firewall/best-practices/#start-bot-manager-in-observation-mode) writes a line for every request, so lower `internal_logs` when the window closes. Read the dashboards on a schedule, not after an incident. Review them weekly, so a change in the shape of the traffic shows before anyone reports a symptom. To read the report log behind them, refer to [Monitor and calibrate Bot Manager](/en/documentation/guides/application-security/bots-and-network/monitor-and-calibrate-bot-manager/). diff --git a/src/content/docs/en/pages/secure/firewall/glossary.mdx b/src/content/docs/en/pages/secure/firewall/glossary.mdx index 705a66aeb1..7f524d6cd1 100644 --- a/src/content/docs/en/pages/secure/firewall/glossary.mdx +++ b/src/content/docs/en/pages/secure/firewall/glossary.mdx @@ -25,7 +25,7 @@ permalink: /documentation/platform/firewall/glossary/ | bot category | The category Bot Manager records for a request in the `bot_category` log field, with values such as `Search Engine Bot`, `Bad Bot Signatures`, and `Credential Stuffing`. Bot Manager writes the one category the request best fits, and Bot Manager Lite writes a comma-joined list of the classes of every rule the request matched. [Logs](/en/documentation/platform/firewall/bot-manager/logs/#classification) lists every value. | | Bot Manager | The Product that scores each request on the evidence it carries, such as its headers, its address, and its session, and applies an action when the score reaches a threshold. It is not a switch in **Modules**: it runs as a function instance on the firewall, invoked by a rule with the _Run Function_ behavior. [Firewall](/en/documentation/platform/firewall/#bot-manager) describes it, and Bot Manager Lite is its self-serve edition. | | Bot Manager Lite | The self-serve edition of Bot Manager, installed from Azion Marketplace and run as a function instance on a firewall. It scores each request against 26 static rules and runs no dynamic score. [Bot Manager Lite](/en/documentation/platform/firewall/bot-manager/bot-manager-lite/) lists the rules, the arguments, and the report log. | -| classification | The verdict Bot Manager records for a request in the `classified` log field: `legitimate`, `good bot`, `bad bot`, or `under evaluation`. The verdict follows the threshold in force, so the same score reads `legitimate` under one threshold and `bad bot` under a lower one. [Logs](/en/documentation/platform/firewall/bot-manager/logs/#classification) gives the conditions for each, and [Real-Time Metrics](/en/documentation/platform/real-time-metrics/#bot-manager) charts the four together. | +| classification | The verdict Bot Manager records for a request in the `classified` log field: `legitimate`, `good bot`, `bad bot`, or `under evaluation`. The verdict follows the threshold in force, so the same score reads `legitimate` under one threshold and `bad bot` under a lower one. [Logs](/en/documentation/platform/firewall/bot-manager/logs/#classification) gives the conditions for each, and [Real-Time Metrics](/en/documentation/platform/real-time-metrics/secure-dashboards/#bot-manager) charts the four together. | | collision | Two distinct users or devices that share one fingerprint, so Bot Manager scores them as one identity. With the `engine_version` argument set to `2`, Bot Manager derives the fingerprint with a JA4H method that produces fewer collisions than version `1`. [Arguments](/en/documentation/platform/firewall/bot-manager/arguments/#engine-version) compares the two versions. | | comment | A note written after `#` at the end of an item in an `ip_cidr` list, stored with the item and always last on the line, after any due date. A line that starts with `#` is not a disabled line: the API refuses it as an invalid item with `22005 Invalid IP CIDR`. Lists of type `asn` and `countries` refuse comments, and [Network Lists](/en/documentation/platform/firewall/network-shield/network-lists/#item-annotations) documents the full item syntax. | | condition | In WAF, the part of a request an exception matches: a match zone and, for a specific zone, the name or value it applies to. The Azion Console field is **Condition**, and the API takes `conditions` as an array with at least one entry; [Exceptions](/en/documentation/platform/firewall/waf/custom-allowed-rules/#match-zones) lists every option. In a firewall rule, the conditions are the rule's criteria. | diff --git a/src/content/docs/en/pages/secure/firewall/troubleshooting.mdx b/src/content/docs/en/pages/secure/firewall/troubleshooting.mdx index 3950e3a8c2..fff430edbb 100644 --- a/src/content/docs/en/pages/secure/firewall/troubleshooting.mdx +++ b/src/content/docs/en/pages/secure/firewall/troubleshooting.mdx @@ -589,7 +589,7 @@ Real users, or crawlers you want, get `403` and Azion's default error page. The default `threshold: 30` and `action: deny` let a [browser-shaped request](/en/documentation/platform/firewall/bot-manager/bot-scoring/#session-cookies) through, so a refused one matched rules that added up to the threshold. - **Find those rules** in `matched_rules`, on report lines with `classified` at `legitimate` and a `score` near the threshold. -- **Watch [Real-Time Metrics](/en/documentation/platform/real-time-metrics/#bot-manager)**: a fall in **Good Bot Hits** suggests refused crawlers, and a low **Bot CAPTCHA** solve rate challenged bots. +- **Watch [Real-Time Metrics](/en/documentation/platform/real-time-metrics/secure-dashboards/#bot-manager)**: a fall in **Good Bot Hits** suggests refused crawlers, and a low **Bot CAPTCHA** solve rate challenged bots. - **Turn off the rules your logs name** in `disabled_rules`, or `disabled_static_rules` on Bot Manager, as [Arguments](/en/documentation/platform/firewall/bot-manager/arguments/#disabled-rules) describes. - **Raise the threshold when many rules share the false positives**, or add trusted clients' `fingerprint` to `good_fingerprint_list`. - **Measure with `action: allow` first**, as [Firewall best practices](/en/documentation/platform/firewall/best-practices/#start-bot-manager-in-observation-mode) describes. @@ -602,7 +602,7 @@ A large share of the traffic is classified `under evaluation` and stays high. The function found no bot but lacks the fingerprint data to rule out an attack, as [Logs](/en/documentation/platform/firewall/bot-manager/logs/#under-evaluation) explains: new visitors bring unseen fingerprints, and a client rotating addresses and user agents is evading. -- **Read proportions, not totals**, in the **Bot Traffic** chart of [Real-Time Metrics](/en/documentation/platform/real-time-metrics/#bot-manager). +- **Read proportions, not totals**, in the **Bot Traffic** chart of [Real-Time Metrics](/en/documentation/platform/real-time-metrics/secure-dashboards/#bot-manager). - **Match the window with your launches and campaigns**: the share drops as new fingerprints consolidate. - **Treat a lasting share with changing addresses as evasion**: no client stays long enough to be classified. diff --git a/src/content/docs/en/pages/secure/waf/how-it-works.mdx b/src/content/docs/en/pages/secure/waf/how-it-works.mdx index 0a60f676a3..b65e0a6fbe 100644 --- a/src/content/docs/en/pages/secure/waf/how-it-works.mdx +++ b/src/content/docs/en/pages/secure/waf/how-it-works.mdx @@ -79,7 +79,7 @@ The loop costs time twice. The window holds 3 days, so evidence nobody reads in ## Where a match is reported -A WAF match leaves nothing in the response, so every question about one is answered from a reporting surface. [Real-Time Metrics](/en/documentation/platform/real-time-metrics/#waf) answers how many, in requests processed and requests blocked over time. Real-Time Events answers which request, one row at a time, with the internal rules that matched and the score each family reached. Data Stream answers where else, by sending those events to a system outside Azion, and the GraphQL API queries the same data. +A WAF match leaves nothing in the response, so every question about one is answered from a reporting surface. [Real-Time Metrics](/en/documentation/platform/real-time-metrics/secure-dashboards/#waf) answers how many, in requests processed and requests blocked over time. Real-Time Events answers which request, one row at a time, with the internal rules that matched and the score each family reached. Data Stream answers where else, by sending those events to a system outside Azion, and the GraphQL API queries the same data. A blocked request is found from the request rather than from the response. It is a `400` whose upstream status is `0`, and its `x-azion-request-id` header finds its row. That lookup is the price of keeping the decision out of the response. A blocked user can report only a **Bad Request** page, and the rule and the score are looked up afterward. For the query, refer to [Find the WAF score of a blocked request](/en/documentation/guides/application-security/firewall-and-waf/how-to-find-waf-score/). diff --git a/src/content/docs/pt-br/pages/build-jornada/visao-geral/visao-geral.mdx b/src/content/docs/pt-br/pages/build-jornada/visao-geral/visao-geral.mdx index 29bb05dd0b..cc2cb05f9e 100644 --- a/src/content/docs/pt-br/pages/build-jornada/visao-geral/visao-geral.mdx +++ b/src/content/docs/pt-br/pages/build-jornada/visao-geral/visao-geral.mdx @@ -33,7 +33,7 @@ Após esse processo, o sistema pode utilizar [algoritmos de balanceamento de car Qualquer conteúdo em cache no edge será entregue diretamente na resposta ao usuário sem precisar ser requisitado da origem. Após a mediação pela Azion Web Platform, a requisição chega à sua origem, que irá responder à requisição. O edge processa novamente esta resposta antes de entregá-la ao usuário. -Depois de realizar o deploy de sua aplicação, você pode fazer o [monitoramento de métricas](/pt-br/documentacao/plataforma/real-time-metrics/#build) relacionados aos dados de sua application, como acessos, transferências de dados, bandwidth e requisições. +Depois de realizar o deploy de sua aplicação, você pode fazer o [monitoramento de métricas](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/) relacionados aos dados de sua application, como acessos, transferências de dados, bandwidth e requisições. diff --git a/src/content/docs/pt-br/pages/build/applications/solucao-de-problemas.mdx b/src/content/docs/pt-br/pages/build/applications/solucao-de-problemas.mdx index 0da42cf2ee..6487937f50 100644 --- a/src/content/docs/pt-br/pages/build/applications/solucao-de-problemas.mdx +++ b/src/content/docs/pt-br/pages/build/applications/solucao-de-problemas.mdx @@ -74,7 +74,7 @@ Os usuários relatam erros ou respostas lentas, mas cada requisição que você Uma requisição que você envia mostra uma resposta, de um servidor, em um momento, como mostra [Headers de debug](/pt-br/documentacao/plataforma/applications/cache/cache-keys/#headers-de-debug). Um problema que afeta alguns servidores, alguns paths ou algumas horas não aparece em uma única resposta. -- **Leia métricas agregadas**: [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/#applications) mostra em gráficos os dados agregados das suas aplicações e os mantém por períodos de armazenamento mais longos. +- **Leia métricas agregadas**: [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/#applications) mostra em gráficos os dados agregados das suas aplicações e os mantém por períodos de armazenamento mais longos. - **Leia o log bruto de cada requisição**: o [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/) guarda os dados brutos de cada requisição. - **Consulte apenas os dados de que você precisa**: a GraphQL API retorna [dados agregados e brutos](/pt-br/documentacao/devtools/graphql/recursos/#conjuntos-de-dados), limitados aos campos que uma consulta pede, como mostra [Consulte os dados de uso de Applications](/pt-br/documentacao/guias/plataforma/observabilidade/consultar-dados-de-uso-edge-application-com-graphql/). - **Rastreie as regras que rodaram**: [Debug Rules](/pt-br/documentacao/plataforma/applications/main-settings/#debug-rules) as registra por requisição. diff --git a/src/content/docs/pt-br/pages/devtools/azion-edge-runtime/javascript-examples/rest-apis/index.mdx b/src/content/docs/pt-br/pages/devtools/azion-edge-runtime/javascript-examples/rest-apis/index.mdx index 1b4b2dc46e..67c20a73b1 100644 --- a/src/content/docs/pt-br/pages/devtools/azion-edge-runtime/javascript-examples/rest-apis/index.mdx +++ b/src/content/docs/pt-br/pages/devtools/azion-edge-runtime/javascript-examples/rest-apis/index.mdx @@ -109,6 +109,6 @@ Cada exemplo chama `fetch()` com uma URL e um objeto de opções cujo campo `met Leia a referência da implementação de `fetch` que estes trechos de código chamam. Verifique quais outras APIs JavaScript o Azion Runtime suporta. Confirme quantas requisições de saída uma única invocação pode fazer. - Leia o consumo que esta função gerou, produto por produto. + Leia o consumo que esta função gerou, produto por produto. diff --git a/src/content/docs/pt-br/pages/guias/aws-to-azion/aws-to-azion-comprehensive-guide.mdx b/src/content/docs/pt-br/pages/guias/aws-to-azion/aws-to-azion-comprehensive-guide.mdx index a445fc414c..4761a92762 100644 --- a/src/content/docs/pt-br/pages/guias/aws-to-azion/aws-to-azion-comprehensive-guide.mdx +++ b/src/content/docs/pt-br/pages/guias/aws-to-azion/aws-to-azion-comprehensive-guide.mdx @@ -2642,7 +2642,7 @@ Consulte a [documentação do plugin Grafana](https://github.com/aziontech/grafa * [Real-Time Metrics](https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/) * [Real-Time Metrics primeiros passos](https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/primeiros-passos/) -* [Historical Real-Time Metrics](https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/real-time-metrics-historico/) +* [Historical Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) * [Analise métricas](https://www.azion.com/pt-br/documentacao/guias/plataforma/observabilidade/analisar-metricas/) * [Dashboards customizados do plugin Grafana](https://www.azion.com/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana/) * [Dashboards prontos do plugin Grafana](https://www.azion.com/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana-dash-pre-configurado/) diff --git a/src/content/docs/pt-br/pages/guias/cloudflare-to-azion/cf-to-azion-comprehensive-guide.mdx b/src/content/docs/pt-br/pages/guias/cloudflare-to-azion/cf-to-azion-comprehensive-guide.mdx index a54dfeaf5d..68729d72db 100644 --- a/src/content/docs/pt-br/pages/guias/cloudflare-to-azion/cf-to-azion-comprehensive-guide.mdx +++ b/src/content/docs/pt-br/pages/guias/cloudflare-to-azion/cf-to-azion-comprehensive-guide.mdx @@ -1578,7 +1578,7 @@ query HttpMetricsQuery { * [Real-Time Metrics](https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/) * [Real-Time Metrics primeiros passos](https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/primeiros-passos/) -* [Historical Real-Time Metrics](https://www.azion.com/pt-br/documentacao/plataforma/real-time-metrics/real-time-metrics-historico/) +* [Historical Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) * [Analise métricas](https://www.azion.com/pt-br/documentacao/guias/plataforma/observabilidade/analisar-metricas/) * [Plugin Grafana dashboards customizados](https://www.azion.com/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana/) * [Plugin Grafana dashboards prontos](https://www.azion.com/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana-dash-pre-configurado/) diff --git a/src/content/docs/pt-br/pages/guias/grafana/exemplo-dash-data-transferred.mdx b/src/content/docs/pt-br/pages/guias/grafana/exemplo-dash-data-transferred.mdx index 42902774f5..ec446d6426 100644 --- a/src/content/docs/pt-br/pages/guias/grafana/exemplo-dash-data-transferred.mdx +++ b/src/content/docs/pt-br/pages/guias/grafana/exemplo-dash-data-transferred.mdx @@ -1,34 +1,83 @@ --- -title: Importe o dashboard de Data Transferred +title: Importe o dashboard Data Transferred description: >- - Tenha um dashboard no Grafana com as métricas de Data Transferred das suas - aplicações, lidas da API GraphQL do Real-Time Metrics. -meta_tags: 'graphql, grafana, dashboard, data transferred, observabilidade, real-time metrics' + Acompanhe no Grafana os dados e a largura de banda que suas aplicações + transferem, com oito painéis que consultam a API GraphQL do Real-Time Metrics. +meta_tags: 'real-time metrics, grafana, dashboard, data transferred, graphql' namespace: docs_grafana_data_transferred_dash_json permalink: /documentacao/guias/plataforma/observabilidade/data-transferred-dash/ --- import DocCardGroup from '@aziontech/webkit/doc-card-group' import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' -Você pode importar no Grafana um dashboard pronto com as métricas de **Data Transferred** da API GraphQL do [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/). +Você pode importar um dashboard do Grafana que mostra em gráficos os dados e a largura de banda que suas aplicações transferem, lidos do [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) por um data source GraphQL. Os oito painéis dele são **Cache**, **Edge Offload**, **Saved Data**, **Missed Data**, **Total Bandwidth Usage**, **Bandwidth Offloaded**, **Saved Bandwidth** e **Missed Bandwidth**. Eles leem os mesmos campos que os gráficos do dashboard **Data Transferred** no Azion Console. Para importar em vez dele o dashboard que o plugin da Azion para Grafana instala, consulte [Importe o dashboard pré-configurado do Grafana](/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana-dash-pre-configurado/). --- ## Pré-requisitos -- O plugin da Azion configurado no Grafana, com a API GraphQL do Real-Time Metrics como data source. Siga [Use um dashboard pré-configurado no Grafana](/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana-dash-pre-configurado/). -- Uma instância do Grafana na qual você pode importar um dashboard. +- Uma instância do Grafana em que você pode adicionar um data source e importar um dashboard. +- O plugin GraphQL Data Source, `fifemon-graphql-datasource`, instalado nessa instância. O dashboard se vincula a esse plugin, não ao [plugin da Azion para Grafana](/pt-br/documentacao/guias/plataforma/observabilidade/integrar-grafana/). +- Um [personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/) da sua conta Azion. +- Pelo menos uma aplicação com tráfego no intervalo que você mostra nos gráficos, para que os painéis tenham dados para desenhar. --- -## Importe o dashboard +## Adicione o data source GraphQL -O JSON abaixo é o modelo do dashboard: oito painéis que consultam o dataset `httpMetrics` pela entrada `DS_AZION`. Para importar o dashboard: +A API responde a uma query somente quando a requisição traz o seu personal token, por isso o data source envia o token em um header. Para adicionar o data source no Grafana: -1. Siga [Use um dashboard pré-configurado no Grafana](/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana-dash-pre-configurado/) até o data source estar salvo e testado. -2. No Grafana, [importe um dashboard](https://grafana.com/docs/grafana/latest/visualizations/dashboards/build-dashboards/import-dashboards/) com o JSON abaixo como modelo e `https://api.azionapi.net/metrics/graphql` como URL. + + -O dashboard importado tem oito painéis. Eles são Cache, Edge Offload, Saved Data, Missed Data, Total Bandwidth Usage, Bandwidth Offloaded, Saved Bandwidth e Missed Bandwidth. + No Grafana, adicione um data source do tipo **GraphQL Data Source**. + + + + + Insira `https://api.azion.com/v4/metrics/graphql` como URL do data source. + + + + + Adicione o header `Authorization` com o valor `Token [TOKEN VALUE]`. Substitua `[TOKEN VALUE]` pelo seu personal token. + + + + + +O data source envia cada query ao endpoint v4 com o seu token. Os oito painéis consultam o dataset `httpMetrics`, então esse único data source atende o dashboard inteiro. Um data source configurado com o host legado `https://api.azionapi.net/metrics/graphql` recebe HTTP 403 e uma página de erro em HTML em vez de dados. + +--- + +## Importe o JSON do dashboard + +O modelo do dashboard declara uma entrada de data source, `DS_AZION`, com o rótulo `Azion` e o tipo `fifemon-graphql-datasource`. Durante a importação, o Grafana pede que você escolha um data source para essa entrada. O modelo também lista o Grafana 9.2.5 e a versão 1.0.0 do plugin como requisitos. Para importar o dashboard: + + + + + Copie o JSON desta seção. + + + + + No Grafana, [importe um dashboard](https://grafana.com/docs/grafana/latest/visualizations/dashboards/build-dashboards/import-dashboards/) e cole o JSON como modelo do dashboard. + + + + + Para a entrada `Azion`, selecione o data source GraphQL que você adicionou. + + + + + +O Grafana salva um dashboard com o título `Data Transferred` e as tags `Azion`, `Applications` e `Data Transferred`. Ele abre nos últimos 7 dias e atualiza a cada 30 segundos. + +O modelo do dashboard: ```json { @@ -1169,9 +1218,89 @@ O dashboard importado tem oito painéis. Eles são Cache, Edge Offload, Saved Da --- +## Verifique os painéis + +Cada painel envia uma query ao dataset `httpMetrics` e desenha as linhas que estão sob `httpMetrics` na resposta, o `dataPath` do painel. Antes de enviar uma query, o Grafana substitui `${__from:date:iso}` e `${__to:date:iso}` pelo intervalo de tempo do dashboard. Os painéis, na ordem do dashboard: + +| Painel | Query | Campos | Unidade no Grafana | +| --- | --- | --- | --- | +| Cache | `HttpCalculatedDataTransferred` | `dataTransferredIn`, `dataTransferredOut`, `dataTransferredTotal` | `decbytes` | +| Edge Offload | `HttpCalculatedEdgeOffload` | `offload` | `percent` | +| Saved Data | `HttpCalculatedSavedData` | `savedData` | `decbytes` | +| Missed Data | `HttpCalculatedMissedData` | `missedData` | `decbytes` | +| Total Bandwidth Usage | `HttpCalculatedBandwidthTotalData` | `bandwidthTotal` | `bps` | +| Bandwidth Offloaded | `HttpCalculatedBandwidthOffload` | `bandwidthOffload` | `percent` | +| Saved Bandwidth | `HttpCalculatedBandwidthSavedlData` | `bandwidthSavedData` | `bps` | +| Missed Bandwidth | `HttpCalculatedBandwidthMissedlData` | `bandwidthMissedData` | `bps` | + +Todas as queries agrupam por `ts` e ordenam por `ts_ASC`, então cada linha é um bucket de tempo, do mais antigo para o mais recente. A query do painel **Cache** define `limit: 2000` e as outras sete definem `limit: 1000`. O tamanho do bucket segue a duração do intervalo: no intervalo padrão de 7 dias, cada linha cobre uma hora. Para a regra completa, consulte [Como funciona](/pt-br/documentacao/plataforma/real-time-metrics/como-funciona/#resolucao). + +Para um intervalo de 24 horas, o painel **Cache** envia esta query: + +```graphql +query HttpCalculatedDataTransferred { + httpMetrics( + limit: 2000 + filter: { + tsRange: { begin: "2026-10-01T14:25:25.000Z", end: "2026-10-02T14:25:25.000Z" }, + } + groupBy:[ts] + orderBy:[ts_ASC] + ) + { + ts + dataTransferredIn + dataTransferredOut + dataTransferredTotal + } +} +``` + +A API retorna HTTP 200 com uma linha por minuto que teve tráfego: + +```json +{ + "data": { + "httpMetrics": [ + { + "ts": "2026-10-01T16:04:00Z", + "dataTransferredIn": 13094.0, + "dataTransferredOut": 2649889.0, + "dataTransferredTotal": 2662983.0 + }, + { + "ts": "2026-10-01T16:06:00Z", + "dataTransferredIn": 7470.0, + "dataTransferredOut": 986551.0, + "dataTransferredTotal": 994021.0 + }, + { + "ts": "2026-10-01T16:07:00Z", + "dataTransferredIn": 28443.0, + "dataTransferredOut": 2109827.0, + "dataTransferredTotal": 2138270.0 + }, + … + ] + } +} +``` + +Quando um painel não desenha nenhuma linha no gráfico, a resposta à query dele indica a causa: + +- **Um array `httpMetrics` vazio**: suas aplicações não tiveram tráfego no intervalo selecionado. +- **HTTP 401 com `{"detail": "Authentication credentials were not provided."}`**: o data source não envia o header `Authorization`. +- **HTTP 403 com uma página de erro em HTML**: o data source aponta para o host legado `https://api.azionapi.net/metrics/graphql`. + +Para saber o que cada campo mede, consulte [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/#data-transferred), em que o painel **Cache** corresponde ao gráfico **Edge Cache**. + +--- + ## Próximos passos - - + + + + diff --git a/src/content/docs/pt-br/pages/guias/grafana/exemplo-dash-metrics.mdx b/src/content/docs/pt-br/pages/guias/grafana/exemplo-dash-metrics.mdx index fe99122564..fb0374796b 100644 --- a/src/content/docs/pt-br/pages/guias/grafana/exemplo-dash-metrics.mdx +++ b/src/content/docs/pt-br/pages/guias/grafana/exemplo-dash-metrics.mdx @@ -1,34 +1,125 @@ --- -title: Importe o dashboard do Real-Time Metrics +title: Importe o dashboard Real-Time Metrics description: >- - Tenha um dashboard no Grafana com requisições, cache, status codes e os top - request URIs e hosts, lidos da API GraphQL do Real-Time Metrics. -meta_tags: 'graphql, grafana, dashboard, requisições, status codes, observabilidade, real-time metrics' + Acompanhe no Grafana as requisições, o cache, os métodos HTTP e os status + codes das suas aplicações, com os principais request URIs, user agents e hosts. +meta_tags: 'real-time metrics, real-time events, grafana, dashboard, graphql' namespace: docs_grafana_metrics_events_dash_json permalink: /documentacao/guias/plataforma/observabilidade/metrics-dash/ --- import DocCardGroup from '@aziontech/webkit/doc-card-group' import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' -Você pode importar no Grafana um dashboard pronto com requisições, cache e status codes da API GraphQL do [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/). +Você pode importar um dashboard do Grafana que mostra em gráficos requisições, cache, métodos HTTP e status codes do [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) e os principais request URIs, user agents e hosts do [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/). Para o dashboard que o plugin da Azion instala, consulte [Importe o dashboard pré-configurado do Grafana](/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana-dash-pre-configurado/). + +O dashboard é um modelo JSON de oito painéis distribuídos em duas linhas do dashboard. A linha **Metrics** lê o dataset `httpMetrics` da API GraphQL do Real-Time Metrics. A linha **Events** lê `workloadEvents`, um dataset do Real-Time Events, de um segundo endpoint. O Grafana precisa de um data source para cada endpoint. --- ## Pré-requisitos -- O plugin da Azion configurado no Grafana, com a API GraphQL do Real-Time Metrics como data source. Siga [Use um dashboard pré-configurado no Grafana](/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana-dash-pre-configurado/). -- Uma instância do Grafana na qual você pode importar um dashboard. +- Uma instância do Grafana em que você pode importar um dashboard. +- O plugin GraphQL Data Source (`fifemon-graphql-datasource`) nessa instância. Todos os painéis do dashboard usam esse plugin, não o [plugin da Azion para Grafana](/pt-br/documentacao/guias/plataforma/observabilidade/integrar-grafana/). +- Um personal token. Para criar um, consulte [Como criar um personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/). +- Uma [aplicação](/pt-br/documentacao/plataforma/applications/) com requisições nos últimos dois dias, o intervalo em que o dashboard abre. --- -## Importe o dashboard +## Adicione um data source para os painéis de métricas + +Os cinco painéis da linha **Metrics** enviam suas queries para `https://api.azion.com/v4/metrics/graphql`. Não use `https://api.azionapi.net/metrics/graphql`: esse host responde `403` com uma página de erro em HTML. + +Para adicionar o data source de métricas no Grafana: + + + + + No menu do Grafana, em **Administration**, selecione **Plugins**. + + + + + Em **Search**, insira `GraphQL Data Source` e selecione o card do plugin. + + + + + + Em **Name**, insira um nome que indique qual endpoint o data source lê. Por exemplo: `Azion metrics`. + + + + + Defina a URL como `https://api.azion.com/v4/metrics/graphql`. -O JSON abaixo é o modelo do dashboard: seus painéis consultam os datasets `httpMetrics` e `workloadEvents` pelo data source GraphQL. Para importar o dashboard: + + -1. Siga [Use um dashboard pré-configurado no Grafana](/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana-dash-pre-configurado/) até o data source estar salvo e testado. -2. No Grafana, [importe um dashboard](https://grafana.com/docs/grafana/latest/visualizations/dashboards/build-dashboards/import-dashboards/) com o JSON abaixo como modelo e `https://api.azionapi.net/metrics/graphql` como URL. + Adicione um header HTTP chamado `Authorization` com o valor `Token [TOKEN VALUE]`. Substitua `[TOKEN VALUE]` pelo seu personal token. -Os painéis do dashboard importado incluem Total Requests, Cache Requests, Status Codes, Top 10 Request URI e Top 10 Hosts. + + + + +O Grafana salva o data source e executa um teste contra o endpoint. Sem o header `Authorization`, o endpoint responde `401` com `{"detail": "Authentication credentials were not provided."}`. + +--- + +## Adicione um data source para os painéis de eventos + +Os três painéis da linha **Events** consultam `workloadEvents`, um dataset do Real-Time Events. O endpoint de métricas não atende esse dataset e responde `400`: + +```json +{ + "detail": "Cannot query field \"workloadEvents\" on type \"Query\". Did you mean \"workloadMetrics\" or \"workloadBreakdownMetrics\"?" +} +``` + +As mesmas queries rodam sem alteração em `https://api.azion.com/v4/events/graphql`, com o mesmo personal token. + +Para adicionar o data source de eventos no Grafana: + + + + + No menu do Grafana, em **Administration**, selecione **Plugins**. + + + + + Em **Search**, insira `GraphQL Data Source` e selecione o card do plugin. + + + + + + Em **Name**, insira um nome que indique qual endpoint o data source lê. Por exemplo: `Azion events`. + + + + + Defina a URL como `https://api.azion.com/v4/events/graphql`. + + + + + Adicione um header HTTP chamado `Authorization` com o valor `Token [TOKEN VALUE]`. Substitua `[TOKEN VALUE]` pelo seu personal token. + + + + + +O Grafana salva o segundo data source. Cada linha do dashboard passa a ter um endpoint que atende o seu dataset. + +--- + +## Importe o modelo do dashboard + +O modelo do dashboard abre nos últimos dois dias (`now-2d` a `now`), no fuso horário do navegador, sem atualização automática. Ele não declara entradas de data source. Cada painel indica o seu data source por um UID fixo: `loKOM5K4k` na linha **Events** e `d863aedd-0f4f-48e4-ae94-bf0bc73120a6` na linha **Metrics**. O modelo também define uma variável `host` oculta que nenhuma query de painel usa. + +O modelo do dashboard: ```json { @@ -806,11 +897,135 @@ Os painéis do dashboard importado incluem Total Requests, Cache Requests, Statu } ``` +Para importar o dashboard no Grafana: + + + + + Copie o objeto JSON inteiro do modelo do dashboard. + + + + + Para saber onde fica a importação na sua versão do Grafana, consulte [Import dashboards](https://grafana.com/docs/grafana/latest/visualizations/dashboards/build-dashboards/import-dashboards/). + + + + + +O Grafana lista o dashboard como `Dashboard Exemple - Azion`, o título que o modelo define. Ele tem três linhas recolhidas: uma **Row title** vazia, **Events** e **Metrics**. + +--- + +## Conecte cada painel ao seu data source + +Os painéis do dashboard importado mantêm os UIDs de data source do modelo, e esses UIDs não correspondem aos data sources que você adicionou. Conecte cada painel ao data source que atende a linha dele. + +Para conectar um painel no Grafana: + + + + + Selecione **Events** ou **Metrics** para expandir a linha que contém o painel. + + + + + + Para um painel da linha **Events**, selecione o seu data source de eventos. Para um painel da linha **Metrics**, selecione o seu data source de métricas. + + + + + +Repita os passos para cada um dos oito painéis. Cada painel passa então a enviar a sua query ao próprio endpoint, para o intervalo do dashboard. + +--- + +## Ajuste o painel Logs ao intervalo do dashboard + +O painel **Logs**, na linha **Metrics**, executa a query `CountRowsByHost`, que conta as linhas de `httpMetrics` de cada host. A query fixa o intervalo de `2023-03-22T17:03:00` a `2023-03-22T18:05:00`. Esse intervalo retorna um array `httpMetrics` vazio, então o painel não mostra nenhuma linha, qualquer que seja o intervalo que você escolha no dashboard. + +A query editada substitui o intervalo fixo pelas variáveis do dashboard `${__from:date:iso}` e `${__to:date:iso}`, como fazem os outros painéis: + +```graphql +query CountRowsByHost { + httpMetrics( + limit: 1000 + filter: { + tsRange: {begin:"${__from:date:iso}", end:"${__to:date:iso}"} + } + aggregate: {count:rows} # {count:host} + groupBy: [host] + orderBy: [count_DESC] + ) + { + host + count + } +} +``` + +Para editar a query no Grafana: + + + + + + Substitua o texto da query do painel pela query editada. + + + + + +O Grafana preenche as duas variáveis com o intervalo do dashboard. Para os últimos dois dias, o endpoint de métricas responde com uma linha por host, com a maior contagem primeiro: + +```json +{ + "data": { + "httpMetrics": [ + { + "host": "www.example.com", + "count": 492 + }, + … + ] + } +} +``` + +Cada `count` é o número de linhas de `httpMetrics` registradas para aquele host no intervalo. + +--- + +## Verifique os painéis + +Cada painel consulta um dataset e mostra nos gráficos os campos desta tabela. Quando um painel mostra os seus campos para o intervalo do dashboard, o data source dele funciona. + +| Linha | Painel | Visualização | Dataset | Campos | +| --- | --- | --- | --- | --- | +| Events | **Top 10 requestUri** | Pie chart | `workloadEvents` | `requestUri`, `count` | +| Events | **TOp 10 User Agents** | Pie chart | `workloadEvents` | `httpUserAgent`, `count` | +| Events | **TOp 10 hosts** | Pie chart | `workloadEvents` | `host`, `count`, agrupados por `host` e `status` | +| Metrics | **Total Req - Requests** | Time series | `httpMetrics` | `missedRequests`, `requestsOffloaded`, `requestsPerSecondOffloaded`, `edgeRequestsTotalPerSecond`, `missedRequestsPerSecond`, `savedRequestsPerSecond`, `httpRequestsTotal`, `httpsRequestsTotal`, `edgeRequestsTotal` | +| Metrics | **Total Req - Cache** | Time series | `httpMetrics` | `missedData`, `savedData`, `dataTransferredIn`, `dataTransferredOut`, `dataTransferredTotal` | +| Metrics | **Http Methods** | Time series | `httpMetrics` | `requestsHttpMethodGet`, `requestsHttpMethodPost`, `requestsHttpMethodHead`, `requestsHttpMethodOthers` | +| Metrics | **Logs** | Table | `httpMetrics` | `host`, `count` | +| Metrics | **Status Codes** | Time series | `httpMetrics` | `requestsStatusCode2xx`, `requestsStatusCode3xx`, `requestsStatusCode4xx`, `requestsStatusCode5xx` | + +Os três painéis da linha **Events** contam os valores de `host` de cada grupo e mantêm 10 grupos com `limit: 10`. A linha `orderBy: [count_DESC]` dessas queries está comentada, então a query não pede os maiores grupos primeiro. + +Em **Status Codes**, um campo de classe conta somente os status codes daquela classe que não têm campo próprio. Por exemplo, `requestsStatusCode2xx` retorna `0` quando todas as respostas 2xx são `200`, que `requestsStatusCode200` conta. Para os campos por código, consulte [Detalhe as requisições por status code](/pt-br/documentacao/guias/plataforma/observabilidade/detalhar-requisicoes-por-status-code/). + +Para o tipo e o significado de cada campo de `httpMetrics`, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#httpmetrics-applications-waf). + --- ## Próximos passos - - + + + + diff --git a/src/content/docs/pt-br/pages/guias/graphql/bot-manager-breakdown-data.mdx b/src/content/docs/pt-br/pages/guias/graphql/bot-manager-breakdown-data.mdx index da95fef010..7e50b11c14 100644 --- a/src/content/docs/pt-br/pages/guias/graphql/bot-manager-breakdown-data.mdx +++ b/src/content/docs/pt-br/pages/guias/graphql/bot-manager-breakdown-data.mdx @@ -142,5 +142,5 @@ Para a descrição de cada campo, consulte [botManagerBreakdownMetrics](/pt-br/d - + diff --git a/src/content/docs/pt-br/pages/guias/graphql/httpBreakdownMetrics-dataset.mdx b/src/content/docs/pt-br/pages/guias/graphql/httpBreakdownMetrics-dataset.mdx index 10ee36d182..5565812fba 100644 --- a/src/content/docs/pt-br/pages/guias/graphql/httpBreakdownMetrics-dataset.mdx +++ b/src/content/docs/pt-br/pages/guias/graphql/httpBreakdownMetrics-dataset.mdx @@ -1,37 +1,42 @@ --- -title: Como consultar dados do httpBreakdownMetrics dataset -description: Este guia explicará como consultar dados do httpBreakdownMetrics dataset usando o playground GraphiQL. -meta_tags: graphql, graphql playground, métricas de segurança, applications, requisições +title: Consulte o dataset httpBreakdownMetrics +description: Liste os endereços IP de clientes com mais requisições bloqueadas no dataset httpBreakdownMetrics, com curl ou o playground GraphiQL. +meta_tags: 'real-time metrics, graphql, httpbreakdownmetrics, requests, ip address' namespace: docs_guides_query_httpBreakdownMetrics_graphql permalink: /documentacao/guias/plataforma/observabilidade/consultar-dados-httpbreakdownmetrics-com-graphql/ --- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' -O conjunto de dados **httpBreakdownMetrics** fornece dados agregados, detalhados e em tempo real sobre eventos de requisições HTTP bloqueadas. Este conjunto de dados é parte da API GraphQL do Real-Time Metrics. +Você pode listar os endereços IP de clientes com mais requisições bloqueadas com a API GraphQL, pelo `curl` ou pelo playground GraphiQL. -Esses dados são retidos e disponíveis por até *90* dias. +O dataset `httpBreakdownMetrics` de [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) divide as requisições para as suas aplicações por valores como `remoteAddress`, o endereço IP do cliente, `geolocCountryName` e `requestPath`. Para cada combinação de valores, ele conta `requests`, `blockedRequests` e `wafThreatRequests`. Para cada campo e filtro do dataset, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#httpbreakdownmetrics). -Este guia explicará como consultar dados do httpBreakdownMetrics dataset usando o playground GraphiQL. +O dataset retorna buckets de hora, mesmo para um intervalo de uma hora. Para saber como o intervalo define o tamanho do bucket, consulte [Como Real-Time Metrics funciona](/pt-br/documentacao/plataforma/real-time-metrics/como-funciona/#resolucao). Real-Time Metrics mantém os dados de `httpBreakdownMetrics` por 90 dias. Para a retenção de cada dataset, consulte [Limites de Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/limites/#retencao-de-dados). --- -## Consulte os dados +## Pré-requisitos -Este exemplo consulta as 20 principais entradas de `remoteAddress` bloqueadas. Para saber mais sobre os campos disponíveis, consulte a documentação dos [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/). +- Um personal token, para o `curl`. Para criar um, consulte [Como criar um personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/). +- `curl` ou o playground GraphiQL. O playground precisa de uma sessão de navegador conectada à sua conta Azion; caso contrário, ele retorna um erro. Para abri-lo, consulte [Playground GraphiQL](/pt-br/documentacao/devtools/graphql/playground-graphql/). -1. Acesse o GraphiQL playground nesse link: `https://api.azion.com/v4/metrics/graphql`. - - Você deve estar logado na sua conta Azion. Caso contrário, você receberá uma mensagem de erro. -2. Envie uma query seguindo este formato: +--- + +## Liste os endereços com mais requisições bloqueadas + +Esta query soma `blockedRequests` para cada `remoteAddress` ao longo de uma hora e retorna os 20 endereços com os maiores totais: ```graphql -query { +query TopBlockedAddresses { httpBreakdownMetrics( aggregate: { sum: blockedRequests } groupBy: [remoteAddress] - orderBy: [sum_DESC], - limit: 20, - filter: { - tsGte: "2024-10-21T11:00:00" - tsLt: "2024-10-21T12:00:00" + orderBy: [sum_DESC] + limit: 20 + filter: { + tsGte: "2026-10-02T13:00:00" + tsLt: "2026-10-02T14:00:00" } ) { remoteAddress @@ -40,112 +45,54 @@ query { } ``` -Onde: +Cada argumento molda o resultado: -| Campo | Descrição | -|----------|----------| -| `sum: blockedRequests` | Retorna o número total de requisições bloqueadas dentro do intervalo de tempo especificado, após aplicar quaisquer filtros | -| `groupBy` | Especifica os campos pelos quais os resultados da consulta devem ser agrupados. Exemplo: `[remoteAddress]` | -| `orderBy` | Especifica a ordem em que os resultados devem ser retornados. Exemplos: `[sum_DESC]`, para ordem decrescente, e `[sum_ASC]`, para ordem crescente | -| `limit` | Especifica o número máximo de resultados a serem retornados. Exemplo: `20` para recuperar os 20 principais. Máximo do sistema: `10.000` | -| `filter` | Define os critérios usados para filtrar os dados retornados pela consulta | -| `tsGte` | Um subcampo de `filter`. Especifica o horário de início (maior ou igual a) para a consulta de dados, garantindo que os resultados incluam registros a partir deste timestamp. Formato: "YYYY-MM-DDTHH:mm:ss"; exemplo: `"2024-10-21T11:00:00"` | -| `tsLt` | Um subcampo de `filter`. Especifica o horário de término (menor que) para a consulta de dados, filtrando quaisquer registros com timestamps iguais ou após este timestamp. Formato: "YYYY-MM-DDTHH:mm:ss"; exemplo: `"2024-10-21T12:00:00"` | +- `aggregate: { sum: blockedRequests }` soma as requisições bloqueadas que passam pelo filtro. O alias `totalBlocked: sum` renomeia esse total na resposta. +- `groupBy: [remoteAddress]` retorna um total por endereço IP de cliente. +- `orderBy: [sum_DESC]` lista o maior total primeiro. `[sum_ASC]` lista o menor primeiro. +- `limit: 20` limita a resposta a 20 linhas. Para o máximo, consulte [Limites de Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/limites/#api-graphql). +- `filter` mantém apenas os dados que correspondem às condições dele. Aqui, as condições definem o intervalo de tempo. +- `tsGte` define o início do intervalo, que o resultado inclui. `tsLt` define o fim, que o resultado exclui. -3. Você receberá uma resposta semelhante a esta: +As duas datas usam o formato `YYYY-MM-DDTHH:mm:ss`. Substitua as datas do exemplo pela hora que você quer ler. `tsGte` e `tsLt` são uma alternativa ao `tsRange`, o filtro de intervalo de [Primeiros passos com Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/primeiros-passos/). -```graphql +Para executar a query com `curl`, envie uma requisição `POST` para `https://api.azion.com/v4/metrics/graphql`. Substitua `[TOKEN VALUE]` pelo seu personal token: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query TopBlockedAddresses { httpBreakdownMetrics(aggregate: { sum: blockedRequests }, groupBy: [remoteAddress], orderBy: [sum_DESC], limit: 20, filter: { tsGte: \"2026-10-02T13:00:00\", tsLt: \"2026-10-02T14:00:00\" }) { remoteAddress totalBlocked: sum } }"}' +``` + +A API responde `200` com uma linha por endereço: + +```json { "data": { "httpBreakdownMetrics": [ { - "remoteAddress": "192.168.0.1", - "totalBlocked": 6732 - }, - { - "remoteAddress": "10.0.0.2", - "totalBlocked": 5872 - }, - { - "remoteAddress": "172.16.0.3", - "totalBlocked": 3958 - }, - { - "remoteAddress": "192.168.1.4", - "totalBlocked": 3952 - }, - { - "remoteAddress": "10.0.1.5", - "totalBlocked": 3806 - }, - { - "remoteAddress": "172.16.1.6", - "totalBlocked": 3730 - }, - { - "remoteAddress": "192.168.2.7", - "totalBlocked": 3378 - }, - { - "remoteAddress": "10.0.2.8", - "totalBlocked": 3318 - }, - { - "remoteAddress": "172.16.2.9", - "totalBlocked": 3284 - }, - { - "remoteAddress": "192.168.3.10", - "totalBlocked": 3282 - }, - { - "remoteAddress": "10.0.3.11", - "totalBlocked": 2958 - }, - { - "remoteAddress": "172.16.3.12", - "totalBlocked": 2884 - }, - { - "remoteAddress": "192.168.4.13", - "totalBlocked": 2530 - }, - { - "remoteAddress": "10.0.4.14", - "totalBlocked": 2348 - }, - { - "remoteAddress": "172.16.4.15", - "totalBlocked": 2004 - }, - { - "remoteAddress": "192.168.5.16", - "totalBlocked": 1902 - }, - { - "remoteAddress": "10.0.5.17", - "totalBlocked": 1538 - }, - { - "remoteAddress": "172.16.5.18", - "totalBlocked": 1440 - }, - { - "remoteAddress": "192.168.6.19", - "totalBlocked": 1390 - }, - { - "remoteAddress": "10.0.6.20", - "totalBlocked": 1314 + "remoteAddress": "192.0.2.1", + "totalBlocked": 0 } ] } } ``` -Onde: +Cada linha associa um endereço ao total de requisições bloqueadas dele, do maior para o menor, até 20 linhas. Neste exemplo, um único endereço enviou as 71 requisições daquela hora e nenhuma foi bloqueada, então `totalBlocked` exibe `0`. + +Um array `httpBreakdownMetrics` vazio significa que nenhuma requisição correspondeu: verifique se o intervalo está dentro dos 90 dias de retenção. Uma requisição sem o header `Authorization` retorna `401`. + +Para executar a query no playground GraphiQL, cole a query do primeiro bloco. + +--- + +## Próximos passos -| Campo | Descrição | -|----------|----------| -| `remoteAddress` | Especifica o endereço IP da fonte que está fazendo a requisição. Exemplo: `10.0.6.20` | -| `totalBlocked` | Refere-se ao número total de vezes que as requisições deste endereço IP foram bloqueadas. Este campo é o resultado de uma soma. Exemplo: `1314` | + + + + + + diff --git a/src/content/docs/pt-br/pages/guias/graphql/query-edge-application-usage-data.mdx b/src/content/docs/pt-br/pages/guias/graphql/query-edge-application-usage-data.mdx index 4eddb7ab21..8bc6ec29b3 100644 --- a/src/content/docs/pt-br/pages/guias/graphql/query-edge-application-usage-data.mdx +++ b/src/content/docs/pt-br/pages/guias/graphql/query-edge-application-usage-data.mdx @@ -122,6 +122,6 @@ Agora você tem, para cada workload, o número de requisições inspecionadas pe - + diff --git a/src/content/docs/pt-br/pages/guias/real-time-metrics/detalhar-requisicoes-por-status-code.mdx b/src/content/docs/pt-br/pages/guias/real-time-metrics/detalhar-requisicoes-por-status-code.mdx new file mode 100644 index 0000000000..81a78e787e --- /dev/null +++ b/src/content/docs/pt-br/pages/guias/real-time-metrics/detalhar-requisicoes-por-status-code.mdx @@ -0,0 +1,348 @@ +--- +title: Detalhe as requisições por status code +description: Divida as requisições das suas aplicações por status code, isole uma classe, ranqueie os hosts com erros e compare cada código com a resposta da origem. +meta_tags: 'real-time metrics, graphql, console, requests by status' +namespace: docs_guides_rtm_requests_by_status +permalink: /documentacao/guias/plataforma/observabilidade/detalhar-requisicoes-por-status-code/ +--- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' +import Tabs from '~/components/webkit/Tabs.vue' + +Você pode dividir as requisições das suas [aplicações](/pt-br/documentacao/plataforma/applications/) pelo status code HTTP que elas retornaram, no Azion Console ou com a API GraphQL. [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) lê esses números do dataset `httpMetrics`. Para saber o que cada gráfico do dashboard **Status Codes** mede, consulte [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/#status-codes). + + +Console +API + + +## Pré-requisitos + +- Uma conta Azion. Para criar uma, consulte [Criar uma conta](/pt-br/documentacao/fundamentos/criar-uma-conta/). +- Uma aplicação servida por um [workload](/pt-br/documentacao/plataforma/workloads/), com requisições no intervalo de tempo que você quer ler. + + + + + +- Acesso ao Azion Console. Para entrar, consulte [Como acessar o Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/). + + + + + +- Um personal token. Para criar um, consulte [Como criar um personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/). +- `curl`. + + + + + +--- + +## Abra a divisão por status + +A divisão conta as requisições de todas as aplicações da sua conta, uma contagem por status code. + + + + + +Para abrir a divisão no Azion Console: + + + + + Acesse [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + A página abre na categoria **Build**, na aba **Applications** e no dashboard **Data Transferred**. + + + + + +O dashboard mostra quatro gráficos de linha, de **HTTP Status Codes 2XX** a **HTTP Status Codes 5XX**, e a tabela **Requests by Status and Upstream Status**. Cada entrada da legenda totaliza uma série no intervalo de tempo, que começa em **Last 5 minutes**. Para ler um período mais longo, consulte [Filtros e intervalo de tempo](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/#intervalo-de-tempo). + + + + + +Para ler a divisão com a API GraphQL, envie uma requisição `POST` para `https://api.azion.com/v4/metrics/graphql`. A query soma `requests` e agrupa as somas por `status`. + +Substitua `[TOKEN VALUE]` pelo seu personal token, e os valores `begin` e `end` pelo seu intervalo de tempo: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query RequestsByStatus { httpMetrics(limit: 100, filter: { tsRange: { begin: \"2026-10-01T14:25:25\", end: \"2026-10-02T14:25:25\" } }, aggregate: { sum: requests }, groupBy: [status], orderBy: [sum_DESC]) { status sum } }"}' +``` + +A API responde `200` com uma linha por status code, o mais frequente primeiro: + +```json +{ + "data": { + "httpMetrics": [ + { + "status": 200, + "sum": 1253 + }, + { + "status": 496, + "sum": 210 + }, + { + "status": 501, + "sum": 198 + }, + { + "status": 304, + "sum": 140 + }, + … + ] + } +} +``` + +Neste exemplo, 12 status codes dividem 1.985 requisições, o mesmo número que `requestsTotal` retorna para o intervalo de tempo. `limit: 100` mantém todos os códigos: sem `limit`, a API retorna 10 linhas. Para todos os campos do dataset, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#httpmetrics-applications-waf). + + + + + +--- + +## Restrinja a uma classe de status + +Um filtro no status code mantém uma classe, como os erros de servidor 5XX. Esta seção mantém os códigos de 500 a 599. + + + + + +Para filtrar o dashboard no Azion Console: + + + + + Na linha de filtros, selecione o ícone de filtro, cujo tooltip diz **Add filter**. + + + + + Em **Filter**, selecione **Status**. + + + + + Em **Operator**, selecione **Between**. + + + + + Informe `500` em **Begin** e `599` em **End**. + + + + + +Um chip abaixo da linha de filtros mostra `Status between: (500,599)`. A tabela **Requests by Status and Upstream Status** passa a listar apenas os pares cujo status está nesse intervalo, então um erro de servidor não fica mais escondido atrás das respostas `200` mais frequentes. + + + + + +Para filtrar com a API, adicione `statusRange` a `filter`, ao lado de `tsRange`: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query ServerErrorsByStatus { httpMetrics(limit: 100, filter: { tsRange: { begin: \"2026-10-01T14:25:25\", end: \"2026-10-02T14:25:25\" }, statusRange: { begin: 500, end: 599 } }, aggregate: { sum: requests }, groupBy: [status], orderBy: [sum_DESC]) { status sum } }"}' +``` + +A API responde `200` apenas com os códigos 5XX: + +```json +{ + "data": { + "httpMetrics": [ + { + "status": 501, + "sum": 198 + }, + { + "status": 502, + "sum": 31 + }, + { + "status": 504, + "sum": 1 + } + ] + } +} +``` + +Neste exemplo, a classe totaliza 230 requisições. Para totalizar uma classe, some `requests` com `statusRange`, como acima: `requestsStatusCode5xx` retorna 199 para o mesmo intervalo de tempo, porque conta apenas os códigos 5XX que não têm um campo próprio. Para cada campo de classe, consulte [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/#status-codes). + + + + + +--- + +## Encontre os hosts que retornam os erros + +Com o filtro de classe aplicado, você pode verificar quais hosts retornam esses erros. A API ranqueia todos os hosts em uma única query. No Azion Console, um segundo filtro restringe o dashboard a um host por vez. + + + + + +Para restringir as respostas 5XX a um host no Azion Console, mantenha o filtro **Status** e adicione um segundo filtro: + + + + + Na linha de filtros, selecione o ícone de filtro, cujo tooltip diz **Add filter**. + + + + + Em **Filter**, selecione **Host**. + + + + + Em **Operator**, selecione **Equals**. + + + + + Informe o host que você quer verificar, como `www.example.com`. + + + + + +Um segundo chip mostra `Host equals: www.example.com`. O gráfico **HTTP Status Codes 5XX** e a tabela passam a contar apenas as respostas 5XX desse host. Para verificar outro host, selecione o chip **Host** e altere o valor. + + + + + +Para ranquear os hosts com a API, mantenha `statusRange` e agrupe por `host` em vez de `status`: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query ServerErrorsByHost { httpMetrics(limit: 10, filter: { tsRange: { begin: \"2026-10-01T14:25:25\", end: \"2026-10-02T14:25:25\" }, statusRange: { begin: 500, end: 599 } }, aggregate: { sum: requests }, groupBy: [host], orderBy: [sum_DESC]) { host sum } }"}' +``` + +A API responde `200` com os hosts que retornaram respostas 5XX, os com mais erros primeiro: + +```json +{ + "data": { + "httpMetrics": [ + { + "host": "www.example.com", + "sum": 199 + }, + { + "host": "api.example.com", + "sum": 28 + }, + { + "host": "static.example.com", + "sum": 3 + } + ] + } +} +``` + +Neste exemplo, um host retornou 199 dos 230 erros de servidor. `limit: 10` mantém os dez hosts com mais erros. + + + + + +--- + +## Descubra o que a origem respondeu + +O status code é o que o cliente recebeu. O upstream status é o que a origem retornou. Quando os dois têm o mesmo código de erro, o erro veio da origem. + + + + + +No Azion Console, mantenha o filtro **Status** e leia a tabela **Requests by Status and Upstream Status**. Cada linha combina um **Status** com um **Upstream Status**, e **Total** conta as requisições com esse par. A tabela lista os 10 pares mais frequentes. + + + + + +Para combinar os dois códigos com a API, agrupe por `status` e `upstreamStatus`. A query mantém o filtro 5XX e os dez pares mais frequentes, como faz a tabela do Console: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query ServerErrorsByUpstreamStatus { httpMetrics(limit: 10, filter: { tsRange: { begin: \"2026-10-01T14:25:25\", end: \"2026-10-02T14:25:25\" }, statusRange: { begin: 500, end: 599 } }, aggregate: { sum: requests }, groupBy: [status, upstreamStatus], orderBy: [sum_DESC]) { status upstreamStatus sum } }"}' +``` + +A API responde `200` com uma linha por par: + +```json +{ + "data": { + "httpMetrics": [ + { + "status": 501, + "upstreamStatus": 501, + "sum": 198 + }, + { + "status": 502, + "upstreamStatus": 502, + "sum": 21 + }, + { + "status": 502, + "upstreamStatus": 0, + "sum": 10 + }, + { + "status": 504, + "upstreamStatus": 504, + "sum": 1 + } + ] + } +} +``` + +Neste exemplo, a origem retornou todos os `501` e `504`, e 21 das 31 respostas `502`. As outras 10 respostas `502` têm `upstreamStatus` `0`. + + + + + +--- + +## Próximos passos + + + + + + + diff --git a/src/content/docs/pt-br/pages/guias/real-time-metrics/encontrar-principais-origens-de-ameacas-waf.mdx b/src/content/docs/pt-br/pages/guias/real-time-metrics/encontrar-principais-origens-de-ameacas-waf.mdx new file mode 100644 index 0000000000..0338fadf18 --- /dev/null +++ b/src/content/docs/pt-br/pages/guias/real-time-metrics/encontrar-principais-origens-de-ameacas-waf.mdx @@ -0,0 +1,304 @@ +--- +title: Encontre as principais origens de ameaças do WAF +description: Liste os países, as famílias de ataque e os endereços IP que mais enviam ameaças do WAF às suas aplicações, no Azion Console ou com a API GraphQL. +meta_tags: 'real-time metrics, graphql, console, top waf threats' +namespace: docs_guides_rtm_top_waf_threats +permalink: /documentacao/guias/plataforma/observabilidade/encontrar-principais-origens-de-ameacas-waf/ +--- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' +import Tabs from '~/components/webkit/Tabs.vue' + +Você pode encontrar os países, as famílias de ataque e os endereços IP que mais enviam ameaças do [WAF](/pt-br/documentacao/plataforma/firewall/#waf) no Azion Console ou com a API GraphQL. Para saber o que cada gráfico dos dashboards do WAF mede, consulte [Dashboards de Secure](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-secure/). Para o log de cada requisição sinalizada pelo WAF, consulte [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/). + +[Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) lê esses números de dois datasets. O dataset `httpMetrics` agrupa as ameaças por país e por família de ataque. O dataset `httpBreakdownMetrics` as agrupa pelo endereço IP que as enviou. Todos os exemplos desta página cobrem os últimos 7 dias. + +--- + +Selecione sua interface uma vez. Os pré-requisitos e cada tarefa abaixo mostram apenas esse caminho. + + +Console +API + + +## Pré-requisitos + +- Uma conta Azion. Para criar uma, consulte [Criar uma conta](/pt-br/documentacao/fundamentos/criar-uma-conta/). +- Uma [aplicação](/pt-br/documentacao/plataforma/applications/) servida por um [workload](/pt-br/documentacao/plataforma/workloads/), com requisições nos últimos 7 dias. +- Um firewall que executa um WAF rule set nas requisições para a sua aplicação, no modo *Blocking* ou *Logging*. Para configurar um, consulte [Crie e aplique um WAF rule set](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/criar-waf-rule-set/). + + + + + +- Acesso ao Azion Console. Para entrar, consulte [Como acessar o Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/). + + + + + +- Um personal token. Para criar um, consulte [Como criar um personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/). +- `curl`. + + + + + +--- + +## Encontre os países + +Real-Time Metrics conta as ameaças pelo país de origem de cada requisição. O dashboard do WAF e o dataset `httpMetrics` trazem essa contagem. + + + + + +Para encontrar os países no Azion Console: + + + + + Acesse [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + + + + A aba **WAF** abre no seu único dashboard, **Threats**. + + + + + No seletor de intervalo de tempo, na aba **Quick**, em **Commonly used**, selecione **Last 7 days**. + + + + + Depois que o intervalo muda, o botão **Refresh** ao lado do seletor passa a exibir **Update**. + + + + + Encontre os dois gráficos **Top WAF Threat Requests by Country**. + + + + +O gráfico de barras desenha uma barra por país, com o número de ameaças vindas dele que foram bloqueadas pelo WAF. O gráfico de pizza mostra a participação de cada país. Os dois listam os 20 países com mais ameaças e deixam de fora as ameaças registradas pelo WAF sem bloqueio. Quando nenhuma ameaça foi bloqueada pelo WAF no intervalo, cada gráfico exibe `No data available`. + + + + + +Para encontrar os países com a API GraphQL, envie uma requisição `POST` para `https://api.azion.com/v4/metrics/graphql`. A query agrupa o dataset `httpMetrics` por `geolocCountryName` e seleciona três contagens do WAF para cada país. + +Substitua `[TOKEN VALUE]` pelo seu personal token e os valores de `begin` e `end` pelos 7 dias que você quer ler: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query TopWafThreatSourcesByCountry($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 10, filter: { tsRange: { begin: $begin, end: $end } }, groupBy: [geolocCountryName], orderBy: [wafRequestsThreat_DESC]) { geolocCountryName wafRequestsThreat wafRequestsBlocked wafRequestsAllowed } }","variables":{"begin":"2026-09-25T14:21:50","end":"2026-10-02T14:21:50"}}' +``` + +A API responde `200` com uma linha por país, no máximo 10: + +```json +{ + "data": { + "httpMetrics": [ + { + "geolocCountryName": "United States", + "wafRequestsThreat": 0, + "wafRequestsBlocked": 0, + "wafRequestsAllowed": 0 + }, + { + "geolocCountryName": "Brazil", + "wafRequestsThreat": 0, + "wafRequestsBlocked": 0, + "wafRequestsAllowed": 0 + } + ] + } +} +``` + +Cada linha traz três contagens para um país: + +- `wafRequestsBlocked`: ameaças bloqueadas pelo WAF. +- `wafRequestsThreat`: ameaças registradas pelo WAF sem bloqueio. +- `wafRequestsAllowed`: requisições permitidas pelo WAF. + +As linhas vão do maior `wafRequestsThreat` para o menor. Para ordenar os países por ameaças bloqueadas, substitua `wafRequestsThreat_DESC` por `wafRequestsBlocked_DESC`. Uma linha com as três contagens em `0`, como neste exemplo, significa que nenhuma requisição desse país foi reportada pelo WAF no intervalo. + +Para todos os campos do WAF no dataset, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#httpmetrics-applications-waf). + + + + + +--- + +## Encontre as famílias de ataque + +Cada ameaça é atribuída pelo WAF a uma família de ataque, como SQL injection ou cross-site scripting. Real-Time Metrics conta as ameaças de cada família, no dashboard do WAF e no dataset `httpMetrics`. + + + + + +Para encontrar as famílias de ataque no Azion Console: + + + + + Acesse [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + + + + A aba **WAF** abre no seu único dashboard, **Threats**. + + + + + No seletor de intervalo de tempo, na aba **Quick**, em **Commonly used**, selecione **Last 7 days**. + + + + + + Encontre o gráfico **WAF Threat Requests by Family Attack**. + + + + +O gráfico desenha uma barra por família de ataque, com o número de ameaças dessa família bloqueadas pelo WAF, para as 10 famílias com mais ameaças. Quando nenhuma ameaça foi bloqueada pelo WAF no intervalo, o gráfico exibe `No data available`. Para o significado de cada nome de família, consulte [Dashboards de Secure](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-secure/#waf). + +Para ver quais dos seus hosts receberam as ameaças bloqueadas, leia **WAF Threat Requests by Host** no mesmo dashboard. Ele desenha uma linha por host, até 16 hosts. + + + + + +Para encontrar as famílias de ataque com a API GraphQL, envie uma requisição `POST` para `https://api.azion.com/v4/metrics/graphql`. A query agrupa o dataset `httpMetrics` por `wafAttackFamily`. + +Substitua `[TOKEN VALUE]` pelo seu personal token e os valores de `begin` e `end` pelos 7 dias que você quer ler: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query ThreatsByAttackFamily($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 10, filter: { tsRange: { begin: $begin, end: $end } }, groupBy: [wafAttackFamily], orderBy: [wafRequestsThreat_DESC]) { wafAttackFamily wafRequestsThreat wafRequestsBlocked } }","variables":{"begin":"2026-09-25T14:21:50","end":"2026-10-02T14:21:50"}}' +``` + +A API responde `200` com uma linha por família de ataque, no máximo 10: + +```json +{ + "data": { + "httpMetrics": [ + { + "wafAttackFamily": "-", + "wafRequestsThreat": 0, + "wafRequestsBlocked": 0 + } + ] + } +} +``` + +Cada linha conta, para uma família, as ameaças registradas pelo WAF sem bloqueio em `wafRequestsThreat` e as ameaças bloqueadas em `wafRequestsBlocked`. Neste exemplo, nenhuma ameaça foi identificada pelo WAF no intervalo. A resposta então traz uma linha, `"wafAttackFamily": "-"`, com `0` nas duas contagens. + + + + + +--- + +## Encontre os endereços IP + +O endereço IP de uma ameaça é o endereço remoto que enviou a requisição. Apenas o dashboard Threats Breakdown e o dataset `httpBreakdownMetrics` trazem esse dado. + + + + + +Para encontrar os endereços IP no Azion Console: + + + + + Acesse [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + + + + + A aba abre no seu único dashboard, também chamado **Threats Breakdown**. + + + + + No seletor de intervalo de tempo, na aba **Quick**, em **Commonly used**, selecione **Last 7 days**. + + + + + + Encontre o gráfico **Top WAF Threat Requests by IP**. + + + + +O gráfico desenha uma barra por endereço IP, com o número de requisições vindas dele que foram identificadas pelo WAF como ameaças. Ele lista os 10 endereços com mais ameaças. Quando nenhuma ameaça foi identificada pelo WAF no intervalo, o gráfico exibe `No data available`. + + + + + +Para encontrar os endereços IP com a API GraphQL, envie uma requisição `POST` para `https://api.azion.com/v4/metrics/graphql`. A query soma `wafThreatRequests` do dataset `httpBreakdownMetrics`, agrupado por `remoteAddress`. O filtro `wafThreatRequestsGt: 0` mantém apenas os endereços que enviaram ameaças. + +Substitua `[TOKEN VALUE]` pelo seu personal token e os valores de `begin` e `end` pelos 7 dias que você quer ler: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query TopWafThreatSourcesByIp($begin: DateTime!, $end: DateTime!) { httpBreakdownMetrics(limit: 10, filter: { tsRange: { begin: $begin, end: $end }, wafThreatRequestsGt: 0 }, aggregate: { sum: wafThreatRequests }, groupBy: [remoteAddress], orderBy: [sum_DESC]) { remoteAddress sum } }","variables":{"begin":"2026-09-25T14:21:50","end":"2026-10-02T14:21:50"}}' +``` + +A API responde `200` com uma linha por endereço, no máximo 10: + +```json +{ + "data": { + "httpBreakdownMetrics": [] + } +} +``` + +Cada linha traz um endereço em `remoteAddress` e as suas requisições de ameaça em `sum`, da maior contagem para a menor. Um array vazio, como neste exemplo, significa que nenhum endereço enviou uma requisição identificada pelo WAF como ameaça no intervalo. Mantenha o filtro `wafThreatRequestsGt: 0`: sem ele, a query também retorna os endereços com mais requisições, com um `sum` de `0`. + +Para todos os campos do dataset, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#httpbreakdownmetrics). + + + + + +Para agir sobre as origens que você encontrou, bloqueie os endereços ou países com uma [network list](/pt-br/documentacao/plataforma/firewall/network-shield/network-lists/) ou ajuste o [WAF rule set](/pt-br/documentacao/plataforma/firewall/waf/rule-sets/) contra as principais famílias de ataque. + +--- + +## Próximos passos + + + + + + + diff --git a/src/content/docs/pt-br/pages/guias/real-time-metrics/medir-offload-de-cache.mdx b/src/content/docs/pt-br/pages/guias/real-time-metrics/medir-offload-de-cache.mdx new file mode 100644 index 0000000000..9fce64b6dd --- /dev/null +++ b/src/content/docs/pt-br/pages/guias/real-time-metrics/medir-offload-de-cache.mdx @@ -0,0 +1,319 @@ +--- +title: Meça o offload de cache de um domínio +description: Filtre Real-Time Metrics por um domínio e veja quanto dos dados e das requisições veio do cache, no Azion Console ou com a API GraphQL. +meta_tags: 'real-time metrics, graphql, console, cache offload' +namespace: docs_guides_rtm_cache_offload +permalink: /documentacao/guias/plataforma/observabilidade/medir-offload-de-cache/ +--- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' +import Tabs from '~/components/webkit/Tabs.vue' + +Você pode medir quanto do tráfego de um domínio as suas aplicações servem do cache com [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/), no Azion Console ou com a API GraphQL. + +Três medidas respondem a essa pergunta. *Offload* é a parcela de dados ou de requisições que o data center entregou do próprio cache. *Saved* conta os dados ou as requisições que ele entregou do cache, sem buscar o conteúdo na origem. *Missed* conta o que ele entregou depois de buscar o conteúdo na origem. Para a definição completa de cada gráfico, consulte [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/#data-transferred). + +Os exemplos leem as últimas 24 horas do host `www.example.com`. Substitua-o por um domínio no qual o seu workload responde. + +--- + +Selecione a sua interface uma vez. Os pré-requisitos e todas as tarefas abaixo mostram apenas esse caminho. + + +Console +API + + +## Pré-requisitos + +- Uma conta Azion. Para criar uma, consulte [Criar uma conta](/pt-br/documentacao/fundamentos/criar-uma-conta/). +- Uma [aplicação](/pt-br/documentacao/plataforma/applications/) servida por um [workload](/pt-br/documentacao/plataforma/workloads/), com requisições ao domínio nas últimas 24 horas. + + + + + +- Acesso ao Azion Console. Para entrar, consulte [Como acessar o Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/). + + + + + +- Um personal token. Para criar um, consulte [Como criar um personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/). +- `curl`. + + + + + +--- + +## Filtre pelo domínio + +Sem filtro, os gráficos de cache cobrem todas as aplicações da conta. Um filtro no host mantém apenas as requisições a esse domínio. + + + + + +Para filtrar os dashboards por um domínio no Azion Console: + + + + + Acesse [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + A página abre na categoria **Build**, na aba **Applications** e no dashboard **Data Transferred**. + + + + + No seletor de intervalo de tempo, na aba **Quick**, em **Commonly used**, selecione **Last 24 hours**. + + + + + + Na linha de filtros, selecione o ícone de filtro, cujo tooltip diz **Add filter**. + + + + + Em **Filter**, selecione **Host**. + + + + + Em **Operator**, selecione **Equals**. + + + + + Informe `www.example.com` como valor. + + + + + +Um chip abaixo da linha de filtros mostra `Host equals: www.example.com`. Todos os gráficos de **Data Transferred** passam a mostrar apenas as requisições a esse domínio, nas últimas 24 horas. + +Para manter todos os domínios de um workload, selecione o campo **Domain**, que aparece como **Workload** em algumas contas, e selecione o workload na lista. + + + + + +Na API, o filtro `hostEq` mantém as requisições de um host, ao lado do filtro `tsRange`, que define o período. Antes de ler os valores de cache, confirme que o host tem requisições no intervalo de tempo. + +Envie uma requisição `POST` para `https://api.azion.com/v4/metrics/graphql`. Substitua `[TOKEN VALUE]` pelo seu personal token, e o host e as datas pelos seus: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query RequestsForHost($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 1, filter: { tsRange: { begin: $begin, end: $end }, hostEq: \"www.example.com\" }) { requestsTotal } }","variables":{"begin":"2026-10-01T14:25:25","end":"2026-10-02T14:25:25"}}' +``` + +A API responde `200` com a contagem de requisições do host: + +```json +{ + "data": { + "httpMetrics": [ + { + "requestsTotal": 982 + } + ] + } +} +``` + +Neste exemplo, o host recebeu 982 requisições no intervalo de tempo. Um `requestsTotal` igual a `0` significa que nenhuma requisição a esse host chegou às suas aplicações no intervalo de tempo. Corrija o host ou as datas antes de ler os valores de cache. + + + + + +--- + +## Leia o offload de dados e de requisições + +Real-Time Metrics mede o cache em duas unidades. O dashboard **Data Transferred** conta bytes, e o dashboard **Requests** conta requisições. + + + + + +Para ler o offload do domínio no Azion Console, com o filtro de host aplicado: + + + + + No dashboard **Data Transferred**, encontre a entrada **Offload** na legenda do gráfico **Edge Offload**. + + + + + Nas legendas dos gráficos **Saved Data** e **Missed Data**, encontre os totais em bytes do intervalo de tempo. + + + + + + No gráfico **Requests Offloaded**, encontre a entrada **Requests Offloaded** na legenda. + + + + + Nas legendas dos gráficos **Saved Requests** e **Missed Requests**, encontre os totais de requisições do intervalo de tempo. + + + + +O filtro de host continua aplicado em **Requests**. Os dois dashboards leem o dataset `httpMetrics`, e apenas a troca para um dashboard que lê outro dataset limpa os filtros. + +A tag de agregação de **Edge Offload** e de **Requests Offloaded** mostra **Average**. As legendas desses gráficos mostram a média dos pontos do gráfico, não a parcela no intervalo de tempo inteiro. Para a parcela de dados no intervalo de tempo inteiro, divida o total de **Saved Data** pela soma dos totais de **Saved Data** e **Missed Data**. + + + + + +Para ler os mesmos valores com a API, selecione os campos de cache do dataset `httpMetrics` com o mesmo filtro: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query CacheOffloadForHost($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 1, filter: { tsRange: { begin: $begin, end: $end }, hostEq: \"www.example.com\" }) { requestsTotal requestsOffloaded savedRequests missedRequests dataTransferredTotal offload savedData missedData bandwidthOffload } }","variables":{"begin":"2026-10-01T14:25:25","end":"2026-10-02T14:25:25"}}' +``` + +A API responde `200` com uma linha para o host: + +```json +{ + "data": { + "httpMetrics": [ + { + "requestsTotal": 982, + "requestsOffloaded": 5.19, + "savedRequests": 51.0, + "missedRequests": 931.0, + "dataTransferredTotal": 114490585.0, + "offload": 0.51, + "savedData": 577373.0, + "missedData": 113387464.0, + "bandwidthOffload": 0.51 + } + ] + } +} +``` + +A linha cobre o intervalo de tempo inteiro. Leia os campos assim: + +- `requestsOffloaded` é a porcentagem de requisições servidas do cache: `savedRequests` dividido por `requestsTotal`. Aqui, 51 de 982 requisições, ou 5,19%. +- `offload` é a porcentagem de dados servidos do cache: `savedData` dividido pela soma de `savedData` e `missedData`. Aqui, 0,51%. +- `bandwidthOffload` é a mesma parcela, medida em largura de banda. +- `savedData` e `missedData` estão em bytes. + +Neste exemplo, `savedRequests` e `missedRequests` somam `requestsTotal`: 51 mais 931 é 982. Para todos os campos do dataset, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#httpmetrics-applications-waf). + + + + + +--- + +## Descubra o que chegou à origem + +Os dados perdidos e as requisições perdidas são o conteúdo que o data center buscou na sua origem antes de entregá-lo. Quanto maiores eles são, mais da demanda do domínio a sua origem atende. Quando a aplicação usa [Tiered Cache](/pt-br/documentacao/plataforma/applications/cache/tiered-cache/), o gráfico **Tiered Cache Offload** da aba **Tiered Cache** mostra a parcela de dados que a camada de Tiered Cache entregou ao data center sem buscá-la na origem. + + + + + +Para encontrar o conteúdo perdido do domínio no Azion Console, com o filtro de host aplicado: + + + + + No dashboard **Data Transferred**, encontre a entrada **Missed Data** na legenda do gráfico **Missed Data**. + + + + + + No gráfico **Missed Requests**, encontre a entrada **Missed Requests** na legenda. + + + + + No gráfico **Missed Requests**, posicione o cursor sobre o ponto mais alto. O tooltip mostra o valor nesse ponto. + + + + +Os picos de **Missed Requests** mostram quando o data center enviou mais requisições do domínio à sua origem. O tooltip aparece apenas em uma janela com mais de 540 px de largura. + + + + + +Para ver como as requisições do host se dividem por status de cache, agrupe-as por `upstreamCacheStatus`, o status do cache local para cada requisição. A query soma `requests` para cada status, o maior primeiro: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query RequestsByCacheStatus($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 20, filter: { tsRange: { begin: $begin, end: $end }, hostEq: \"www.example.com\" }, aggregate: { sum: requests }, groupBy: [upstreamCacheStatus], orderBy: [sum_DESC]) { upstreamCacheStatus sum } }","variables":{"begin":"2026-10-01T14:25:25","end":"2026-10-02T14:25:25"}}' +``` + +A API responde `200` com uma linha para cada status de cache: + +```json +{ + "data": { + "httpMetrics": [ + { + "upstreamCacheStatus": "-", + "sum": 334 + }, + { + "upstreamCacheStatus": "REVALIDATED", + "sum": 301 + }, + { + "upstreamCacheStatus": "MISS", + "sum": 281 + }, + { + "upstreamCacheStatus": "HIT", + "sum": 50 + }, + { + "upstreamCacheStatus": "EXPIRED", + "sum": 16 + } + ] + } +} +``` + +Neste exemplo, 50 das 982 requisições têm `HIT`. As outras 932 têm `-`, `REVALIDATED`, `MISS` ou `EXPIRED`. Para todos os valores de `upstreamCacheStatus`, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#httpmetrics-applications-waf). + + + + + +--- + +## Próximos passos + + + + + + + diff --git a/src/content/docs/pt-br/pages/guias/real-time-metrics/usar-real-time-metrics.mdx b/src/content/docs/pt-br/pages/guias/real-time-metrics/usar-real-time-metrics.mdx deleted file mode 100644 index a6c75c06e5..0000000000 --- a/src/content/docs/pt-br/pages/guias/real-time-metrics/usar-real-time-metrics.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Como utilizar o Real-Time Metrics -description: Descubra como usar o Real-Time Metrics e visualizar seus gráficos na Azion. -meta_tags: >- - real time, edge computing, observe, observability, metrics, data, events, - security -namespace: docs_use_real_time_metrics -permalink: /documentacao/guias/plataforma/observabilidade/usar-real-time-metrics/ ---- - -import DocButton from '~/components/webkit/DocButton.vue'; -import Tag from '~/components/webkit/Tag.vue' - - -O **Real-Time Metrics** fornece acesso, em tempo real, a métricas por meio de gráficos. Os gráficos exibem dados assim que suas aplicações e outros produtos começam a ter acessos e tráfego de entrada. - -:::note[nota] -O novo Real-Time Metrics fornece dados e métricas a partir de **15 de outubro de 2022**. Se você quiser visualizar métricas de até 2 anos e antes de 15 de outubro de 2022, consulte o [Real-Time Metrics Histórico](/pt-br/documentacao/plataforma/real-time-metrics/real-time-metrics-historico/). -::: - ---- - -## Configure produtos e intervalo de data - -Acesse o [Azion Console](https://console.azion.com) e selecione **Products menu** > **Real-Time Metrics** na seção **Observe**. - -Para analisar suas métricas, primeiro, você precisa selecionar um produto e configurar um intervalo de tempo: - -1. Selecione uma das três categorias disponíveis no menu suspenso: - - Build Secure Observe - -2. Selecione uma aba de acordo com o produto que deseja visualizar: - -- **Build** - - Applications Tiered Cache Functions Image Processor - -- **Secure** - - WAF Edge DNS - -- **Observe** - - Data Stream - -3. Em **Time range**, selecione um período de tempo no menu suspenso para buscar os dados que serão exibidos nos gráficos: - - Last Hour (última hora) Last 24 Hours (últimas 24 horas) Last 7 Days (últimos 7 dias) Last 30 Days (últimos 30 dias) Last 6 Months (últimos 6 meses) - -4. Se você quiser usar uma data diferente das opções, clique nos campos do calendário e selecione uma data e hora de início e término. -5. Se você selecionou a aba do produto **Applications**, selecione entre uma das quatro subabas: - - Data Transferred Requests Status Codes Bandwidth Saving - -Todos os gráficos de todas as abas são atualizados automaticamente após a aplicação de um intervalo de tempo. - ---- - -## Visualize gráficos e métricas - -Existem algumas boas práticas que você pode usar para melhorar a análise de suas métricas. - - - -Se você deseja complementar sua análise com informações mais detalhadas sobre as métricas visualizadas nos gráficos, veja os registros do Real-Time Events. - - - - ---- - diff --git a/src/content/docs/pt-br/pages/menu-principal/referencia/observe/real-time-metrics/historico-real-time-metrics.mdx b/src/content/docs/pt-br/pages/menu-principal/referencia/observe/real-time-metrics/historico-real-time-metrics.mdx deleted file mode 100644 index 73aeba7a7c..0000000000 --- a/src/content/docs/pt-br/pages/menu-principal/referencia/observe/real-time-metrics/historico-real-time-metrics.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: Real-Time Metrics Histórico -description: >- - O Real-Time Metrics Histórico é um produto de Observe que fornece acesso a - métricas em tempo real, através de gráficos, para que você analise os eventos - de suas aplicações e produtos configurados na Azion. -meta_tags: 'real time, edge computing, observe, observability, metrics, data, events' -namespace: docs_products_historical_real_time_metrics -permalink: /documentacao/plataforma/real-time-metrics/real-time-metrics-historico/ ---- - -O **Real-Time Metrics** possui duas versões: **Histórico** e **Novo**. Se você deseja ter acesso a dados de até 2 anos anteriores a data 15 de outubro de 2022, [contate o time de Suporte](/pt-br/documentacao/suporte/#canais-de-atendimento) e solicite acesso ao **Real-Time Metrics Histórico**. Esta versão ficará disponível até o fim de 2024, quando será descontinuada. - -Você já pode e poderá continuar usando o [Novo Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/). - -**Real-Time Metrics Histórico** é um produto de [Observe](/pt-br/documentacao/) que fornece acesso a métricas em tempo real, através de gráficos, para que você analise os eventos de suas aplicações e produtos configurados na Azion. Ele também ajuda a otimizar seu uso dos produtos da Azion e como o seu conteúdo é entregue. - -Ao analisar dados com o Real-Time Metrics, você consegue verificar e acompanhar o comportamento de suas aplicações o mais próximo possível do tempo real. O Real-Time Metrics permite que você: - -- Obtenha insights sobre o desempenho de suas aplicações. -- Verifique a disponibilidade de seu conteúdo. -- Quantifique os acessos e o tráfego de seu conteúdo. -- Veja economia de banda. -- Encontre ameaças de segurança em tempo real. -- Resolva problemas em tempo real. -- Compare os dados de suas aplicações em intervalos de tempo diferentes. - -Você pode combinar a análise de suas métricas com o [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/) para continuar inspecionando seus logs. - -### Acesso - -Para acessar o Real-Time Metrics Histórico, [contate o time de Suporte](https://tickets.azion.com/en/support/loginpt-BR/support/login) e solicite acesso ao **Real-Time Metrics Histórico**. Você receberá o link de acesso para o data source que deseja consultar. - ---- - -## Consideração sobre os dados - -Ao comparar os dados exibidos no Real-Time Metrics e os dados do Faturamento da Azion, é possível que você encontre diferenças. O Real-Time Metrics foca performance e usa uma abordagem at-most-once, enquanto o Faturamento visa precisão e usa uma abordagem exactly-once. Se você encontrar diferenças, considere os dados do Faturamento da Azion como os corretos. - -Em média, a diferença entre os dois é menor do que 1%. Veja os [Preços da Azion](/pt-br/documentacao/fundamentos/precos/) e a [documentação de Faturamento](/pt-br/documentacao/fundamentos/billing-and-subscriptions/) para mais informações. - ---- - -## Navegação através das abas - -Após selecionar uma das abas para um produto, você verá os gráficos disponíveis para aquele produto específico, de acordo com os dados de sua conta. Se você selecionar Data Stream, por exemplo, você verá gráficos com as métricas relacionadas aos stream configurados em sua conta. - -Os produtos também podem ter subabas, que separam diferentes tipos de métricas para um mesmo produto, e alguns podem ter diversas subabas. As abas e subabas são divididas em: - -- Data Stream - - Data ⁠Streamed - - Data Stream Requests - -- Applications - - Data Transferred - - Requests - - Status Codes - - HTTP Methods - - WAF - - Bandwidth Saving - -- Functions - - Invocations - -- Edge DNS - - Standard Queries - -- Image Processor - - Requests - ---- - -## Filtros - -Após selecionar qual produto você irá analisar, você precisa configurar os filtros apresentados para buscar dados para os seus gráficos. - -Na tela do Real-Time Metrics, logo antes da seção com os gráficos, você encontra os filtros de acordo com o produto que você escolheu. Descubra mais sobre as configurações de filtro para cada aba de produto a seguir. - -### Data Stream - -- **Time Range**: menu suspenso para selecionar o período de tempo do qual você quer exibir dados nos seus gráficos. Você pode escolher entre: - - - Last Hour (última hora) - - Last 3 Hours (últimas 3 horas) - - Last 6 Hours (últimas 6 horas) - - Last 24 Hours (últimas 24 horas) - - Last 3 Days (últimos 3 dias) - - Last 7 Days (últimos 7 dias) - - Last 15 Days (últimos 15 dias) - - Last 30 Days (últimos 30 dias) - - Custom (personalizado) - -Se você selecionar um intervalo **Custom**, é necessário configurar manualmente as datas de início e de fim nos dois campos de calendário. - -Após configurar o **Time range**, você pode selecionar o botão **Filter** para aplicar suas configurações. Suas configurações de filtros são aplicadas em todas as subabas do data source mesmo se você mudar de subaba. - -### Applications - -- **Configurations**: menu suspenso para selecionar as applications das quais você quer exibir dados nos seus gráficos. - -- **Time Range**: menu suspenso para selecionar o período de tempo do qual você quer exibir dados nos seus gráficos. Você pode escolher entre: - - - Last Hour (última hora) - - Last 3 Hours (últimas 3 horas) - - Last 6 Hours (últimas 6 horas) - - Last 24 Hours (últimas 24 horas) - - Last 3 Days (últimos 3 dias) - - Last 7 Days (últimos 7 dias) - - Last 15 Days (últimos 15 dias) - - Last 30 Days (últimos 30 dias) - - Custom (personalizado) - -Se você selecionar um intervalo **Custom**, é necessário configurar manualmente as datas de início e de fim nos dois campos de calendário. - -Após configurar o **Time range**, você pode selecionar o botão **Filter** para aplicar suas configurações. Suas configurações de filtros são aplicadas em todas as subabas do data source mesmo se você mudar de subaba. - -### Functions - -- **Functions**: menu suspenso para selecionar as functions das quais você quer exibir dados nos seus gráficos. - -- **Time Range**: menu suspenso para selecionar o período de tempo do qual você quer exibir dados nos seus gráficos. Você pode escolher entre: - - - Last Hour (última hora) - - Last 3 Hours (últimas 3 horas) - - Last 6 Hours (últimas 6 horas) - - Last 24 Hours (últimas 24 horas) - - Last 3 Days (últimos 3 dias) - - Last 7 Days (últimos 7 dias) - - Last 15 Days (últimos 15 dias) - - Last 30 Days (últimos 30 dias) - - Custom (personalizado) - -Se você selecionar um intervalo **Custom**, é necessário configurar manualmente as datas de início e de fim nos dois campos de calendário. - -Após configurar o **Time range**, você pode selecionar o botão **Filter** para aplicar suas configurações. - -### Edge DNS - -- **Zones**: menu suspenso para selecionar as zonas das quais você quer exibir dados nos seus gráficos. - -- **Time Range**: menu suspenso para selecionar o período de tempo do qual você quer exibir dados nos seus gráficos. Você pode escolher entre: - - - Last Hour (última hora) - - Last 3 Hours (últimas 3 horas) - - Last 6 Hours (últimas 6 horas) - - Last 24 Hours (últimas 24 horas) - - Last 3 Days (últimos 3 dias) - - Last 7 Days (últimos 7 dias) - - Last 15 Days (últimos 15 dias) - - Last 30 Days (últimos 30 dias) - - Custom (personalizado) - -Se você selecionar um intervalo **Custom**, é necessário configurar manualmente as datas de início e de fim nos dois campos de calendário. - -Após configurar o **Time range**, você pode selecionar o botão **Filter** para aplicar suas configurações. - -### Image Processor - -- **Time Range**: menu suspenso para selecionar o período de tempo do qual você quer exibir dados nos seus gráficos. Você pode escolher entre: - - - Last Hour (última hora) - - Last 3 Hours (últimas 3 horas) - - Last 6 Hours (últimas 6 horas) - - Last 24 Hours (últimas 24 horas) - - Last 3 Days (últimos 3 dias) - - Last 7 Days (últimos 7 dias) - - Last 15 Days (últimos 15 dias) - - Last 30 Days (últimos 30 dias) - - Custom (personalizado) - -Se você selecionar um intervalo **Custom**, é necessário configurar manualmente as datas de início e de fim nos dois campos de calendário. - -Após configurar o **Time range**, você pode selecionar o botão **Filter** para aplicar suas configurações. - ---- - -## Informações dos gráficos - -Na segunda seção do Real-Time Metrics, logo após os filtros, você encontra todos os gráficos disponíveis para sua conta. - -Depois de selecionar uma aba e, possivelmente, subaba, você pode analisar cada gráfico e seus dados. - -Cada gráfico apresenta os seguintes itens: - -![Itens do gráfico do Real-Time Metrics Histórico localizados na tela do Azion Console.](https://www.azion.com/assets/docs/images/uploads/graph-historical-real-time-metrics.png) - -- 1. **Título**: nome descritivo para o gráfico. -- 2. **Intervalo**: intervalo de tempo para a obtenção dos dados. Esses dados podem ser recuperados em intervalos pré-definidos, que podem variar entre minutos, horas ou dias. -- 3. **CSV**: botão para baixar e exportar os pontos apresentados no gráfico de acordo com os dados exibidos, o filtro de tempo aplicado e o intervalo apresentado. -- 4. **Séries do gráfico**: representação de categorias de dados. - - Exemplo: em um gráfico de linhas que mostra o número de requisições ao longo do tempo, você pode ter várias séries, cada uma representando um domain diferente. Cada série terá pontos de dados conectados por uma linha para mostrar como o número de requisições variou ao longo do tempo em cada domain. -- 5. **Linha de intervalo de tempo**: o eixo x do gráfico, representando a linha do período de tempo para os dados no gráfico. -- 6. **Legenda**: reflete e descreve os dados e as séries do eixo y. Você pode selecionar cada item da legenda para mudar os dados apresentados no gráfico. - ---- - -## Monitoramento de métricas - -Para monitorar suas métricas, você encontra diversos gráficos com dados específicos, divididos de acordo com data sources. Eles são divididos em abas: - -**Data Stream** _-_ **Applications** _-_ **Functions** _-_ **Edge DNS** _-_ **Image Processor** - -Você encontra informações detalhadas sobre cada aba e subabas e sobre cada um dos gráficos disponíveis na [documentação do Novo Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/). - -A navegação entre abas pode ser diferente entre as versões Histórico e Novo, mas você pode tentar procurar pelo título do gráfico para encontrar sua descrição. - ---- - -## Limites - -Ao configurar os filtros, nos campos: - -- Configurations (Applications) -- Functions (Functions) -- Zones (Edge DNS) - -Você pode selecionar *até 4 itens* por vez. - - - ---- - diff --git a/src/content/docs/pt-br/pages/menu-principal/referencia/observe/real-time-metrics/primeiros-passos.mdx b/src/content/docs/pt-br/pages/menu-principal/referencia/observe/real-time-metrics/primeiros-passos.mdx index d219295b9a..60caa021fd 100644 --- a/src/content/docs/pt-br/pages/menu-principal/referencia/observe/real-time-metrics/primeiros-passos.mdx +++ b/src/content/docs/pt-br/pages/menu-principal/referencia/observe/real-time-metrics/primeiros-passos.mdx @@ -1,27 +1,285 @@ --- -title: Primeiros passos do Real-Time Metrics -description: Veja os primeiros passos do Real-Time Metrics. -meta_tags: >- - real time, edge computing, observe, observability, metrics, data, events, - security +title: Primeiros passos com Real-Time Metrics +description: Leia os totais de requisições e de dados transferidos das suas aplicações no Azion Console ou com uma query GraphQL e restrinja-os a 24 horas e a um host. +meta_tags: 'real-time metrics, quickstart, console, graphql, api, metrics' namespace: docs_real_time_metrics_first_steps permalink: /documentacao/plataforma/real-time-metrics/primeiros-passos/ --- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' +import Tabs from '~/components/webkit/Tabs.vue' -Antes de começar a usar o **Real-Time Metrics**, confira que você tem uma conta no [Azion Console](https://console.azion.com). Você encontra mais informações na [página de documentação](/pt-br/documentacao/fundamentos/criar-uma-conta/). +Este guia orienta você a ler os seus primeiros números de tráfego em [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/), no Azion Console ou com a API GraphQL. -O Real-Time Metrics vem como um produto ativado em todas as contas da Azion. Se você quiser conferir se ele está ativo na sua: +- Leia o total de requisições e o total de dados transferidos das suas aplicações. +- Defina o intervalo de tempo para as últimas 24 horas. +- Restrinja os dois totais a um host. -Para acessar o Real-Time Metrics: +Real-Time Metrics não cria nada e não há nada para ativar: o produto está ativo em toda conta Azion. Ele lê as métricas que as suas aplicações e outros produtos geram à medida que recebem tráfego e as mostra em gráficos assim que o tráfego chega. Duas coisas estão por trás de cada número desta página: -1. [No Console](https://console.azion.com), no canto superior esquerdo, selecione **Products menu**, representado por três linhas horizontais. -2. Na seção **OBSERVE**, selecione **Real-Time Metrics NEW**. +1. Uma **aplicação** que já atendeu requisições. Essas requisições são os dados. +2. O **dataset** `httpMetrics`, que registra as requisições das suas aplicações. Os gráficos da aba **Applications** e a API GraphQL leem esse dataset, então as duas interfaces retornam os mesmos totais para o mesmo intervalo e o mesmo filtro. -Você será redirecionado para a página do Real-Time Metrics, que, por padrão, abrirá na aba Applications. +Real-Time Metrics mostra números agregados. Para os logs por trás de cada número, consulte [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/). -Para um passo a passo de como usar o produto, veja o guia [Como usar o Real-Time Metrics](/pt-br/documentacao/guias/plataforma/observabilidade/usar-real-time-metrics/). +--- + +Selecione a sua interface uma vez. Os pré-requisitos e cada etapa abaixo mostram apenas esse caminho. + + +Console +API + + +## Pré-requisitos + +- Uma conta Azion. Para criar uma, consulte [Criar uma conta](/pt-br/documentacao/fundamentos/criar-uma-conta/). +- Uma [aplicação](/pt-br/documentacao/plataforma/applications/) atendida por um [workload](/pt-br/documentacao/plataforma/workloads/), com requisições nas últimas 24 horas. +- Um host em que o workload responde, como `www.example.com`. A etapa 3 filtra por ele. + + + + + +- Acesso ao Azion Console. Para entrar, consulte [Como acessar o Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/). + + + + + +- Um personal token. Para criar um, consulte [Como criar um personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/). +- `curl`. + + + + + +--- + +## 1. Abra as métricas de requisições das suas aplicações + +Sem filtro, Real-Time Metrics conta as requisições e os dados transferidos de todas as aplicações da sua conta. + + + + + +Para ler os dois totais no Azion Console: + + + + + Acesse [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + A página abre na categoria **Build**, na aba **Applications** e no dashboard **Data Transferred**. + + + + + No gráfico **Edge Cache**, encontre a entrada **Data Transferred Total** na legenda. + + + + + + No gráfico **Total Requests**, encontre a entrada **Edge Requests Total** na legenda. + + + + +Os dois gráficos cobrem **Last 5 minutes**, o intervalo com que a página abre. Cada entrada da legenda mostra ` - `, em que o total soma todo o intervalo. + +O dropdown de categoria também oferece **Secure** e **Observe**, cada uma com as próprias abas de produto. Para o layout completo, consulte [Filtros e intervalo de tempo](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/#layout-da-tela). + + + + + +Para ler os dois totais com a API GraphQL, envie uma requisição `POST` para `https://api.azion.com/v4/metrics/graphql`. A query seleciona `requestsTotal` e `dataTransferredTotal` do dataset `httpMetrics`, e as variáveis definem um intervalo de uma hora. + +Substitua `[TOKEN VALUE]` pelo seu personal token e os valores de `begin` e `end` pela hora que você quer ler: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query TrafficLastHour($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 1, filter: { tsRange: { begin: $begin, end: $end } }) { requestsTotal dataTransferredTotal } }","variables":{"begin":"2026-10-02T13:25:25","end":"2026-10-02T14:25:25"}}' +``` + +A API responde `200` com uma linha: + +```json +{ + "data": { + "httpMetrics": [ + { + "requestsTotal": 0, + "dataTransferredTotal": 0.0 + } + ] + } +} +``` + +A linha contém os totais do intervalo. Um `0` significa que nenhuma requisição chegou às suas aplicações naquela hora. A API exige um intervalo: uma query sem `tsRange` retorna `400` com `To execute queries it is mandatory to provide the desired time interval.` + +Para todos os campos do dataset, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#httpmetrics-applications-waf). + + + + + +--- + +## 2. Defina o intervalo de tempo para as últimas 24 horas + +O intervalo de tempo define o período que cada total cobre. Nas duas interfaces, esta etapa lê as mesmas 24 horas. + + + +Para definir o intervalo no Azion Console: + + + + + Na linha de filtros, selecione o seletor de intervalo de tempo. + + + + + Na aba **Quick**, em **Commonly used**, selecione **Last 24 hours**. + + + + + Depois que o intervalo muda, o botão **Refresh** ao lado do seletor passa a mostrar **Update**. + + + + +Todos os gráficos são recarregados para as últimas 24 horas, e a entrada **Edge Requests Total** da legenda passa a totalizar esse período. + +Para um início e um fim personalizados, ou para recarregar os gráficos automaticamente em intervalos fixos, consulte [Filtros e intervalo de tempo](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/#intervalo-de-tempo). + + + + + +O filtro `tsRange` define o período com `begin` e `end`. Para ler as últimas 24 horas com a API, envie a mesma query com `begin` 24 horas antes de `end`. O nome da operação diz o que o intervalo cobre: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query TrafficLast24Hours($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 1, filter: { tsRange: { begin: $begin, end: $end } }) { requestsTotal dataTransferredTotal } }","variables":{"begin":"2026-10-01T14:25:25","end":"2026-10-02T14:25:25"}}' +``` + +A API responde `200` com os totais dessas 24 horas: + +```json +{ + "data": { + "httpMetrics": [ + { + "requestsTotal": 1985, + "dataTransferredTotal": 149684815.0 + } + ] + } +} +``` + +Neste exemplo, as aplicações atenderam 1.985 requisições e 149.684.815 bytes. `dataTransferredTotal` está em bytes e soma os dados transferidos de entrada e de saída. + + + + + +--- + +## 3. Filtre por um host + +Um filtro mantém apenas as requisições que correspondem a ele, e todos os totais acompanham o filtro. Esta etapa mantém as requisições para o host `www.example.com`. Substitua-o por um host em que o seu workload responde. + + + + + +Para filtrar o dashboard no Azion Console: + + + + + Na linha de filtros, selecione o ícone de filtro, cujo tooltip mostra **Add filter**. + + + + + Em **Filter**, selecione **Host**. + + + + + Em **Operator**, selecione **Equals**. + + + + + Insira `www.example.com` como valor. + + + + + +Um chip abaixo da linha de filtros mostra `Host equals: www.example.com`. Todos os gráficos passam a mostrar apenas as requisições para esse host, nas últimas 24 horas. + +Para filtrar por workload em vez de host, selecione o campo **Domain**, chamado **Workload** em algumas contas, e selecione o workload na lista do campo. Para todos os campos e operadores, consulte [Filtros e intervalo de tempo](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/#filtros). + + + + + +Para filtrar com a API, adicione `hostEq` a `filter`, ao lado de `tsRange`. A query mantém o intervalo de 24 horas da etapa 2: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query TrafficForHost($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 1, filter: { tsRange: { begin: $begin, end: $end }, hostEq: \"www.example.com\" }) { requestsTotal dataTransferredTotal } }","variables":{"begin":"2026-10-01T14:25:25","end":"2026-10-02T14:25:25"}}' +``` + +A API responde `200` com os totais desse host apenas: + +```json +{ + "data": { + "httpMetrics": [ + { + "requestsTotal": 982, + "dataTransferredTotal": 114490585.0 + } + ] + } +} +``` + +Neste exemplo, o host atendeu 982 das 1.985 requisições da etapa 2. Para os outros operadores que um filtro aceita, consulte [Queries da API GraphQL](/pt-br/documentacao/devtools/graphql/queries/#operadores). + + + + --- +## Próximos passos + + + + + + + diff --git a/src/content/docs/pt-br/pages/menu-principal/referencia/observe/real-time-metrics/real-time-metrics.mdx b/src/content/docs/pt-br/pages/menu-principal/referencia/observe/real-time-metrics/real-time-metrics.mdx index 6105c296cf..00c9342715 100644 --- a/src/content/docs/pt-br/pages/menu-principal/referencia/observe/real-time-metrics/real-time-metrics.mdx +++ b/src/content/docs/pt-br/pages/menu-principal/referencia/observe/real-time-metrics/real-time-metrics.mdx @@ -1,1072 +1,118 @@ --- title: Real-Time Metrics -description: >- - O Real-Time Metrics fornece acesso a métricas em tempo real e ajuda a otimizar - seu uso dos produtos da Azion e como o seu conteúdo é entregue. -meta_tags: >- - real time, edge computing, observe, observability, metrics, data, events, - security, observabilidade, dados +description: Leia as métricas de tráfego, cache, segurança, funções, DNS e stream dos seus produtos da Azion como gráficos no Azion Console ou pela API GraphQL. +meta_tags: 'real-time metrics, observe, metrics, dashboards, graphql, observability' namespace: documentation_products_real_time_analytics permalink: /documentacao/plataforma/real-time-metrics/ --- -import Tag from '~/components/webkit/Tag.vue'; -import DocButton from '~/components/webkit/DocButton.vue'; +import DocButton from '~/components/webkit/DocButton.vue' +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' -**Real-Time Metrics** é um produto de [Observe](/pt-br/documentacao/) que fornece acesso a métricas em tempo real, através de gráficos, para que você analise os eventos de suas aplicações e produtos configurados na Azion. Ele também ajuda a otimizar seu uso dos produtos da Azion e como o seu conteúdo é entregue. +Uma métrica é um número calculado a partir de muitas requisições em uma fatia de tempo, como uma contagem de requisições, uma soma de bytes ou a parcela do conteúdo servida do cache. Um dashboard de métricas plota esses números como gráficos, um ponto por minuto, hora ou dia, para que você veja como o tráfego muda sem ler cada requisição. Um log é a visão oposta: um registro por requisição, com os detalhes dela. -Ao analisar dados com o Real-Time Metrics, você consegue verificar e acompanhar o comportamento de suas aplicações o mais próximo possível do tempo real. O Real-Time Metrics permite que você: +**Real-Time Metrics** agrega as métricas que os produtos da Azion que servem o seu tráfego geram e as mostra como gráficos no [Azion Console](https://console.azion.com/) e pela [API GraphQL](/pt-br/documentacao/devtools/graphql/). É um produto de Observe que não cria nada na sua conta e não precisa ser ativado: ele está ativo em todas as contas, e os gráficos dele acompanham o seu tráfego em poucos minutos. Use Real-Time Metrics para quantificar requisições e dados transferidos, ver a banda que o cache economiza e verificar a disponibilidade e a performance do seu conteúdo por meio de status codes e tempos de requisição. Use-o também para encontrar ameaças de segurança e bots, contar invocações de funções e consultas DNS, investigar uma queda ou um pico e comparar um período com outro. -- Obtenha insights sobre o desempenho de suas aplicações. -- Verifique a disponibilidade de seu conteúdo. -- Quantifique os acessos e o tráfego de seu conteúdo. -- Veja economia de banda. -- Encontre ameaças de segurança em tempo real. -- Resolva problemas em tempo real. -- Compare os dados de suas aplicações em intervalos de tempo diferentes. - -O Real-Time Metrics busca seus dados e métricas usando a [Azion GraphQL API](/pt-br/documentacao/devtools/graphql/visao-geral/) e gera gráficos a partir do seu retorno. O tempo máximo para agregação dos dados ocorrer é de **10 minutos**. - -Você pode combinar a análise de suas métricas com o [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/) para continuar inspecionando seus logs. - -Veja os [primeiros passos do Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/primeiros-passos/). - -## Plugin Grafana - -O Real-Time Metrics também tem uma integração com o [Azion Grafana plugin](https://github.com/aziontech/grafana-plugin) disponível para instalação local. Com ele, você pode utilizar a interface do Grafana para criar dashboards e complementar a visualização de suas métricas. - -Os dashboards podem ser criados usando queries da GraphQL. Você pode utilizá-los para visualizar e criar: - -- Métricas de Top X (como endereços de IP e países bloqueados). -- Métricas de segurança. -- Alertas personalizados. -- Códigos de status específicos. - -Veja como: - -- [Personalizar seu próprio dashboard](/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana/) -- [Usar um dashboard pré-configurado para visualizar os gráficos de Data Transferred](/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana-dash-pre-configurado/) - ---- - -## Armazenamento de dados - -A Azion armazena os eventos e logs de suas métricas por 2 anos, mas o novo Real-Time Metrics fornece dados e métricas a partir de **15 de outubro de 2022**. - -Se você deseja visualizar métricas de até 2 anos e de antes de 15 de outubro de 2022: - - - ---- - -## Consideração sobre os dados - -Ao comparar os dados exibidos no Real-Time Metrics e os dados do Faturamento da Azion, é possível que você encontre diferenças. O Real-Time Metrics foca performance e usa uma abordagem *at-most-once*, enquanto o Faturamento visa precisão e usa uma abordagem *exactly-once*. Se você encontrar diferenças, considere os dados do Faturamento da Azion como os corretos. - -Em média, a diferença entre os dois é menor do que 1%. Veja os [Preços da Azion](/pt-br/documentacao/fundamentos/precos/) e a [documentação de Faturamento](/pt-br/documentacao/fundamentos/billing-and-subscriptions/) para mais informações. + + --- -## Escolha de produto para visualizar métricas - -O **Real-Time Metrics** permite que você acompanhe e analise as métricas de suas aplicações através de diferentes produtos, indicados por abas separadas de acordo com suas categorias. Você pode escolher visualizar suas métricas através das seguintes categorias: - -- Build -- Secure -- Observe - -Após selecionar uma categoria, você pode selecionar um produto e visualizas suas métricas. - -Na aba **Build**, você encontrará métricas relacionadas a: - -- Build: - - Applications - - Tiered Cache - - Functions - - Image Processor - -Na aba **Secure**, você encontrará métricas relacionadas a: - -- Secure - - WAF - - Edge DNS - - Bot Manager - - Threats Breakdown - -Na aba **Observe**, você encontrará métricas relacionadas a: - -- Observe: - - Data Stream - -Após selecionar uma das abas de categorias e a aba de um produto, você verá os gráficos disponíveis para aquele produto específico de acordo com os dados de sua conta. Se você selecionar Data Stream, por exemplo, você verá gráficos com as métricas relacionadas aos stream configurados em sua conta. - -Alguns produtos, como **Applications**, também podem ter subabas, que separam diferentes tipos de métricas para um mesmo produto. Esses conjuntos de gráficos são dashboards. Descubra mais sobre cada aba, subaba e gráficos na seção sobre [Monitoramento de métricas com gráficos](#monitoramento-de-metricas-com-graficos). - -Você deve contratar os seguintes produtos e tê-los ativados em sua conta para visualizar suas métricas: - -- Data Stream -- Functions -- Edge DNS -- Image Processor -- Tiered Cache -- Bot Manager - ---- - -## Intervalo de tempo - -Após decidir qual produto você irá analisar, você precisa configurar um intervalo de tempo para buscar dados para os seus gráficos. - -Na tela do Real-Time Metrics, logo antes da seção com os gráficos, você encontra o filtro de intervalo de tempo, que tem duas partes: - -- **Time range**: apresenta opções para você selecionar o período de tempo que deseja usar para exibir seus dados nos gráficos. Ele vem, por padrão, com o intervalo **Last Hour** selecionado, mas você pode escolher entre: - - - Last Hour (última hora) - - Last 24 Hours (últimas 24 horas) - - Last 7 Days (últimos 7 dias) - - Last 30 Days (últimos 30 dias) - - Last 6 Months (últimos 6 meses) - -Quando você seleciona **Last Hour**, o Real-Time Metrics atualiza seus dados automaticamente a cada um minuto. - -- **Date calendar**: campo com calendário com a data e hora do seu intervalo de tempo escolhido. Quando você seleciona um intervalo de tempo, as datas de começo e fim são configuradas automaticamente, mas se você quer utilizar um intervalo de tempo diferente dos disponibilizados, é necessário configurar manualmente as datas de início e de fim nos campos de calendário. - -O fuso horário utilizado é o mesmo do configurado em suas preferências de usuário. - -Após configurar os campos de **Time range** e **Date calendar**, seus gráficos são atualizados para buscar os dados que estão relacionados ao novo intervalo de tempo configurado. - - - ---- - -## Filtros - -**Real-Time Metrics** permite que você filtre sua análise, recebendo campos e valores específicos. Você pode adicionar um ou múltiplos filtros, dependendo da análise que deseja conduzir. - - - -:::tip[dica] -Após a aplicação de um filtro, o caminho da URL no Azion Console é atualizado com um parâmetro codificado. Você pode copiar e compartilhar a URL com outros usuários para que eles visualizem os gráficos com os mesmos filtros já aplicados. -::: +## Query de métricas + +Todo gráfico é a resposta a uma query GraphQL. Esta query lê o total de requisições e o total de dados transferidos de todas as aplicações da conta: + +```graphql +query TrafficLast24Hours($begin: DateTime!, $end: DateTime!) { + httpMetrics( + limit: 1 + filter: { tsRange: { begin: $begin, end: $end } } + ) { + requestsTotal + dataTransferredTotal + } +} +``` + +- `httpMetrics` é o dataset, as métricas agregadas das requisições que as suas aplicações servem. Cada tipo de tráfego tem o próprio dataset. +- `tsRange` define o período com `begin` e `end`. Toda query precisa carregar um intervalo de tempo, ou a API responde `400`. +- `requestsTotal` e `dataTransferredTotal` são campos calculados: cada um guarda um total para o intervalo inteiro. `dataTransferredTotal` está em bytes, a soma dos dados transferidos na entrada e na saída. +- A query não agrupa por nenhum campo, então a API retorna uma linha que guarda os totais. + +Enviada a `https://api.azion.com/v4/metrics/graphql` com um personal token e as variáveis `{"begin": "2026-10-01T14:25:25", "end": "2026-10-02T14:25:25"}`, a query responde `200`: + +```json +{ + "data": { + "httpMetrics": [ + { + "requestsTotal": 1985, + "dataTransferredTotal": 149684815.0 + } + ] + } +} +``` + +Neste exemplo, as aplicações da conta serviram 1.985 requisições e 149.684.815 bytes nessas 24 horas. Se você conhece GraphQL, você conhece o modelo de query: qualquer cliente GraphQL que envia uma requisição `POST` com um token lê os mesmos números que os gráficos do Console. Para enviar esta query com `curl` e restringi-la a um host, consulte [Primeiros passos com Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/primeiros-passos/). Para todos os campos de cada dataset, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/). --- -## Visão dos gráficos - -Na segunda seção do Real-Time Metrics, após os filtros de configuração, você encontra todos os gráficos disponíveis. - -:::note[nota] -O último ponto do gráfico pode aparecer como uma métrica decrescente. Isto ocorre porque os últimos dados ainda estão sendo agregados, e passam a impressão de queda. Exemplo: agora, são 15h40 e você solicitou dados dos últimos 3 dias. Os dados das 15h-16h ainda estão sendo calculados e agregados, e por isso a visualização do gráfico parece demonstrar uma queda nas métricas. -::: - -Cada gráfico apresenta as seguintes propriedades: - -- **Título**: nome descritivo para o gráfico. -- **Tipo de gráfico**: tag que representa quem criou o gráfico e para quem está disponível. - - **Azion Chart**: gráfico exibido por padrão pelos sistemas da Azion. -- **Menu de contexto**: opções extras de ações relacionadas ao gráfico. - - **(?) Open Help Center**: abre um artigo do Help Center, que você pode usar para descobrir mais sobre cada gráfico e encontrar algumas dicas e exemplos práticos. - - **Copy Query**: opção para copiar a query daquele gráfico específico. - - **Export CSV**: opção para baixar e exportar os pontos apresentados naquele gráfico específico de acordo com os dados exibidos. - - **Show Mean Line/Hide Mean Line**: opção para exibir ou parar de exibir o valor médio do gráfico através de uma linha. Cada ponto do gráfico é somado e dividido pelo número total de pontos, gerando uma média para os dados exibidos naquele gráfico e período de tempo específicos. - - **Show Mean Line per series**: opção para exibir ou parar de exibir o valor médio para cada série de dados no gráfico. Em vez de calcular uma única média para todos os pontos, ele calcula e sobrepõe uma linha média para cada série individual, ajudando a comparar tendências entre diferentes conjuntos de dados. -- **Descrição**:⁠ texto breve que explica os dados que aquele gráfico específico apresenta. -- **Agregador**: tipo de agregação sendo utilizada na query para gerar as métricas no gráfico. Pode ser `Sum` ou `Avg`. -- **Variation tag**: informação exibida no gráfico com apenas uma série. Fornece um comparativo, em porcentagem, entre o valor atual da série do gráfico e o valor do período de tempo anterior correspondente. A tag mostra um **↑** se o valor atual é maior, um **↓** se o valor anterior era maior, e nenhum sinal se o valor é igual. Se você está usando o período de tempo "Last hour" e agora são 10:00, o gráfico mostra dados do período 9:00-10:00, e o feedback mostrará uma comparação com os dados de 8:00-9:00. As cores indicam se o indicador está melhorando ou piorando, de acordo com o sentido (aumento ou redução). Por exemplo, **+10% (verde)** em OFFLOAD significa que o indicador OFFLOAD é melhor quando aumenta, enquanto MISSED DATA aparece em **vermelho** quando aumenta, indicando o comportamento inverso. -- **Séries do gráfico**: representação de categorias de dados. - - Exemplo: em um gráfico de linhas que mostra o número de requisições ao longo do tempo, você pode ter várias séries, cada uma representando um domínio diferente. Cada série terá pontos de dados conectados por uma linha para mostrar como o número de requisições variou ao longo do tempo em cada domínio. -- **Tooltip**: informação disponível ao passar o cursor pelas séries do gráfico, que apresenta o valor e o nome de cada série daquele ponto específico em ordem decrescente, de acordo com o valor. Este recurso não está disponível para viewports menores que 540px. -- **Linha de intervalo de tempo**: o eixo x do gráfico, representando a linha do período de tempo para os dados no gráfico. -- **Legenda**: lista que reflete e descreve as séries e os dados do eixo y, baseada no tipo de agregação do gráfico. Você pode selecionar cada item da legenda para mudar os dados apresentados no gráfico. - -As legendas podem ser apresentadas de formas diferentes, dependendo do tipo de gráfico e da quantidade de séries representadas nele. Elas podem ser exibidas na *parte de baixo* do gráfico ou no *lado direito*, e a legenda exibe um máximo de *16 séries* por gráfico. - -:::note[nota] -Ao usar o botão **Copy Query** e copiar no [playground da GraphQL](https://console.azion.com/metrics/graphql), você precisa mover o que está sendo exibido abaixo de "VARIABLES" para a seção "**QUERY VARIABLES**", no final da página. -::: - ---- - -## Monitoramento de métricas com gráficos - -Na segunda seção do Real-Time Metrics, logo após o filtro de intervalo de tempo, você encontra todos os gráficos disponíveis para sua conta. - -Mesmo depois de configurar um intervalo de tempo, você pode navegar pelas abas e mudar o produto do qual você deseja visualizar métricas. Depois de selecionar uma aba e, possivelmente, subaba, você pode analisar cada gráfico e seus dados. - -A seguir, você encontra os detalhes sobre cada aba e subaba e sobre cada gráfico disponível: - -- [Build](#build) - - [Applications](#edge-applications) _-_ [Tiered Cache](#tiered-cache) _-_ [Functions](#edge-functions) _-_ [Image Processor](#image-processor) - -- [Secure](#secure) - - [WAF](#waf) _-_ [Edge DNS](#edge-dns) _-_ [Bot Manager](#bot-manager) - -- [Observe](#observe) - - [Data Stream](#data-stream) - ---- - -## Build - -### Applications - -A aba **Applications** mostra as métricas relacionadas aos acessos de suas [applications](/pt-br/documentacao/plataforma/applications/) configuradas em sua conta. Você encontrará três subabas com gráficos diferentes: [Data Transferred](#data-transferred), [Requests](#requests), [Status Codes](#status-codes) e [Bandwidth Saving](#bandwidth-saving). - -#### Data Transferred - -Descubra mais sobre cada gráfico: - -##### Cache - -O gráfico de **Cache** representa como todas as informações sobre os dados do seu Cache estão sendo acessadas no edge da Azion. - -Ele fornece a primeira camada de caching para o conteúdo do cliente no edge da Azion. O gráfico é dividido em: - -> - **Data Transferred Total**: a soma dos dados sendo transferidos tanto de Data Transferred In como de Data Transferred Out. -> -> USUÁRIO FINAL -> EDGE -> ORIGEM + ORIGEM -> EDGE -> USUÁRIO FINAL -> -> - **Data Transferred In**: dados transferidos do usuário final para os edges e dos edges para a origem do cliente. -> -> USUÁRIO FINAL -> EDGE -> ORIGEM -> -> - **Data Transferred Out**: dados sendo transferidos da origem do cliente para os edges e dos edges para o usuário final. -> -> ORIGEM -> EDGE -> USUÁRIO FINAL - -Veja a [documentação de Cache](/pt-br/documentacao/plataforma/applications/#cache) para mais informações. - -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa bytes para exibir seus dados. Ele converte seus dados automaticamente para megabytes (MB), gigabytes (GB) ou terabytes (TB), por exemplo, de acordo com a quantidade de dados disponíveis para facilitar a visualização. - -Fluxo **Data Transferred In**: - -![Fluxo de informação do gráfico Cache para Data Transferred In, representando os dados sendo transferidos do usuário final para os edges e dos edges para a origem do cliente.](/assets/docs/images/uploads/edge-applications-in.png) - -Fluxo **Data Transferred Out**: - -![Fluxo de informação do gráfico Cache para Data Transferred Out, representando os dados sendo transferidos da origem do cliente para os edges e dos edges para o usuário final.](/assets/docs/images/uploads/edge-applications-out.png) - -Fluxo **Data Transferred**: - -![Fluxo de informação do gráfico Cache para Applications, representando os dados sendo transferidos tanto de Data Transferred In como de Data Transferred Out.](/assets/docs/images/uploads/edge-applications.png) - -Se você tem [Tiered Cache](/pt-br/documentacao/plataforma/applications/cache/tiered-cache/) habilitado, seu gráfico de Cache irá exibir: - -- **Data Transferred In**: ⁠dados transferidos do usuário final para os edges, e dos edges para a camada tiered cache. - -![Fluxo de informação do gráfico Cache para Data Transferred In, representando os dados sendo transferidos do usuário final para os edges e dos edges para o Tiered Cache.](/assets/docs/images/uploads/tiered-cache-enabled-edge-applications-in.png) - -- **Data Transferred Out**: dados transferidos da camada tiered cache para os edges, e dos edges para o usuário final. - -![Fluxo de informação do gráfico Cache com a camada tiered cache para Data Transferred Out, representando os dados sendo transferidos da camada tiered cache cache para os edges e dos edges para o usuário final.](/assets/docs/images/uploads/tiered-cache-enabled-edge-applications-out.png) - -- **Data Transferred Total**: todos os dados que foram transferidos no processo; valor de Data Transferred In + Data Transferred Out. - -![Fluxo de informação do gráfico Cache com a camada tiered cache para Data Transferred, representando todos os dados sendo transferidos tanto de Data Transferred In como de Data Transferred Out.](/assets/docs/images/uploads/tiered-cache-enabled-edge-applications.png) - -##### Edge Offload - -O gráfico de **Edge Offload** mostra a porcentagem de dados de requisições da sua aplicação que foi entregue diretamente pelo edge, sem precisar buscar o conteúdo na origem antes de entregá-lo. - -**USUÁRIO FINAL -> EDGE -> USUÁRIO FINAL** - -Quanto mais alta a porcentagem de offload, maior a eficiência de suas aplicações com relação ao uso de políticas de cache para preservar infraestrutura. O edge da Azion entrega o conteúdo a partir do seu cache, exigindo menos de sua origem. - -**Exemplo prático** - -Sua aplicação tem 1 GB de dados. Se o gráfico mostra que sua aplicação teve uma média de *80% de offload*, isso significa que 800 MB de 1 GB foram entregues diretamente pelo edge da Azion. - -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa porcentagens para exibir seus dados em gráficos de offload. Todos os dados relacionados a offload refletem um número médio de acesso a suas aplicações, e o gráfico representa essa informação através de porcentagens (%). - -###### Saved Data - -O gráfico **Saved Data** mostra a soma total dos dados de sua application que foram entregues diretamente pelo edge da Azion, sem precisar de um passo a mais para buscar o conteúdo na origem. - -> Saved Data: o conteúdo é entregue diretamente pelo edge para a origem. -> -> USUÁRIO FINAL -> EDGE -> USUÁRIO FINAL - -Uma soma alta de dados salvos significa que sua aplicação está usando as políticas de cache no edge da Azion de forma mais eficiente, exigindo menos de sua origem durante o período que você selecionou no filtro de intervalo de tempo. - -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa bytes para exibir seus dados. Ele converte seus dados automaticamente para megabytes (MB), gigabytes (GB) ou terabytes (TB), por exemplo, de acordo com a quantidade de dados disponíveis para facilitar a visualização. - -##### Missed Data - -O gráfico **Missed Data** mostra a soma total dos dados de sua application dos casos em que o edge da Azion teve que buscar o conteúdo na origem e entregá-lo ao usuário final. - -> Missed Data: o edge busca o conteúdo na origem e então entrega para o usuário final. -> -> USUÁRIO FINAL -> EDGE -> ORIGEM -> EDGE -> USUÁRIO FINAL - -Quando o conteúdo não é encontrado no cache da Azion, é necessário um passo a mais para procurar o conteúdo na origem, e então entregá-lo para o usuário final. - -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa bytes para exibir seus dados. Ele converte seus dados automaticamente para megabytes (MB), gigabytes (GB) ou terabytes (TB), por exemplo, de acordo com a quantidade de dados disponíveis para facilitar a visualização. - -##### Total Bandwidth Usage - -O gráfico **Total Bandwidth Usage** mostra a quantidade total de bandwidth que sua aplicação usou durante o período que você selecionou no filtro de intervalo de tempo. - -Bandwidth representa a quantidade de informações sendo recebidas por segundo. Na Azion, isso representa o conteúdo que foi entregue pelas suas aplicações a cada segundo. - -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa bits e bytes por segundo com todos os gráficos relacionados a dados de bandwidth. Ele converte seus dados automaticamente em megabits por segundo (bit/s) ou kilobytes por segundo (kB/s), por exemplo, de acordo com a quantidade de dados disponíveis para facilitar a visualização. - -##### Bandwidth Offloaded - -O gráfico **Bandwidth Offloaded** mostra a porcentagem de bandwidth que foi entregue diretamente pelo edge, sem precisar buscar o conteúdo na origem antes de entregá-lo. - -Bandwidth representa a quantidade de informações sendo recebidas por segundo. Na Azion, isso representa o conteúdo que foi entregue pelas suas aplicações por segundo durante o período que você selecionou no filtro de intervalo de tempo. - -Quanto mais alta a porcentagem de offload, maior a eficiência de suas aplicações com relação ao uso de políticas de cache para preservar infraestrutura. O edge da Azion entrega o conteúdo a partir do seu cache, exigindo menos de sua origem. - -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa porcentagens para exibir seus dados em gráficos de offload. Todos os dados relacionados a offload refletem um número médio de acesso a suas aplicações, e o gráfico representa essa informação através de porcentagens (%). - -##### Saved Bandwidth - -O gráfico **Saved Bandwidth** mostra o quanto de bandwidth foi entregue diretamente pelo edge, sem precisar buscar o conteúdo na origem antes de entregá-lo. - -> Saved Bandwidth: o conteúdo é entregue diretamente pelo edge para a origem. -> -> USUÁRIO FINAL -> EDGE -> USUÁRIO FINAL - -Um número maior de bandwidth salva significa que sua aplicação está usando as políticas de cache no edge da Azion de forma mais eficiente, exigindo menos de sua origem durante o período que você selecionou no filtro de intervalo de tempo. - -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa bits e bytes por segundo com todos os gráficos relacionados a dados de bandwidth. Ele converte seus dados automaticamente em megabits por segundo (bit/s) ou kilobytes por segundo (kB/s), por exemplo, de acordo com a quantidade de dados disponíveis para facilitar a visualização. - -##### Missed Bandwidth - -O gráfico **Missed Bandwidth** mostra o quanto de bandwidth foi entregue após o edge da Azion buscar o conteúdo na origem e entregar ao usuário final. - -> Missed Bandwidth: o edge busca o conteúdo na origem e então entrega para o usuário final. -> -> USUÁRIO FINAL -> EDGE -> ORIGEM -> EDGE -> USUÁRIO FINAL - -Quando o conteúdo não é encontrado no cache da Azion, é necessário um passo a mais para procurar o conteúdo na origem, e então entregá-lo para o usuário final. - -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa bits e bytes por segundo com todos os gráficos relacionados a dados de bandwidth. Ele converte seus dados automaticamente em megabits por segundo (bit/s) ou kilobytes por segundo (kB/s), por exemplo, de acordo com a quantidade de dados disponíveis para facilitar a visualização. - -##### Requests - -Descubra mais sobre cada gráfico: - -###### Total Requests - -O gráfico **Total Requests** mostra a soma, a quantidade total de requisições que foram processadas no domínio da application configurada em sua conta. - -Cada vez que o conteúdo da sua aplicação é acessado, uma requisição é processada. O gráfico mostra, então, todas as requisições que ocorreram durante o período que você selecionou no filtro de intervalo de tempo. - -**1 acesso = 1 requisição** - -> O gráfico é dividido em: -> -> - http: requisições processadas usando o protocolo HTTP. -> - Applications: todos os tipos de requisições; valor de http + https. -> - https: requisições processadas usando o protocolo HTTPS protocol, que usa criptografia e verificação. - -###### Requests Offloaded - -O gráfico **Requests Offloaded** mostra a porcentagem de requisições que foi entregue diretamente pelo edge, sem precisar buscar o conteúdo na origem antes de entregá-lo. - -**USUÁRIO FINAL -> EDGE -> USUÁRIO FINAL** - -Quanto mais alta a porcentagem de offload, maior a eficiência de suas aplicações com relação ao uso de políticas de cache para preservar infraestrutura. O edge da Azion entrega o conteúdo a partir do seu cache, exigindo menos de sua origem. - -**Exemplo prático** - -Sua aplicação recebeu *5 requisições*. Se o gráfico mostra que sua aplicação teve uma média de *80% de offload*, isso significa que *4 de 5* requisições foram entregues diretamente pelo edge da Azion. - -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa porcentagens para exibir seus dados em gráficos de offload. Todos os dados relacionados a offload refletem um número médio de acesso a suas aplicações, e o gráfico representa essa informação através de porcentagens (%). - -###### Saved Requests - -O gráfico **Saved Requests** mostra a quantidade total das requisições de sua application que foram entregues diretamente pelo edge, sem precisar de um passo a mais para buscar o conteúdo na origem. - -Cada vez que o conteúdo da sua aplicação é acessado, uma requisição é processada. O gráfico mostra, então, todas as requisições salvas que ocorreram durante o período que você selecionou no filtro de intervalo de tempo. - -> Saved Requests: o conteúdo é entregue diretamente pelo edge para a origem. -> -> USUÁRIO FINAL -> EDGE -> USUÁRIO FINAL - -Uma soma alta de requisições salvas significa que sua aplicação está usando as políticas de cache no edge da Azion de forma mais eficiente, exigindo menos de sua origem durante o período que você selecionou no filtro de intervalo de tempo. - -###### Missed Requests - -O gráfico **Missed Requests** mostra a soma total das requisições de sua application dos casos em que o edge da Azion teve que buscar o conteúdo na origem e entregá-lo ao usuário final. - -Cada vez que o conteúdo da sua aplicação é acessado, uma requisição é processada. O gráfico mostra, então, todas as requisições que foram perdidas durante o período que você selecionou no filtro de intervalo de tempo. - -> Missed Requests: o edge busca o conteúdo na origem e então entrega para o usuário final. -> -> USUÁRIO FINAL -> EDGE -> ORIGEM -> EDGE -> USUÁRIO FINAL - -Quando o conteúdo não é encontrado no cache da Azion, é necessário um passo a mais para procurar o conteúdo na origem, e então entregá-lo para o usuário final. Todo o processo conta como uma requisição. - -###### Total Requests per Second - -O gráfico **Total Requests per Second** mostra a média de requisições por segundo que foram processadas no domínio da application configurada em sua conta. - -Cada vez que o conteúdo da sua aplicação é acessado, uma requisição é processada. O gráfico mostra, então, a média das requisições que ocorreram por segundo durante o período que você selecionou no filtro de intervalo de tempo. - -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa média de requests/segundo para exibir seus dados. Exemplo: 0.026/s - -###### Requests per Second Offloaded - -O gráfico **Requests per Second Offloaded** mostra a porcentagem de requisições por segundo que foi entregue diretamente pelo edge, sem precisar buscar o conteúdo na origem antes de entregá-lo. - -**USUÁRIO FINAL -> EDGE -> USUÁRIO FINAL** - -Quanto mais alta a porcentagem de offload, maior a eficiência de suas aplicações com relação ao uso de políticas de cache para preservar infraestrutura. O edge da Azion entrega o conteúdo a partir do seu cache, exigindo menos de sua origem. - -**Exemplo prático** - -Sua aplicação recebeu *5 requisições em 1 segundo*. Se o gráfico mostra que sua aplicação teve uma média de *80% de offload*, isso significa que *4 de 5* requisições naquele segundo foram entregues diretamente pelo edge da Azion. - -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa porcentagens para exibir seus dados em gráficos de offload. Todos os dados relacionados a offload refletem um número médio de acesso a suas aplicações, e o gráfico representa essa informação através de porcentagens (%). - -###### Saved Requests per Second - -O gráfico **Saved Requests per Second** mostra a média de requisições por segundo de sua application que foram entregues diretamente pelo edge, sem precisar de um passo a mais para buscar o conteúdo na origem. - -Cada vez que o conteúdo da sua aplicação é acessado, uma requisição é processada. O gráfico mostra, então, a média das requisições salvas que ocorreram por segundo durante o período que você selecionou no filtro de intervalo de tempo. - -> Saved Requests: o conteúdo é entregue diretamente pelo edge para a origem. -> -> USUÁRIO FINAL -> EDGE -> USUÁRIO FINAL - -Uma média alta de requisições salvas por segundo significa que sua aplicação está usando as políticas de cache no edge da Azion de forma mais eficiente, exigindo menos de sua origem durante o período que você selecionou no filtro de intervalo de tempo. - -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa média de requests/segundo para exibir seus dados. Exemplo: 0.026/s - -###### Missed Requests per Second - -O gráfico **Missed Requests per Second** mostra a média de requisições por segundo de sua application dos casos em que o edge da Azion teve que buscar o conteúdo na origem e entregá-lo ao usuário final. - -Cada vez que o conteúdo da sua aplicação é acessado, uma requisição é processada. O gráfico mostra, então, a média das requisições que foram perdidas em cada segundo durante o período que você selecionou no filtro de intervalo de tempo. - -> Missed Requests: o edge busca o conteúdo na origem e então entrega para o usuário final. -> -> USUÁRIO FINAL -> EDGE -> ORIGEM -> EDGE -> USUÁRIO FINAL - -Quando o conteúdo não é encontrado no cache da Azion, é necessário um passo a mais para procurar o conteúdo na origem, e então entregá-lo para o usuário final. - -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa média de requests/segundo para exibir seus dados. Exemplo: 0.026/s - -###### Requests by Method - -O gráfico **Requests by Method** mostra a soma dos métodos HTTP que foram utilizados nas requisições feitas ao seu domínio. Na Azion, ele indica como o cliente interagiu com o conteúdo no domínio associado a uma application. - -O gráfico é dividido em: - -- **POST**: envia recursos para o servidor. -- **PUT**: atualiza ou substitui completamente um recurso existente no servidor. -- **PATCH**: atualiza ou substitui parcialmente um recurso existente no servidor. -- **HEAD**: recupera dados sobre o recurso, mas não retorna o conteúdo. -- **GET**: recupera recursos do servidor. -- **Undefined**: inclui métodos de requisição desconhecidos ou não classificados. -- **DEBUG**: usado para fins de diagnóstico em alguns ambientes. -- **DELETE**: remove um recurso especificado do servidor. -- **OPTIONS**: retorna as opções de comunicação disponíveis para o recurso alvo. -- **TRACE**: realiza um teste de loopback retornando a requisição recebida. -- *Outros métodos* de requisição cobrindo quaisquer métodos HTTP adicionais não listados acima. - -###### Average Request Time - -O gráfico **Average Request Time** mostra a duração média das requisições ao longo de um período especificado. Ele mede quanto tempo, em média, um servidor ou aplicação leva para processar e responder a uma requisição. -Com essas informações, você pode identificar rapidamente tendências e padrões nos tempos de processamento de requisições, como gargalos ou problemas que requerem atenção. Se você identificar esses problemas, pode abordá-los com soluções como: - -- [Melhorar suas consultas ao banco de dados](/pt-br/documentacao/devtools/graphql/queries/) para desempenho ideal. -- [Definir políticas de cache](/pt-br/documentacao/guias/performance-e-confiabilidade/cache-e-purge/cache-settings/) e [Advanced Cache Key](/pt-br/documentacao/guias/performance-e-confiabilidade/cache-e-purge/advanced-cache-key/). -- [Configurar múltiplas origens com algoritmos de balanceamento de carga](/pt-br/documentacao/guias/performance-e-confiabilidade/disponibilidade/configure-multiplas-origens/). - -> **Em que unidade os dados aparecem nos gráficos?** -> -> O Real-Time Metrics usa médias em segundos para mostrar seus dados. Exemplo: 1.7/s - -**Exemplo prático** - -Você pode usar os filtros de Métricas para refinar sua análise, focando em critérios específicos, como host, código de status, método de requisição ou localização geográfica. Por exemplo, na seção **Filter**, você pode usar **Host**, **Equals** e **example.com** para ver o tempo médio de requisição para cada host. - -###### Requests by Scheme - -O gráfico **Requests by Scheme** exibe o número total de requisições durante o período selecionado, categorizadas por esquema. - -Ele divide o tráfego em: - -- **HTTP**: requisições transmitidas sem criptografia, que podem ser vulneráveis à interceptação. -- **HTTPS**: requisições protegidas com criptografia, garantindo a integridade e a confidencialidade dos dados. - -Com essas informações, você pode analisar como as requisições estão sendo tratadas e identificar tendências no tráfego seguro (criptografado) versus não seguro. Leia mais sobre [Como configurar portas HTTP e HTTPS para origens e endereço de entrega](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/configurar-portas/). - -##### Status Codes - -Descubra mais sobre cada gráfico: - -###### Status Codes 2XX - -Cada vez que o seu domínio, associado com uma application na Azion, recebe uma requisição, ele também recebe um código de status específico de acordo com a resposta do servidor. O gráfico, então, mostra a soma de requisições totais que receberam status 2XX. - -Os códigos de status 2XX indicam requisições bem sucedidas pelo lado do servidor. Isso significa que a requisição passou pelos estágios de: recebida, entendida, aceita e processada pelo servidor, e o usuário final consegue visualizar o conteúdo do seu domínio. - -O gráfico é dividido entre: - -- **Requests Status Code 200**: o conteúdo foi entregue ao usuário corretamente. Status padrão de uma requisição HTTP bem-sucedida. -- **Requests Status Code 201**: a requisição foi bem-sucedida e um novo recurso foi criado como resultado. -- **Requests Status Code 202**: a requisição foi aceita para processamento, mas ainda não está concluída. -- **Requests Status Code 203**: a requisição foi processada com sucesso, mas a resposta pode ter sido modificada por um proxy ou fonte de terceiros. -- **Requests Status Code 204**: o servidor completou a requisição, mas não tinha conteúdo para entregar. -- **Requests Status Code 206**: o servidor entregou apenas uma parte do conteúdo porque ele foi dividido em partes. -- **Requests Status Code 207**: múltiplos códigos de status foram retornados em resposta a uma única requisição (geralmente usado em WebDAV). -- **Requests Status Code 210**: indica que parte da resposta contém um aviso ou informação adicional. -- **Requests Status Code 288**: pode ser usado em sistemas proprietários para indicar sucesso parcial ou respostas personalizadas. -- **Requests Status Code 2XX**: o servidor indicou outros status do tipo 2XX. Eles raramente ocorrem, e por isso são agrupados nesta opção. - -###### Status Codes 3XX - -Cada vez que o seu domínio, associado com uma application na Azion, recebe uma requisição, ele também recebe um código de status específico de acordo com a resposta do servidor. O gráfico, então, mostra a soma de requisições totais que receberam status 3XX. - -Os códigos de status 3XX indicam redirecionamento pelo lado do servidor. Isso significa que a requisição não foi totalmente completada porque o conteúdo estava em outra localização, e foi necessário realizar mais uma ação para poder entregar o conteúdo do seu domínio. - -O gráfico é dividido entre: +## Do tráfego ao gráfico -- **Requests Status Code 301**: as requisições atuais e todas as futuras serão redirecionadas para outra URL. -- **Requests Status Code 302**: esta requisição foi redirecionada temporariamente para outra URL. -- **Requests Status Code 303**: a requisição foi recebida, e o cliente deve fazer uma requisição GET separada para uma URL diferente para recuperar o recurso. Comumente usado após o envio de um formulário. -- **Requests Status Code 304**: o cabeçalho de conteúdo indica que não foi modificado e não precisa ser reenviado. Pode entregar o arquivo existente ao navegador do usuário. -- **Requests Status Code 307**: semelhante ao 302, mas garante que o método HTTP (por exemplo, POST) permaneça inalterado ao ser redirecionado. -- **Requests Status Code 308**: semelhante ao 301, mas garante que o método HTTP permaneça inalterado ao ser redirecionado permanentemente. -- **Requests Status Code 3XX**: o servidor indicou outros status do tipo 3XX. Eles raramente ocorrem, e por isso são agrupados nesta opção. +Real-Time Metrics não coleta nada que você configura. Ele lê o que os produtos que servem o seu tráfego já registram, depois que a Azion agrega esses registros. -###### Status Codes 4XX +```mermaid +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "13px"}, "flowchart": {"nodeSpacing": 12, "rankSpacing": 12, "padding": 6, "wrappingWidth": 70, "minNodeWidth": 40, "useMaxWidth": true}}}%% +flowchart LR + Req["Requisição"] --> P["Produtos da Azion"] + P --> Agg["Agregação"] + Agg --> DS["Datasets"] + DS --> API["API GraphQL"] + API --> Con["Gráficos do Console"] + API --> Q["Suas queries"] +``` -Cada vez que o seu domínio, associado com uma application na Azion, recebe uma requisição, ele também recebe um código de status específico de acordo com a resposta do servidor. O gráfico, então, mostra a soma de requisições totais que receberam status 4XX. +1. Um cliente envia uma requisição, e o produto que a processa, como uma aplicação ou o WAF, a registra como um evento. +2. A Azion agrega os eventos em métricas por bucket de tempo, como uma contagem de requisições ou uma soma de bytes. A agregação leva até 10 minutos, então os pontos mais recentes de um gráfico ainda podem subir. +3. As métricas são armazenadas em datasets, um por tipo de tráfego, como `httpMetrics` para as requisições das suas aplicações. +4. A API GraphQL em `https://api.azion.com/v4/metrics/graphql` responde a queries sobre esses datasets. +5. Cada gráfico no Azion Console envia uma query a essa mesma API, então um gráfico e uma query que você escreve leem os mesmos números. +6. As suas próprias queries, e os dashboards do Grafana, leem os mesmos datasets pela API. -Os códigos de status 4XX indicam que ocorreu um erro no lado do cliente. Isso significa que a requisição não pôde ser completada pelo servidor porque identificou um erro, provavelmente devido à página estar indisponível ou à requisição conter erros de sintaxe. Portanto, o servidor não conseguiu entregar o conteúdo do seu domínio. - -O gráfico é dividido entre: - -- **400 - Bad request**: o servidor não pôde processar a requisição. Geralmente, por algum erro no formato da requisição. -- **403 - Forbidden**: a requisição é válida, mas não foi autorizada no servidor. Isso significa que o usuário ou o IP que está fazendo a requisição não está autorizado para tal. -- **404 - Not Found**: o arquivo requisitado não existe na origem. -- **4XX - Client Error**: o servidor indicou outros status do tipo 4XX. Eles raramente ocorrem, e por isso são agrupados nesta opção. - -###### Status Codes 5XX - -Cada vez que o seu domínio, associado com uma application na Azion, recebe uma requisição, ele também recebe um código de status específico de acordo com a resposta do servidor. O gráfico, então, mostra a soma de requisições totais que receberam status 5XX. - -Os códigos de status 5XX indicam que ocorreu um erro no lado do servidor. Isso significa que a requisição feita pelo usuário final parece ser válida, mas por alguma razão o servidor não pôde fazer a requisição ou encontrou um erro no processo. O conteúdo do seu domínio existe, apenas não pôde ser entregue. - -O gráfico é dividido entre: - -- **500 - Internal Server Error**: mensagem genérica que é dada quando há um erro inesperado no servidor, que não consegue tratar a requisição. -- **502 - Bad Gateway**: quando o servidor está atuando como Gateway ou Proxy e recebe uma resposta inválida da origem. Geralmente, ocorre quando o servidor da origem está fora do ar. -- **503 - Service Unavailable**: servidor não está disponível. Geralmente, é um status temporário. -- **5XX - Server Error**: o servidor indicou outros status do tipo 5XX. Eles raramente ocorrem, e por isso são agrupados nesta opção. - -###### Requests by Status and Upstream Status - -A tabela **Requests by Status and Upstream Status** mostra o número total de requisições processadas, categorizadas tanto por Códigos de Status (respostas geradas pela sua aplicação ou infraestrutura) quanto por Códigos de Status Upstream (respostas retornadas por servidores upstream ou serviços externos). - -A tabela é dividida em: - -- **Status**: indica como as requisições foram processadas no edge, como respostas bem-sucedidas (2XX), erros do cliente (4XX) ou erros do servidor (5XX). -- **Upstream Status**: fornece insights sobre as respostas de serviços externos ou servidores backend, ajudando a identificar problemas de conectividade, timeouts ou falhas em dependências upstream. -- **Total**: a soma das requisições de acordo com o Status e o Status Upstream. - -Ao analisar este gráfico, você pode detectar tendências no manuseio de requisições, identificar fontes de erros e otimizar sua infraestrutura para melhor desempenho e confiabilidade. - -O gráfico inclui os 10 casos de requisições mais frequentes, mas você pode aplicar filtros para acessar informações mais específicas. - -###### Bandwidth Saving - -Descubra mais sobre o gráfico: - -###### Bandwidth Saving - -O gráfico **Bandwidth Saving** mostra a soma de dados salvos em todas as transmissões de imagens nos seus domínios, associados com uma application, que foram processados e entregues de alguma forma pelo [Image Processor](/pt-br/documentacao/plataforma/applications/#image-processor). - -O processamento de imagens pode estar relacionado a redimensionamento, recorte, alteração de qualidade ou qualquer outro recurso do Image Processor. Se uma imagem teve qualquer tipo de tratamento através do Image Processor, os dados salvos dessas imagens são exibidos no gráfico. - -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa bytes para exibir seus dados. Ele converte seus dados automaticamente para megabytes (MB), gigabytes (GB) ou terabytes (TB), por exemplo, de acordo com a quantidade de dados disponíveis para facilitar a visualização. - -##### Requests Breakdown - -###### IP Address Information - -A tabela **IP Address Information** fornece uma visão geral da distribuição de requisições com base em diferentes atributos geográficos e de rede. Ela divide as requisições por: - -- **Remote Address**: endereços IP individuais que estão fazendo requisições. -- **ASN**: Número do Sistema Autônomo, o operador de rede ou organização responsável pelo endereço IP. -- **Country**: o país específico de onde as requisições estão vindo. -- **Region**: a localização geográfica de onde as requisições estão se originando. -- **Total**: o número total de requisições associadas a um endereço IP específico. - -Ao examinar esses dados, você pode identificar padrões de tráfego regionais, detectar atividades incomuns de países ou redes específicas e tomar ações de segurança direcionadas. Por exemplo, você pode criar uma [lista de rede com base nos endereços IP ou geolocalização dos usuários](/pt-br/documentacao/guias/seguranca-de-aplicacoes/bots-e-rede/blocklists-enderecos-ip-edge/) para bloquear essas requisições. - -A tabela exibe os 10 endereços IP remotos mais utilizados, mas você pode aplicar filtros para acessar informações mais específicas. - -### Tiered Cache - -A aba **Tiered Cache** mostra as métricas relacionadas aos dados de suas aplicações usando [o Tiered Cache](/pt-br/documentacao/plataforma/applications/cache/tiered-cache/) configuradas em sua conta. - -Descubra mais sobre cada gráfico: - -#### Tiered Cache - -O gráfico **Tiered Cache** representa como todas as informações sobre os dados de Tiered Cache estão sendo acessadas no edge da Azion. - -Tiered Cache é um recurso para Applications que acrescenta uma camada adicional de cache entre o edge e a origem do cliente. O gráfico é dividido em: - -> - **Tiered Cache**: todos os dados que foram transferidos no processo; valor Tiered Cache In + Tiered Cache In Out. -> -> EDGE -> TIERED CACHE -> ORIGEM + ORIGEM -> TIERED CACHE -> EDGE -> -> - **Tiered Cache In**: os dados transferidos dos edges e através da camada tiered cache para a origem do cliente. -> -> EDGE -> TIERED CACHE -> ORIGEM -> -> - **Tiered Cache Out**: dados transferidos da origem do cliente e através da camada tiered cache cache para os edges. -> -> ORIGEM-> TIERED CACHE -> EDGE - -Para usar Tiered Cache e analisar seus dados, você deve ativá-lo em sua conta. Veja a [documentação de Tiered Cache](/pt-br/documentacao/plataforma/applications/cache/tiered-cache/) para mais informações. - -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa bytes para exibir seus dados. Ele converte seus dados automaticamente para megabytes (MB), gigabytes (GB) ou terabytes (TB), por exemplo, de acordo com a quantidade de dados disponíveis para facilitar a visualização. - -Fluxo de **Tiered Cache**: - -![Fluxo de informação do gráfico Tiered Cache para Tiered Cache, representando todos os dados sendo transferidos tanto de Tiered Cache In como de Tiered Cache Out.](/assets/docs/images/uploads/tiered-cache.png) - -Fluxo de **Tiered Cache In**: - -![Fluxo de informação do gráfico Tiered Cache para Tiered Cache In, representando os dados sendo transferidos dos edges para a camada tiered cache e da Tiered Cache para a origem do cliente.](/assets/docs/images/uploads/tiered-cache-in.png) - -Fluxo de **Tiered Cache Out**: - -![Fluxo de informação do gráfico Tiered Cache para Tiered Cache Out, representando os dados sendo transferidos da origem do cliente para a camada tiered cache e da Tiered Cache para os edges.](/assets/docs/images/uploads/tiered-cache-out.png) - -#### Tiered Cache Offload - -O gráfico **Tiered Cache Offload** mostra a porcentagem de dados entregues através do Tiered Cache, sem precisar buscar o conteúdo na origem antes de entregá-lo. - -**EDGE -> TIERED CACHE -> EDGE** - -Quanto mais alta a porcentagem de offload, maior a eficiência de suas aplicações com relação ao uso de políticas de Tiered Cache para preservar infraestrutura. O edge da Azion entrega o conteúdo a partir do seu cache, exigindo menos de sua origem. - -**Exemplo prático** - -Sua aplicação tem 1 GB de dados. Se o gráfico mostra que sua aplicação teve uma média de *80% de offload*, isso significa que *800MB de 1GB* foram entregues através do Tiered Cache. - -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa porcentagens para exibir seus dados em gráficos de offload. Todos os dados relacionados a offload refletem um número médio de acesso a suas aplicações, e o gráfico representa essa informação através de porcentagens (%). - -### Functions - -A aba **Functions** mostra as métricas relacionadas às invocações de suas [functions](/pt-br/documentacao/plataforma/functions/) configuradas em sua conta. - -Descubra mais sobre o gráfico: - -#### Total Invocations - -O gráfico **Total Invocations** mostra a soma de todas as ocasiões em que suas functions foram chamadas. - -> O gráfico é dividido em:: -> -> - **Firewall**: quantidade total de functions executadas associadas a um firewall. -> - **Applications**: quantidade total de functions executadas associadas a uma aplicação. - -Cada vez que uma de suas functions configuradas é executada, uma invocação é calculada. - -Descubra mais sobre [como construir aplicações com Functions](/pt-br/documentacao/plataforma/functions/). - -### Image Processor - -A aba **Image Processor** mostra as métricas relacionadas às imagens processadas [através do Image Processor](/pt-br/documentacao/plataforma/applications/#image-processor) que estão configuradas em sua conta. - -Descubra mais sobre cada gráfico: - -#### Total Requests - -O gráfico **Total Requests** mostra a soma de todas as requisições relacionadas a um conteúdo que tenha imagens processadas pelo [Image Processor](/pt-br/documentacao/plataforma/applications/#image-processor). - -O processamento de imagens pode estar relacionado a redimensionamento, recorte, alteração de qualidade, ou qualquer outro recurso do Image Processor. - -Se uma imagem teve qualquer tipo de tratamento através do Image Processor, as requisições feitas para a imagem configurada em um domínio são exibidas no gráfico. - -#### Total Requests per Second - -O gráfico **Total Requests per Second** mostra a média de requisições por segundo relacionadas a um conteúdo que tenha imagens processadas pelo [Image Processor](/pt-br/documentacao/plataforma/applications/#image-processor). - -O processamento de imagens pode estar relacionado a redimensionamento, recorte, alteração de qualidade, ou qualquer outro recurso do Image Processor. - -Se uma imagem teve qualquer tipo de tratamento através do Image Processor, a média de requisições para a imagem no domínio em que está configurada, que ocorreram durante o período que você selecionou no filtro de intervalo de tempo, são exibidas no gráfico. - -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa média de requests/segundo para exibir seus dados. Exemplo: 0.026/s +Para o caminho de uma requisição, o tamanho de cada ponto e como a contagem difere da de Billing, consulte [Como Real-Time Metrics funciona](/pt-br/documentacao/plataforma/real-time-metrics/como-funciona/). --- -## Secure - -### WAF - -A aba **WAF** mostra as métricas relacionadas às [ameaças bloqueadas pelo WAF](/pt-br/documentacao/plataforma/firewall/#waf) em sua conta. - -Descubra mais sobre cada gráfico: - -#### Threats vs Requests - -O gráfico **Threats vs Requests** mostra a soma de ataques e requisições regulares feitas para o seu domínio processados pelo [Web Application Firewall (WAF)](/pt-br/documentacao/plataforma/firewall/#waf). - -O WAF analisa as requisições feitas para seu domínio associado a uma application, detecta e bloqueia qualquer ameaça que identifica como atividade maliciosa. - -O gráfico apresenta a quantidade total de requisições, ameaças e ataques que foram processados, e os divide entre: - -- **Waf Requests Blocked**: requisições que foram identificadas como ameaça maliciosa e foram bloqueadas. -- **Waf Requests Threats**: quando o WAF está em modo learning, o total de requisições identificadas como ameaça processadas, mas que não foram bloqueada pelo WAF. -- **Waf Requests Allowed**: requisições normais que não foram identificadas como ameaça. - -Para ter uma visão mais detalhada sobre as ameaças acontecendo contra seus domínios, veja seus logs através do [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/). - -#### Cross-Site Scripting (XSS) Threats - -O gráfico **Cross-Site Scripting (XSS) Threats** mostra a soma de ataques do tipo XSS feitos contra seus domínios. - -Uma ameaça XSS injeta scripts client-side em páginas vistas por seus visitantes, prejudicando a segurança de sua aplicação e de seu website. WAF analisa as requisições, e quando identifica alguma como uma ameaça, a bloqueia. - -O gráfico, então, apresenta todas as requisições que foram identificadas como ameaças XSS durante o período que você selecionou no filtro de intervalo de tempo. - -Para mais detalhes sobre como o WAF analisou as requisições, veja seus logs através do [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/). - -#### Remote File Inclusion (RFI) Threats - -O gráfico **Remote File Inclusion (RFI) Threats** mostra a soma de ataques do tipo RFI feitos contra seus domínios. - -Uma ameaça RFI inclui arquivos ou scripts remotos no seu domínio, prejudicando a segurança de sua aplicação e de seu website. WAF analisa as requisições, e quando identifica alguma como uma ameaça, a bloqueia. - -O gráfico, então, apresenta todas as requisições que foram identificadas como ameaças RFI durante o período que você selecionou no filtro de intervalo de tempo. - -Para mais detalhes sobre como o WAF analisou as requisições, veja seus logs através do [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/). - -#### SQL Injection Threats - -O gráfico **SQL Injection Threats** mostra a soma de ataques do tipo SQL Injection feitos contra seus domínios. - -Uma ameaça SQL Injection injeta um código no seu domínio para visualizar e atacar dados aos quais não deveriam ter acesso, prejudicando a segurança de sua aplicação e de seu website. WAF analisa as requisições, e quando identifica alguma como uma ameaça, a bloqueia. - -O gráfico, então, apresenta todas as requisições que foram identificadas como ameaças SQL Injection durante o período que você selecionou no filtro de intervalo de tempo. - -Para mais detalhes sobre como o WAF analisou as requisições, veja seus logs através do [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/). - -#### Other Threats - -O gráfico **Other Threats** mostra a soma de todas as requisições que o WAF considerou como ameaça e que não se encaixam em outras categorias específicas, como ameaças XSS ou RFI. - -O WAF analisa todas as requisições feitas para os seus domínios, e quando identifica alguma como uma ameaça, a bloqueia. O gráfico, então, apresenta todas as requisições que foram identificadas como ameaças durante o período que você selecionou no filtro de intervalo de tempo. - -Para mais detalhes sobre como o WAF analisou as requisições, veja seus logs através do [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/). - -#### Top WAF Threat Requests By Country Pie Graph - -O gráfico de pizza **Top WAF Threat Requests by Country** mostra a distribuição de requisições identificadas como ameaças pelo Web Application Firewall (WAF). - -Ele divide os dados por país, destacando as principais fontes de requisições sinalizadas. O gráfico exibe porcentagens, permitindo que você avalie rapidamente quais regiões geram mais ameaças detectadas pelo WAF durante o período selecionado. - -Você pode usar isso juntamente com o gráfico de barras que mostra o número total de ameaças detectadas, proporcionando uma análise mais profunda para identificar tendências e padrões nas origens das ameaças. - -Com essas informações, você pode configurar políticas de segurança. Por exemplo, você pode criar uma [lista de rede com base na geolocalização do usuário](/pt-br/documentacao/guias/seguranca-de-aplicacoes/bots-e-rede/blocklists-enderecos-ip-edge/) para bloquear essas requisições. - -#### Top WAF Threat Requests By Country Bar Graph +## Seus próprios gráficos -O gráfico de barras **Top WAF Threat Requests by Country** mostra a distribuição de requisições identificadas como ameaças pelo Web Application Firewall (WAF). +A API GraphQL que todo gráfico do Console consulta também é o caminho para gráficos próprios. Você pode agrupar, filtrar ou estender a query de um gráfico para um intervalo que o gráfico não desenha, e plotar o resultado onde escolher. -Ele divide os dados por país, destacando as principais fontes de requisições sinalizadas. O gráfico exibe o número de ameaças por país, permitindo que você avalie rapidamente quais regiões geram mais ameaças detectadas pelo WAF durante o período selecionado. - -Você pode usar isso juntamente com o gráfico de pizza que exibe a distribuição de requisições identificadas como ameaças em porcentagens, proporcionando uma análise mais profunda para identificar tendências e padrões nas origens das ameaças. - -Com essas informações, você pode configurar políticas de segurança. Por exemplo, você pode criar uma [lista de rede com base na geolocalização do usuário](/pt-br/documentacao/guias/seguranca-de-aplicacoes/bots-e-rede/blocklists-enderecos-ip-edge/) para bloquear essas requisições. - -#### WAF Threat Requests By Family Attack - -O gráfico **WAF Threat Requests by Family Attack** exibe o número total de requisições identificadas como ameaças pelo WAF, categorizadas por família de ataque durante o período selecionado. - -O gráfico é dividido em: - -- **SQL**: tentativas de explorar vulnerabilidades de injeção SQL para manipular consultas ao banco de dados. -- **SQL, XSS**: requisições que combinam injeção SQL com ataques de Cross-Site Scripting (XSS). -- **SQL, TRAVERSAL**: ataques que utilizam tanto injeção SQL quanto técnicas de travessia de diretórios para acessar arquivos ou diretórios restritos. -- **OTHERS, SQL**: padrões de ataque relacionados a SQL menos comuns agrupados. -- **RFI**: ataques de Remote File Inclusion que tentam carregar scripts maliciosos externos. -- **TRAVERSAL**: tentativas de travessia de diretórios para acessar arquivos ou diretórios não autorizados. -- **SQL, RFI**: ataques que combinam técnicas de injeção SQL e Remote File Inclusion. -- **SQL, XSS, RFI**: ataques multivetoriais que aproveitam injeção SQL, Cross-Site Scripting (XSS) e Remote File Inclusion (RFI). -- **OTHERS**: padrões de ataque que não se encaixam nas categorias predefinidas. - -Este gráfico ajuda você a identificar rapidamente quais famílias de ataque estão gerando o maior número de requisições sinalizadas, permitindo uma análise mais clara dos padrões de ameaça e a configuração de políticas para conter essas ameaças. Por exemplo, ao [Crie e aplique um WAF rule set](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/criar-waf-rule-set/), você pode proteger suas aplicações edge contra famílias de ameaças específicas. - -> **Como funciona um WAF Rules Set?** -> -> Cada ameaça recebe uma pontuação e é processada de acordo com o nível de sensibilidade definido. -> -> Se houver mais de um caso para o mesmo tipo de ameaça, a pontuação aumentará. -> -> Após criar um conjunto de regras, você deve [Crie e aplique um WAF rule set](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/criar-waf-rule-set/) para executar os critérios e comportamentos. Por exemplo, se uma requisição tiver uma pontuação SQL alta (critérios), ela será descartada (comportamento). - -#### WAF Threat Requests By Host - -O gráfico **WAF Threat Requests by Host** exibe o número total de requisições identificadas como ameaças pelo WAF, categorizadas pelos principais hosts que geram o maior volume de requisições sinalizadas durante o período selecionado. - -Este gráfico ajuda você a identificar rapidamente quais hosts são responsáveis pelo maior volume de ameaças detectadas. Ao analisar esses dados, você pode tomar medidas de segurança direcionadas para mitigar riscos, proteger suas aplicações e adotar ações proativas para reduzir potenciais riscos. Por exemplo: - -- [Analise os logs de requisições sinalizadas](/pt-br/documentacao/plataforma/firewall/) para identificar padrões ou vulnerabilidades potenciais que precisam ser abordadas. -- [Crie e aplique um WAF rule set](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/criar-waf-rule-set/) para fortalecer as políticas de filtragem e bloquear ou desafiar requisições suspeitas de hosts de alto risco. -- [Implemente rate limits](/pt-br/documentacao/plataforma/firewall/rules-engine/#set-rate-limit) e restrinja o número de requisições de hosts específicos para prevenir abusos. -- [Defina listas de bloqueio](/pt-br/documentacao/guias/seguranca-de-aplicacoes/bots-e-rede/blocklists-enderecos-ip-edge/) com fontes de ameaças identificadas para prevenir ataques repetidos. - -### Edge DNS - -A aba **Edge DNS** mostra as métricas relacionadas às [consultas feitas aos seus DNS](/pt-br/documentacao/plataforma/edge-dns/) configurados em sua conta. - -Descubra mais sobre o gráfico: - -#### Total Queries - -O gráfico **Total Queries** mostra a quantidade total de consultas recebidas pelo seu DNS configurado no [Edge DNS](/pt-br/documentacao/plataforma/edge-dns/). - -Ao usar o Edge DNS, seus domínios são hospedados e gerenciados na Azion. Então, cada vez que uma consulta é feita para o seu DNS durante o período que você selecionou no filtro de intervalo de tempo, ela é mostrada no gráfico. - -### Bot Manager - -A aba Bot Manager Advanced exibe métricas relacionadas à atividade do Bot Manager. A aba contêm duas seções: **Overview** e **Breakdwon**. - -:::note -Para consultar esses dados, você deve ter o Azion Bot Manager Advanced ativo. Entre em contato com a [equipe de vendas](https://www.azion.com/pt-br/contato/) para mais detalhes sobre a assinatura. -::: - -Saiba mais sobre cada gráfico: - -#### Overview - -##### Bad Bot Hits - -O gráfico Bad Bot Hits mostra o número total de requisições identificadas como bots maliciosos dentro do período definido. - -O Azion Bot Manager analisa as requisições recebidas e atribui uma pontuação a elas. Se a pontuação for igual ou superior ao limite predeterminado que você definiu ao configurar o Bot Manager, a requisição é considerada um bot malicioso, e a ação definida é executada. Caso contrário, a requisição é processada. - -##### Good Bot Hits - -O gráfico Good Bot Hits mostra o número de requisições identificadas como bots bons dentro do período definido. - -O Azion Bot Manager analisa as requisições recebidas e atribui uma pontuação a elas. Se a pontuação for igual ou superior ao limite predeterminado que você definiu ao configurar o Bot Manager, a requisição é considerada um bot malicioso, e a ação definida é executada. Caso contrário, a requisição é processada normalmente. Bots bons são classificados como tráfego permitido, e suas requisições prosseguem normalmente. - -##### Bot Hits - -O gráfico Bot Hits mostra o número total de requisições identificadas como bots dentro do período definido. Uma requisição é considerada um bot quando exibe características ou comportamentos não humanos, incluindo padrões anormais, cabeçalhos de requisição ausentes ou incomuns, strings de user-agent suspeitas, requisições de endereços IP com histórico de atividade maliciosa, falhas em desafios como CAPTCHAs ou ferramentas de automação. - -Nesse contexto, os bots podem ser bons ou maliciosos. Bots bons, como crawlers de mecanismos de busca, são permitidos. Bots maliciosos, no entanto, se envolvem em atividades prejudiciais, como raspagem de dados, lançamento de ataques ou sobrecarga de sistemas. - -O Azion Bot Manager analisa as requisições recebidas e atribui uma pontuação a elas. Se a pontuação for igual ou superior ao limite predeterminado que você definiu ao configurar o Bot Manager, a requisição é considerada um bot malicioso, e a ação definida é executada. Caso contrário, a requisição é processada. - -##### Transactions - -O gráfico Transactions mostra uma soma referente ao número total de requisições avaliadas pelo Azion Bot Manager. - -##### Bot Traffic - -O gráfico Bot Traffic mostra a evolução do tráfego de bots ao longo do tempo. Ele apresenta dados históricos identificando o tráfego em: - -- **Legitimate**: a requisição não foi identificada como um ataque e há dados suficientes para garantir que não seja um ataque, sendo considerada como tráfego feito por usuários humanos legítimos. -- **Bad Bot**: a requisição atingiu o limite de pontuação ou foi identificada como um ataque. -- **Good Bot**: a requisição não foi identificada como um ataque e correspondeu a qualquer um dos bots bons comumente usados, como mecanismos de busca. -- **Under Evaluation**: a requisição não foi identificada como um bot, mas não há dados suficientes para garantir que não seja um ataque, sendo considerada acesso suspeito. - -Isso ajuda a identificar períodos de atividade suspeita e permite detectar padrões e anomalias. Ao passar o mouse sobre as linhas no gráfico, um card aparecerá com informações mais detalhadas sobre a data, hora e o número de bots em cada categoria. - -##### Top Bot Traffic - -## Top Bot Traffic - -O gráfico de pizza **Top Bot Traffic** exibe a distribuição do tráfego de bots em porcentagens durante o período selecionado. Ele categoriza o tráfego em: - -- **Legitimate**: a requisição não foi identificada como um ataque e há dados suficientes para garantir que não seja um ataque, sendo considerada como tráfego feito por usuários humanos legítimos. -- **Bad Bot**: a requisição atingiu o limite de pontuação ou foi identificada como um ataque. -- **Good Bot**: a requisição não foi identificada como um ataque e correspondeu a um dos bots bons comumente usados, como mecanismos de busca. -- **Under Evaluation**: a requisição não foi identificada como um bot, mas não há dados suficientes para garantir que não seja um ataque, sendo considerada acesso suspeito. - -Este gráfico ajuda você a avaliar rapidamente a proporção do tráfego de bots, detectar anomalias e identificar tendências em atividades maliciosas ou suspeitas. - -Ao passar o mouse sobre o gráfico, um card aparecerá com o número total de requisições para cada categoria. - -##### Top Bot Action - -O gráfico Top Bot Action mostra as ações realizadas pelo Azion Bot Manager para acessos identificados como bots. - -Essas ações podem ser: - -- **Allow**: permitiu a continuidade da requisição. Se a pontuação for menor que o limite predeterminado, a requisição é processada, sendo `allow` a ação padrão. -- **Deny**: entregou uma resposta padrão **Status Code 403**. -- **Drop**: terminou a requisição sem uma resposta ao usuário. -- **Redirect**: permitiu que a requisição fosse redirecionada para uma nova URL/localização quando o limite de segurança é atingido, incluindo desafios CAPTCHA. -- **Custom_html**: entregou conteúdo HTML personalizado ao usuário em caso de violação do limite. -- **Random_delay**: fez a função esperar um período aleatório entre *1 e 10 segundos* antes de permitir que a requisição prosseguisse. -- **Hold_connection**: manteve a requisição, mantendo a conexão aberta por *1 minuto* antes de descartá-la. - -##### Bot CAPTCHA line graph - -A métrica Bot CAPTCHA refere-se aos resultados do desafio retornado para requisições classificadas como bots. Essa métrica é apresentada em dois gráficos: um gráfico de pizza e um gráfico de linha. - -No caso do gráfico de linha, ele exibe o tráfego identificado como bots ao longo do tempo, sendo: - -- **Solved**: se o desafio foi resolvido. Nesse caso, o bot completou o desafio CAPTCHA, fornecendo a resposta correta e prosseguindo. -- **Not Solved**: se o desafio não foi resolvido ou foi resolvido incorretamente. Nesse caso, o bot não conseguiu completar o desafio, forneceu uma resposta incorreta ou não tentou resolvê-lo, acionando a ação definida para bots bloqueados ou suspeitos. - -Ao passar o mouse sobre as linhas no gráfico, um card aparecerá com informações mais detalhadas sobre a data e hora, bem como o número de bots que passaram ou falharam no CAPTCHA. - -##### Top Bot CAPTCHA Pie Graph - -A métrica Bot CAPTCHA refere-se aos resultados do desafio retornado para requisições classificadas como bots. Essa métrica é apresentada em dois gráficos: um gráfico de pizza e um gráfico de linha. - -No caso do gráfico de pizza, ele exibe a porcentagem de bots que passaram ou falharam no CAPTCHA, sendo: - -- **Solved**: se o desafio foi resolvido. Nesse caso, o bot completou o desafio CAPTCHA, fornecendo a resposta correta e prosseguindo. -- **Not Solved**: se o desafio não foi resolvido ou foi resolvido incorretamente. Nesse caso, o bot não conseguiu completar o desafio, forneceu uma resposta incorreta ou não tentou resolvê-lo, acionando a ação definida para bots bloqueados ou suspeitos. - -Isso ajuda a ajustar a dificuldade ou frequência dos desafios para melhorar a detecção de bots. Também é útil para otimizar a experiência do usuário e a eficácia na mitigação de bots. - -##### Top Bot Classifications - -O gráfico Top Bot Classifications mostra a *soma* de requisições classificadas de acordo com as táticas usadas e o propósito dos bots, incluindo Crawling, Brute Force, Scraping, Bad Bot Signatures, Malicious Browser Behavior, Scripted Bots, Enterprise Bots, Reputation Intelligence, Monitoring Bots e Malicious Intent Detected, entre outros. - -##### Bot Activity Map - -O Mapa de Bot Activity Map exibe a origem geográfica dos ataques de bots. - -Países são codificados por cores com base no número de ataques de bots detectados: - -- **Vermelho**: mais de 1.000.000 de requisições. -- **Vermelho claro**: entre 100.000 e 1.000.000 de requisições. -- **Laranja**: entre 10.000 e 99.999 requisições. -- **Laranja claro**: entre 1.000 e 9.999 requisições. -- **Amarelo**: entre 1 e 999 requisições. - -Essas informações ajudam a identificar padrões regionais e implementar bloqueios geográficos e outras estratégias de mitigação específicas da região. - -#### Breakdown - -##### Impacted URLs - -O gráfico Impacted URLs mostra o número total de URLs distintas solicitadas por bots. - -##### Top Impacted URLs - -O gráfico Top Impacted URLs mostra o número total de requisições detectadas como bots, dividido pelas URLs mais afetadas. - -Isso permite que você identifique quais URLs são mais frequentemente alvo de bots, capacitando você a analisar padrões e definir medidas de proteção mais eficazes. - -##### Top Bad Bot IPs - -O gráfico Top Bad Bot IPs mostra o número total de requisições detectadas como bots maliciosos provenientes de diferentes endereços IP, listando aqueles com a maior atividade. - -Você pode usar esses dados para: - -- Identificar endereços IP frequentemente utilizados por bots maliciosos para atacar seu site. -- Descobrir tendências e padrões na atividade de bots maliciosos. -- Bloquear ou limitar o tráfego de endereços IP arriscados. -- Obter insights para responder rapidamente a ataques de bots maliciosos. - -### Threats Breakdown - -#### Top WAF Threat Requests By IP - -## Top WAF Threat Requests by IP - -O gráfico **Top WAF Threat Requests by IP** mostra a soma de requisições identificadas como ameaças pelo WAF, divididas pelos principais endereços IP. Ele exibe o número total de requisições detectadas como ameaças para cada IP. - -Com essas informações, você pode identificar rapidamente seu tráfego e focar na criação de políticas para interromper as maiores ameaças. Por exemplo, você pode criar uma [lista de rede com base nos endereços IP dos usuários](/pt-br/documentacao/guias/seguranca-de-aplicacoes/bots-e-rede/blocklists-enderecos-ip-edge/) para bloquear essas requisições. - -> Para uma visão mais detalhada das ameaças ocorrendo contra seus domínios, consulte seus logs através do [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/). +- **A partir de um gráfico**: **Copy query**, no menu de um gráfico, copia a query e as variáveis exatas que o gráfico envia. Para executar o texto copiado, consulte [Copy query](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/#copy-query). +- **A partir de um guia**: queries completas para [detalhar requisições por status code](/pt-br/documentacao/guias/plataforma/observabilidade/detalhar-requisicoes-por-status-code/), [medir o offload de cache de um domínio](/pt-br/documentacao/guias/plataforma/observabilidade/medir-offload-de-cache/), [encontrar as principais origens de ameaças do WAF](/pt-br/documentacao/guias/plataforma/observabilidade/encontrar-principais-origens-de-ameacas-waf/) e [consultar o dataset httpBreakdownMetrics](/pt-br/documentacao/guias/plataforma/observabilidade/consultar-dados-httpbreakdownmetrics-com-graphql/). Offload de cache é a parcela do conteúdo que a Azion entrega sem buscá-lo na sua origem. +- **No Grafana**: o plugin de data source da Azion consulta Real-Time Metrics a partir de uma instância local do Grafana que permite plugins não assinados. Para configurá-lo, consulte [Instale o plugin da Azion para Grafana](/pt-br/documentacao/guias/plataforma/observabilidade/integrar-grafana/). Depois, [importe o dashboard pré-configurado do Grafana](/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana-dash-pre-configurado/) ou [crie um dashboard personalizado no Grafana](/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana/). Dois dashboards também são distribuídos como JSON: [Importe o dashboard Data Transferred](/pt-br/documentacao/guias/plataforma/observabilidade/data-transferred-dash/) e [Importe o dashboard Real-Time Metrics](/pt-br/documentacao/guias/plataforma/observabilidade/metrics-dash/). --- -## Observe - -### Data Stream - -A aba **Data Stream** mostra as métricas relacionadas aos dados e às requisições dos [streams](/pt-br/documentacao/plataforma/data-stream/) configurados em sua conta. - -Descubra mais sobre cada gráfico: - -#### Total Data - -O gráfico **Data Stream Total Data** apresenta a quantidade total de dados que foram enviados pelo stream configurado em sua conta. - -O Data Stream envia seus registros de eventos, logs, em pacotes. Quando você atinge 2.000 registros, a cada 60 segundos, ou se seus dados atingem o tamanho máximo que você definiu, um pacote é enviado. O gráfico mostra, então, a soma de todos os pacotes enviados durante o período que você selecionou no filtro de intervalo de tempo. +## Escopo e limites -> **Em que unidade os dados aparecem no gráfico?** -> -> O Real-Time Metrics usa bytes para exibir seus dados. Ele converte seus dados automaticamente para megabytes (MB), gigabytes (GB) ou terabytes (TB), por exemplo, de acordo com a quantidade de dados disponíveis para facilitar a visualização. - -#### Total Requests - -O gráfico **Data Stream Total Requests** apresenta a quantidade total de requisições que foram processadas pelo stream configurado em sua conta. - -Cada requisição, *request*, é composta de pacotes bem sucedidos do Data Stream: quando um pacote com seus registros de eventos, logs, é completado e enviado, uma requisição é criada. Os pacotes são criados quando você chega a 2.000 registros, a cada 60 segundos, ou se seus dados atingem o tamanho máximo que você definiu. - -O gráfico mostra a soma de todas as requisições que ocorreram durante o período que você selecionou no filtro de intervalo de tempo. - -Descubra mais sobre o [Data Stream](/pt-br/documentacao/plataforma/data-stream/). +- **Interfaces**: você lê Real-Time Metrics na página **Real-Time Metrics** do Azion Console, no grupo **Observe** do menu, e pela API GraphQL com um [personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/). Para a estrutura da API, consulte a [visão geral da API GraphQL](/pt-br/documentacao/devtools/graphql/visao-geral/). Grafana lê os dados pelo plugin da Azion. Azion CLI não tem comando de métricas, e Terraform não tem nada para gerenciar, porque Real-Time Metrics não cria nenhum objeto. +- **Dashboards**: Azion Console agrupa os dashboards em três categorias, **Build**, **Secure** e **Observe**, cada uma com uma aba por produto. **Build** reúne [Applications](/pt-br/documentacao/plataforma/applications/), [Tiered Cache](/pt-br/documentacao/plataforma/applications/cache/tiered-cache/), [Functions](/pt-br/documentacao/plataforma/functions/) e [Image Processor](/pt-br/documentacao/plataforma/applications/#image-processor), descritos em [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/). **Secure** reúne [WAF](/pt-br/documentacao/plataforma/firewall/#waf), [Edge DNS](/pt-br/documentacao/plataforma/edge-dns/), [Bot Manager](/pt-br/documentacao/plataforma/firewall/#bot-manager) e **Threats Breakdown**, descritos em [Dashboards de Secure](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-secure/). **Observe** reúne [Data Stream](/pt-br/documentacao/plataforma/data-stream/), descrito em [Dashboards de Observe](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-observe/). O dashboard de um produto mostra dados somente depois que esse produto está ativo na sua conta. +- **Controles**: um intervalo de tempo e um conjunto de filtros se aplicam a todos os gráficos de um dashboard. O intervalo começa em **Last 5 minutes** e alcança no máximo 730 dias para trás, sem datas futuras. Os filtros restringem os gráficos por um campo, como um host, ou por uma query digitada. O menu de um gráfico copia a query dele ou exporta os pontos dele como um arquivo CSV. Para todos os controles, consulte [Filtros e intervalo de tempo](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/), e para as tarefas, consulte [Filtre um dashboard de Real-Time Metrics](/pt-br/documentacao/guias/plataforma/observabilidade/adicionar-filtros-metrics/) e [Exporte os dados e a query de um gráfico](/pt-br/documentacao/guias/plataforma/observabilidade/analisar-metricas/). +- **Dados**: todo valor é agregado, nunca uma única requisição, e uma métrica leva até 10 minutos para ser agregada. Cada ponto cobre um minuto, uma hora ou um dia, conforme a duração do intervalo. Para o intervalo em que cada tamanho se aplica, consulte [Resolução](/pt-br/documentacao/plataforma/real-time-metrics/como-funciona/#resolucao). +- **Retenção e limites**: a maioria dos datasets guarda 2 anos de dados. Uma query retorna no máximo 10.000 linhas e seleciona no máximo 37 campos. Para cada limite e a resposta quando ele é ultrapassado, consulte [Limites de Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/limites/). +- **Cobrança**: Real-Time Metrics está incluído na plataforma sem custo adicional, como informa [Preços](/pt-br/documentacao/fundamentos/precos/#real-time-metrics). Ele conta cada evento uma vez ou nenhuma, então os totais dele podem diferir dos de Billing, em média por menos de 1%. Quando os dois diferem, Billing é a referência. Para as duas abordagens de contagem, consulte [Contagem e Billing](/pt-br/documentacao/plataforma/real-time-metrics/como-funciona/#contagem-e-billing). +- **Logs e experiência do usuário**: Real-Time Metrics mostra totais, não as requisições por trás deles. As requisições individuais, os logs, estão em [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/). Para enviar os logs a um destino fora da Azion, use Data Stream. Para medir a experiência dos seus usuários reais, use [Edge Pulse](/pt-br/documentacao/plataforma/edge-pulse/), um produto de Real User Monitoring (RUM). +- **Ajuda**: [Boas práticas para Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/boas-praticas/) mostra qual intervalo escolher e em qual fonte confiar para um número. [Solucionar problemas de Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/solucao-de-problemas/) cobre um gráfico vazio, um último ponto que cai ou totais que diferem dos de Billing. O [glossário](/pt-br/documentacao/plataforma/real-time-metrics/glossario/) define termos como offload, dataset e resolução. --- -## Limites - -:::tip -**Aumente limites** \ -Você pode solicitar o aumento dos limites com base no seu plano. Contate o [time de suporte técnico](/pt-br/documentacao/suporte/) para fazer a solicitação. -::: - -Estes são os **limites default**: - -| Escopo | Limite | -| ------ | ------ | -| Retenção de logs | 24 meses | -| Consultas na UI | 120 requisições por minuto | -| API GraphQL dados transferidos | 10.000 linhas | -| API GraphQL máximo de campos | 35 campos | -| API GraphQL payload máximo | 5 GB | -| API GraphQL consultas | 120 requisições por minuto | - - - ---- +## Próximos passos + + + + + + diff --git a/src/content/docs/pt-br/pages/menu-principal/referencia/secure/edge-dns/edge-dns.mdx b/src/content/docs/pt-br/pages/menu-principal/referencia/secure/edge-dns/edge-dns.mdx index 0243a798ba..425e70b323 100644 --- a/src/content/docs/pt-br/pages/menu-principal/referencia/secure/edge-dns/edge-dns.mdx +++ b/src/content/docs/pt-br/pages/menu-principal/referencia/secure/edge-dns/edge-dns.mdx @@ -234,7 +234,7 @@ Para confirmar se sua zona DNS está processando requisições corretamente, uti Acompanhe padrões de consultas DNS e identifique possíveis problemas usando os produtos Observe da Azion: -- **[Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/#edge-dns)**: Visualize gráficos agregados mostrando volumes de consulta, códigos de resposta e distribuição geográfica ao longo do tempo. +- **[Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-secure/#edge-dns)**: Visualize gráficos agregados mostrando volumes de consulta, códigos de resposta e distribuição geográfica ao longo do tempo. - **[GraphQL API](/pt-br/documentacao/devtools/graphql/)**: Consulte dados brutos e agregados de DNS para análise personalizada e integração com ferramentas de monitoramento. diff --git a/src/content/docs/pt-br/pages/observe-jornada/data-stream/troubleshoot/monitorar-metricas.mdx b/src/content/docs/pt-br/pages/observe-jornada/data-stream/troubleshoot/monitorar-metricas.mdx index 1daeaded1c..05812ec0b1 100644 --- a/src/content/docs/pt-br/pages/observe-jornada/data-stream/troubleshoot/monitorar-metricas.mdx +++ b/src/content/docs/pt-br/pages/observe-jornada/data-stream/troubleshoot/monitorar-metricas.mdx @@ -22,7 +22,7 @@ Depois de [criar um stream](/pt-br/documentacao/guias/plataforma/observabilidade Para monitorar como o Data Stream transmite seus logs: - + diff --git a/src/content/docs/pt-br/pages/observe-jornada/real-time-events/integracoes/integrar-grafana.mdx b/src/content/docs/pt-br/pages/observe-jornada/real-time-events/integracoes/integrar-grafana.mdx index 377be520f7..e4a06fdd29 100644 --- a/src/content/docs/pt-br/pages/observe-jornada/real-time-events/integracoes/integrar-grafana.mdx +++ b/src/content/docs/pt-br/pages/observe-jornada/real-time-events/integracoes/integrar-grafana.mdx @@ -1,35 +1,93 @@ --- -title: Como integrar a Azion com o Grafana +title: Instale o plugin da Azion para Grafana description: >- - Integre com o plugin data source da Azion no Grafana para criar e visualizar - gráficos e tabelas. -meta_tags: 'azion, edge, observe, observability, logs, grafana, analytics' + Instale o plugin de data source da Azion em uma instância local do Grafana e + conecte-o à sua conta Azion com um personal token. +meta_tags: 'grafana, plugin, real-time metrics, real-time events, data source' namespace: docs_integrate_grafana permalink: /documentacao/guias/plataforma/observabilidade/integrar-grafana/ --- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' -O data source plugin da Azion no Grafana permite visualizar os dados de suas aplicações existentes na Azion em um dashboard do Grafana com gráficos e tabelas. Ele consulta dados do [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) e do [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/) que utilizam as [APIs GraphQL](/pt-br/documentacao/devtools/graphql/visao-geral/). +Você pode instalar o plugin de data source da Azion em uma instância local do Grafana e conectá-lo à sua conta Azion pelo Grafana. O plugin mostra os dados das suas aplicações na Azion como gráficos e tabelas em dashboards do Grafana. Ele lê [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) e [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/) pela [API GraphQL](/pt-br/documentacao/devtools/graphql/visao-geral/), e você cria cada dashboard a partir de queries GraphQL. + +Os dashboards do Grafana complementam os gráficos que Real-Time Metrics mostra no Azion Console. Use-os para métricas top X, como endereços IP ou países bloqueados, para métricas de segurança, para status codes específicos e para alertas personalizados. --- ## Pré-requisitos -Para usar o plugin data source da Azion, você precisa de: +- Uma conta Azion. Para criar uma, acesse a [página de cadastro do Azion Console](https://console.azion.com/signup). +- Um personal token da sua conta. Para criar um, consulte [Personal tokens](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/). +- Uma ou mais [aplicações](/pt-br/documentacao/plataforma/applications/) na sua conta, com tráfego. +- Uma instância do Grafana que você executa localmente. Para o Grafana em si, consulte [Grafana](https://grafana.com/). + +--- + +## Instale o plugin + +O plugin da Azion é instalado em uma instância local do Grafana, e essa instância precisa permitir plugins não assinados. O repositório do plugin contém as instruções de instalação. + +Para instalar o plugin na sua instância local do Grafana: -- Uma [conta Azion](https://console.azion.com/signup). -- Um [personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/) para autenticar sua conta. -- Uma ou mais [applications](/pt-br/documentacao/plataforma/applications/) criadas em sua conta. -- [Acesso ao Grafana](https://grafana.com/). +Siga as instruções de instalação local no [repositório do plugin da Azion](https://github.com/aziontech/grafana-plugin/blob/dev/README.md#install-azion-plugin-on-local-grafana-install-locally). O repositório em si é [aziontech/grafana-plugin](https://github.com/aziontech/grafana-plugin). + +Após a instalação, o plugin da Azion fica disponível na lista de plugins da sua instância do Grafana. --- -## Instale o plugin no Grafana +## Crie o data source da Azion + +Um data source conecta o plugin da Azion à sua conta. O Grafana autentica cada query do data source com o seu personal token. + +Para criar o data source no Grafana: + + + + + No menu do Grafana, acesse **Administration** > **Plugins**. + + + -Atualmente, para usar o plugin data source da Azion, você deve instalá-lo localmente e habilitar sua conta para usar plugins não assinados. Consulte a documentação no [repositório GitHub do plugin](https://github.com/aziontech/grafana-plugin/blob/dev/README.md#install-azion-plugin-on-local-grafana-install-locally) para um passo a passo sobre como instalá-lo. + Em **Search**, digite `Azion`. + + + + + + O Grafana abre a página de configuração do novo data source. + + + + + Na aba **Settings**, digite um **Name** descritivo. + + + + + Em **Personal Token**, digite o personal token da sua conta Azion. + + + + + Selecione **Save & test**. O Grafana salva o data source e executa um teste rápido da autenticação. + + + + +O teste de autenticação é aprovado e o data source da Azion fica salvo na sua instância do Grafana. Seus dashboards do Grafana o usam para consultar Real-Time Metrics e Real-Time Events. -:::note -A Azion foca uma abordagem local. Este plugin está disponível apenas com instâncias locais. -::: -\ --- +## Próximos passos + + + + + + + diff --git a/src/content/docs/pt-br/pages/observe-jornada/real-time-metrics/integracoes/grafana-plugin-dash-pre-config.mdx b/src/content/docs/pt-br/pages/observe-jornada/real-time-metrics/integracoes/grafana-plugin-dash-pre-config.mdx index e29318d8d9..7b9fac89e3 100644 --- a/src/content/docs/pt-br/pages/observe-jornada/real-time-metrics/integracoes/grafana-plugin-dash-pre-config.mdx +++ b/src/content/docs/pt-br/pages/observe-jornada/real-time-metrics/integracoes/grafana-plugin-dash-pre-config.mdx @@ -1,74 +1,85 @@ --- -title: "Use um dashboard pré-configurado no Grafana" +title: Importe o dashboard pré-configurado do Grafana description: >- - Veja como utilizar um dashboard pré-configurado com o plugin da Azion no - Grafana. -meta_tags: 'azion, edge, observe, observability, logs, grafana, analytics' + Importe o dashboard Data Transferred que acompanha o plugin da Azion para + Grafana e veja os dados que as suas aplicações transferem. +meta_tags: 'grafana, azion plugin, dashboard, data transferred, real-time metrics' namespace: docs_plugin_grafana_prebuilt permalink: /documentacao/guias/plataforma/observabilidade/azion-plugin-grafana-dash-pre-configurado/ --- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' -import DocButton from '~/components/webkit/DocButton.vue'; +Você pode importar o dashboard **Data Transferred** que acompanha o plugin da Azion para Grafana e abri-lo no Grafana sem nenhum painel para configurar. Pelo data source da Azion, o dashboard lê de [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) os dados que as suas [Applications](/pt-br/documentacao/plataforma/applications/) transferem. Para criar os seus próprios painéis, consulte [Crie um dashboard personalizado no Grafana](/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana/). Para importar um dashboard a partir de um arquivo JSON, consulte [Importe o dashboard Data Transferred](/pt-br/documentacao/guias/plataforma/observabilidade/data-transferred-dash/). -Com o data source plugin, você consegue usar o dashboard pré-configurado de Application para visualizar seus dados com um esforço mínimo de configuração. +--- - +## Pré-requisitos ---- +- Uma instância do Grafana com o plugin da Azion instalado e um data source da Azion criado. Para configurar os dois, consulte [Instale o plugin da Azion para Grafana](/pt-br/documentacao/guias/plataforma/observabilidade/integrar-grafana/). +- Um data source que contém um personal token do Azion Console e que passou no **Save & test**. O **Save & test** verifica se o token autentica na sua conta Azion. Para criar o token, consulte [Personal tokens](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/). -## Use o dashboard pré-configurado no Grafana +--- -Após instalar uma instância do Grafana localmente em sua máquina e autorizar o plugin da Azion, acesse sua instância. +## Importe o dashboard Data Transferred -Siga estes passos: +O plugin lista o dashboard **Data Transferred** na aba **Dashboards** do data source da Azion, ao lado da aba **Settings**. Para importar o dashboard no Grafana: -1. No menu lateral esquerdo, na lista suspensa **Administration**, selecione **Plugins**. -2. Na caixa de busca, **Search**, digite `Azion`. -3. Selecione o card `Azion`. -4. Clique no botão **Create an Azion data source**. + + -Uma nova página abrirá para que você configure seu data source. + No Grafana, abra a página de configuração do data source da Azion que você criou. -Na aba **Settings**: + + + -1. Em **Name**, dê um nome descritivo para o seu data source. -2. Em **Personal Token**, adicione o token que você criou na página de [Personal Tokens no Azion Console](/pt-br/documentacao/fundamentos/personal-tokens/). -3. Clique no botão **Save & test**. O Grafana rodará um teste rápido para certificar que sua autenticação está correta. + Na lista, selecione **Data Transferred**. -Na aba **Dashboards**: + + + -1. Selecione a opção de dashboard **Data Transferred**. -2. Clique no botão **Import**. +O Grafana adiciona o dashboard **Data Transferred** à sua conta do Grafana. -O dashboard pré-configurado será importado para sua conta. Para acessá-lo: +--- -1. No menu lateral esquerdo, clique em **Dashboards**. -2. Selecione a opção de dashboard **Data Transferred** na lista **General**. +## Abra o dashboard -Você conseguirá visualizar os dados de Application Data Transferred do Real-Time Metrics automaticamente. Você também pode salvar esse dashboard como uma cópia em **Dashboard Settings** e editá-lo como desejar, sem perder a visão original. +O Grafana lista o dashboard importado em **General**. Para abri-lo: ---- + + -## Leia mais no Grafana + No menu do Grafana, selecione **Dashboards**. -- [Create and use dashboards](https://grafana.com/docs/grafana/latest/dashboards/) -- [Grafana dashboard best practices](https://grafana.com/docs/grafana/latest/dashboards/build-dashboards/best-practices/) -- [Add and manage variables](https://grafana.com/docs/grafana/latest/dashboards/variables/) -- [Configuring time series in ISO8601](https://momentjs.com/docs/#/parsing/string/) -- [Configuring time series in custom format](https://momentjs.com/docs/#/parsing/string-format/) -- [Visualizations](https://grafana.com/docs/grafana/latest/panels-visualizations/visualizations/) -- [Configuring a legend](https://grafana.com/docs/grafana/latest/panels-visualizations/visualizations/configure-legend/) -- [Configuring value mappings](https://grafana.com/docs/grafana/latest/panels-visualizations/configure-value-mappings/) + + ---- + Em **General**, selecione **Data Transferred**. -### Marca registrada + + -[Grafana Cloud](https://grafana.com/products/cloud/) é marca registrada de Grafana Labs. Não somos afiliados, endossados ou patrocinados por Grafana Labs ou suas afiliadas. +O dashboard mostra os dados de **Data Transferred** de Applications vindos de Real-Time Metrics, sem configuração adicional. Para saber o que cada métrica de Data Transferred mede no Azion Console, consulte [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/#data-transferred). +--- +## Mantenha uma cópia editável +Uma cópia permite alterar os painéis e manter a visualização original do dashboard importado. Para editar o dashboard sem perder essa visualização, salve-o como uma cópia em **Dashboard Settings**. +A cópia recebe as suas edições, e o dashboard **Data Transferred** original mantém a sua visualização. Para mais informações sobre como editar um dashboard, consulte [Create and use dashboards](https://grafana.com/docs/grafana/latest/dashboards/) na documentação do Grafana. --- +## Próximos passos + + + + + + + diff --git a/src/content/docs/pt-br/pages/observe-jornada/real-time-metrics/integracoes/grafana-plugin-personalizar-dash.mdx b/src/content/docs/pt-br/pages/observe-jornada/real-time-metrics/integracoes/grafana-plugin-personalizar-dash.mdx index 4356919090..2add662cb4 100644 --- a/src/content/docs/pt-br/pages/observe-jornada/real-time-metrics/integracoes/grafana-plugin-personalizar-dash.mdx +++ b/src/content/docs/pt-br/pages/observe-jornada/real-time-metrics/integracoes/grafana-plugin-personalizar-dash.mdx @@ -1,67 +1,152 @@ --- -title: "Personalize um dashboard no Grafana com a Azion" -description: >- - O data source plugin da Azion no Grafana permite que você visualize os dados - de suas aplicações existentes na Azion em um dashboard do Grafana. -meta_tags: 'azion, edge, observe, observability, logs, grafana, analytics' +title: Crie um dashboard personalizado no Grafana +description: Adicione um painel do Grafana que plota dados de Real-Time Metrics pelo data source da Azion, mapeie os campos da resposta e salve o dashboard. +meta_tags: 'grafana, azion plugin, dashboard, graphql, real-time metrics' namespace: docs_plugin_grafana_customize permalink: /documentacao/guias/plataforma/observabilidade/azion-plugin-grafana/ --- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' -import DocButton from '~/components/webkit/DocButton.vue'; +Você pode criar o seu próprio dashboard no Grafana, com painéis que enviam queries GraphQL para [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) pelo plugin de data source da Azion. Cada painel plota os dados que você escolhe na query dele. Para importar o dashboard Data Transferred já pronto, consulte [Importe o dashboard pré-configurado do Grafana](/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana-dash-pre-configurado/). -Com o data source plugin, você consegue personalizar seu próprio dashboard para visualizar os dados que desejar. +## Pré-requisitos - +- Uma instância local do Grafana com o plugin da Azion instalado e um data source da Azion criado. Para configurar os dois, consulte [Instale o plugin da Azion para Grafana](/pt-br/documentacao/guias/plataforma/observabilidade/integrar-grafana/). +- Uma [aplicação](/pt-br/documentacao/plataforma/applications/) que atendeu requisições no intervalo de tempo que o painel plota. --- -## Personalize um dashboard no Grafana +## Adicione um painel que consulta Real-Time Metrics -Após instalar uma instância do Grafana localmente em sua máquina e autorizar o plugin da Azion, acesse sua instância. +Um painel contém uma query GraphQL, e o data source da Azion a envia para a API de Real-Time Metrics. A query desta página lê o dataset `httpMetrics`, que registra as requisições das suas aplicações. Ela retorna os dados transferidos por minuto ao longo de 24 horas: -Siga estes passos: +```graphql +query DataTransferredOverTime { + httpMetrics( + limit: 2000 + filter: { tsRange: { begin: "2026-10-01T14:25:25.000Z", end: "2026-10-02T14:25:25.000Z" } } + groupBy: [ts] + orderBy: [ts_ASC] + ) { + ts + dataTransferredIn + dataTransferredOut + dataTransferredTotal + } +} +``` -1. No menu esquerdo, clique em **Dashboards**. A página de dashboards abrirá. -2. Ao lado da barra de pesquisa, *search*, clique em **New** > **New Dashboard**. -3. No card **Add panel**, selecione **Add a new panel**. -4. Na segunda seção da página, abaixo da pré-visualização, na lista suspensa **Data source**, selecione **Azion**. -5. Na caixa de código, adicione a query que deseja usar. - - Veja os [guias da GraphQL API](/pt-br/documentacao/devtools/graphql/visao-geral/) para alguns exemplos de queries. +Substitua os valores de `begin` e `end` pelo intervalo de tempo que você quer plotar. Sem `limit`, a API retorna 10 linhas, então `limit: 2000` mantém todos os minutos de um intervalo de 24 horas. -Os cinco campos disponibilizados logo abaixo podem ser usados para completar sua configuração, dependendo do tipo de visualização que você está usando e o que você quer ver em seus gráficos: +A query retorna uma linha para cada minuto que teve tráfego, em ordem cronológica: -- **Data path**: adicione o valor **Metrics**. -- **Time path**: informe um timestamp, carimbo de hora/data. Esse campo é delimitado por pontos. -- **Time format**: informe um formato de hora/data [no formato moment.js](https://momentjs.com/docs/#/parsing/string/). -- **Group by**: use esse campo se você quer agrupar seus dados em formato agregado. -- **Alias by**: use esse campo para mudar o valor e o nome de um campo exibido na legenda. +```json +{ + "data": { + "httpMetrics": [ + { + "ts": "2026-10-01T16:04:00Z", + "dataTransferredIn": 13094.0, + "dataTransferredOut": 2649889.0, + "dataTransferredTotal": 2662983.0 + }, + { + "ts": "2026-10-01T16:06:00Z", + "dataTransferredIn": 7470.0, + "dataTransferredOut": 986551.0, + "dataTransferredTotal": 994021.0 + }, + … + ] + } +} +``` -6. No lado direito da página, na lista **Visualization**, selecione o tipo de visualização que você quer usar. Exemplo: **Time series**. -7. No canto superior direito, clique em **Save** para aplicar suas configurações. +Os valores estão em bytes, e `dataTransferredTotal` é a soma de `dataTransferredIn` e `dataTransferredOut`. Para todos os campos do dataset, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#httpmetrics-applications-waf). + +Para adicionar o painel no Grafana: + + + + + No menu do Grafana, selecione **Dashboards**. + + + + + Selecione **New** > **New Dashboard**. + + + + + No card **Add panel**, selecione **Add a new panel**. + + + + + Na lista **Data source**, selecione **Azion**. + + + + + Na caixa de código da query, cole a query `DataTransferredOverTime`. + + + + +A pré-visualização do painel lê as linhas da query pelo data source da Azion. + +:::tip[dica] +Para começar a partir de um gráfico de Real-Time Metrics no Azion Console, abra o menu **More options** do gráfico e selecione **Copy query**. O texto copiado contém a query em `# QUERY` e os valores das variáveis dela em `# VARIABLES`. Escreva cada valor na query no lugar da variável correspondente antes de colá-la. Para os passos, consulte [Exporte os dados e a query de um gráfico](/pt-br/documentacao/guias/plataforma/observabilidade/analisar-metricas/). +::: --- -## Leia mais no Grafana +## Mapeie os campos da resposta + +Cinco campos opcionais indicam ao painel como ler as linhas que a query retorna. Os campos de que um painel precisa dependem da visualização dele e do que o gráfico mostra. Os cinco campos recebem estes valores: -- [Create and use dashboards](https://grafana.com/docs/grafana/latest/dashboards/) -- [Grafana dashboard best practices](https://grafana.com/docs/grafana/latest/dashboards/build-dashboards/best-practices/) -- [Add and manage variables](https://grafana.com/docs/grafana/latest/dashboards/variables/) -- [Configuring time series in ISO8601](https://momentjs.com/docs/#/parsing/string/) -- [Configuring time series in custom format](https://momentjs.com/docs/#/parsing/string-format/) -- [Visualizations](https://grafana.com/docs/grafana/latest/panels-visualizations/visualizations/) -- [Configuring a legend](https://grafana.com/docs/grafana/latest/panels-visualizations/visualizations/configure-legend/) -- [Configuring value mappings](https://grafana.com/docs/grafana/latest/panels-visualizations/configure-value-mappings/) +| Campo | O que recebe | +| --- | --- | +| **Data path** | O valor `Metrics`. | +| **Time path** | O caminho até o timestamp de cada linha, delimitado por pontos. A query `DataTransferredOverTime` retorna o timestamp em `ts`. | +| **Time format** | O formato desse timestamp, escrito no formato moment.js. | +| **Group by** | O campo que agrupa os dados agregados em séries. | +| **Alias by** | O nome e o valor que um campo mostra na legenda. | --- -### Marca registrada +## Escolha uma visualização e salve -[Grafana Cloud](https://grafana.com/products/cloud/) é marca registrada de Grafana Labs. Não somos afiliados, endossados ou patrocinados por Grafana Labs ou suas afiliadas. +A visualização define como o painel desenha as linhas. Uma query agrupada por `ts`, como `DataTransferredOverTime`, retorna uma linha por bucket de tempo. +Para concluir o painel no Grafana: + + + Na lista **Visualization**, selecione um tipo de visualização. Por exemplo: **Time series**. + + + + Selecione **Save** para aplicar a configuração. + + + + +O dashboard mantém o painel com a query, o mapeamento de campos e a visualização dele. --- +## Próximos passos + + + + + + + diff --git a/src/content/docs/pt-br/pages/observe-jornada/real-time-metrics/monitorar-metricas/adicionar-filtros.mdx b/src/content/docs/pt-br/pages/observe-jornada/real-time-metrics/monitorar-metricas/adicionar-filtros.mdx index 34837a539a..069737515d 100644 --- a/src/content/docs/pt-br/pages/observe-jornada/real-time-metrics/monitorar-metricas/adicionar-filtros.mdx +++ b/src/content/docs/pt-br/pages/observe-jornada/real-time-metrics/monitorar-metricas/adicionar-filtros.mdx @@ -1,34 +1,316 @@ --- -title: Como adicionar filtros no Real-Time Metrics -description: >- - Filtre sua análise com as variáveis específicas e o tipo de dados que deseja - receber. -meta_tags: 'azion, edge, observe, observability, charts, aggregated, data' +title: Filtre um dashboard de Real-Time Metrics +description: Restrinja cada gráfico de um dashboard de Real-Time Metrics às requisições de que você precisa e aplique os mesmos filtros a uma query GraphQL. +meta_tags: 'real-time metrics, filters, dashboards, graphql, azion query language' namespace: docs_add_filters_metrics permalink: /documentacao/guias/plataforma/observabilidade/adicionar-filtros-metrics/ --- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' +import Tabs from '~/components/webkit/Tabs.vue' -O **Real-Time Metrics** mostra uma visão padrão dos dados relacionados a todas suas applications. Ao usar os filtros, você pode ajustar os gráficos para corresponder às suas requisições e visualizar dados mais específicos que se encaixam na sua análise. +Você pode restringir os gráficos de um dashboard de [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) no Azion Console, ou aplicar os mesmos filtros a uma query com a API GraphQL. Para cada campo, operador e tipo de valor que um filtro aceita, consulte [Filtros e intervalo de tempo](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/#filtros). -Ao adicionar um filtro, você pode definir o **campo**, como "host", "status" ou "scheme", por exemplo. Os campos são usados com os **operadores** disponíveis, como "Like", "Range" ou "Ne". +Sem filtro, um dashboard conta os dados de toda a sua conta. Um filtro mantém apenas os dados cujo campo corresponde a um valor, como o host, o status code, o método da requisição ou o país. Na API GraphQL, esses campos são `host`, `status`, `requestMethod` e `geolocCountryName`. -Você pode encontrar mais detalhes sobre cada campo na [documentação de Campos](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/) e sobre operadores na [documentação de Operadores](/pt-br/documentacao/devtools/graphql/queries/#operadores). +Selecione a sua interface uma vez. Os pré-requisitos e cada tarefa desta página mostram apenas esse caminho. -Você também pode definir o **campo de valor** que será usado. Dependendo da variável escolhida, ela pode aceitar valores dos tipos String, Int ou Float. + +Console +API + -### Exemplo prático +## Pré-requisitos -Você quer filtrar seus dados pela quantidade de dados economizados, mas, na requisição, você quer definir um valor específico como início para os dados que serão retornados. +- Uma [aplicação](/pt-br/documentacao/plataforma/applications/) com requisições no intervalo de tempo que você lê. +- Um host ao qual o seu [workload](/pt-br/documentacao/plataforma/workloads/) responde, como `www.example.com`, para combinar filtros. -Nesta situação, você deve usar a variável **savedDataGte**. No campo de valor, você deve adicionar o valor numérico que deseja usar como ponto de corte, como "8300". Assim, sua resposta conterá apenas quantidades de dados economizados que começam e são maiores do que o valor específico que você definiu. + + + + +- Acesso ao Azion Console. Para fazer login, consulte [Como acessar o Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/). + + + + + +- Um personal token. Para criar um, consulte [Como criar um personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/). +- `curl`. + + + + + +--- + +## Adicione um filtro + +Esta tarefa mantém as requisições que retornaram um erro, com status code 400 ou maior. Cada gráfico do dashboard passa a contar apenas essas requisições. + + + + + +Para filtrar o dashboard por status code no Azion Console: + + + + + Acesse [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + A página abre em **Build** › **Applications** › **Data Transferred**. + + + + + Na linha de filtros, selecione o ícone de filtro, cuja tooltip exibe **Add filter**. + + + + + Em **Filter**, selecione **Status**. + + + + + Em **Operator**, selecione **Greater Than or Equal**. + + + + + Insira `400` como valor. + + + + + +Um chip abaixo da linha de filtros exibe `Status greater than or equal: 400`. Cada gráfico do dashboard passa a contar apenas as requisições com status code 400 ou maior. + + + + + +Para aplicar o mesmo filtro com a API GraphQL, envie uma requisição `POST` para `https://api.azion.com/v4/metrics/graphql`. Em `filter`, a chave `statusGte` mantém os status codes 400 ou maiores, ao lado do `tsRange` que toda query exige. A query soma `requests` para cada status code. + +Substitua `[TOKEN VALUE]` pelo seu personal token e os valores de `begin` e `end` pelo período que você quer ler: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query ErrorRequestsByStatus($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 100, filter: { tsRange: { begin: $begin, end: $end }, statusGte: 400 }, aggregate: { sum: requests }, groupBy: [status], orderBy: [sum_DESC]) { status sum } }","variables":{"begin":"2026-10-01T14:25:25","end":"2026-10-02T14:25:25"}}' +``` + +A API responde `200` com uma linha para cada status code 400 ou maior: + +```json +{ + "data": { + "httpMetrics": [ + { + "status": 496, + "sum": 210 + }, + { + "status": 501, + "sum": 198 + }, + { + "status": 495, + "sum": 73 + }, + { + "status": 404, + "sum": 55 + }, + { + "status": 502, + "sum": 31 + }, + { + "status": 401, + "sum": 12 + }, + { + "status": 400, + "sum": 1 + }, + { + "status": 499, + "sum": 1 + }, + { + "status": 504, + "sum": 1 + } + ] + } +} +``` + +Cada linha traz um status code e a contagem de requisições dele no intervalo. Uma chave de filtro é um nome de campo seguido do operador, como `statusGte` ou `hostEq`. Para cada operador, consulte [Queries API GraphQL](/pt-br/documentacao/devtools/graphql/queries/#operadores). + + + + -> **Como posso editar ou excluir um filtro?** -> -> Depois de adicionar filtros, cada um é exibido na seção **FILTERS**. -> -> Se você quiser editar um filtro existente, clique no texto do filtro específico. Assim que o popover **Edit Filter** abrir, você poderá alterar as configurações do filtro conforme desejar. -> -> Se você quiser excluir um filtro existente, clique no ícone **x** ao lado do filtro específico. Repita a ação para cada filtro que você deseja excluir. -\ --- +## Combine filtros + +Cada filtro que você adiciona restringe os dados de novo, então os gráficos mantêm apenas os dados que correspondem a todos os filtros. Esta tarefa adiciona um host ao filtro de status de Adicione um filtro, para ler os erros de um host. Substitua `www.example.com` por um host ao qual o seu workload responde. + + + + + +Para adicionar um segundo filtro no Azion Console: + + + + + Na linha de filtros, selecione o ícone de filtro, cuja tooltip exibe **Add filter**. + + + + + Em **Filter**, selecione **Host**. + + + + + Em **Operator**, selecione **Equals**. + + + + + Insira `www.example.com` como valor. + + + + + +Um segundo chip exibe `Host equals: www.example.com`, ao lado do chip de status. Cada gráfico passa a contar apenas as requisições para esse host com status code 400 ou maior. + +O popover **Filter** informa `Each combination of operator can only be used once.` Para manter qualquer um de vários valores de um campo, use a forma `in` do campo de query, descrita em Filtre com o campo de query. + + + + + +Para combinar filtros com a API, adicione cada um como uma chave de `filter`. Esta query adiciona `hostEq` ao filtro `statusGte`: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query ErrorRequestsForHost($begin: DateTime!, $end: DateTime!) { httpMetrics(limit: 100, filter: { tsRange: { begin: $begin, end: $end }, statusGte: 400, hostEq: \"www.example.com\" }, aggregate: { sum: requests }, groupBy: [status], orderBy: [sum_DESC]) { status sum } }","variables":{"begin":"2026-10-01T14:25:25","end":"2026-10-02T14:25:25"}}' +``` + +A API responde `200` apenas com as respostas de erro desse host: + +```json +{ + "data": { + "httpMetrics": [ + { + "status": 501, + "sum": 198 + }, + { + "status": 404, + "sum": 29 + }, + { + "status": 504, + "sum": 1 + } + ] + } +} +``` + +Neste exemplo, o host retornou 228 das 582 respostas de erro da conta. + +Para manter qualquer um de vários valores de um campo, use o operador `In` com uma lista. Por exemplo, `statusIn: [404, 502]` no lugar de `statusGte: 400` retorna duas linhas no mesmo intervalo: `404` com 55 requisições e `502` com 31. + + + + + +--- + +## Filtre com o campo de query + +O campo de query na linha de filtros recebe os filtros como uma única expressão digitada em Azion Query Language. Ele também mantém vários valores de um campo ao mesmo tempo, o que um único filtro **Equals** não faz. Esta tarefa mantém as requisições que retornaram `404` ou `502`. + +Para filtrar com o campo de query no Azion Console: + + + + + Acesse [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + + + + Na linha de filtros, selecione o campo de query, cujo placeholder exibe `Filter using Azion Query Language syntax...`. + + + + + Insira `status in (404, 502)`. + + Enquanto você digita, o campo de query sugere nomes de campo, depois operadores, depois valores. `Ctrl` + `Space`, ou `Cmd` + `Space`, abre as sugestões. + + + + + Pressione `Enter`. + + + + +Cada gráfico do dashboard passa a contar apenas as requisições que retornaram `404` ou `502`. + +Para manter um intervalo de valores, use `between` com exatamente dois valores: `status between (400, 499)` mantém os status codes de 400 a 499. Para a sintaxe de cada operador no campo de query, consulte [Filtros e intervalo de tempo](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/#campo-de-query). Quando o campo de query exibe uma mensagem de validação e **Refresh** continua desativado, consulte [Solucionar problemas de Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/solucao-de-problemas/). + +--- + +## Edite ou remova um filtro + +Cada filtro aplicado aparece como um chip abaixo da linha de filtros. Selecionar um chip reabre esse filtro, e o ícone de remoção do chip exclui o filtro. + +Para editar um filtro no Azion Console: + + + + + Abaixo da linha de filtros, selecione o chip do filtro. + + O popover **Filter** abre com os valores desse filtro. Um ícone de cadeado substitui a seta do campo, porque o campo não pode mudar. + + + + + + +O chip mostra o novo operador ou valor, e cada gráfico do dashboard segue o filtro alterado. + +Para remover um filtro, selecione o ícone de remoção no chip dele e repita para cada filtro que você quer remover. O chip desaparece, e os gráficos deixam de aplicar esse filtro. + +Trocar para um dashboard que lê outro dataset limpa todos os filtros e mantém o intervalo de tempo. + +--- + +## Próximos passos + + + + + + + diff --git a/src/content/docs/pt-br/pages/observe-jornada/real-time-metrics/monitorar-metricas/analisar-metricas.mdx b/src/content/docs/pt-br/pages/observe-jornada/real-time-metrics/monitorar-metricas/analisar-metricas.mdx index ca0af8bbdc..c99c26f925 100644 --- a/src/content/docs/pt-br/pages/observe-jornada/real-time-metrics/monitorar-metricas/analisar-metricas.mdx +++ b/src/content/docs/pt-br/pages/observe-jornada/real-time-metrics/monitorar-metricas/analisar-metricas.mdx @@ -1,34 +1,207 @@ --- -title: Como analisar métricas no Real-Time Metrics -description: Entenda como analisar métricas por meio dos gráficos disponíveis. -meta_tags: 'azion, edge, observe, observability, metrics, charts, graphs' +title: Exporte os dados e a query de um gráfico +description: Baixe os pontos de um gráfico de Real-Time Metrics como arquivo CSV ou copie a sua query GraphQL e execute-a no Playground GraphiQL ou com curl. +meta_tags: 'real-time metrics, export csv, copy query, graphql' namespace: docs_analyze_metrics permalink: /documentacao/guias/plataforma/observabilidade/analisar-metricas/ --- +import DocCardGroup from '@aziontech/webkit/doc-card-group' +import DocCard from '@aziontech/webkit/doc-card' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' -import DocButton from '~/components/webkit/DocButton.vue'; +Você pode exportar os pontos de um gráfico de [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) ou copiar a sua query GraphQL pelo menu do gráfico no Azion Console. Uma query copiada roda no Playground GraphiQL ou com `curl`. Para restringir os dados antes de exportá-los, consulte [Filtre um dashboard de Real-Time Metrics](/pt-br/documentacao/guias/plataforma/observabilidade/adicionar-filtros-metrics/). -Sua análise usando o **Real-Time Metrics** depende do [produto que você escolher](/pt-br/documentacao/plataforma/real-time-metrics/#escolha-de-produto-para-visualizar-metricas) usar e de seus campos disponíveis. Cada produto possui campos específicos que geram os gráficos, fornecendo informações sobre o acesso, comportamento e desempenho de suas applications e produtos relacionados. +Os exemplos desta página usam o gráfico **Edge Cache** do dashboard **Data Transferred**, em **Build** › **Applications**. -Depois de escolher um produto para visualizar os gráficos e realizar uma análise, você pode: +--- + +## Pré-requisitos + +- Acesso ao Azion Console. Para entrar, consulte [Como acessar o Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/). +- Um gráfico com dados no intervalo de tempo selecionado. Para ler os seus primeiros números, consulte [Primeiros passos com Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/primeiros-passos/). +- Um personal token e `curl`, para enviar uma query copiada de um terminal. Para criar um token, consulte [Como criar um personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/). + +--- + +## Exporte os pontos de um gráfico como CSV + +**Export CSV** baixa os pontos de um gráfico como um arquivo de valores separados por vírgula (CSV). O arquivo cobre o intervalo de tempo e os filtros definidos na linha de filtros. + +Para exportar um gráfico no Azion Console: + + + + + Acesse [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + + + + Selecione a categoria, a aba de produto e o dashboard. Por exemplo, selecione **Build**, **Applications** e **Data Transferred**. + + + + + O arquivo contém apenas os pontos que o intervalo e os filtros selecionam. Para cada controle, consulte [Filtros e intervalo de tempo](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/). + + + -- Adicionar filtros. -- Escolher um intervalo de dados. -- Usar as tags **Get help** para aprender mais sobre cada gráfico. + No card do gráfico, selecione o botão de menu, rotulado **More options**. -O Real-Time Metrics fornece uma visualização padrão com gráficos exibindo campos predefinidos, mas você pode adicionar filtros para visualizar dados mais específicos. + + + - +O navegador baixa um arquivo com o nome do gráfico, como `Edge Cache.csv`. -Para analisar métricas: +Em um gráfico de tempo, o arquivo contém uma linha por ponto que o gráfico plota. A primeira linha nomeia as colunas: `ts` e depois uma coluna por série, com o nome do seu campo. Para **Edge Cache**, a primeira linha é `ts;dataTransferredTotal;dataTransferredOut;dataTransferredIn`. -1. Navegue pela página para ver todos os gráficos disponíveis. -2. Passe o cursor sobre os pontos dos gráficos para ver os dados específicos e o intervalo de tempo. -3. Amplie e reduza o zoom no gráfico rolando para cima e para baixo. -4. Use o **Context menu** para copiar a query do gráfico, exportar os pontos em um arquivo `.CSV`, habilitar a linha média do gráfico ou habilitar as linhas médias do gráfico por série. -5. Confira a **Variation tag** para ver como seus dados estão se comportando em relação ao período de tempo correspondente anterior. -6. Copie a URL para compartilhar os filtros que aplicados com outros usuários da Azion. +Cada linha seguinte contém o horário de um ponto, como `10/02/2026, 11:15:00 AM`, e depois o valor de cada série. Os valores não têm unidade: as colunas de **Edge Cache** estão em bytes. Para as regras de separador e de data, consulte [Export CSV](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/#export-csv). -\ --- +## Copie a query de um gráfico + +**Copy query** coloca a query GraphQL de um gráfico e as suas variáveis na área de transferência. O item de menu não abre nada, então você cola o texto onde quiser executá-lo. + +Para copiar a query no Azion Console: + + + + + Acesse [Azion Console](https://console.azion.com/) > **Real-Time Metrics**. + + + + + Selecione a categoria, a aba de produto e o dashboard. Por exemplo, selecione **Build**, **Applications** e **Data Transferred**. + + + + + No card do gráfico, selecione o botão de menu, rotulado **More options**. + + + + + +A área de transferência contém a query do gráfico para o intervalo de tempo e os filtros do dashboard. Para o gráfico **Edge Cache** em 24 horas, o texto é: + +```text +# QUERY + +query ($tsRange_begin:DateTime!, $tsRange_end:DateTime!) { + httpMetrics ( + limit: 5000 + groupBy: [ts] + orderBy: [ts_ASC] + filter: { + tsRange: { + begin: $tsRange_begin + end: $tsRange_end + } + } + ) { + dataTransferredTotal + dataTransferredOut + dataTransferredIn + ts + } +} + + +# VARIABLES +{ + "tsRange_begin": "2026-10-01T14:25:25", + "tsRange_end": "2026-10-02T14:25:25" +} +``` + +O texto tem duas partes. Em `# QUERY`, a query lê o intervalo das variáveis `$tsRange_begin` e `$tsRange_end`. Em `# VARIABLES`, um objeto JSON contém os seus valores. Cada filtro aplicado no dashboard adiciona variáveis próprias. A query não roda sem as suas variáveis, então cada parte vai para o seu próprio lugar. + +--- + +## Execute a query copiada + +Uma query copiada chama a API que o gráfico lê, `https://api.azion.com/v4/metrics/graphql`. Você pode executá-la no Playground GraphiQL ou enviá-la com `curl`. + +### Execute a query no Playground GraphiQL + +O Playground GraphiQL recebe a query e as suas variáveis em dois painéis separados. + +Para executar a query copiada no Playground GraphiQL: + + + + + Para acessá-lo, consulte [Playground GraphiQL](/pt-br/documentacao/devtools/graphql/playground-graphql/). + + + + + No editor de query, cole o texto copiado de `# QUERY` até a linha anterior a `# VARIABLES`. + + + + + No painel de variáveis, cole o objeto JSON que segue `# VARIABLES`. + + + + + +O playground envia a query com as suas variáveis e retorna as linhas do gráfico como JSON. + +### Envie a query com curl + +Para enviar uma query copiada com `curl`, coloque a query em uma linha na chave `query` do corpo. Coloque o objeto JSON que segue `# VARIABLES` na chave `variables`. Para ler outro período, altere `tsRange_begin` e `tsRange_end`. + +Substitua `[TOKEN VALUE]` pelo seu personal token e envie a requisição: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"query ($tsRange_begin:DateTime!, $tsRange_end:DateTime!) { httpMetrics (limit: 5000 groupBy: [ts] orderBy: [ts_ASC] filter: { tsRange: { begin: $tsRange_begin end: $tsRange_end } }) { dataTransferredTotal dataTransferredOut dataTransferredIn ts } }","variables":{"tsRange_begin":"2026-10-01T14:25:25","tsRange_end":"2026-10-02T14:25:25"}}' +``` + +A API responde `200` com uma linha por minuto que tem tráfego, da mais antiga para a mais recente: + +```json +{ + "data": { + "httpMetrics": [ + { + "dataTransferredTotal": 2662983.0, + "dataTransferredOut": 2649889.0, + "dataTransferredIn": 13094.0, + "ts": "2026-10-01T16:04:00Z" + }, + { + "dataTransferredTotal": 994021.0, + "dataTransferredOut": 986551.0, + "dataTransferredIn": 7470.0, + "ts": "2026-10-01T16:06:00Z" + }, + … + ] + } +} +``` + +Neste exemplo, a API retorna 110 linhas. Os seus valores de `dataTransferredTotal` somam 149.684.815 bytes, o mesmo total de 24 horas que [Primeiros passos com Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/primeiros-passos/) lê. A API omite os minutos sem tráfego, como 16:05, que o gráfico plota como zero. + +Para cada campo do dataset `httpMetrics`, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#httpmetrics-applications-waf). + +--- + +## Próximos passos + + + + + + + diff --git a/src/content/docs/pt-br/pages/observe/real-time-metrics/boas-praticas.mdx b/src/content/docs/pt-br/pages/observe/real-time-metrics/boas-praticas.mdx new file mode 100644 index 0000000000..982992b6d4 --- /dev/null +++ b/src/content/docs/pt-br/pages/observe/real-time-metrics/boas-praticas.mdx @@ -0,0 +1,190 @@ +--- +title: Boas práticas para Real-Time Metrics +description: Escolha o intervalo, o escopo e a fonte de cada número de Real-Time Metrics para manter precisas as comparações, as verificações de cache e as queries da API. +meta_tags: 'real-time metrics, best practices, dashboards, time range, filters, graphql' +namespace: documentation_products_real_time_metrics_best_practices +permalink: /documentacao/plataforma/real-time-metrics/boas-praticas/ +--- +import FrameBox from '@aziontech/webkit/frame-box' +import ItemList from '@aziontech/webkit/item-list' +import DocItem from '@aziontech/webkit/doc-item' + +Uma métrica responde a uma pergunta sobre uma tendência: se o tráfego cresceu, se o cache serve uma parte maior dele, quando os erros começaram. A resposta só vale quando o período, o escopo e a fonte do número correspondem à pergunta. Sem essa correspondência, uma comparação que inclui minutos ainda em contagem mostra uma queda que não aconteceu. Uma média da conta inteira esconde o único domínio cujo cache parou de funcionar, e uma query da API sem limite de linhas retorna as suas 10 primeiras linhas sem nenhum erro. + +Estas práticas se aplicam aos dashboards de [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) no Azion Console e às queries para a API GraphQL dele. Os mecanismos por trás delas estão em [Como Real-Time Metrics funciona](/pt-br/documentacao/plataforma/real-time-metrics/como-funciona/), e o valor de cada limite está em [Limites de Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/limites/). + +Em ordem, as práticas cobrem qual número usar como referência para a cobrança, a duração do intervalo, os minutos mais recentes de um intervalo, o escopo dos gráficos de cache, o caminho de um pico até as suas requisições, as queries copiadas e o limite de linhas de uma query da API. Cada exemplo é uma query que foi executada na API GraphQL, com a sua resposta. + +--- + +## Concilie cobranças com os dados de Billing, não com Real-Time Metrics + +Real-Time Metrics e Billing contam o mesmo uso de duas formas. Real-Time Metrics conta cada evento no máximo uma vez, e Billing exatamente uma vez. Os dois diferem em menos de 1% em média e, quando diferem, o número de Billing é o correto. + +Use Real-Time Metrics para operações, como ver uma mudança no tráfego em poucos minutos, e Billing para o que você paga. O custo é uma segunda fonte: um relatório de uso montado a partir dos dashboards carrega uma pequena diferença em relação à fatura, então ele não serve para resolver uma cobrança. Para as duas abordagens de contagem, consulte [Real-Time Metrics e faturamento](/pt-br/documentacao/fundamentos/billing-and-subscriptions/#real-time-metrics-e-faturamento). + +Para verificar, compare o total de um mês nos dois: uma diferença de cerca de 1% é a diferença esperada entre as duas abordagens. + +--- + +## Escolha um intervalo curto o bastante para manter a resolução de que você precisa + +Real-Time Metrics dimensiona cada ponto de um gráfico de tempo pela duração do intervalo selecionado, não pela idade dos dados. Um intervalo menor que 2,5 dias plota um ponto por minuto, e um mais longo plota um ponto por hora ou por dia, como detalha [Como Real-Time Metrics funciona](/pt-br/documentacao/plataforma/real-time-metrics/como-funciona/). Um pico de poucos minutos se destaca na resolução de minutos e se achata dentro do seu bucket de hora ou de dia em um intervalo mais longo. + +Escolha o intervalo mais curto que cobre a pergunta. Por exemplo, **Last 24 hours** plota um ponto por minuto e mostra quando uma mudança começou, enquanto **Last 7 days** e **Last 90 days** plotam horas e dias e mostram uma tendência. O custo é o alcance: a resolução de minutos nunca cobre mais de 2,5 dias. + +Na API, `tsRange` define o intervalo. Esta query de um dia retorna buckets de um minuto: + +```graphql +query { + httpMetrics( + limit: 10000 + filter: { tsRange: { begin: "2026-10-01T14:21:50", end: "2026-10-02T14:21:50" } } + aggregate: { sum: requests } + groupBy: [ts] + orderBy: [ts_ASC] + ) { + ts + sum + } +} +``` + +A API responde `200`: + +```json +{ + "data": { + "httpMetrics": [ + { + "ts": "2026-10-01T16:04:00Z", + "sum": 74 + }, + { + "ts": "2026-10-01T16:06:00Z", + "sum": 14 + }, + { + "ts": "2026-10-01T16:07:00Z", + "sum": 82 + }, + … + ] + } +} +``` + +Com `begin` definido como `"2026-07-04T14:21:50"`, 90 dias antes de `end`, a mesma query retorna buckets de um dia, como `"ts": "2026-07-24T00:00:00Z"`. O dataset `httpBreakdownMetrics`, por trás do dashboard **Request Breakdown**, retorna buckets de uma hora mesmo para um intervalo de 1 hora. + +Para verificar a resolução de um resultado, leia a diferença entre dois valores consecutivos de `ts`: 60 segundos para minutos, 3.600 segundos para horas. + +--- + +## Termine todo intervalo que você compara ou armazena pelo menos 10 minutos no passado + +Uma métrica leva até 10 minutos para ser agregada, então um intervalo que termina agora pode ficar abaixo da janela completa anterior a ele. A [tag de variação](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/#tag-de-variacao), que compara o intervalo selecionado com a janela anterior de mesma duração, pode mostrar uma queda que desaparece alguns minutos depois. + +No Console, defina **End date** na aba **Absolute** como um horário pelo menos 10 minutos no passado. Na API, defina o `end` de `tsRange` pelo menos 10 minutos antes da execução da query. Um período que terminou há mais de 10 minutos está completo e retorna os mesmos valores em toda execução. Então consulte esse período uma vez, guarde o resultado e, depois, consulte apenas o período seguinte. Em `httpBreakdownMetrics`, comece e termine cada período na hora cheia: um intervalo que começou às 13:21:50 retornou uma linha para o bucket que começa às 13:00, então duas queries que dividem uma hora podem contá-la duas vezes. + +O custo são os 10 minutos mais recentes, que esses intervalos deixam de fora: leia esses minutos em um intervalo que termina agora, como valores provisórios. Para o atraso da agregação e a retenção de cada dataset, consulte [Limites de Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/limites/). + +Para verificar, execute a mesma query de novo alguns minutos depois: valores idênticos confirmam que o período estava completo. + +--- + +## Filtre um único domínio antes de ler os gráficos de cache + +Os gráficos de cache cobrem a conta inteira até que você os filtre. São eles **Edge Offload**, **Saved Data** e **Missed Data** no dashboard [Data Transferred](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/#data-transferred), e **Requests Offloaded** em [Requests](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/#requests), todos de [Applications](/pt-br/documentacao/plataforma/applications/). Um offload da conta inteira mistura aplicações com configurações de cache diferentes, então um domínio cujo conteúdo deixou de vir do cache pode ficar escondido atrás dos outros. + +No Console, filtre o dashboard por **Domain** ou **Workload**, o rótulo que a sua conta mostrar, para manter um único workload. Na API, o filtro `hostEq` mantém as requisições de um hostname: + +```graphql +query CacheOffloadForHost { + httpMetrics( + limit: 1 + filter: { + tsRange: { begin: "2026-10-01T14:25:25", end: "2026-10-02T14:25:25" } + hostEq: "www.example.com" + } + ) { + requestsTotal + requestsOffloaded + savedRequests + missedRequests + dataTransferredTotal + offload + savedData + missedData + bandwidthOffload + } +} +``` + +A API responde `200` com uma linha para o hostname: + +```json +{ + "data": { + "httpMetrics": [ + { + "requestsTotal": 982, + "requestsOffloaded": 5.19, + "savedRequests": 51.0, + "missedRequests": 931.0, + "dataTransferredTotal": 114490585.0, + "offload": 0.51, + "savedData": 577373.0, + "missedData": 113387464.0, + "bandwidthOffload": 0.51 + } + ] + } +} +``` + +O custo é o escopo: um filtro do Console se aplica a todos os gráficos do dashboard, e mudar para um dashboard que lê outro dataset o limpa. Para medir um domínio passo a passo, consulte [Meça o offload de cache de um domínio](/pt-br/documentacao/guias/plataforma/observabilidade/medir-offload-de-cache/). + +Para verificar, some `savedRequests` e `missedRequests`: o resultado é igual a `requestsTotal`, e `requestsOffloaded` é a parcela servida do cache, 51 de 982 requisições, ou 5,19%. + +--- + +## Encontre as requisições por trás de um pico em Real-Time Events + +Real-Time Metrics guarda contagens agregadas por bucket de tempo, não as requisições por trás delas. Um gráfico mostra quando um pico aconteceu e qual foi o tamanho dele, mas não quais requisições o formaram. [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/) guarda o evento bruto de cada requisição. + +Primeiro, restrinja o dashboard: defina o intervalo nos minutos do pico e filtre pelo campo que o isola, como **Status**, ou **Domain** ou **Workload**. Depois, abra Real-Time Events para o mesmo período. Por exemplo, se **Missed Requests** sobe às 14:05, um intervalo de 14:00 a 14:30 filtrado para um domínio diz qual domínio e quais 30 minutos ler em Real-Time Events. O custo é um segundo produto: Real-Time Events é cobrado por Storage e Data Scan, enquanto Real-Time Metrics está incluído na plataforma sem custo adicional. + +Para verificar, confirme que o período que você lê em Real-Time Events começa e termina nos mesmos minutos do pico no gráfico. + +--- + +## Comece uma query da API pela query copiada de um gráfico + +**Copy query**, no menu de um gráfico, coloca na área de transferência a query GraphQL por trás desse gráfico, com o dataset, os campos, a agregação e os filtros dela. Uma query da API, ou um painel em um [dashboard personalizado do Grafana](/pt-br/documentacao/guias/plataforma/observabilidade/azion-plugin-grafana/), passa então a começar de uma query que o Console já executa. O texto contém a linha `# QUERY`, a query, a linha `# VARIABLES` e as variáveis como um objeto JSON. + +O custo é um passo a mais. A query lê os valores dos filtros nas variáveis, então ela não executa sozinha: cole a query no [Playground GraphiQL](/pt-br/documentacao/devtools/graphql/playground-graphql/) e o JSON depois de `# VARIABLES` no painel de variáveis dele. A query copiada também mantém o `limit` do próprio gráfico, então confira esse valor antes de ampliar o intervalo. Para o formato da área de transferência, consulte [Copy query](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/#copy-query) e, para os passos, [Exporte os dados e a query de um gráfico](/pt-br/documentacao/guias/plataforma/observabilidade/analisar-metricas/). + +Para verificar, execute a query uma vez antes de alterá-la: um `200` com linhas confirma que as variáveis vieram junto. + +--- + +## Defina um limite explícito de linhas em toda query da API + +Uma query sem o argumento `limit` retorna 10 linhas e nenhum erro. Uma query de um dia por minuto que tinha 110 linhas retornou as suas 10 primeiras. Defina `limit` como o número de linhas que você espera, até 10.000, e defina `orderBy`, para saber quais linhas o limite mantém. A query em [Escolha um intervalo curto o bastante para manter a resolução de que você precisa](/pt-br/documentacao/plataforma/real-time-metrics/boas-praticas/#escolha-um-intervalo-curto-o-bastante-para-manter-a-resolucao-de-que-voce-precisa) define `limit: 10000` e `orderBy: [ts_ASC]`. + +O custo é um teto: acima de 10.000 linhas, a API recusa a query com `400`. Encurte o intervalo ou percorra as linhas em páginas com `offset`, como descreve [Recursos da API GraphQL](/pt-br/documentacao/devtools/graphql/recursos/). Para o erro exato, consulte [Limites da API GraphQL](/pt-br/documentacao/devtools/graphql/limites/#limite-de-linhas-por-query). + +Para verificar, conte as linhas do resultado: uma contagem igual ao `limit` significa que podem faltar linhas, então aumente o limite ou encurte o intervalo. + +--- + +## Recursos relacionados + + + + A abordagem de contagem por trás de cada gráfico e as durações de intervalo que mudam a resolução. + A retenção de cada dataset e os limites do Console e da API GraphQL. + Todos os controles acima dos gráficos, do seletor de intervalo de tempo ao menu do gráfico. + Os procedimentos que aplicam estas práticas, uma tarefa por guia. + + diff --git a/src/content/docs/pt-br/pages/observe/real-time-metrics/como-funciona.mdx b/src/content/docs/pt-br/pages/observe/real-time-metrics/como-funciona.mdx new file mode 100644 index 0000000000..25d4d6e9ff --- /dev/null +++ b/src/content/docs/pt-br/pages/observe/real-time-metrics/como-funciona.mdx @@ -0,0 +1,135 @@ +--- +title: Como Real-Time Metrics funciona +description: Acompanhe uma requisição até ela virar um ponto em um gráfico de Real-Time Metrics e veja como agregação, resolução e contagem moldam cada valor. +meta_tags: 'real-time metrics, how it works, aggregation, resolution, retention, graphql, observe' +namespace: documentation_products_real_time_metrics_how_it_works +permalink: /documentacao/plataforma/real-time-metrics/como-funciona/ +--- +import FrameBox from '@aziontech/webkit/frame-box' +import ItemList from '@aziontech/webkit/item-list' +import DocItem from '@aziontech/webkit/doc-item' + +Uma métrica é um número calculado a partir de muitos eventos ao longo de uma fatia de tempo: uma contagem de requisições, uma soma de bytes ou a parcela do conteúdo servida do cache. Cada requisição do seu tráfego é registrada como um evento. Os eventos são somados por minuto, hora ou dia, e um gráfico plota um ponto por fatia. O ponto é um total, então ele chega depois das requisições que conta e não diz nada sobre nenhuma delas individualmente. + +[Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) mostra esses totais. Ele não cria nada na sua conta: lê as métricas que outros produtos da Azion geram enquanto servem o seu tráfego e as mostra como gráficos no [Azion Console](https://console.azion.com/) e pela [API GraphQL](/pt-br/documentacao/devtools/graphql/). Para abrir o seu primeiro dashboard, consulte [Primeiros passos com Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/primeiros-passos/). + +As seções acompanham uma requisição até ela virar um ponto em um gráfico: o caminho de uma requisição até um gráfico, a agregação e o seu atraso, a resolução de cada ponto, como a contagem difere de Billing, métricas e eventos, os datasets que cada dashboard lê e a retenção. + +--- + +## De uma requisição a um gráfico + +Os produtos que servem o seu tráfego registram o que fazem com cada requisição ou consulta: [Applications](/pt-br/documentacao/plataforma/applications/), [Cache](/pt-br/documentacao/plataforma/applications/#cache), [Tiered Cache](/pt-br/documentacao/plataforma/applications/cache/tiered-cache/), [Functions](/pt-br/documentacao/plataforma/functions/), [Image Processor](/pt-br/documentacao/plataforma/applications/#image-processor), [WAF](/pt-br/documentacao/plataforma/firewall/#waf), [Edge DNS](/pt-br/documentacao/plataforma/edge-dns/), [Bot Manager](/pt-br/documentacao/plataforma/firewall/#bot-manager) e [Data Stream](/pt-br/documentacao/plataforma/data-stream/). Real-Time Metrics não muda nada nesses produtos. Ele lê o que eles registram, depois que a Azion agrega esses registros. + +Este diagrama acompanha uma requisição até ela virar um ponto em um gráfico: + +```mermaid +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "13px"}, "flowchart": {"nodeSpacing": 12, "rankSpacing": 12, "padding": 6, "wrappingWidth": 70, "minNodeWidth": 40, "useMaxWidth": true}}}%% +flowchart LR + Req["Requisição"] --> Ev["Eventos dos produtos"] + Ev --> Agg["Agregação"] + Agg --> DS["Datasets"] + DS --> API["API GraphQL"] + API --> Con["Dashboards do Console"] + API --> Gr["Grafana"] +``` + +1. Um cliente envia uma requisição, e o produto que a atende, como uma aplicação, a serve e a registra como um evento. +2. A Azion agrega os eventos em métricas, como uma contagem de requisições ou uma soma de bytes por bucket de tempo. A agregação leva até 10 minutos. +3. As métricas são armazenadas em datasets, um por tipo de tráfego, como `httpMetrics` para as requisições que Applications e WAF atendem. +4. A API GraphQL em `https://api.azion.com/v4/metrics/graphql` responde a queries sobre esses datasets. +5. Cada gráfico no Azion Console é uma query para essa mesma API, então um dashboard e uma query que você escreve leem os mesmos números. +6. Um dashboard do Grafana pode ler os mesmos datasets pela API. Para configurar o Grafana, consulte [Instale o plugin da Azion para Grafana](/pt-br/documentacao/guias/plataforma/observabilidade/integrar-grafana/). + +Como todo gráfico é uma query GraphQL, **Copy query**, no menu de um gráfico, copia a query e as variáveis exatas que o gráfico envia. Você pode executar essa query por conta própria, mudar o intervalo dela ou detalhá-la ainda mais. Para o formato do texto copiado, consulte [Copy query](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/#copy-query). + +### O que um gráfico conta + +Um gráfico de requisições conta acessos: cada vez que um cliente alcança o conteúdo da sua aplicação, a aplicação processa uma requisição, e o gráfico conta uma. Quando o conteúdo não está em cache, o data center o busca na origem antes de responder ao cliente. Esse trajeto inteiro, do cliente ao data center, à origem e de volta, continua contando como uma requisição, e **Missed Requests** o conta uma vez. + +Já o gráfico **Edge Cache** divide o mesmo trajeto por direção. Por exemplo, em um cache miss, **Data Transferred In** conta os dados que seguem em direção à origem, e **Data Transferred Out** conta os dados que voltam ao cliente. Um gráfico também conta apenas o que o seu próprio produto registra. Vários produtos, como Tiered Cache e Functions, precisam estar ativos na sua conta antes que os dashboards deles reportem dados, e alguns gráficos aplicam um filtro próprio. Os gráficos de **Image Processor**, por exemplo, mantêm apenas respostas 2XX e 304. Para o caminho e o filtro de cada gráfico, consulte [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/). + +--- + +## Agregação e atraso + +A agregação leva tempo, então um total não é final no momento em que as suas requisições são servidas. A Azion agrega os eventos nas métricas de cada bucket de tempo, e uma métrica leva até 10 minutos para ser agregada. Até lá, o bucket guarda apenas os eventos contados até aquele momento. + +Duas coisas moldam os pontos mais recentes de uma linha. Quando o intervalo selecionado termina no minuto atual, o Console não plota o último bucket, que ainda está aberto. Os buckets anteriores a ele ainda podem estar em agregação, então os últimos pontos de uma linha podem ficar abaixo do tráfego real. Por exemplo, com **Last 15 minutes** selecionado às 15:40, a linha termina antes das 15:40, e os pontos entre 15:30 e 15:39 ainda podem subir à medida que os eventos deles são contados. + +O atraso é o custo de servir totais em vez de eventos brutos. Os valores dos 10 minutos mais recentes são um rascunho, enquanto um intervalo que termina 10 minutos ou mais no passado guarda apenas pontos agregados. Dentro de um intervalo, um bucket sem eventos é plotado como zero, então uma pausa no tráfego aparece como uma queda a zero. Para saber como um gráfico mostra cada estado, consulte [Estados do gráfico](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/#estados-do-grafico). + +--- + +## Resolução + +Um gráfico não consegue plotar cada minuto de um intervalo longo de forma legível, então cada ponto cobre um bucket de tempo cujo tamanho segue a duração do intervalo selecionado. A API escolhe o tamanho do bucket, e o Console alinha os pontos que recebe a esse tamanho. A query que um gráfico envia não carrega nenhum intervalo próprio. + +| Duração do intervalo selecionado | Cada ponto cobre | +| --- | --- | +| Menos de 2,5 dias (60 horas) | Um minuto | +| De 2,5 dias a menos de 60 dias | Uma hora | +| 60 dias ou mais | Um dia | + +O tamanho do bucket depende da duração do intervalo, não da idade dos dados. Por exemplo, um intervalo de um dia da semana passada ainda retorna um ponto por minuto. Um dataset não segue a tabela: `httpBreakdownMetrics` retorna buckets de uma hora mesmo para um intervalo de uma hora. + +Um campo por segundo, como `requestsTotalPerSecond`, divide o total de um bucket pela duração desse bucket em segundos. Em um bucket de uma hora, 71 requisições aparecem como 0,02 requisição por segundo, que é 71 dividido por 3.600. + +A contrapartida é o detalhe. Um intervalo longo mostra uma tendência longa em poucos pontos, mas um pico curto desaparece dentro do seu bucket. Um surto de cinco minutos dentro de um bucket de um dia soma ao total desse dia, e um valor por segundo o espalha pelos 86.400 segundos do dia. Para ver um pico, selecione um intervalo menor que 2,5 dias em torno dele. A forma como um gráfico combina os seus pontos em um total da legenda, com **Sum** ou **Average**, está descrita em [Anatomia do gráfico](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/#anatomia-do-grafico). + +--- + +## Contagem e Billing + +Real-Time Metrics foca em performance, e Billing foca em precisão, então os dois contam eventos de formas diferentes. Real-Time Metrics usa uma abordagem at-most-once: cada evento é contado uma vez ou nenhuma, então um evento pode ser perdido, mas nunca é contado duas vezes. Billing usa uma abordagem exactly-once, que conta cada evento exatamente uma vez. + +Por isso, as duas abordagens podem dar totais diferentes para o mesmo tráfego. Em média, a diferença entre Real-Time Metrics e Billing é menor que 1%. Quando os dois diferem, Billing é a referência. Por exemplo, se o total de requisições de um mês no dashboard **Requests** difere das requisições nos dados de Billing da Azion, o número de Billing é o que deve ser usado. + +Para saber como Billing registra o uso, consulte [Real-Time Metrics e faturamento](/pt-br/documentacao/fundamentos/billing-and-subscriptions/#real-time-metrics-e-faturamento). + +--- + +## Métricas e eventos + +Uma métrica é agregada: ela diz quantas requisições chegaram em um minuto, não quais foram. Um evento é bruto: ele guarda uma requisição e os detalhes dela. Real-Time Metrics serve dados agregados, e [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/) serve os eventos brutos, os logs, que os mesmos produtos registram. Cada um tem a sua própria API GraphQL e os seus próprios datasets. + +Use Real-Time Metrics para acompanhar uma tendência ou comparar intervalos, e Real-Time Events para inspecionar as requisições por trás de uma mudança. Por exemplo, quando **Missed Requests** sobe em uma hora, os logs dessa hora em Real-Time Events mostram as requisições individuais por trás da alta. Para enviar os logs brutos para fora da Azion, [Data Stream](/pt-br/documentacao/plataforma/data-stream/) os entrega em pacotes a um destino que você configura. + +--- + +## Datasets + +Um dataset é uma coleção nomeada de métricas agregadas para um tipo de tráfego. Cada produto registra os seus próprios campos, então o que um dashboard pode mostrar em gráfico depende do produto a que ele pertence. No Azion Console, uma categoria guarda abas de produto, uma aba de produto guarda um ou mais dashboards e cada dashboard lê um dataset. Para consultar os mesmos números pela API GraphQL, use estes datasets: + +| Categoria | Aba de produto | Dataset a consultar | +| --- | --- | --- | +| **Build** | **Applications** | `httpMetrics`, e `httpBreakdownMetrics` para **Request Breakdown** | +| **Build** | **Tiered Cache** | `tieredCacheMetrics` | +| **Build** | **Functions** | `edgeFunctionsMetrics` | +| **Build** | **Image Processor** | `imagesProcessedMetrics` | +| **Secure** | **WAF** | `httpMetrics` | +| **Secure** | **Edge DNS** | `edgeDnsQueriesMetrics` | +| **Secure** | **Bot Manager** | `botManagerMetrics` para **Overview**, e `botManagerBreakdownMetrics` para **Breakdown** | +| **Secure** | **Threats Breakdown** | `httpBreakdownMetrics` | +| **Observe** | **Data Stream** | `dataStreamedMetrics` | + +Como um gráfico e uma query leem o mesmo dataset, você pode reconstruir qualquer gráfico como uma query e então agrupá-la, filtrá-la ou executá-la em um intervalo que o gráfico não desenha. [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/), [Dashboards de Secure](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-secure/) e [Dashboards de Observe](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-observe/) nomeiam os campos que cada gráfico lê. Para os campos de todos os datasets, consulte [Campos GraphQL de Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/). + +--- + +## Retenção + +Real-Time Metrics mantém cada dataset por um período fixo, que varia por dataset. Depois desse período, uma query retorna um resultado vazio em vez de um erro. Para o período de cada dataset, consulte [Retenção de dados](/pt-br/documentacao/plataforma/real-time-metrics/limites/#retencao-de-dados). + +--- + +## Recursos relacionados + + + + Por quanto tempo cada dataset é mantido e os limites do Console e da API GraphQL. + Qual intervalo escolher para uma tendência ou um pico e quando ler Billing em vez de um gráfico. + O que fazer quando os últimos pontos caem, um gráfico está vazio ou os totais diferem de Billing. + Como a API GraphQL que todo gráfico consulta é estruturada e como chamá-la. + + diff --git a/src/content/docs/pt-br/pages/observe/real-time-metrics/dashboards-build.mdx b/src/content/docs/pt-br/pages/observe/real-time-metrics/dashboards-build.mdx new file mode 100644 index 0000000000..90afd64378 --- /dev/null +++ b/src/content/docs/pt-br/pages/observe/real-time-metrics/dashboards-build.mdx @@ -0,0 +1,363 @@ +--- +title: Dashboards de Build +description: Consulte o que mede cada gráfico dos dashboards Applications, Tiered Cache, Functions e Image Processor, com o campo que retorna o mesmo valor. +meta_tags: 'real-time metrics, dashboards, applications, cache, tiered cache, functions, image processor, charts' +namespace: documentation_products_real_time_metrics_build_dashboards +permalink: /documentacao/plataforma/real-time-metrics/dashboards-build/ +--- + +import FrameBox from '@aziontech/webkit/frame-box' +import ItemList from '@aziontech/webkit/item-list' +import DocItem from '@aziontech/webkit/doc-item' + +A categoria **Build** de [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) reúne os dashboards de quatro abas de produto: **Applications**, **Tiered Cache**, **Functions** e **Image Processor**. Selecione **Build** no dropdown de categoria para abri-los. Sem um dashboard na URL, Real-Time Metrics abre em **Build** › **Applications** › **Data Transferred**. + +Cada dashboard abaixo tem uma tabela com uma linha por gráfico, na ordem em que o Console os desenha. A coluna **Agregação** traz a tag exibida sob a descrição de cada gráfico. Com **Sum**, uma entrada da legenda mostra o total no intervalo selecionado. Com **Average**, ela mostra esse total dividido pelo número de pontos. O texto sob cada tabela nomeia as séries que um gráfico desenha, o caminho dos dados que ele conta e a sua tag de variação. Essa tag compara o intervalo selecionado com a janela de mesma duração imediatamente anterior, e aparece apenas em um gráfico que desenha uma série. Cada dashboard termina com o dataset e os campos que retornam os mesmos números pela API GraphQL, para um detalhamento ou um intervalo que o gráfico não desenha. Para o intervalo de tempo e os filtros que se aplicam a todos os gráficos, consulte [Filtros e intervalo de tempo](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/). + +--- + +## Applications + +A aba **Applications** mostra métricas do tráfego das aplicações de [Applications](/pt-br/documentacao/plataforma/applications/) configuradas na sua conta. Ela reúne cinco dashboards, nesta ordem no seletor de dashboard: **Data Transferred**, **Requests**, **Status Codes**, **Bandwidth Saving** e **Request Breakdown**. Os quatro primeiros leem o dataset `httpMetrics`, e **Request Breakdown** lê `httpBreakdownMetrics`. + +### Data Transferred + +O dashboard **Data Transferred** mede os bytes e a largura de banda que as suas aplicações movimentam, e quanto desse conteúdo o data center entrega a partir do seu cache. O gráfico **Edge Cache** conta os dados que passam por [Cache](/pt-br/documentacao/plataforma/applications/#cache), que precisa estar ativo na sua conta para reportar dados. + +| Gráfico | O que mede | Unidade | Agregação | +| --- | --- | --- | --- | +| Edge Cache | Dados transferidos por Cache, divididos em dados de entrada, dados de saída e o total deles. | Bytes | Sum | +| Edge Offload | Parcela dos dados que o data center entregou a partir do seu cache, sem buscá-los na origem. | Percentual | Average | +| Saved Data | Dados que o data center entregou a partir do seu cache, sem buscá-los na origem. | Bytes | Sum | +| Missed Data | Dados que o data center entregou depois de buscá-los na origem. | Bytes | Sum | +| Total Bandwidth Usage | Largura de banda usada para entregar o seu conteúdo. | Bits por segundo | Sum | +| Bandwidth Offloaded | Parcela da largura de banda entregue a partir do cache, sem buscar o conteúdo na origem. | Percentual | Average | +| Saved Bandwidth | Largura de banda entregue a partir do cache, sem buscar o conteúdo na origem. | Bits por segundo | Sum | +| Missed Bandwidth | Largura de banda usada para buscar o conteúdo na origem e entregá-lo ao cliente. | Bits por segundo | Sum | + +**Edge Cache** desenha três séries: **Data Transferred Total**, **Data Transferred Out** e **Data Transferred In**. O caminho que cada série conta depende de a aplicação usar [Tiered Cache](/pt-br/documentacao/plataforma/applications/cache/tiered-cache/), uma segunda camada de cache entre o data center e a sua origem: + +| Série | Sem Tiered Cache | Com Tiered Cache | +| --- | --- | --- | +| Data Transferred In | Cliente → data center → origem | Cliente → data center → camada de Tiered Cache | +| Data Transferred Out | Origem → data center → cliente | Camada de Tiered Cache → data center → cliente | +| Data Transferred Total | Data Transferred In + Data Transferred Out | Data Transferred In + Data Transferred Out | + +Cada diagrama abaixo desenha uma série. A linha de cima é a requisição, do cliente em direção à origem, e a linha de baixo é a resposta. Uma seta contínua é um trecho que a série conta, e uma seta pontilhada é um trecho que ela não conta. + +```mermaid title="Data Transferred In, sem Tiered Cache" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Cliente"] -- requisição --> D["Data center"] + D -- requisição --> O["Origem"] + O -. resposta .-> D + D -. resposta .-> C + linkStyle 0,1 stroke-width:3px +``` + +1. Contado: a requisição vai do cliente ao data center e do data center à origem. +2. Não contado: a resposta que volta ao cliente, que **Data Transferred Out** conta. + +```mermaid title="Data Transferred Out, sem Tiered Cache" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Cliente"] -. requisição .-> D["Data center"] + D -. requisição .-> O["Origem"] + O -- resposta --> D + D -- resposta --> C + linkStyle 2,3 stroke-width:3px +``` + +1. Contado: a resposta vai da origem ao data center e do data center ao cliente. +2. Não contado: a requisição que chega à origem, que **Data Transferred In** conta. + +```mermaid title="Data Transferred Total, sem Tiered Cache" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Cliente"] -- requisição --> D["Data center"] + D -- requisição --> O["Origem"] + O -- resposta --> D + D -- resposta --> C + linkStyle 0,1,2,3 stroke-width:3px +``` + +1. Contado: a requisição, do cliente ao data center e dele à origem. +2. Contado: a resposta, da origem ao data center e de volta ao cliente. + +```mermaid title="Data Transferred In, com Tiered Cache" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Cliente"] -- requisição --> D["Data center"] + D -- requisição --> T["Tiered Cache"] + T -. requisição .-> O["Origem"] + O -. resposta .-> T + T -. resposta .-> D + D -. resposta .-> C + linkStyle 0,1 stroke-width:3px +``` + +1. Contado: a requisição vai do cliente ao data center e do data center à camada de Tiered Cache. +2. Não contados: o trecho até a origem, que a aba **Tiered Cache** conta, e a resposta, que **Data Transferred Out** conta. + +```mermaid title="Data Transferred Out, com Tiered Cache" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Cliente"] -. requisição .-> D["Data center"] + D -. requisição .-> T["Tiered Cache"] + T -. requisição .-> O["Origem"] + O -. resposta .-> T + T -- resposta --> D + D -- resposta --> C + linkStyle 4,5 stroke-width:3px +``` + +1. Contado: a resposta vai da camada de Tiered Cache ao data center e do data center ao cliente. +2. Não contados: a requisição, que **Data Transferred In** conta, e o trecho que vem da origem, que a aba **Tiered Cache** conta. + +```mermaid title="Data Transferred Total, com Tiered Cache" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Cliente"] -- requisição --> D["Data center"] + D -- requisição --> T["Tiered Cache"] + T -. requisição .-> O["Origem"] + O -. resposta .-> T + T -- resposta --> D + D -- resposta --> C + linkStyle 0,1,4,5 stroke-width:3px +``` + +1. Contado: a requisição, do cliente ao data center e dele à camada de Tiered Cache. +2. Contado: a resposta, da camada de Tiered Cache ao data center e de volta ao cliente. +3. Não contados: os dois trechos entre a camada de Tiered Cache e a origem, que a aba **Tiered Cache** conta. + +Com Tiered Cache, o tráfego entre a camada de Tiered Cache e a origem é contado na aba **Tiered Cache**. **Data Transferred In** soma o tamanho de cada requisição e o soma uma segunda vez quando o conteúdo não é um cache hit. **Data Transferred Out** soma os bytes enviados e acrescenta os bytes enviados ao upstream quando o conteúdo não é um cache hit. + +**Edge Offload**, **Saved Data**, **Bandwidth Offloaded** e **Saved Bandwidth** medem o conteúdo que o data center entregou ao cliente a partir do próprio cache: Cliente → data center → cliente. **Missed Data** e **Missed Bandwidth** medem o conteúdo que o data center buscou primeiro na origem: Cliente → data center → origem → data center → cliente. Um valor de offload ou de dados economizados mais alto significa que as suas políticas de cache entregam mais conteúdo a partir do cache, e a sua origem atende menos demanda. Por exemplo, se uma aplicação transfere 1 GB com um **Edge Offload** médio de 80%, o data center entregou 800 MB desse volume a partir do cache. + +O Console escala cada unidade em passos de 1.000. Os gráficos de bytes exibem `B`, `kB`, `MB`, `GB` e `TB`, e os gráficos de largura de banda exibem bits por segundo como `bit/s`, `kb/s`, `Mb/s` e `Gb/s`. Os percentuais mostram duas casas decimais, como `45.67%`. + +Um aumento aparece como positivo em **Edge Offload**, **Saved Data**, **Total Bandwidth Usage**, **Bandwidth Offloaded** e **Saved Bandwidth**, e como negativo em **Missed Data** e **Missed Bandwidth**. **Edge Cache** desenha três séries, então não mostra tag de variação. + +Para consultar os mesmos números, use o dataset `httpMetrics`. **Edge Cache** lê `dataTransferredIn`, `dataTransferredOut` e `dataTransferredTotal`. Os outros gráficos, na ordem da tabela, leem `offload`, `savedData`, `missedData`, `bandwidthTotal`, `bandwidthOffload`, `bandwidthSavedData` e `bandwidthMissedData`. Para cada campo, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#httpmetrics-applications-waf). + +### Requests + +O dashboard **Requests** conta as requisições feitas aos domínios das suas aplicações e quantas o data center respondeu a partir do seu cache. Ele também divide as requisições por método e por esquema, e mede quanto tempo elas levam. + +| Gráfico | O que mede | Unidade | Agregação | +| --- | --- | --- | --- | +| Total Requests | Requisições feitas aos seus domínios, divididas por esquema. | Requisições | Sum | +| Requests Offloaded | Parcela das requisições que o data center entregou a partir do seu cache, sem buscar o conteúdo na origem. | Percentual | Average | +| Saved Requests | Requisições entregues a partir do cache, sem buscar o conteúdo na origem. | Requisições | Sum | +| Missed Requests | Requisições entregues depois de buscar o conteúdo na origem. | Requisições | Sum | +| Total Requests per Second | Requisições por segundo feitas aos seus domínios. | Requisições por segundo | Sum | +| Requests per Second Offloaded | Parcela das requisições por segundo entregues a partir do cache. | Percentual | Average | +| Saved Requests per Second | Requisições por segundo entregues a partir do cache. | Requisições por segundo | Sum | +| Missed Requests per Second | Requisições por segundo entregues depois de buscar o conteúdo na origem. | Requisições por segundo | Sum | +| Requests by Method | Requisições de cada método HTTP. | Requisições | Sum | +| Average Request Time | Tempo médio para processar uma requisição e respondê-la. | Segundos | Average | +| Requests by Scheme | Requisições de cada esquema, HTTP ou HTTPS. | Requisições | Sum | + +**Total Requests** desenha três séries. **Http Requests Total** conta as requisições servidas por HTTP, e **Https Requests Total** conta as servidas por HTTPS, que criptografa e verifica a conexão. **Edge Requests Total** é a soma das duas. + +**Requests Offloaded**, **Saved Requests** e os gráficos por segundo deles medem as requisições que o data center respondeu a partir do próprio cache: Cliente → data center → cliente. **Missed Requests** e **Missed Requests per Second** contam as requisições que o data center encaminhou à origem: Cliente → data center → origem → data center → cliente. Uma contagem de requisições economizadas mais alta significa que as suas políticas de cache mantêm mais requisições longe da sua origem. Por exemplo, com 5 requisições e um **Requests Offloaded** médio de 80%, o data center respondeu 4 das 5 a partir do cache. Em **Requests per Second Offloaded**, 5 requisições em um segundo a 80% significam que 4 delas vieram do cache naquele segundo. + +Os gráficos por segundo dividem as requisições de cada bucket de tempo pela duração do bucket em segundos: 60 para um bucket de um minuto, 3.600 para um bucket de uma hora. O tamanho do bucket acompanha a duração do intervalo selecionado; para os intervalos, consulte [Como Real-Time Metrics funciona](/pt-br/documentacao/plataforma/real-time-metrics/como-funciona/). O Console mostra esses valores com o sufixo `/s`, como `0.026/s`. + +**Requests by Method** desenha uma série por método HTTP encontrado no intervalo, como `GET`, que recupera um recurso, ou `POST`, que envia dados ao servidor. Uma requisição `HEAD` recupera as informações sobre um recurso sem o seu conteúdo. O gráfico mostra como os clientes interagem com o conteúdo dos seus domínios. + +**Average Request Time** é uma duração: o tempo médio, em segundos, que o servidor ou a aplicação leva para processar uma requisição e respondê-la. O Console formata esse valor com o sufixo por segundo, como `1.7/s`, que se lê como 1,7 segundo. Use o gráfico para encontrar tendências no tempo de processamento, como um gargalo que precisa de atenção. Para reduzir esse tempo, consulte [Configure políticas de cache para uma aplicação](/pt-br/documentacao/guias/performance-e-confiabilidade/cache-e-purge/cache-settings/), [Configure a Advanced Cache Key para uma aplicação](/pt-br/documentacao/guias/performance-e-confiabilidade/cache-e-purge/advanced-cache-key/) e [Balanceie o tráfego entre múltiplas origens](/pt-br/documentacao/guias/performance-e-confiabilidade/disponibilidade/configure-multiplas-origens/). + +**Requests by Scheme** desenha uma série por esquema. HTTP transporta requisições sem criptografia, que um atacante pode interceptar. HTTPS transporta requisições criptografadas para manter os dados íntegros e confidenciais. Use o gráfico para acompanhar a parcela de tráfego criptografado ao longo do tempo. Para mais informações, consulte [Configure portas HTTP e HTTPS](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/configurar-portas/). + +Um aumento aparece como positivo em **Requests Offloaded**, **Saved Requests**, **Total Requests per Second**, **Requests per Second Offloaded** e **Saved Requests per Second**. Ele aparece como negativo em **Missed Requests**, **Missed Requests per Second**, **Average Request Time** e **Requests by Scheme**. **Total Requests** desenha três séries e não mostra tag de variação. **Requests by Method** e **Requests by Scheme** mostram a tag apenas quando um único método ou um único esquema tem dados. Em **Requests by Method**, a tag não tem seta. + +Para consultar os mesmos números, use o dataset `httpMetrics`. **Total Requests** lê `edgeRequestsTotal`, `httpsRequestsTotal` e `httpRequestsTotal`. Os sete gráficos seguintes, na ordem da tabela, leem `requestsOffloaded`, `savedRequests`, `missedRequests`, `edgeRequestsTotalPerSecond`, `requestsPerSecondOffloaded`, `savedRequestsPerSecond` e `missedRequestsPerSecond`. **Requests by Method** e **Requests by Scheme** somam `requests` agrupado por `requestMethod` e por `scheme`, e **Average Request Time** calcula a média de `requestTime`. Os campos `requestsHttpMethodGet`, `requestsHttpMethodPost`, `requestsHttpMethodHead` e `requestsHttpMethodOthers` retornam um total por método, com métodos como `PUT` e `PATCH` em `requestsHttpMethodOthers`. Para cada campo, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#httpmetrics-applications-waf). + +### Status Codes + +O dashboard **Status Codes** soma as requisições aos domínios das suas aplicações pelo status code HTTP da resposta. Toda requisição a um domínio de uma aplicação recebe um status code, e cada gráfico conta uma classe de códigos. + +| Gráfico | O que mede | Unidade | Agregação | +| --- | --- | --- | --- | +| HTTP Status Codes 2XX | Respostas de sucesso: a requisição foi recebida, entendida, aceita e processada, e o cliente recebeu o seu conteúdo. | Requisições | Sum | +| HTTP Status Codes 3XX | Redirecionamentos: o conteúdo estava em outro local, e o cliente precisou de mais uma ação para alcançá-lo. | Requisições | Sum | +| HTTP Status Codes 4XX | Erros do cliente, como uma página indisponível ou uma requisição com sintaxe incorreta. O conteúdo não foi entregue. | Requisições | Sum | +| HTTP Status Codes 5XX | Erros do servidor: a requisição parecia válida, mas o servidor falhou ao entregar um conteúdo que ainda existe. | Requisições | Sum | +| Requests by Status and Upstream Status | Requisições de cada par de status e upstream status, para os 10 pares mais frequentes. | Requisições | Sum | + +**HTTP Status Codes 2XX** desenha uma série por status code de 200 a 299 encontrado no intervalo. **HTTP Status Codes 3XX** desenha uma por código de 300 a 399. **HTTP Status Codes 4XX** desenha quatro séries: **Requests Status Code 400**, **Requests Status Code 403**, **Requests Status Code 404** e **Requests Status Code 4xx**. **HTTP Status Codes 5XX** desenha **Requests Status Code 500**, **Requests Status Code 502**, **Requests Status Code 503** e **Requests Status Code 5xx**. As séries **Requests Status Code 4xx** e **Requests Status Code 5xx** contam apenas os códigos da sua classe que não têm série própria. Por exemplo, uma resposta 404 conta em **Requests Status Code 404** e nunca em **Requests Status Code 4xx**. + +Os códigos que esses gráficos mostram com mais frequência: + +| Status code | Significado | +| --- | --- | +| 200 | O conteúdo foi entregue corretamente. Esta é a resposta de sucesso padrão. | +| 204 | A requisição foi concluída, e não havia conteúdo para entregar. | +| 206 | Apenas parte do conteúdo foi entregue, porque o conteúdo foi dividido em partes. | +| 301 | A requisição, e toda requisição posterior, é redirecionada para outra URL. | +| 302 | A requisição é redirecionada para outra URL por um tempo limitado. | +| 304 | O conteúdo não foi modificado, então o navegador usa o arquivo que já tem. | +| 400 | O servidor não consegue processar a requisição, geralmente por causa de um erro de formato na requisição. | +| 403 | A requisição é válida, mas o usuário ou o endereço IP não tem autorização. | +| 404 | O arquivo solicitado não existe no servidor de origem. | +| 500 | O servidor encontrou um erro genérico e inesperado. | +| 502 | Um servidor que atua como gateway ou proxy recebeu uma resposta inválida da origem, geralmente porque a origem está offline. | +| 503 | O servidor não está disponível, geralmente por um curto período. | + +**Requests by Status and Upstream Status** é uma tabela com três colunas. **Status** é o código da resposta que o cliente recebeu, gerado pela sua aplicação ou pela infraestrutura da Azion. Ele pode ser um sucesso 2XX, um erro do cliente 4XX ou um erro do servidor 5XX. **Upstream Status** é o código que a origem ou um serviço externo retornou, o que expõe problemas de conectividade, timeouts e falhas por trás da sua aplicação. Uma requisição que a origem não respondeu, como uma respondida a partir do cache, tem upstream status `0` na API, e uma requisição para a qual nenhum servidor de origem pode ser selecionado tem `502`. **Total** é o número de requisições com esse par de códigos. Use a tabela para descobrir qual camada retorna um erro e para detectar tendências na forma como as requisições são tratadas. + +A tabela lista os 10 pares mais frequentes. Para chegar aos outros, adicione um filtro que restrinja o gráfico às requisições de que você precisa, ou consulte o dataset. Para detalhar as requisições por qualquer status code pela API GraphQL, consulte [Detalhe as requisições por status code](/pt-br/documentacao/guias/plataforma/observabilidade/detalhar-requisicoes-por-status-code/). + +**HTTP Status Codes 2XX** e **HTTP Status Codes 3XX** mostram uma tag de variação, sem seta, apenas quando um único status code tem dados. Os gráficos 4XX e 5XX desenham quatro séries cada e não mostram tag de variação, e a tabela também não mostra. + +Para consultar os mesmos números, use o dataset `httpMetrics`. Os gráficos 2XX e 3XX somam `requests` agrupado por `status`, limitado à sua faixa de códigos. Os gráficos 4XX e 5XX leem `requestsStatusCode400`, `requestsStatusCode403`, `requestsStatusCode404`, `requestsStatusCode4xx`, `requestsStatusCode500`, `requestsStatusCode502`, `requestsStatusCode503` e `requestsStatusCode5xx`. A tabela soma `requests` agrupado por `status` e `upstreamStatus`. Os campos de classe seguem a regra das séries: `requestsStatusCode2xx` não conta nenhuma resposta 200, 204 ou 206, porque `requestsStatusCode200`, `requestsStatusCode204` e `requestsStatusCode206` as contam. Da mesma forma, `requestsStatusCode3xx` deixa de fora as respostas 301, 302 e 304. Para cada campo, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#httpmetrics-applications-waf). + +### Bandwidth Saving + +O dashboard **Bandwidth Saving** tem um gráfico: os bytes que [Image Processor](/pt-br/documentacao/plataforma/applications/#image-processor) economizou ao entregar as imagens que processou para os seus domínios. O processamento cobre redimensionamento, recorte, mudança de qualidade e todas as outras operações de Image Processor. O gráfico conta a economia em cada imagem processada do domínio. + +| Gráfico | O que mede | Unidade | Agregação | +| --- | --- | --- | --- | +| Bandwidth Saving | Economia em cada transmissão de uma imagem que Image Processor processou e entregou. | Bytes | Sum | + +**Bandwidth Saving** desenha uma série, **Bandwidth Images Processed Saved Data**, e um aumento aparece como positivo. O Console escala os bytes de `B` até `TB` em passos de 1.000. + +Para consultar o mesmo número, leia `bandwidthImagesProcessedSavedData` do dataset `httpMetrics`. Para o campo, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#httpmetrics-applications-waf). + +### Request Breakdown + +O dashboard **Request Breakdown** tem um gráfico de tabela, **IP Address Information**, que mostra de onde vêm as requisições às suas aplicações, por rede e por local. Ele lê o dataset `httpBreakdownMetrics`. + +| Gráfico | O que mede | Unidade | Agregação | +| --- | --- | --- | --- | +| IP Address Information | Requisições de cada endereço IP, com a sua rede, o seu país e a sua região, para os 10 endereços mais frequentes. | Requisições | Sum | + +A tabela tem cinco colunas: + +- **Remote Address**: o endereço IP que fez as requisições. +- **ASN**: o Autonomous System Number, que identifica a operadora de rede ou a organização responsável pelo endereço IP. +- **Country**: o país de onde vêm as requisições. +- **Region**: a região de onde vêm as requisições. +- **Total**: o número de requisições desse endereço remoto. + +A tabela lista os 10 endereços remotos com mais requisições. Para chegar aos outros, adicione um filtro que restrinja o gráfico às requisições de que você precisa. Use a tabela para encontrar padrões de tráfego regionais e atividade incomum de um país ou de uma rede, e então agir. Por exemplo, para bloquear as requisições de um endereço ou de um país, consulte [Bloqueie requisições por IP, ASN ou país](/pt-br/documentacao/guias/seguranca-de-aplicacoes/bots-e-rede/blocklists-enderecos-ip-edge/). A tabela não mostra tag de variação. + +Para consultar os mesmos números, some `requests` do dataset `httpBreakdownMetrics` agrupado por `remoteAddress`, `geolocAsn`, `geolocCountryName` e `geolocRegionName`. Para cada campo, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#httpbreakdownmetrics). + +--- + +## Tiered Cache + +A aba **Tiered Cache** mostra métricas das aplicações que usam Tiered Cache, que precisa estar ativo na sua conta para a aba reportar dados. Tiered Cache adiciona uma camada de cache entre o data center e a sua origem. A aba tem um dashboard, **Caching Offload**, então o Console não mostra seletor de dashboard. + +| Gráfico | O que mede | Unidade | Agregação | +| --- | --- | --- | --- | +| Tiered Cache | Dados transferidos pela camada de Tiered Cache, divididos em dados de entrada, dados de saída e o total deles. | Bytes | Sum | +| Tiered Cache Offload | Parcela dos dados que a camada de Tiered Cache entregou ao data center sem buscá-los na origem. | Percentual | Average | + +O gráfico **Tiered Cache** desenha três séries, e cada uma conta este caminho: + +| Série | Caminho contado | +| --- | --- | +| Data Transferred In | Data center → camada de Tiered Cache → origem | +| Data Transferred Out | Origem → camada de Tiered Cache → data center | +| Data Transferred Total | Data Transferred In + Data Transferred Out | + +Cada diagrama abaixo desenha uma série do gráfico **Tiered Cache**, com a requisição na linha de cima e a resposta na linha de baixo. Uma seta contínua é um trecho que a série conta, e uma seta pontilhada é um trecho que ela não conta. + +```mermaid title="Aba Tiered Cache, Data Transferred In" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Cliente"] -. requisição .-> D["Data center"] + D -- requisição --> T["Tiered Cache"] + T -- requisição --> O["Origem"] + O -. resposta .-> T + T -. resposta .-> D + D -. resposta .-> C + linkStyle 1,2 stroke-width:3px +``` + +1. Contado: a requisição vai do data center à camada de Tiered Cache e da camada de Tiered Cache à origem. +2. Não contados: os trechos do cliente, que o gráfico **Edge Cache** conta, e a resposta, que **Data Transferred Out** conta. + +```mermaid title="Aba Tiered Cache, Data Transferred Out" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Cliente"] -. requisição .-> D["Data center"] + D -. requisição .-> T["Tiered Cache"] + T -. requisição .-> O["Origem"] + O -- resposta --> T + T -- resposta --> D + D -. resposta .-> C + linkStyle 3,4 stroke-width:3px +``` + +1. Contado: a resposta vai da origem à camada de Tiered Cache e da camada de Tiered Cache ao data center. +2. Não contados: os trechos do cliente, que o gráfico **Edge Cache** conta, e a requisição, que **Data Transferred In** conta. + +```mermaid title="Aba Tiered Cache, Data Transferred Total" +%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "15px"}, "flowchart": {"nodeSpacing": 50, "rankSpacing": 70, "padding": 14, "wrappingWidth": 140, "minNodeWidth": 90, "useMaxWidth": true}}}%% +flowchart LR + C["Cliente"] -. requisição .-> D["Data center"] + D -- requisição --> T["Tiered Cache"] + T -- requisição --> O["Origem"] + O -- resposta --> T + T -- resposta --> D + D -. resposta .-> C + linkStyle 1,2,3,4 stroke-width:3px +``` + +1. Contado: a requisição, do data center à camada de Tiered Cache e dela à origem. +2. Contado: a resposta, da origem à camada de Tiered Cache e de volta ao data center. +3. Não contados: os dois trechos entre o cliente e o data center, que o gráfico **Edge Cache** conta. + +O tráfego entre o cliente e o data center é contado pelo gráfico **Edge Cache** na aba **Applications**. + +**Tiered Cache Offload** mede a parcela dos dados que a camada de Tiered Cache retornou ao data center a partir do próprio cache: data center → camada de Tiered Cache → data center. Um percentual mais alto significa que a camada de Tiered Cache responde a mais requisições que o data center não consegue atender, e a sua origem atende menos demanda. Por exemplo, se 1 GB passa pela camada de Tiered Cache com um **Tiered Cache Offload** médio de 80%, a camada entregou 800 MB desse volume a partir do cache. + +Um aumento em **Tiered Cache Offload** aparece como positivo. O gráfico **Tiered Cache** desenha três séries e não mostra tag de variação. Os valores em bytes escalam de `B` até `TB`, e os percentuais mostram duas casas decimais. + +Para consultar os mesmos números, use o dataset `tieredCacheMetrics`. O gráfico **Tiered Cache** lê `dataTransferredIn`, `dataTransferredOut` e `dataTransferredTotal`, e **Tiered Cache Offload** lê `offload`. Para cada campo, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#tieredcachemetrics-tiered-cache). + +--- + +## Functions + +A aba **Functions** mostra métricas das invocações das funções de [Functions](/pt-br/documentacao/plataforma/functions/) configuradas na sua conta, e Functions precisa estar ativo para a aba reportar dados. A aba tem um dashboard, **Invocations**. + +| Gráfico | O que mede | Unidade | Agregação | +| --- | --- | --- | --- | +| Total Invocations | Vezes que as suas funções executaram, divididas pelo local onde cada função está anexada. | Invocações | Sum | + +Cada execução de uma função configurada conta como uma invocação. **Total Invocations** desenha duas séries: **Edge Application Invocations** conta as funções que executaram em uma aplicação, e **Edge Firewall Invocations** conta as que executaram em um firewall. O gráfico desenha duas séries, então não mostra tag de variação. + +Para consultar os mesmos números, leia `edgeApplicationInvocations` e `edgeFirewallInvocations` do dataset `edgeFunctionsMetrics`. Para cada campo, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#edgefunctionsmetrics-functions). + +--- + +## Image Processor + +A aba **Image Processor** mostra métricas das requisições das imagens que Image Processor processa. Image Processor precisa estar ativo na sua conta para a aba reportar dados. A aba tem um dashboard, **Requests**. + +| Gráfico | O que mede | Unidade | Agregação | +| --- | --- | --- | --- | +| Total Requests | Requisições de imagens processadas que retornaram status 304 ou um status de 199 a 299. | Requisições | Sum | +| Total Requests per Second | Requisições por segundo de imagens processadas que retornaram status 304 ou um status de 200 a 299. | Requisições por segundo | Sum | + +Os dois gráficos contam as requisições de todas as imagens processadas no domínio onde Image Processor está configurado, e ambos desenham uma série, **Requests**. **Total Requests** mantém as respostas com status 304 ou com um status de 199 a 299. **Total Requests per Second** mantém o status 304 ou um status de 200 a 299, e retorna a taxa dessas requisições por segundo. Um aumento aparece como positivo nos dois gráficos. + +Para consultar os mesmos números, some `requests` do dataset `imagesProcessedMetrics`, filtrado por esses status codes. Para cada campo, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#imagesprocessedmetrics-image-processor). + +--- + +## Recursos relacionados + + + + O intervalo de tempo, os filtros e o menu do gráfico que se aplicam a todos os gráficos destes dashboards. + Como uma métrica chega a um gráfico e qual tamanho de bucket cada intervalo de tempo retorna. + Todos os campos dos datasets citados nesta página, com o tipo e a descrição de cada um. + Consulte os valores de offload, de dados economizados e de dados perdidos de um domínio pela API GraphQL. + + diff --git a/src/content/docs/pt-br/pages/observe/real-time-metrics/dashboards-observe.mdx b/src/content/docs/pt-br/pages/observe/real-time-metrics/dashboards-observe.mdx new file mode 100644 index 0000000000..fe98dd2389 --- /dev/null +++ b/src/content/docs/pt-br/pages/observe/real-time-metrics/dashboards-observe.mdx @@ -0,0 +1,49 @@ +--- +title: Dashboards de Observe +description: Consulte o que medem os gráficos Total Data Streamed e Total Requests do dashboard de Data Stream e os campos que os retornam. +meta_tags: 'real-time metrics, dashboards, data stream, observe, charts' +namespace: documentation_products_real_time_metrics_observe_dashboards +permalink: /documentacao/plataforma/real-time-metrics/dashboards-observe/ +--- + +import FrameBox from '@aziontech/webkit/frame-box' +import ItemList from '@aziontech/webkit/item-list' +import DocItem from '@aziontech/webkit/doc-item' + +A categoria **Observe** de [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) tem uma aba de produto, **Data Stream**, com um dashboard, **Data Streamed**. Selecione **Observe** no dropdown de categoria para abri-la. O Console abre a primeira aba de produto e o primeiro dashboard de uma categoria e, aqui, não mostra seletor de dashboard, porque a aba tem um único dashboard. + +A tabela abaixo tem uma linha por gráfico, na ordem em que o Console os desenha. A coluna **Agregação** traz a tag mostrada sob a descrição de cada gráfico. Os dois gráficos trazem **Sum**, então uma entrada da legenda mostra o total no intervalo selecionado. Para o intervalo de tempo e os filtros que se aplicam a todos os gráficos, consulte [Filtros e intervalo de tempo](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/). + +--- + +## Data Stream + +A aba **Data Stream** mostra métricas sobre os dados e as requisições dos streams configurados na sua conta. [Data Stream](/pt-br/documentacao/plataforma/data-stream/) envia os seus logs aos conectores que você configura, e Real-Time Metrics mostra o que ele enviou. Para a aba mostrar dados, Data Stream precisa estar ativo na sua conta e pelo menos um stream precisa estar configurado. + +| Gráfico | O que mede | Unidade | Agregação | +| --- | --- | --- | --- | +| Total Data Streamed | Dados que os streams da sua conta enviaram aos conectores deles. | Bytes | Sum | +| Total Requests | Linhas que os streams da sua conta enviaram aos conectores deles. | Linhas | Sum | + +Data Stream envia os seus logs em pacotes. Um stream envia um pacote quando reúne 2.000 registros, a cada 60 segundos ou quando os dados atingem o tamanho máximo que você define. Alguns conectores usam outros valores; para os valores de cada conector, consulte [Data Stream](/pt-br/documentacao/plataforma/data-stream/). + +Os dois gráficos usam os pacotes que um stream completou e enviou ao conector. **Total Data Streamed** desenha uma série, **Data Streamed**, com os bytes de cada pacote enviado no intervalo selecionado. **Total Requests** desenha uma série, **Streamed Lines**. Ele soma as linhas dentro dos pacotes enviados no intervalo selecionado, não os pacotes em si. O campo `streamedLines` traz no máximo 2.000 em cada linha do resultado, o número de registros que completa um pacote. + +O Console escala bytes em passos de 1.000, como `B`, `kB`, `MB`, `GB` e `TB`. As contagens de linhas aparecem em forma compacta, como `1.2K`. + +Cada gráfico desenha uma série, então cada um mostra uma tag de variação. A tag compara o intervalo selecionado com a janela de mesmo tamanho imediatamente anterior, e um aumento aparece como bom nos dois gráficos. + +Para consultar os mesmos números, use o dataset `dataStreamedMetrics`. **Total Data Streamed** soma `dataStreamed`, e **Total Requests** soma `streamedLines`. Para dividir qualquer um dos totais por tipo de conector, agrupe por `endpointType`. Para cada campo, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#datastreamedmetrics-data-stream). + +--- + +## Recursos relacionados + + + + O intervalo de tempo, os filtros e o menu do gráfico que se aplicam aos dois gráficos deste dashboard. + Como uma métrica chega a um gráfico e qual tamanho de bucket cada intervalo de tempo retorna. + Cada campo do dataset `dataStreamedMetrics`, com a descrição dele. + Configure um stream, o conector dele e os valores de pacote que esse conector usa. + + diff --git a/src/content/docs/pt-br/pages/observe/real-time-metrics/dashboards-secure.mdx b/src/content/docs/pt-br/pages/observe/real-time-metrics/dashboards-secure.mdx new file mode 100644 index 0000000000..58763126ff --- /dev/null +++ b/src/content/docs/pt-br/pages/observe/real-time-metrics/dashboards-secure.mdx @@ -0,0 +1,195 @@ +--- +title: Dashboards de Secure +description: Consulte o que mede cada gráfico dos dashboards WAF, Edge DNS, Bot Manager e Threats Breakdown, e o campo que o retorna. +meta_tags: 'real-time metrics, dashboards, waf, edge dns, bot manager, threats, charts' +namespace: documentation_products_real_time_metrics_secure_dashboards +permalink: /documentacao/plataforma/real-time-metrics/dashboards-secure/ +--- + +import FrameBox from '@aziontech/webkit/frame-box' +import ItemList from '@aziontech/webkit/item-list' +import DocItem from '@aziontech/webkit/doc-item' + +A categoria **Secure** do [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) reúne os dashboards de quatro abas de produto: **WAF**, **Edge DNS**, **Bot Manager** e **Threats Breakdown**. Selecione **Secure** no dropdown de categoria para abri-los, e Real-Time Metrics mostra a primeira aba, **WAF**. **Bot Manager** é a única aba com dois dashboards, por isso é a única que mostra o seletor de dashboard. + +Cada dashboard abaixo tem uma tabela com uma linha por gráfico, na ordem em que os gráficos aparecem no Console. Um card de número grande, que mostra um total em vez de um gráfico, passa para uma primeira linha acima dos outros gráficos. A coluna **Agregação** traz a tag exibida sob a descrição de cada gráfico, e todo gráfico de Secure mostra **Sum**: uma entrada da legenda ou um card mostra o total no intervalo selecionado. O texto sob cada tabela nomeia as séries que um gráfico desenha, o que cada uma conta e sua tag de variação. Essa tag compara o intervalo selecionado com a janela de mesma duração imediatamente anterior a ele. Ela aparece em um card de número grande e em um gráfico de tempo que desenha uma única série, nunca em um gráfico de pizza, em um gráfico de barras ou em um mapa. Cada dashboard termina com o dataset e os campos que retornam os mesmos números pela API GraphQL. Para o intervalo de tempo e os filtros que se aplicam a todo gráfico, consulte [Filtros e intervalo de tempo](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/). + +--- + +## WAF + +A aba **WAF** mostra como [WAF](/pt-br/documentacao/plataforma/firewall/#waf) tratou as requisições aos domínios das suas aplicações. WAF, o Web Application Firewall, analisa cada requisição em busca de ataques como SQL injection ou cross-site scripting e bloqueia ou registra as requisições que identifica como ameaças. A aba tem um dashboard, **Threats**, por isso não há seletor de dashboard no Console. Todo gráfico dessa aba lê o dataset `httpMetrics`. + +| Gráfico | O que mede | Unidade | Agregação | +| --- | --- | --- | --- | +| Threats vs Requests | Requisições que WAF analisou, divididas em ameaças que bloqueou, ameaças que registrou sem bloquear e requisições que permitiu. | Requisições | Sum | +| Cross-Site scripting (XSS) Threats | Requisições que WAF identificou como ataques de cross-site scripting contra seus domínios. | Requisições | Sum | +| Remote File Inclusion (RFI) Threats | Requisições que WAF identificou como ataques de remote file inclusion contra seus domínios. | Requisições | Sum | +| SQL Injection Threats | Requisições que WAF identificou como ataques de SQL injection contra seus domínios. | Requisições | Sum | +| Other Threats | Requisições que WAF identificou como ataques de qualquer tipo diferente de XSS, RFI ou SQL injection. | Requisições | Sum | +| Top WAF Threat Requests by Country | Participação de cada país nas ameaças que WAF bloqueou, em um gráfico de pizza, para os 20 países com mais ameaças. | Porcentagem | Sum | +| Top WAF Threat Requests by Country | Ameaças que WAF bloqueou vindas de cada país, em barras, para os 20 países com mais ameaças. | Requisições | Sum | +| WAF Threat Requests by Family Attack | Ameaças que WAF bloqueou em cada família de ataque, para as 10 famílias com mais ameaças. | Requisições | Sum | +| WAF Threat Requests by Host | Ameaças que WAF bloqueou em cada host ao longo do tempo, uma linha por host. | Requisições | Sum | + +**Threats vs Requests** desenha três séries, que comparam as ameaças que WAF bloqueou com o tráfego que deixou passar: + +- **Waf Requests Blocked**: requisições que WAF identificou como ameaças e bloqueou, porque a regra de firewall executa WAF no modo *Blocking*. +- **Waf Requests Threat**: requisições que WAF identificou como ameaças e não bloqueou, porque a regra de firewall executa WAF no modo *Logging*. Essas requisições chegam à sua aplicação. +- **Waf Requests Allowed**: requisições que WAF não identificou como ameaças. + +Uma regra de firewall define o modo quando executa um rule set. Para os dois modos e para como WAF pontua uma ameaça, consulte [Rule sets](/pt-br/documentacao/plataforma/firewall/waf/rule-sets/). + +**Cross-Site scripting (XSS) Threats**, **Remote File Inclusion (RFI) Threats** e **SQL Injection Threats** desenham, cada um, uma série com toda requisição do intervalo selecionado que traz esse ataque. Um ataque de cross-site scripting injeta scripts maliciosos que rodam no navegador dos visitantes das suas páginas. Um ataque de remote file inclusion faz seu domínio carregar um arquivo ou script remoto. Um ataque de SQL injection insere código em uma consulta ao banco de dados para ler ou atacar dados que ela não deve alcançar. **Other Threats** desenha as ameaças de todos os outros tipos. As quatro séries são **Waf Requests Xss Attacks**, **Waf Requests Rfi Attacks**, **Waf Requests Sql Attacks** e **Waf Requests Others Attacks**. Para o log de cada requisição que WAF sinalizou, consulte [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/). + +Os dois gráficos **Top WAF Threat Requests by Country** detalham a mesma contagem pelo país de origem de cada ameaça. O gráfico de pizza mostra a participação de cada país em porcentagem, e o gráfico de barras mostra o número de ameaças por trás de cada participação, então leia os dois juntos. Os dois listam os 20 países com mais ameaças. Para bloquear as requisições de um país, crie uma network list por geolocalização; consulte [Bloqueie requisições por IP, ASN ou país](/pt-br/documentacao/guias/seguranca-de-aplicacoes/bots-e-rede/blocklists-enderecos-ip-edge/). + +**WAF Threat Requests by Family Attack** desenha uma barra por família de ataque, para as 10 famílias com mais ameaças. O valor de `wafAttackFamily` traz um prefixo `$`, como em `$SQL`, que é removido do rótulo de cada barra no Console. Algumas famílias combinam mais de um tipo de ataque: + +| Família | Ataque | +| --- | --- | +| SQL | SQL injection, que manipula consultas ao banco de dados. | +| SQL, XSS | SQL injection combinado com cross-site scripting. | +| SQL, TRAVERSAL | SQL injection combinado com path traversal, para alcançar arquivos ou diretórios restritos. | +| OTHERS, SQL | Padrões menos comuns relacionados a SQL, agrupados. | +| RFI | Remote file inclusion, que carrega scripts maliciosos externos. | +| TRAVERSAL | Directory traversal, que alcança arquivos ou diretórios sem autorização. | +| SQL, RFI | SQL injection combinado com remote file inclusion. | +| SQL, XSS, RFI | SQL injection, cross-site scripting e remote file inclusion em um único ataque. | +| OTHERS | Padrões que não se encaixam em nenhuma das famílias predefinidas. | + +Use o gráfico para encontrar as famílias que causam a maior parte das ameaças e, em seguida, configure a proteção contra elas. Para mais informações, consulte [Crie e aplique um WAF rule set](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/criar-waf-rule-set/). + +**WAF Threat Requests by Host** desenha uma linha por host que recebeu ameaças, até 16 linhas. Use-o para encontrar os hosts com mais ameaças e agir sobre eles: bloqueie os endereços de origem com uma [network list](/pt-br/documentacao/plataforma/firewall/network-shield/network-lists/), ajuste o [rule set](/pt-br/documentacao/plataforma/firewall/waf/rule-sets/) ou limite a taxa de requisições com o behavior [Set Rate Limit](/pt-br/documentacao/plataforma/firewall/rules-engine/#set-rate-limit). + +Os dois gráficos por país, o gráfico por família e o gráfico por host filtram por `wafBlock` e `wafLearning`, então contam apenas as ameaças que WAF bloqueou. As ameaças que WAF registrou sem bloquear aparecem em **Threats vs Requests** e ficam fora desses quatro gráficos. + +Um aumento aparece como ruim em **Cross-Site scripting (XSS) Threats**, **Remote File Inclusion (RFI) Threats**, **SQL Injection Threats** e **Other Threats**. **WAF Threat Requests by Host** mostra a tag apenas quando um único host tem dados, e um aumento ali também aparece como ruim. **Threats vs Requests** desenha três séries e não mostra tag de variação, assim como os gráficos por país e por família. + +Para consultar os mesmos números, use o dataset `httpMetrics`. **Threats vs Requests** lê `wafRequestsBlocked`, `wafRequestsThreat` e `wafRequestsAllowed`. Os quatro gráficos de ataque, na ordem da tabela, leem `wafRequestsXssAttacks`, `wafRequestsRfiAttacks`, `wafRequestsSqlAttacks` e `wafRequestsOthersAttacks`. Os gráficos por país, por família e por host somam `requests` agrupado por `geolocCountryName`, `wafAttackFamily` e `host`, com o filtro `wafBlock` igual a `1` e `wafLearning` igual a `0`. Para listar pela API GraphQL os países e os endereços que enviam mais ameaças, consulte [Encontre as principais origens de ameaças do WAF](/pt-br/documentacao/guias/plataforma/observabilidade/encontrar-principais-origens-de-ameacas-waf/). Para cada campo, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#httpmetrics-applications-waf). + +--- + +## Edge DNS + +A aba **Edge DNS** conta as consultas que [Edge DNS](/pt-br/documentacao/plataforma/edge-dns/) recebe para os domínios hospedados e gerenciados na Azion na sua conta. Edge DNS precisa estar ativo na sua conta para que a aba mostre dados. A aba tem um dashboard, **Standard Queries**, por isso não há seletor de dashboard no Console. + +| Gráfico | O que mede | Unidade | Agregação | +| --- | --- | --- | --- | +| Total Queries | Consultas que suas zonas no Edge DNS receberam. | Consultas | Sum | + +**Total Queries** desenha uma série, **Requests**, com todas as consultas feitas às suas zonas no intervalo selecionado. Um aumento aparece como bom. Para contar as consultas de uma zona, adicione um filtro em **Zone Id**, que lista suas zonas pelo nome. Para contar um tipo de registro, como `A` ou `AAAA`, adicione um filtro em **Qtype**. Para os filtros, consulte [Filtros e intervalo de tempo](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/). + +Para consultar o mesmo número, some `requests` do dataset `edgeDnsQueriesMetrics`. O dataset também traz `zoneId` e `qtype`, para filtrar ou agrupar a contagem por zona ou por tipo de registro. Para cada campo, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#edgednsqueriesmetrics-edge-dns). + +--- + +## Bot Manager + +A aba **Bot Manager** mostra como [Bot Manager](/pt-br/documentacao/plataforma/firewall/#bot-manager) classificou as requisições que avaliou e qual ação executou sobre os bots. Bot Manager atribui um score a cada requisição. Uma requisição com score igual ou maior que o threshold definido no Bot Manager é um bad bot, e Bot Manager executa a ação definida para ele; qualquer outra requisição é processada normalmente. A aba só mostra dados quando sua conta tem assinatura do Bot Manager; para a assinatura, entre em contato com o [Suporte Técnico](/pt-br/documentacao/suporte/). A aba tem dois dashboards, nesta ordem no seletor de dashboard: **Overview**, que lê o dataset `botManagerMetrics`, e **Breakdown**, que lê `botManagerBreakdownMetrics`. + +### Overview + +O dashboard **Overview** conta as requisições que Bot Manager avaliou por classe, por ação, por resultado de CAPTCHA, por categoria de bot e por país. Seus quatro cards de número grande aparecem em uma primeira linha acima dos gráficos. + +| Gráfico | O que mede | Unidade | Agregação | +| --- | --- | --- | --- | +| Bad Bot Hits | Requisições classificadas como bad bots. | Requisições | Sum | +| Good Bot Hits | Requisições classificadas como good bots. | Requisições | Sum | +| Bot Hits | Requisições classificadas como bots, sejam bad bots ou good bots. | Requisições | Sum | +| Transactions | Requisições que Bot Manager avaliou, em todas as classes. | Requisições | Sum | +| Bot Traffic | Requisições avaliadas ao longo do tempo, uma linha por classe. | Requisições | Sum | +| Top Bot Traffic | Participação das requisições avaliadas em cada classe, em um gráfico de pizza. | Porcentagem | Sum | +| Top Bot Action | Requisições de bots para cada ação que Bot Manager executou, em um gráfico de pizza com totais e porcentagens. | Requisições | Sum | +| Bot CAPTCHA | Resultados do desafio CAPTCHA para requisições classificadas como bots, ao longo do tempo, divididos em resolvidos e não resolvidos. | Requisições | Sum | +| Top Bot CAPTCHA | Participação dos desafios CAPTCHA resolvidos e não resolvidos, em um gráfico de pizza. | Porcentagem | Sum | +| Top Bot Classifications | Requisições de bots para cada categoria de bot, pela tática e pelo propósito do bot, para as 10 categorias com mais requisições. | Requisições | Sum | +| Bot Activity Map | Requisições de bots pelo país de origem, em um mapa-múndi. | Requisições | Sum | + +**Bad Bot Hits**, **Good Bot Hits**, **Bot Hits** e **Transactions** mostram, cada um, um número, o total no intervalo selecionado, seguido da palavra `requests`. **Bot Hits** é a soma de **Bad Bot Hits** e **Good Bot Hits**. **Transactions** conta toda requisição que Bot Manager avaliou, incluindo as requisições legítimas e as que estão em avaliação. + +**Bot Traffic** e **Top Bot Traffic** dividem as requisições avaliadas em quatro classes: + +- **Legitimate**: não identificada como ataque, com dados suficientes para confirmar que não é um. São usuários humanos legítimos. +- **Bad Bot**: atingiu o threshold de score ou foi identificada como ataque. +- **Good Bot**: não identificada como ataque e correspondente a um good bot de uso comum, como o crawler de um mecanismo de busca. Good bots são tráfego permitido, e suas requisições seguem normalmente. +- **Under Evaluation**: não identificada como bot, sem dados suficientes para confirmar que não é um ataque. Essa classe marca acessos suspeitos. + +Use **Bot Traffic** para encontrar períodos de atividade suspeita, padrões e anomalias; passar o cursor sobre uma linha mostra a data, o horário e as requisições de cada classe. Use **Top Bot Traffic** para avaliar a participação do tráfego de bots e identificar anomalias e tendências; passar o cursor sobre uma fatia mostra o total de requisições dessa classe. + +**Top Bot Action** mostra a ação que Bot Manager executou sobre as requisições que identificou como bots: + +| Ação | O que Bot Manager fez | +| --- | --- | +| Allow | Deixou a requisição continuar. Uma requisição com score abaixo do threshold é processada, e `allow` é a ação padrão. | +| Custom HTML | Entregou conteúdo HTML personalizado quando a requisição atingiu o threshold. | +| Deny | Respondeu com um status code `403` padrão. | +| Drop | Encerrou a requisição sem resposta. | +| Hold Connection | Manteve a conexão aberta por 1 minuto e depois a descartou. | +| Random Delay | Aguardou um tempo aleatório entre 1 e 10 segundos e depois deixou a requisição continuar. | +| Redirect | Redirecionou a requisição para outra URL quando ela atingiu o threshold, inclusive para um desafio CAPTCHA. | + +No Console, a lista de valores do filtro mostra as ações com esses rótulos. A API GraphQL as retorna no campo `action` como `allow`, `custom_html`, `deny`, `drop`, `hold_connection`, `random_delay` e `redirect`. + +**Bot CAPTCHA** e **Top Bot CAPTCHA** mostram o resultado do desafio CAPTCHA retornado às requisições classificadas como bots. **Solved** conta os bots que concluíram o desafio com a resposta correta e seguiram. **Not Solved** conta os bots que falharam no desafio, responderam incorretamente ou não tentaram resolvê-lo, e a ação definida para bots bloqueados ou suspeitos é executada sobre eles. **Bot CAPTCHA** desenha os dois resultados ao longo do tempo, e passar o cursor sobre uma linha mostra a data, o horário e o número de bots que passaram ou falharam. **Top Bot CAPTCHA** mostra a porcentagem de cada resultado. Use os dois gráficos para ajustar a dificuldade ou a frequência dos desafios, para que eles parem os bots sem atrasar seus visitantes. + +**Top Bot Classifications** desenha uma barra por categoria de bot, que nomeia a tática e o propósito que Bot Manager identificou, como Crawling, Brute Force, Scraping, Bad Bot Signatures, Malicious Browser Behavior, Scripted Bots, Enterprise Bots, Reputation Intelligence, Monitoring Bots e Malicious Intent Detected. **Top Bot Classifications** e **Top Bot Action** deixam de fora as requisições sem categoria de bot e as da categoria `Non-Bot Like`. + +**Bot Activity Map** colore cada país pelo número de requisições de bad bots e good bots vindas dele: + +| Cor | Requisições do país | +| --- | --- | +| Vermelho | Mais de 1.000.000 | +| Vermelho-claro | 100.000 a 1.000.000 | +| Laranja | 10.000 a 99.999 | +| Laranja-claro | 1.000 a 9.999 | +| Amarelo | 1 a 999 | + +Passar o cursor sobre um país mostra seu total depois de `Requests:`. Use o mapa para encontrar padrões regionais de ataques de bots e, em seguida, aplicar geobloqueio ou uma mitigação para uma região. Para mais informações, consulte [Bloqueie requisições por IP, ASN ou país](/pt-br/documentacao/guias/seguranca-de-aplicacoes/bots-e-rede/blocklists-enderecos-ip-edge/). + +Um aumento aparece como ruim em **Bad Bot Hits**, **Bot Hits** e **Bot CAPTCHA**, e como bom em **Bot Traffic**. **Good Bot Hits** e **Transactions** mostram a variação em azul nas duas direções, pois nenhuma direção é boa ou ruim. **Bot Traffic** e **Bot CAPTCHA** mostram a tag apenas quando uma única classe ou um único resultado tem dados. Os gráficos de pizza, o gráfico de barras e o mapa não mostram tag de variação. + +Para consultar os mesmos números, some `requests` do dataset `botManagerMetrics`. **Bad Bot Hits** filtra por `classified` igual a `bad bot`, **Good Bot Hits** por `good bot`, e **Bot Hits** e **Bot Activity Map** pelos dois valores. **Bot Traffic** e **Top Bot Traffic** agrupam por `classified`, **Top Bot Action** por `action`, **Bot CAPTCHA** e **Top Bot CAPTCHA** por `challengeSolved`, **Top Bot Classifications** por `botCategory` e **Bot Activity Map** por `geolocCountryName`. Para exemplos de queries, consulte [Consulte dados do Bot Manager com GraphQL](/pt-br/documentacao/guias/plataforma/observabilidade/consultar-dados-bot-manager-com-graphql/). Para cada campo, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#botmanagermetrics). + +### Breakdown + +O dashboard **Breakdown** da aba **Bot Manager** mostra quais URLs os bots requisitam e de quais endereços IP vêm os bad bots. Seu card **Impacted URLs** aparece em uma primeira linha acima dos dois gráficos de barras. + +| Gráfico | O que mede | Unidade | Agregação | +| --- | --- | --- | --- | +| Impacted URLs | URLs distintas que bots requisitaram. | URLs | Sum | +| Top Bad Bot IPs | Requisições de bad bots para cada endereço IP, para os 10 endereços com mais requisições. | Requisições | Sum | +| Top Impacted URLs | Requisições de bots para cada URL, para as 10 URLs com mais requisições. | Requisições | Sum | + +**Impacted URLs** mostra um número seguido da palavra `URLs`, e um aumento aparece como ruim. **Top Bad Bot IPs** desenha uma barra por endereço IP. Use-o para encontrar os endereços que bad bots mais usam, acompanhar tendências na atividade deles e responder a um ataque bloqueando ou limitando o tráfego desses endereços. Para bloqueá-los, adicione-os a uma [network list](/pt-br/documentacao/plataforma/firewall/network-shield/network-lists/); para limitá-los, use o behavior [Set Rate Limit](/pt-br/documentacao/plataforma/firewall/rules-engine/#set-rate-limit). **Top Impacted URLs** desenha uma barra por URL, rotulada com a URL como foi requisitada: o host e o path, sem argumentos. Use-o para encontrar as URLs que os bots mais visam. Os dois gráficos de barras não mostram tag de variação. + +Bot Manager mantém os dados dos dois datasets por períodos diferentes. Para cada período, consulte [Logs](/pt-br/documentacao/plataforma/firewall/bot-manager/logs/#retencao). + +Para consultar os mesmos números, use o dataset `botManagerBreakdownMetrics`. **Impacted URLs** lê `uniqRequestUrl`. **Top Bad Bot IPs** soma `badBotRequests` agrupado por `remoteAddr`, e **Top Impacted URLs** soma `botRequests` agrupado por `requestUrl`. Para cada campo, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#botmanagerbreakdownmetrics). + +--- + +## Threats Breakdown + +A aba **Threats Breakdown** mostra quais endereços IP enviam as ameaças que [WAF](/pt-br/documentacao/plataforma/firewall/#waf) identifica nas requisições às suas aplicações. Ela tem um dashboard, também chamado **Threats Breakdown**, que lê o dataset `httpBreakdownMetrics`. + +| Gráfico | O que mede | Unidade | Agregação | +| --- | --- | --- | --- | +| Top WAF Threat Requests by IP | Requisições que WAF identificou como ameaças para cada endereço IP, para os 10 endereços com mais ameaças. | Requisições | Sum | + +**Top WAF Threat Requests by IP** desenha uma barra por endereço IP remoto, com o total de requisições de ameaça vindas dele. Use-o para concentrar sua proteção nas maiores origens de ameaças. Para bloquear um endereço, crie uma network list por IP; consulte [Bloqueie requisições por IP, ASN ou país](/pt-br/documentacao/guias/seguranca-de-aplicacoes/bots-e-rede/blocklists-enderecos-ip-edge/). Para o log de cada requisição de ameaça, consulte [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/). O gráfico não mostra tag de variação. + +Para consultar os mesmos números, some `wafThreatRequests` do dataset `httpBreakdownMetrics` agrupado por `remoteAddress`. Adicione o filtro `wafThreatRequestsGt: 0` para que o resultado liste apenas os endereços que enviaram ameaças; sem ele, a query também retorna endereços com total `0`. Para a query completa, consulte [Encontre as principais origens de ameaças do WAF](/pt-br/documentacao/guias/plataforma/observabilidade/encontrar-principais-origens-de-ameacas-waf/). Para cada campo, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#httpbreakdownmetrics). + +--- + +## Recursos relacionados + + + + O intervalo de tempo, os filtros e o menu do gráfico que se aplicam a todo gráfico destes dashboards. + Como uma métrica chega a um gráfico e qual tamanho de bucket cada intervalo de tempo retorna. + Todos os campos dos datasets de WAF, Edge DNS e Bot Manager citados nesta página. + Consulte pela API GraphQL os países e os endereços IP que enviam mais ameaças do WAF. + + diff --git a/src/content/docs/pt-br/pages/observe/real-time-metrics/filtros-e-intervalo-de-tempo.mdx b/src/content/docs/pt-br/pages/observe/real-time-metrics/filtros-e-intervalo-de-tempo.mdx new file mode 100644 index 0000000000..1a397e3d8f --- /dev/null +++ b/src/content/docs/pt-br/pages/observe/real-time-metrics/filtros-e-intervalo-de-tempo.mdx @@ -0,0 +1,334 @@ +--- +title: Filtros e intervalo de tempo +description: >- + Consulte os controles acima dos gráficos de Real-Time Metrics: intervalo de + tempo, atualização automática, filtros, campo de query e menu do gráfico. +meta_tags: 'real-time metrics, filters, time range, auto-refresh, timezone, charts, export' +namespace: documentation_products_real_time_metrics_filters_and_time_range +permalink: /documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/ +--- + +import FrameBox from '@aziontech/webkit/frame-box' +import ItemList from '@aziontech/webkit/item-list' +import DocItem from '@aziontech/webkit/doc-item' + +[Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) mostra cada dashboard no Azion Console sob um conjunto de controles: um dropdown de categoria, abas de produto, uma linha de filtros e um seletor de dashboard. O intervalo de tempo e os filtros que você define na linha de filtros se aplicam a todos os gráficos do dashboard que você está vendo. + +--- + +## Layout da tela + +A tela de Real-Time Metrics agrupa os dashboards por categoria e produto. Em **Build**, as abas de produto são [Applications](/pt-br/documentacao/plataforma/applications/), [Tiered Cache](/pt-br/documentacao/plataforma/applications/cache/tiered-cache/), [Functions](/pt-br/documentacao/plataforma/functions/) e [Image Processor](/pt-br/documentacao/plataforma/applications/#image-processor). Em **Secure**, são [WAF](/pt-br/documentacao/plataforma/firewall/#waf), [Edge DNS](/pt-br/documentacao/plataforma/edge-dns/), [Bot Manager](/pt-br/documentacao/plataforma/firewall/#bot-manager) e **Threats Breakdown**. Em **Observe**, a única aba é [Data Stream](/pt-br/documentacao/plataforma/data-stream/). + +Os controles aparecem nesta ordem, a partir do topo da tela: + +| Controle | Forma | Comportamento | +| --- | --- | --- | +| Categoria | Um dropdown com **Build**, **Secure** e **Observe** | Ao trocar a categoria, a tela abre o primeiro produto dela e o primeiro dashboard desse produto. | +| Abas de produto | Uma aba por produto da categoria | Cada aba abre os dashboards de um produto. | +| Linha de filtros | O botão de filtro, o campo de query, o seletor de intervalo de tempo e o botão **Refresh**, dentro de um card | Define os dados que cada gráfico do dashboard busca. | +| Filtros aplicados | Um chip por filtro, abaixo da linha de filtros | Cada chip mostra um filtro e o abre para edição. | +| Seletor de dashboard | Um botão segmentado, como **Data Transferred** e **Requests** | Aparece apenas quando o produto tem mais de um dashboard: **Applications** e **Bot Manager**. | +| Gráficos | Cards de big number na primeira linha, depois os outros gráficos em um grid de 12 colunas | Os gráficos que não cabem na tela continuam mais abaixo na página. | + +Sem produto nem dashboard na URL, a tela abre em **Build** › **Applications** › **Data Transferred**. Enquanto os gráficos carregam, quatro cards de placeholder ocupam o lugar deles. Cada dashboard e os gráficos dele estão descritos em [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/), [Dashboards de Secure](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-secure/) e [Dashboards de Observe](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-observe/). + +--- + +## Intervalo de tempo + +O intervalo de tempo define o período que cada gráfico do dashboard busca. Ele é um único seletor de intervalo de datas na linha de filtros, e a tela abre em **Last 5 minutes**. O seletor tem quatro abas: + +| Aba | O que define | +| --- | --- | +| **Quick** | Uma direção, **Last** ou **Next**; um número, mínimo 1, padrão 15; e uma unidade, padrão **Minutes**; depois **Apply**. Os presets **Commonly used** vêm em seguida. | +| **Absolute**, **Relative** | Um formulário compartilhado: os campos **Start date** e **End date**, um calendário no formato `dd/mm/yy`, horários a cada 30 minutos de `00:00` a `23:30`, uma opção com o rótulo **From now** e **Apply**. | +| **Now** | O botão **Set Now**. A aba informa: `Selecting 'Set Now' sets the time dynamically to the exact moment of each refresh.` | + +O dropdown de unidade da aba **Quick** oferece **Minutes**, **Hours**, **Days**, **Weeks**, **Months** e **Years**. + +### Presets de uso comum + +A aba **Quick** lista 12 presets em duas colunas, nesta ordem: + +| Preset | Período coberto | +| --- | --- | +| **Today** | O dia atual, de 00:00 a 23:59:59 | +| **This week** | A semana atual, de domingo 00:00 a sábado 23:59:59 | +| **Last 1 minute** | 1 minuto | +| **Last 5 minutes** | 5 minutos | +| **Last 15 minutes** | 15 minutos | +| **Last 30 minutes** | 30 minutos | +| **Last 1 hour** | 1 hora | +| **Last 24 hours** | 24 horas | +| **Last 7 days** | 7 dias | +| **Last 30 days** | 30 dias | +| **Last 90 days** | 90 dias | +| **Last 1 year** | 365 dias | + +### Limites e exibição do intervalo + +O calendário aceita datas de 730 dias atrás até o momento atual, e uma data fora dessa janela é ajustada ao limite mais próximo. O início e o fim escolhidos aparecem no formato `Mon D, YYYY @ HH:MM:SS`. + +Depois que você altera o intervalo, o botão **Refresh** passa a mostrar **Update**. Selecione **Update** para carregar todos os gráficos com o novo intervalo. + +O tamanho do intervalo também define a resolução dos gráficos de tempo: um ponto por minuto, por hora ou por dia. Para ver os limiares, consulte [Como Real-Time Metrics funciona](/pt-br/documentacao/plataforma/real-time-metrics/como-funciona/). Para saber até onde os dados alcançam no passado, consulte [Limites de Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/limites/). + +--- + +## Atualização automática + +Real-Time Metrics recarrega os gráficos em um timer apenas quando você ativa a atualização automática. O controle fica na aba **Quick** do seletor de intervalo de tempo: + +| Controle | Valores | Padrão | +| --- | --- | --- | +| Switch **Refresh Every** | Ativado ou desativado | Desativado | +| Intervalo de atualização | Um número, mínimo 1, editável apenas com o switch ativado | 10 | +| Unidade | **Seconds**, **Minutes** ou **Hours** | **Seconds** | + +A atualização automática funciona com qualquer intervalo, e nenhum preset a ativa sozinho. Para manter o fim do intervalo no momento de cada atualização, use **Set Now** na aba **Now**. + +Ao lado do seletor, o botão **Refresh** recarrega todos os gráficos sob demanda. Depois que você altera o intervalo ou edita o campo de query sem aplicar, o botão mostra **Update** e aplica a alteração. **Refresh** e **Update** ficam desativados enquanto o campo de query mostra um erro de validação ou enquanto o início do intervalo é posterior ao fim. + +--- + +## Fuso horário + +Real-Time Metrics lê e plota os dados no fuso horário da sua conta. Os gráficos convertem o intervalo com o deslocamento UTC da conta e deslocam cada ponto do eixo x pelo mesmo valor. + +O rodapé do seletor de intervalo de tempo mostra `UTC:` seguido do fuso horário da conta, e um seletor **UTC Offset:**. A primeira opção do seletor, como `Account (UTC-03:00)`, é o deslocamento da conta e o padrão. As outras opções mostram `(UTC +hh:mm)` seguido do nome de um fuso horário, ordenadas por deslocamento, e a caixa **Search timezone** filtra a lista. + +Em um gráfico de tempo, as marcações do eixo x usam o formato `%b-%d %H:%M`, como `Oct-02 11:15`. Os títulos do tooltip usam o formato de data e hora `en-US`. + +--- + +## Filtros + +Sem filtro, os gráficos de um dashboard mostram os dados de toda a conta. Um filtro mantém apenas os dados cujo campo corresponde a um valor, em todos os gráficos do dashboard. Para adicionar, editar ou remover um filtro passo a passo, consulte [Filtre um dashboard de Real-Time Metrics](/pt-br/documentacao/guias/plataforma/observabilidade/adicionar-filtros-metrics/). + +### Popover de filtro + +O botão de filtro é um ícone com o tooltip **Add filter**. Ele abre o popover **Filter**, ou um painel inferior em uma tela com 768 px de largura ou menos. O popover informa: `Each combination of operator can only be used once.` + +| Controle | Rótulo | Comportamento | +| --- | --- | --- | +| Campo | **Filter**, placeholder **Select a field** | Uma lista pesquisável dos campos do dashboard, os mais relevantes primeiro. | +| Operador | **Operator**, placeholder **Select an operator** | Oculto até você escolher um campo. Quando o campo tem um único operador, ele já vem selecionado e bloqueado. | +| Valor | Depende do tipo do campo | Descrito em Tipos de valor. A descrição de um campo no schema GraphQL pode aparecer como nota na entrada de valor. | +| Botões | **Cancel** e **Apply** | **Apply** fica desativado até o formulário ser válido. | + +Enquanto a lista de campos carrega, a linha de filtros mostra um placeholder. + +### Campos + +A lista de campos não é fixa. Quando um dashboard abre, Real-Time Metrics lê no schema GraphQL os inputs de filtro do dataset do dashboard e os lista como campos. O rótulo de um campo é o nome do input separado em palavras, sem o sufixo de operador, com cada palavra em maiúscula: `upstreamCacheStatusEq` vira **Upstream Cache Status**. Os inputs que a descrição no schema marca como obsoletos não aparecem, nem um conjunto fixo de inputs excluídos, como `clientId`. + +Para cada campo de um dataset e o tipo dele, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/). + +Alguns campos trazem uma lista de valores em vez de entrada livre: + +| Campo | Valores | +| --- | --- | +| **Domain** ou **Workload** | Os workloads da sua conta. O rótulo depende de a sua conta usar domínios ou workloads. | +| O campo de zona de Edge DNS | As suas zonas de Edge DNS, por nome | +| O campo de função | As suas funções, por nome | +| **Classified** e o campo de categoria de bot | _Legitimate_, _Good Bot_, _Bad Bot_, _Under Evaluation_ | +| O campo de desafio | _Solved_, _Not Solved_ | +| **Action** | _Allow_, _Custom HTML_, _Deny_, _Drop_, _Hold Connection_, _Random Delay_, _Redirect_ | + +O dropdown de campos lista alguns campos primeiro, por dashboard. Os demais campos vêm em seguida, em ordem alfabética: + +| Dashboard | Campos listados primeiro | +| --- | --- | +| **Applications**: **Data Transferred**, **Requests**, **Status Codes**, **Bandwidth Saving**; **Image Processor**: **Requests** | **Domain** ou **Workload**, **Status**, **Upstream Status**, **Upstream Cache Status**, **Request Time** | +| **Tiered Cache**: **Caching Offload** | **Upstream Bytes Received**, **Status**, **Upstream Status**, **Upstream Cache Status**, **Request Time** | +| **Functions**: **Invocations** | **Domain** ou **Workload**, **Edge Function Id**, **Compute Time**, **Invocations**, **Edge Functions Instance Id List** | +| **Edge DNS**: **Standard Queries** | **Qtype**, **Requests**, **Source Loc Pop**, **Zone Id** | +| **Data Stream**: **Data Streamed** | **Domain** ou **Workload**, **Status**, **Data Streamed**, **Endpoint Type**, **Requests** | + +Os dashboards de **Bot Manager**, **Request Breakdown** e **Threats Breakdown** listam todos os campos em ordem alfabética. + +### Operadores + +Os operadores que um campo oferece dependem do tipo dele. Cada operador tem um rótulo no dropdown **Operator**, um símbolo no chip do filtro aplicado, uma forma no campo de query e o operador GraphQL que a query do gráfico envia: + +| Operador | Símbolo no chip | Forma no campo de query | Operador GraphQL | +| --- | --- | --- | --- | +| **Equals** | `=` | `=` | `Eq` | +| **Not Equals** | `≠` | `<>` | `Ne` | +| **Contains** | `⊃` | `like` | `Like` | +| **Not Contains** | `⊅` | `ilike` | `Ilike` | +| **In** | `in` | `in` | `In` | +| **Between** | `≤` | `between` | `Range` | +| **Less Than** | `<` | `<` | `Lt` | +| **Less Than or Equal** | `≤` | `<=` | `Lte` | +| **Greater Than** | `>` | `>` | `Gt` | +| **Greater Than or Equal** | `≥` | `>=` | `Gte` | + +**Contains** e **Not Contains** envolvem o valor como `%value%` antes de a query rodar. Para ver o que cada operador GraphQL compara, consulte [Queries da API GraphQL](/pt-br/documentacao/devtools/graphql/queries/#operadores). + +### Tipos de valor + +A entrada de valor segue o tipo do campo: + +| Tipo de campo | Entrada de valor | +| --- | --- | +| Texto, `String` | Uma caixa de texto | +| Inteiro, `Int` | Um número inteiro | +| Decimal, `Float` | Um número com 2 a 5 casas decimais | +| Faixa, `IntRange` ou `FloatRange` | Um par **Begin** e **End** | +| Um campo com lista de valores | Uma seleção múltipla com uma caixa **Search**, ou uma seleção simples, ambas com o placeholder **Select** | + +Uma faixa precisa de um início menor que o fim. Caso contrário, o popover mostra `Begin must be different from end`, `Begin must be less than end`, `End must be different from begin` ou `End must be more than begin`. Quando uma lista de valores não carrega, aparece a mensagem `Loading failed`. + +### Filtros aplicados + +Cada filtro aplicado aparece como um chip abaixo da linha de filtros, na forma ` : `, com o rótulo do operador em minúsculas. Uma faixa aparece como `(begin,end)` e uma lista de **In** como `(a, b)`. Selecionar um chip abre o popover **Filter** com os valores daquele filtro, e um ícone de cadeado substitui a seta do campo, porque o campo não pode mudar. O ícone de remover de um chip exclui aquele filtro. + +### Combinação de filtros + +Como o popover **Filter** informa, cada combinação de operador pode ser usada apenas uma vez. O campo de query une as condições com `and`, então os gráficos mostram apenas os dados que correspondem a todos os filtros aplicados. Para corresponder a qualquer um de vários valores de um campo, use **In**. + +### Filtros ao trocar de dashboard + +Ao trocar para um dashboard que lê outro dataset, os filtros são limpos e o intervalo de tempo se mantém. Os filtros cujo campo não existe no novo dataset saem da query. O dataset de cada dashboard está listado em [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/). + +--- + +## Campo de query + +O campo de query na linha de filtros filtra o dashboard com uma expressão digitada em Azion Query Language. O placeholder dele mostra `Filter using Azion Query Language syntax...`. Uma expressão segue estas regras: + +- Uma condição é um campo, um operador e um valor, separados por espaços: `status = 200`. +- Um nome de campo com mais de uma palavra vai entre aspas duplas: `"Upstream Status"`. +- O operador `in` recebe os valores entre parênteses, sem vírgula depois do último: `domain in (domain1, domain2)`. +- O operador `between` recebe exatamente dois valores diferentes entre parênteses: `status between (200, 300)`. +- As condições se unem com `and`. + +Enquanto você digita, o campo de query sugere nomes de campo, depois operadores e depois valores. `Ctrl` + `Space`, ou `Cmd` + `Space`, abre as sugestões; `Enter` aplica a expressão; e `Esc` fecha as sugestões. + +### Mensagens de validação + +O campo de query mostra estas mensagens como são exibidas, e **Refresh** fica desativado até a expressão ser válida: + +| Mensagem | Causa | +| --- | --- | +| `please add spaces between the field, operator, and value. For example, write "status = 200" instead of "status=200".` | Uma condição não tem espaços ao redor do operador. | +| `composite fields must be included in quotes. e.g: "Upstream Status".` | Um nome de campo com mais de uma palavra não está entre aspas duplas. | +| `some provided fields do not match the currently available ones. Please, check and try again.` | Um campo não existe no dataset do dashboard. | +| `there are fields with 'in' operator that need to be inside parentheses. Please, check and try again. e.g: domain in (domain1, domain2)` | Os valores de uma condição `in` não estão entre parênteses. | +| `fields with 'in' operator that need the comma removed at the end of the values in parentheses. Please, check and try again.` | A lista de valores de uma condição `in` termina com vírgula. | +| `Please enclose the values for the BETWEEN operator in parentheses. For example: status between (200, 300).` | Os valores de uma condição `between` não estão entre parênteses. | +| `The BETWEEN operator requires its values to be enclosed in parentheses. For example: status between (200, 300).` | Os valores de uma condição `between` não estão entre parênteses. | +| `The BETWEEN operator must have exactly two values. For example: status between (200, 300).` | Uma condição `between` tem um valor, ou mais de dois. | +| `The two values for the BETWEEN operator must be different. For example: status between (200, 300).` | Uma condição `between` repete o mesmo valor. | + +--- + +## URL compartilhável + +O caminho da URL de Real-Time Metrics nomeia a aba de produto e o dashboard, como `https://console.azion.com/real-time-metrics/edge-applications/data-transferred` para **Applications** › **Data Transferred**. Outro usuário da conta que abre essa URL chega ao mesmo dashboard. + +Uma URL também pode trazer o parâmetro `filters` na query string. O valor dele é um objeto JSON codificado em base64, e Real-Time Metrics lê a chave `external.tsRange` dele, com `begin` e `end`, como o intervalo de tempo em que a tela abre. + +--- + +## Anatomia do gráfico + +Cada gráfico é um card. De cima para baixo, ele traz o ícone de proprietário, o título do gráfico e o botão de menu; depois a descrição; depois a tag de agregação e, quando se aplica, a tag de variação; depois o gráfico em si. + +| Parte | O que mostra | +| --- | --- | +| Ícone de proprietário | Um ícone sem texto que indica quem é dono do gráfico: o logo da Azion, um ícone de grupo para a conta ou um ícone de pessoa para um usuário. Todo gráfico que Real-Time Metrics entrega traz o logo da Azion. | +| Título | O nome do gráfico, como **Edge Offload** ou **Missed Data**. | +| Botão de menu | Um botão de ícone com o rótulo **More options** que abre o menu do gráfico. | +| Descrição | Um texto curto sobre o que o gráfico plota. | +| Tag de agregação | **Sum** ou **Average**, com um ícone de calculadora: a agregação que a query do gráfico usa. | +| Tag de variação | A variação em relação à janela anterior de mesmo tamanho, descrita em Tag de variação. | +| Série | Uma categoria de dados. Por exemplo, um gráfico de requisições pode trazer uma série por domínio, cada uma delas uma linha de pontos ao longo do tempo. | +| Eixo x | Em um gráfico de tempo, o período do intervalo selecionado. | +| Legenda | Uma entrada por série, na forma ` - `. | +| Tooltip | O nome e o valor de cada série no ponto sob o cursor, em ordem decrescente de valor. | + +### Legenda + +Cada entrada da legenda mostra o nome da série e o total dela no intervalo. Em um gráfico cuja tag de agregação mostra **Average**, o total é dividido pelo número de pontos. Selecione uma entrada da legenda para ocultar ou mostrar a série dela. + +Um gráfico plota no máximo 16 séries; as séries além disso não são adicionadas. A legenda fica na parte de baixo do gráfico por padrão. Ela passa para a direita quando o gráfico ocupa mais de duas colunas do grid e tem mais de cinco séries, e fica na parte de baixo em uma janela com menos de 1024 px de largura. Gráficos de barras ordenadas não mostram legenda. + +### Tooltip e zoom + +O tooltip aparece apenas em uma janela com mais de 540 px de largura. Gráficos cujo eixo x é tempo aceitam zoom: role para cima sobre o gráfico para aproximar e para baixo para afastar. Dentro do intervalo, um bucket de tempo sem dados é plotado como zero. + +### Gráficos de lista + +Um gráfico de lista é uma tabela. Os cabeçalhos das colunas vêm dos nomes dos campos: `sum` mostra **Total**, `geolocCountryName` mostra **Country**, `geolocAsn` mostra **ASN**, `geolocRegionName` mostra **Region** e os outros nomes ficam com cada palavra iniciada em maiúscula. A tabela rola dentro de uma altura de 375 px, e uma tabela vazia mostra `No registers found.` + +### Estados do gráfico + +Um card de gráfico mostra um destes estados no lugar do gráfico: + +| Estado | O que aparece | +| --- | --- | +| Carregando | Um placeholder no lugar do gráfico | +| Sem dados | `No data available` | +| Erro na query | `The chart can't be plotted. There was an issue loading the data.`, no lugar da linha da tag de agregação | + +--- + +## Menu do gráfico + +O botão **More options** de um card de gráfico abre o menu do gráfico. Cada item aparece apenas quando se aplica ao gráfico: + +| Item | O que faz | +| --- | --- | +| **Open Help Center** | Abre o artigo do Help Center do gráfico no painel lateral do Console. | +| **Copy query** | Copia a query GraphQL do gráfico e as variáveis dela para a área de transferência. Não abre nada. | +| **Export CSV** | Baixa um arquivo `.csv` com o nome do gráfico, com os pontos como estão plotados. | +| **Show Mean Line**, **Hide Mean Line** | Desenha ou remove uma linha na média de todos os pontos. Aparece em gráficos de tempo com pelo menos uma série. | +| **Show Mean Line per series**, **Hide Mean Line per series** | Desenha ou remove uma linha de média por série, para comparar séries. Aparece em gráficos de tempo com duas ou mais séries. | + +### Copy query + +**Copy query** coloca um bloco de texto na área de transferência: a linha `# QUERY`, a query GraphQL do gráfico, depois a linha `# VARIABLES` e as variáveis como um objeto JSON. As duas linhas marcadoras são comentários GraphQL. A query lê os valores de filtro nas variáveis, então não roda sozinha. Para rodá-la, cole a query no Playground GraphiQL e mova o JSON que vem depois de `# VARIABLES` para o painel de variáveis. Para mais informações, consulte [Playground GraphiQL](/pt-br/documentacao/devtools/graphql/playground-graphql/). + +### Export CSV + +**Export CSV** grava o arquivo com `;` como separador e datas no formato `en-US`, com o mês primeiro e o relógio de 12 horas. O arquivo traz os pontos como o gráfico os plota para o intervalo e os filtros selecionados. + +### Linhas de média + +Uma linha de média é a soma dos pontos do gráfico dividida pelo número de pontos, no intervalo selecionado. A entrada dela na legenda mostra `Mean Line - `. Uma linha de média por série calcula a mesma média para cada série, e a entrada dela mostra `Mean Line - - `. + +--- + +## Tag de variação + +A tag de variação compara o intervalo selecionado com a janela de mesmo tamanho imediatamente anterior. Ela aparece em gráficos de tempo cujo resultado é uma única série e em cards de big number. Gráficos por categoria, como gráficos de pizza, gráficos de barras ordenadas e listas, nunca a mostram. + +O valor é `(current − previous) / previous × 100`, mostrado como porcentagem com duas casas decimais. Por exemplo, com **Last 1 hour** selecionado às 10:00, a tag compara o período das 09:00 às 10:00 com o das 08:00 às 09:00. + +Quando a variação fica entre –0,01% e +0,01%, a tag mostra **Can't compare**, em uma cor de alerta com um ícone de triângulo. Ela também mostra **Can't compare** quando um dos valores está ausente ou quando o valor anterior é 0. + +Fora desses casos, a cor indica se a variação é boa para aquele gráfico: + +| Gráfico | Aumento | Queda | Exemplo | +| --- | --- | --- | --- | +| Um aumento é bom | Verde | Vermelho | **Edge Offload** | +| Um aumento é ruim | Vermelho | Verde | **Missed Data** | +| Nenhuma direção é boa ou ruim | Azul | Azul | **Good Bot Hits**, **Transactions** | + +Em um gráfico em que um aumento é bom, a tag acrescenta uma seta para cima e para a direita em um aumento e uma seta para baixo e para a esquerda em uma queda. Tags azuis aparecem apenas em cards de big number. + +--- + +## Recursos relacionados + + + + Os passos para adicionar, editar e remover um filtro em um dashboard. + Os passos para exportar um gráfico como CSV e rodar a query dele fora do Console. + Cada dashboard de Build, o dataset dele e o que cada gráfico plota. + Até onde o intervalo de tempo alcança no passado, o limite de séries e os outros limites. + + diff --git a/src/content/docs/pt-br/pages/observe/real-time-metrics/glossario.mdx b/src/content/docs/pt-br/pages/observe/real-time-metrics/glossario.mdx new file mode 100644 index 0000000000..bd738c5e61 --- /dev/null +++ b/src/content/docs/pt-br/pages/observe/real-time-metrics/glossario.mdx @@ -0,0 +1,37 @@ +--- +title: Glossário +description: Consulte offload, dados economizados, dataset, tag de agregação, tag de variação, resolução e os outros termos da documentação do Real-Time Metrics. +meta_tags: 'real-time metrics, glossary, terms, metrics, offload, dataset' +namespace: documentation_products_real_time_metrics_glossary +permalink: /documentacao/plataforma/real-time-metrics/glossario/ +--- + +Este glossário define os termos que [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) usa nos dashboards do Azion Console e na API GraphQL do produto. + +| Termo | Definição | +| --- | --- | +| ameaça | Uma requisição que [WAF](/pt-br/documentacao/plataforma/firewall/#waf) identifica como um ataque, e que [Dashboards de Secure](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-secure/) conta por tipo. Cross-Site Scripting (XSS) injeta scripts maliciosos do lado do cliente em páginas que os seus visitantes veem, e Remote File Inclusion (RFI) inclui arquivos ou scripts remotos no seu domínio. SQL injection injeta código que tenta ler ou atacar dados que ele não tem permissão para acessar, e **Other Threats** conta todos os outros tipos. | +| at-most-once | A abordagem de contagem do Real-Time Metrics, que prioriza a performance: cada evento é contado uma vez ou nenhuma. Billing usa uma abordagem exactly-once e conta cada evento exatamente uma vez, então os dois podem diferir, e Billing é o número em que confiar. [Real-Time Metrics e faturamento](/pt-br/documentacao/fundamentos/billing-and-subscriptions/#real-time-metrics-e-faturamento) compara as duas abordagens. | +| Azion Query Language | A sintaxe do campo de query na linha de filtros, onde você escreve uma condição como um campo, um operador e um valor separados por espaços, como `status = 200`, e une condições com `and`. Um nome de campo com duas ou mais palavras fica entre aspas, como `"Upstream Status"`. [Filtros e intervalo de tempo](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/) lista os operadores e as mensagens de validação. | +| bot | Uma requisição que mostra as características não humanas de um [bot](https://www.azion.com/pt-br/learning/bots/o-que-e-um-bot/): padrões anormais, headers ausentes ou incomuns, uma string de user-agent suspeita, um endereço IP com histórico malicioso, um desafio que falhou, como um CAPTCHA, ou sinais de uma ferramenta de automação. [Bot Manager](/pt-br/documentacao/plataforma/firewall/#bot-manager) classifica um bot como _Good Bot_, como um crawler de mecanismo de busca, que é permitido, ou _Bad Bot_, que extrai dados, lança ataques ou sobrecarrega sistemas. [Dashboards de Secure](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-secure/) mostra as duas classes em gráficos, com as requisições _Legitimate_ e _Under Evaluation_. | +| camada de Tiered Cache | A camada de cache extra que [Tiered Cache](/pt-br/documentacao/plataforma/applications/cache/tiered-cache/) adiciona entre o data center e a origem, descrita em mais detalhes no [Learning Center](https://www.azion.com/pt-br/learning/cdn/o-que-e-tiered-caching/). Com Tiered Cache ativado, o gráfico **Edge Cache** conta os dados entre o cliente, o data center e a camada de Tiered Cache. O dashboard **Tiered Cache** conta os dados entre o data center, a camada de Tiered Cache e a origem. | +| categoria | O agrupamento de nível mais alto dos dashboards do Real-Time Metrics, selecionado no dropdown de categoria: **Build**, **Secure** ou **Observe**. Uma categoria reúne abas de produto, e uma aba de produto reúne um ou mais dashboards. [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/), [Dashboards de Secure](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-secure/) e [Dashboards de Observe](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-observe/) documentam uma categoria cada. | +| dados economizados | Dados que o data center entregou ao cliente a partir do cache, sem buscar o conteúdo na origem: cliente → data center → cliente. O gráfico **Saved Data** soma esses dados em bytes a partir do campo `savedData`, e **Saved Requests** e **Saved Bandwidth** contam o mesmo caso por requisições e por banda. Offload expressa o mesmo caso como uma porcentagem, e [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/) documenta cada gráfico. | +| dados perdidos | Dados que o data center entregou ao cliente depois de buscar o conteúdo na origem, porque o conteúdo não estava em [cache](https://www.azion.com/pt-br/learning/cdn/o-que-e-cache/): cliente → data center → origem → data center → cliente. O gráfico **Missed Data** soma esses dados em bytes a partir do campo `missedData`, e **Missed Requests** e **Missed Bandwidth** contam o mesmo caso por requisições e por banda. [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/) documenta os três gráficos. | +| dashboard | Um conjunto de gráficos que Real-Time Metrics mostra juntos para um produto, como **Data Transferred** na aba **Applications**. Todos os gráficos de um dashboard leem o mesmo dataset, e um produto com mais de um dashboard mostra um seletor para alternar entre eles. [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/) lista cada dashboard de Build e os gráficos dele. | +| Data Transferred In | A série que conta os dados que viajam do cliente em direção à origem: do cliente ao data center e, depois, do data center à origem. Com [Tiered Cache](/pt-br/documentacao/plataforma/applications/cache/tiered-cache/) ativado, esse segundo trecho termina, em vez disso, na camada de Tiered Cache. O gráfico **Edge Cache** do dashboard **Data Transferred** plota essa série a partir do campo `dataTransferredIn`. | +| Data Transferred Out | A série que conta os dados que viajam da origem em direção ao cliente: da origem ao data center e, depois, do data center ao cliente. Com [Tiered Cache](/pt-br/documentacao/plataforma/applications/cache/tiered-cache/) ativado, esse primeiro trecho começa, em vez disso, na camada de Tiered Cache. O gráfico **Edge Cache** do dashboard **Data Transferred** plota essa série a partir do campo `dataTransferredOut`. | +| Data Transferred Total | A soma de Data Transferred In e Data Transferred Out, em bytes, plotada a partir do campo `dataTransferredTotal`. Ela mede o volume no intervalo, enquanto a banda, como em **Total Bandwidth Usage**, mede o conteúdo que a sua aplicação entrega a cada segundo, em bits por segundo. Os dados economizados contam somente os bytes entregues sem uma ida à origem, e [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/) documenta os três gráficos. | +| dataset | Uma coleção nomeada de métricas agregadas que a API GraphQL expõe, como `httpMetrics`, que guarda os eventos de requisição de Applications e Firewall. Cada dashboard lê um dataset, e cada gráfico dele consulta campos desse dataset, como mostra a query que **Copy query** copia para a área de transferência. [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/) lista todos os datasets e os campos deles. | +| linha de média | Uma linha que um gráfico temporal pode sobrepor na média dos pontos dele: a soma dos pontos dividida pelo número deles, para aquele gráfico e intervalo. **Show Mean Line** desenha uma linha para o gráfico, e **Show Mean Line per series** desenha uma linha por série em um gráfico com duas ou mais séries. [Filtros e intervalo de tempo](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/) descreve o menu do gráfico. | +| métrica | Um valor agregado que Real-Time Metrics calcula a partir dos eventos que um produto gera, como uma contagem de requisições ou de bytes por bucket de tempo, e plota em um gráfico. Os eventos brutos por trás de uma métrica estão em Real-Time Events. O [Learning Center](https://www.azion.com/pt-br/learning/observability/o-que-sao-metricas/) aborda métricas em geral. | +| offload | A porcentagem de conteúdo que o data center entregou ao cliente sem buscá-lo na origem, mostrada em gráficos em [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/). Real-Time Metrics informa o offload por dados em **Edge Offload**, por requisições em **Requests Offloaded** e por banda em **Bandwidth Offloaded**. **Tiered Cache Offload** informa a parcela de dados que a camada de Tiered Cache entregou sem buscá-los na origem. | +| Real-Time Events | O produto de Observe que guarda os eventos brutos que os produtos geram, como o log de cada requisição, enquanto Real-Time Metrics mostra esses eventos agregados em métricas ao longo do tempo. Use-o para inspecionar as requisições individuais por trás de uma mudança em um gráfico. [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/) documenta o produto. | +| Request Breakdown | O quinto dashboard da aba **Applications**, e o único que lê o dataset `httpBreakdownMetrics` em vez de `httpMetrics`. A tabela **IP Address Information** dele distribui as requisições por endereço remoto, ASN, país e região. [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/) documenta a tabela. | +| requisição | Um acesso ao conteúdo da sua aplicação: Real-Time Metrics conta cada acesso como uma requisição. O gráfico **Total Requests** divide as requisições em **Http Requests Total** e **Https Requests Total**, e **Edge Requests Total** é a soma das duas. [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/) documenta cada gráfico de requisições. | +| resolução | A duração de tempo que cada ponto de um gráfico temporal cobre: um minuto, uma hora ou um dia. Real-Time Metrics a escolhe pela duração do intervalo selecionado, não pela idade dos dados, então um intervalo mais longo plota menos pontos, e mais largos. [Como Real-Time Metrics funciona](/pt-br/documentacao/plataforma/real-time-metrics/como-funciona/) informa as durações de intervalo que a alteram. | +| série | Uma linha, barra ou fatia de um gráfico, que representa uma categoria de dados, como um domínio em um gráfico de requisições ao longo do tempo. Um gráfico pode mostrar várias séries, e a legenda lista cada uma com o total dela no intervalo. [Filtros e intervalo de tempo](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/) descreve a legenda. | +| tag de agregação | A tag sob a descrição de um gráfico que informa como o gráfico combina os valores que plota: **Sum** os soma, e **Average** calcula a média deles. O total da legenda segue a mesma regra, então em um gráfico **Average** ele é dividido pelo número de pontos. [Filtros e intervalo de tempo](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/) descreve cada parte do card de um gráfico. | +| tag de variação | A tag de porcentagem ao lado da tag de agregação que compara o intervalo selecionado com a janela de mesma duração imediatamente anterior. Ela aparece em gráficos temporais com uma única série e em cards de número grande, e a cor dela mostra se a mudança é boa para aquele gráfico, então um aumento em **Missed Data** aparece em vermelho. Quando não há nada para comparar, a tag mostra **Can't compare**. | +| `tsRange` | O argumento de filtro de uma [query GraphQL](/pt-br/documentacao/devtools/graphql/queries/) que define o intervalo de tempo dela com um timestamp `begin` e um `end`. Uma query precisa de um intervalo de tempo, dado por `tsRange` ou por limites como `tsGte` e `tsLt`, ou a API retorna `400` com `To execute queries it is mandatory to provide the desired time interval.` Azion Console carrega o intervalo selecionado como `tsRange` no parâmetro `filters` de uma URL compartilhável. | +| upstream status | O [status code](https://www.azion.com/pt-br/learning/http-errors/http-status-codes-explained/) que o servidor por trás da Azion, como a sua origem ou um serviço externo, retornou para uma requisição, registrado no campo `upstreamStatus`. O status é o código que a sua aplicação na Azion retornou ao cliente, então os dois podem diferir em uma requisição. A tabela **Requests by Status and Upstream Status** conta as requisições pelos dois, e [Dashboards de Build](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-build/) a documenta. | diff --git a/src/content/docs/pt-br/pages/observe/real-time-metrics/limites.mdx b/src/content/docs/pt-br/pages/observe/real-time-metrics/limites.mdx new file mode 100644 index 0000000000..87354341e5 --- /dev/null +++ b/src/content/docs/pt-br/pages/observe/real-time-metrics/limites.mdx @@ -0,0 +1,87 @@ +--- +title: Limites de Real-Time Metrics +description: Confira por quanto tempo Real-Time Metrics mantém cada dataset, os limites dos gráficos no Console e da API GraphQL e o que cada um retorna além deles. +meta_tags: 'real-time metrics, limits, retention, graphql, rate limit, fields, rows' +namespace: documentation_products_real_time_metrics_limits +permalink: /documentacao/plataforma/real-time-metrics/limites/ +--- + +import FrameBox from '@aziontech/webkit/frame-box' +import ItemList from '@aziontech/webkit/item-list' +import DocItem from '@aziontech/webkit/doc-item' + +[Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) lê as métricas que outros produtos da Azion geram e as mostra como gráficos no Azion Console e pela API GraphQL. Esta página informa por quanto tempo cada dataset é mantido, os limites dos gráficos no Console e da API e o que um gráfico ou uma query faz além de cada valor. + +Real-Time Metrics está incluído na plataforma sem custo adicional. Para saber como cada produto é cobrado, consulte [Preços](/pt-br/documentacao/fundamentos/precos/#real-time-metrics). Os valores desta página são os limites padrão. A Azion pode aumentar um limite padrão sob solicitação, com base no seu plano. Para solicitar um aumento, entre em contato com o time de [suporte técnico](/pt-br/documentacao/suporte/). + +--- + +## Retenção de dados + +Real-Time Metrics mantém as métricas de cada dataset por um período fixo. Depois desse período, os dados deixam de ser retornados: uma query para um intervalo mais antigo retorna `200` e um array vazio, sem erro. + +| Dataset | Retenção | +| --- | --- | +| Todo dataset não listado abaixo, incluindo `botManagerMetrics` | 2 anos | +| `httpBreakdownMetrics` | 90 dias | +| `botManagerBreakdownMetrics` | 60 dias | + +Os datasets `botManagerMetrics` e `botManagerBreakdownMetrics` contêm as métricas de [Bot Manager](/pt-br/documentacao/plataforma/firewall/#bot-manager). Para a retenção dos logs e das métricas de Bot Manager, consulte [Logs de Bot Manager](/pt-br/documentacao/plataforma/firewall/bot-manager/logs/#retencao). + +Para os campos de cada dataset, consulte [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/). + +--- + +## Console + +A página de Real-Time Metrics no Azion Console limita o intervalo de tempo que você pode escolher, as séries e as linhas que um gráfico mostra e a largura de tela que mostra um tooltip. + +| Escopo | Limite | Ao ultrapassar o limite | +| --- | --- | --- | +| Início do intervalo de tempo | 730 dias antes do horário atual | O calendário move uma data anterior para a data mais antiga permitida. | +| Fim do intervalo de tempo | O horário atual | O calendário move uma data futura para o horário atual. | +| Séries por gráfico | 16 | Uma série depois da 16ª não é adicionada ao gráfico nem à legenda dele. | +| Linhas em um gráfico de tabela: **Requests by Status and Upstream Status** e **IP Address Information** | As 10 linhas mais frequentes | As outras linhas não aparecem. Adicione um filtro para restringir o gráfico às linhas de que você precisa. | +| Tooltip em um gráfico | Uma janela de navegador com mais de 540 px de largura | Com 540 px ou menos, um gráfico não mostra tooltip quando você passa o cursor sobre uma série. | + +Outros dois limites se aplicam ao Console. As queries do Console são limitadas a 120 requisições por minuto. Uma métrica leva até 10 minutos para ser agregada, então os valores dos minutos mais recentes podem estar incompletos. + +Para o seletor de intervalo de tempo, os presets e os operadores de filtro, consulte [Filtros e intervalo de tempo](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/). + +--- + +## API GraphQL + +A API GraphQL responde em `https://api.azion.com/v4/metrics/graphql`. Cada `400` da tabela chega como um corpo JSON cujo campo `detail` contém a mensagem. + +| Escopo | Limite | Ao ultrapassar o limite | +| --- | --- | --- | +| Linhas por query, definidas com `limit` | 0 a 10.000. Uma query sem `limit` retorna 10 linhas. | `400` e `The value for the query limit is invalid (must be between 0 to 10000 rows).` | +| Campos selecionados por query | 37. O campo `ts` conta para o limite, e a saída agregada, como `sum`, não conta. | `400` e `You have exceeded the limit amount allowed for selected fields (37 fields).` | +| Intervalo de tempo | Obrigatório em toda query, como `tsRange` ou como `tsGt` e `tsLt` | `400` e `To execute queries it is mandatory to provide the desired time interval.` | +| Duração do intervalo de tempo | Sem máximo. Um intervalo de 800 dias é executado, enquanto o seletor do Console começa no máximo 730 dias atrás. | `200`. O resultado contém apenas os dados que a retenção mantém. | +| Requisições | 120 por minuto | `429` e `You have reached the request rate limit!` | +| Linhas lidas para responder a uma query | 10 bilhões | `500` e uma mensagem que começa com `An error occured while performing the requested operation.: Limit for rows or bytes to read exceeded, max rows: 10.00 billion`. Encurte o intervalo de tempo ou adicione um filtro. | + +Outro limite se aplica: um payload da API GraphQL carrega no máximo 5 GB. + +Para os limites compartilhados pelas APIs GraphQL do Real-Time Metrics e do Real-Time Events, consulte [Limites da API GraphQL](/pt-br/documentacao/devtools/graphql/limites/). + +--- + +## Resolução + +Real-Time Metrics agrupa os pontos de dados de um gráfico ou de uma query em buckets de tempo, e o tamanho do bucket depende da duração do intervalo selecionado. Para o intervalo em que cada tamanho de bucket se aplica, consulte [Como Real-Time Metrics funciona](/pt-br/documentacao/plataforma/real-time-metrics/como-funciona/). + +--- + +## Recursos relacionados + + + + Como uma métrica chega a um gráfico e qual tamanho de bucket cada intervalo de tempo retorna. + O que fazer quando um gráfico ou uma query para em um desses limites. + Todos os status codes e mensagens que a API GraphQL retorna, com a causa de cada um. + Qual intervalo de tempo e qual agregação escolher e em quais dados confiar para o billing. + + diff --git a/src/content/docs/pt-br/pages/observe/real-time-metrics/solucao-de-problemas.mdx b/src/content/docs/pt-br/pages/observe/real-time-metrics/solucao-de-problemas.mdx new file mode 100644 index 0000000000..b071a473fc --- /dev/null +++ b/src/content/docs/pt-br/pages/observe/real-time-metrics/solucao-de-problemas.mdx @@ -0,0 +1,356 @@ +--- +title: Solucionar problemas de Real-Time Metrics +description: Descubra por que um gráfico de Real-Time Metrics fica vazio ou baixo, por que os totais diferem de Billing e o que a API GraphQL retorna ao recusar uma query. +meta_tags: 'real-time metrics, troubleshooting, no data, graphql errors, charts' +namespace: documentation_products_real_time_metrics_troubleshooting +permalink: /documentacao/plataforma/real-time-metrics/solucao-de-problemas/ +--- + +import FrameBox from '@aziontech/webkit/frame-box' +import ItemList from '@aziontech/webkit/item-list' +import DocItem from '@aziontech/webkit/doc-item' +import DocSteps from '@aziontech/webkit/doc-steps' +import DocStep from '@aziontech/webkit/doc-step' + +Esta página lista os sintomas que [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/) mostra em um dashboard no Azion Console ou em uma resposta da API GraphQL, cada um com a sua causa e a sua correção. Os sintomas dos gráficos vêm primeiro: pontos baixos ou ausentes, gráficos vazios e com falha, a tag de variação, totais que diferem de Billing, o tooltip, a legenda, queries copiadas e o campo de query. Os erros que a API GraphQL retorna encerram a página. + +--- + +## Os pontos mais recentes de um gráfico ficam abaixo dos demais + +Os últimos pontos de uma linha ficam abaixo do tráfego que você espera e sobem quando você atualiza o dashboard alguns minutos depois. + +O Console não plota o último bucket quando o intervalo termina no minuto atual. Os buckets anteriores a ele ainda podem estar em agregação, por até 10 minutos, então podem ficar baixos, como [Agregação e atraso](/pt-br/documentacao/plataforma/real-time-metrics/como-funciona/#agregacao-e-atraso) explica. + +- **Termine o intervalo 10 minutos antes**: na aba **Absolute** do seletor de intervalo de tempo, defina **End date** para um horário pelo menos 10 minutos no passado e selecione **Apply**. +- **Atualize depois do atraso**: selecione **Refresh** quando os minutos mais recentes terminarem a agregação. +- **Em uma query GraphQL**: defina o `end` de `tsRange` pelo menos 10 minutos antes de a query rodar. A mesma query enviada duas vezes dentro desses 10 minutos retorna valores diferentes para os seus buckets mais recentes, pelo mesmo motivo. + +Todo ponto de um intervalo que terminou há 10 minutos ou mais é final e retorna o mesmo valor a cada atualização. + +--- + +## Um gráfico mostra No data available + +Um card de gráfico mostra `No data available` no lugar do gráfico, em um gráfico ou em todos os gráficos de uma aba de produto. + +O dataset não tem métricas para o intervalo e os filtros selecionados. Três casos causam isso: o produto que registra as métricas não está ativo na sua conta, nenhum tráfego chegou a esse produto no intervalo ou um filtro aplicado não corresponde a nenhum tráfego. + +- **Ative o produto por trás do gráfico**: Real-Time Metrics lê apenas o que esses produtos registram. + +| Aba ou gráfico | Requisito | +| --- | --- | +| Gráfico **Edge Cache**, **Build** › **Applications** › **Data Transferred** | [Cache](/pt-br/documentacao/plataforma/applications/#cache) ativo na sua conta | +| **Build** › **Tiered Cache** | [Tiered Cache](/pt-br/documentacao/plataforma/applications/cache/tiered-cache/) ativo na sua conta | +| **Build** › **Functions** | [Functions](/pt-br/documentacao/plataforma/functions/) ativo na sua conta | +| **Build** › **Image Processor** | [Image Processor](/pt-br/documentacao/plataforma/applications/#image-processor) ativo na sua conta | +| **Secure** › **Edge DNS** | [Edge DNS](/pt-br/documentacao/plataforma/edge-dns/) ativo na sua conta | +| **Secure** › **Bot Manager** | Uma assinatura de [Bot Manager](/pt-br/documentacao/plataforma/firewall/#bot-manager), contratada por meio do [Technical Support](/pt-br/documentacao/suporte/) | +| **Observe** › **Data Stream** | [Data Stream](/pt-br/documentacao/plataforma/data-stream/) ativo, com pelo menos um stream configurado | + +- **Amplie o intervalo de tempo**: o intervalo inicial, **Last 5 minutes**, fica vazio quando nenhuma requisição chegou nesses minutos. Selecione um preset como **Last 24 hours**. +- **Remova um filtro**: selecione o ícone de remoção em cada chip de filtro aplicado até o gráfico plotar. +- **Leia um array vazio como ausência de dados**: pela API, um dataset sem métricas para o intervalo retorna `200` e um array vazio, não um erro. Uma query `tieredCacheMetrics` em uma conta sem tráfego de Tiered Cache retorna: + +```json +{ + "data": { + "tieredCacheMetrics": [] + } +} +``` + +Quando o produto registra tráfego no intervalo, o gráfico o plota, e um bucket sem eventos dentro do intervalo é plotado como zero. + +--- + +## Uma query para um intervalo antigo retorna um array vazio + +Uma query GraphQL para um intervalo antigo retorna `200` e um array vazio, enquanto a mesma query para um intervalo recente retorna linhas. + +Real-Time Metrics mantém cada dataset por um período fixo e, depois desse período, não retorna linhas nem erro. O período varia por dataset, então um dataset de breakdown pode não retornar nada para um intervalo que outro dataset ainda responde. + +Uma query para um intervalo em 2023 retorna: + +```json +{ + "data": { + "httpMetrics": [] + } +} +``` + +- **Comece o intervalo dentro do período de retenção** do dataset, que [Retenção de dados](/pt-br/documentacao/plataforma/real-time-metrics/limites/#retencao-de-dados) lista. +- **Espere que intervalos parciais retornem o que é mantido**: um intervalo que começa antes do período de retenção ainda retorna as linhas dentro dele, sem erro. +- **Armazene o que você precisa manter por mais tempo**: consulte um período quando ele estiver completo e salve o resultado, como [Boas práticas para Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/boas-praticas/) descreve. + +Dentro do período de retenção, a query retorna as linhas que contêm dados. + +--- + +## Um gráfico mostra The chart can't be plotted + +Um card de gráfico mostra `The chart can't be plotted. There was an issue loading the data.` no lugar da sua linha de tags de agregação. + +Cada gráfico envia a sua própria query para a API GraphQL, e a query deste gráfico retornou um erro em vez de dados. Os outros gráficos do dashboard ainda podem plotar. + +- **Envie a query de novo**: selecione **Refresh**. +- **Reduza o intervalo ou adicione um filtro**: a API recusa uma query que ultrapassa a sua taxa de requisições ou as linhas que ela lê, como [Limites de Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/limites/#api-graphql) mostra. +- **Leia o erro você mesmo**: no menu **More options** do gráfico, selecione **Copy query** e execute a query no [Playground GraphiQL](/pt-br/documentacao/devtools/graphql/playground-graphql/). A resposta traz a mensagem que o gráfico não mostra. + +Depois da correção, o gráfico plota os seus pontos, ou a resposta nomeia um dos erros em [A API GraphQL recusa uma query](/pt-br/documentacao/plataforma/real-time-metrics/solucao-de-problemas/#a-api-graphql-recusa-uma-query). + +--- + +## A tag de variação mostra Can't compare + +A tag de variação de um gráfico mostra **Can't compare**, em uma cor de alerta com um ícone de triângulo, em vez de uma porcentagem. + +A tag compara o intervalo selecionado com a janela de mesma duração imediatamente anterior a ele. Ela mostra **Can't compare** quando a mudança fica entre –0,01% e +0,01%, quando alguma das janelas não tem valor ou quando a janela anterior é 0. + +- **Leia uma mudança dentro de ±0,01% como ausência de mudança**: os totais das duas janelas diferem em menos de 0,01%. +- **Escolha um intervalo cuja janela anterior teve tráfego**: por exemplo, se uma aplicação começou a servir tráfego há 30 minutos, **Last 1 hour** compara com uma hora que não teve requisições. +- **Compare janelas completas**: termine o intervalo pelo menos 10 minutos no passado, para que nenhuma das janelas tenha buckets ainda em agregação. + +Quando as duas janelas têm valor e a mudança passa de 0,01%, a tag mostra a mudança como uma porcentagem com duas casas decimais, como [Tag de variação](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/#tag-de-variacao) descreve. + +--- + +## Os totais de Real-Time Metrics diferem de Billing + +O total de um dashboard ou de uma query para um período difere do uso que Azion Billing informa para o mesmo período. + +Real-Time Metrics conta cada evento no máximo uma vez, enquanto Billing conta cada evento exatamente uma vez, então Real-Time Metrics pode perder um evento que Billing conta. Em média, os dois diferem em menos de 1%, como [Contagem e Billing](/pt-br/documentacao/plataforma/real-time-metrics/como-funciona/#contagem-e-billing) explica. + +- **Use o valor de Billing para cobranças**: quando os dois diferem, Billing é a referência, como [Real-Time Metrics e faturamento](/pt-br/documentacao/fundamentos/billing-and-subscriptions/#real-time-metrics-e-faturamento) descreve. +- **Use Real-Time Metrics para operações**: leia os dashboards para ver uma mudança de tráfego em minutos, não para resolver uma cobrança. +- **Compare períodos completos**: termine o intervalo pelo menos 10 minutos no passado, para que nenhum bucket do total ainda esteja em agregação. + +Uma diferença de cerca de 1% entre os dois é a diferença esperada, não uma falha de nenhum deles. + +--- + +## Um gráfico não mostra tooltip + +Um gráfico plota, mas não mostra valores quando você passa o cursor sobre uma série. + +Azion Console mostra o tooltip de um gráfico apenas em uma janela de navegador com mais de 540 px de largura. Com 540 px ou menos, nenhum gráfico mostra tooltip. + +- **Amplie a janela do navegador** para mais de 540 px. +- **Leia os totais na legenda**: cada entrada mostra o nome da série e o seu total no intervalo. +- **Exporte os pontos**: no menu **More options** do gráfico, selecione **Export CSV** para baixar os pontos como foram plotados. + +Em uma janela com mais de 540 px, o tooltip lista o nome e o valor de cada série no ponto sob o cursor. + +--- + +## A legenda de um gráfico para em 16 séries + +Um gráfico que divide os seus dados em muitas séries, como uma por domínio, desenha 16 delas, e a sua legenda lista 16 entradas. + +Um gráfico plota no máximo 16 séries. Nenhuma série depois da 16ª é adicionada ao gráfico nem à sua legenda. + +- **Filtre as séries de que você precisa**: adicione um filtro em **Domain** ou **Workload**, o rótulo que a sua conta mostrar, com o operador **In** e os valores que você compara. +- **Consulte todas as séries pela API**: selecione **Copy query** no menu **More options** do gráfico e execute a query com um `limit` alto o bastante para todas as linhas, até 10.000. A query copiada mantém o `limit` do próprio gráfico. + +Com o filtro aplicado, o gráfico desenha cada série que o filtro mantém, até 16, e a API retorna uma linha para cada série. + +--- + +## Uma query copiada não roda no GraphiQL + +Uma query colada de **Copy query** no Playground GraphiQL não roda do jeito que foi colada. + +**Copy query** copia um bloco de texto, não uma requisição: a linha `# QUERY`, a query, a linha `# VARIABLES` e as variáveis como um objeto JSON. A query lê os seus valores de filtro dessas variáveis, então o JSON vai no painel de variáveis, não no editor de query. + +Para executar a query copiada no Playground GraphiQL: + + + + + + O objeto começa depois da linha `# VARIABLES`. + + + + + + +A resposta contém um objeto `data` com o nome do dataset, com as linhas por trás do gráfico. Para o formato da área de transferência, consulte [Copy query](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/#copy-query), e para o playground, [Playground GraphiQL](/pt-br/documentacao/devtools/graphql/playground-graphql/). + +--- + +## O campo de query recusa um filtro + +Uma mensagem aparece abaixo do campo do Azion Query Language na linha de filtros, e **Refresh** fica desabilitado. + +A expressão quebra uma regra de sintaxe do campo ou nomeia um campo que o dataset do dashboard atual não tem. Os campos dependem do dashboard, então uma expressão que funciona em um dashboard pode falhar em outro. + +- **Separe o operador com espaços**: escreva `status = 200`, não `status=200`. +- **Coloque entre aspas os nomes de mais de uma palavra**: escreva `"Upstream Status"`. +- **Feche as listas entre parênteses**: escreva `domain in (domain1, domain2)`, sem vírgula depois do último valor. +- **Dê ao between dois valores diferentes**: escreva `status between (200, 300)`. +- **Escolha os campos pelas sugestões**: `Ctrl` + `Space`, ou `Cmd` + `Space`, lista apenas os campos do dashboard atual. + +Quando a expressão é válida, a mensagem desaparece e `Enter` a aplica ao dashboard. Cada mensagem, literal, está listada em [Mensagens de validação](/pt-br/documentacao/plataforma/real-time-metrics/filtros-e-intervalo-de-tempo/#mensagens-de-validacao). + +--- + +## A API GraphQL recusa uma query + +A API GraphQL responde em `https://api.azion.com/v4/metrics/graphql`. Quando recusa uma query, ela retorna um corpo JSON cujo campo `detail` contém a mensagem. Cada entrada cita o corpo que a API retornou. Para cada status code e mensagem da API, consulte [Mensagens de erro da API GraphQL](/pt-br/documentacao/devtools/graphql/mensagens-erro/). + +### Uma query é recusada com Authentication credentials were not provided + +A API responde `401` com este corpo: + +```json +{ + "detail": "Authentication credentials were not provided." +} +``` + +A requisição não leva o header `Authorization`, e toda query para a API precisa de um personal token. + +- **Envie um personal token** no header `Authorization: Token [TOKEN VALUE]`. Para criar um, consulte [Como criar um personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/). Teste-o com uma query mínima: + +```bash +curl -X POST 'https://api.azion.com/v4/metrics/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Token [TOKEN VALUE]' \ + -d '{"query":"{ __typename }"}' +``` + +- **Substitua um token inválido ou expirado**: a API responde `401` com outras mensagens, listadas em [Mensagens de erro da API GraphQL](/pt-br/documentacao/devtools/graphql/mensagens-erro/). + +Com um token válido, a API responde `200`: + +```json +{ + "data": { + "__typename": "Query" + } +} +``` + +### Uma query é recusada por não ter intervalo de tempo + +A API responde `400` com este corpo: + +```json +{ + "detail": "To execute queries it is mandatory to provide the desired time interval." +} +``` + +Toda query precisa definir um intervalo de tempo no seu `filter`, e esta não define nenhum. + +- **Adicione `tsRange` ao filtro**: por exemplo, `filter: { tsRange: { begin: "2026-10-01T14:25:25", end: "2026-10-02T14:25:25" } }`. +- **Ou defina `tsGt` e `tsLt`** para o início e o fim do intervalo. + +Com um intervalo de tempo, a query retorna `200` e as linhas desse intervalo. + +### Uma query é recusada com You have exceeded the limit amount allowed for selected fields + +A API responde `400` com este corpo: + +```json +{ + "detail": "You have exceeded the limit amount allowed for selected fields (37 fields)." +} +``` + +A query seleciona mais campos do que uma query aceita. O campo `ts` conta para o limite, e uma saída agregada como `sum` não conta, como [Limites de Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/limites/#api-graphql) mostra. + +- **Remova os campos que você não lê**, incluindo `ts` quando você não agrupa por tempo. +- **Divida a seleção em duas queries** sobre o mesmo intervalo e o mesmo filtro. + +Dentro do limite, a query retorna `200` com todos os campos selecionados. + +### Uma query é recusada com The value for the query limit is invalid + +A API responde `400` com este corpo: + +```json +{ + "detail": "The value for the query limit is invalid (must be between 0 to 10000 rows)." +} +``` + +O argumento `limit` está acima de 10.000 ou abaixo de 0. + +- **Defina `limit` entre 0 e 10.000.** +- **Para mais linhas, encurte o intervalo** ou percorra as linhas em páginas com `offset`, como [Recursos da API GraphQL](/pt-br/documentacao/devtools/graphql/recursos/) descreve. +- **Não remova `limit` para evitar o erro**: uma query sem ele não é recusada, mas retorna 10 linhas. + +Com um `limit` válido, a query retorna até esse número de linhas. + +### Uma query é recusada com Cannot query field + +A API responde `400` quando o nome de um dataset ou de um campo não existe. Para um dataset, a mensagem sugere os nomes mais próximos: + +```json +{ + "detail": "Cannot query field \"imageProcessedMetrics\" on type \"Query\". Did you mean \"imagesProcessedMetrics\", \"edgeStorageMetrics\", \"ingestMetrics\" or \"dataStreamedMetrics\"?" +} +``` + +A query nomeia um dataset ou um campo que a API não tem, como `imageProcessedMetrics` para o dataset `imagesProcessedMetrics`. Para um campo, a mensagem nomeia o tipo em que ele foi procurado, como `Cannot query field "wafThreatFamilies" on type "HttpMetricsAggregatedFieldsLogType".` + +- **Use o nome de dataset que a mensagem sugere**, como `imagesProcessedMetrics`. +- **Confira o campo no seu dataset**: [Campos da API GraphQL do Real-Time Metrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/) lista os campos de cada dataset. + +Com nomes que a API conhece, a query retorna `200`. + +### Uma query é recusada com Argument has invalid value + +A API responde `400` quando `groupBy` ou `aggregate` nomeia um campo que ela não aceita naquele dataset: + +```json +{ + "detail": "Argument \"groupBy\" has invalid value [remoteAddress].\nIn element #0: Expected type \"HttpMetricsGroupByFields\", found remoteAddress." +} +``` + +`groupBy` aceita apenas as dimensões do seu próprio dataset, e `remoteAddress` é uma dimensão de `httpBreakdownMetrics`, não de `httpMetrics`. Um campo calculado não precisa de `aggregate`, então `sum: uniqueSessions` em `connectedUsersMetrics` retorna uma mensagem que começa com `Argument "aggregate" has invalid value {sum: uniqueSessions}.` + +- **Consulte o dataset que tem a dimensão**: agrupe por `remoteAddress` em `httpBreakdownMetrics`, como [Encontre as principais origens de ameaças do WAF](/pt-br/documentacao/guias/plataforma/observabilidade/encontrar-principais-origens-de-ameacas-waf/) faz. +- **Selecione um campo calculado diretamente**: remova `aggregate` e liste o campo, como `uniqueSessions`, entre os campos selecionados. + +Com campos que o dataset aceita, a query retorna `200`. + +### Uma query é recusada com You have reached the request rate limit + +A API responde `429` com a mensagem `You have reached the request rate limit!`. + +Mais requisições chegaram à API em um minuto do que ela aceita, como [Limites de Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/limites/#api-graphql) mostra. + +- **Espere e envie a requisição de novo.** +- **Envie menos requisições**: consulte um período completo uma vez e guarde o resultado, em vez de consultar o mesmo período de novo. +- **Selecione vários campos em uma query** em vez de uma query por campo. + +Abaixo do limite de taxa, cada requisição volta a retornar os seus dados. + +### Uma chamada ao host legado da API responde 403 Forbidden + +Uma query enviada para `https://api.azionapi.net/metrics/graphql` responde `403` com uma página HTML intitulada `Azion - Default error page` que diz `Forbidden`, não com JSON. + +`api.azionapi.net` é o host legado da API. As queries de Real-Time Metrics vão para o endpoint v4. + +- **Envie a query para `https://api.azion.com/v4/metrics/graphql`**, com o header `Authorization: Token [TOKEN VALUE]`. +- **Atualize um data source do Grafana que usa a URL legada**, como [Importe o dashboard Data Transferred](/pt-br/documentacao/guias/plataforma/observabilidade/data-transferred-dash/) mostra. + +No endpoint v4 com um token válido, a query retorna `200` e um corpo JSON. + +--- + +## Recursos relacionados + + + + A retenção de cada dataset e cada limite a que as correções desta página se referem. + Como a agregação, a resolução e a contagem definem o valor de cada ponto. + O seletor de intervalo de tempo, os operadores de filtro, os estados do gráfico e o menu do gráfico. + Cada status code e mensagem que a API GraphQL retorna, com a sua causa. + + diff --git a/src/content/docs/pt-br/pages/secure-jornada/firewall-configuracoes-avancadas/monitorar-e-calibrar-bot-manager.mdx b/src/content/docs/pt-br/pages/secure-jornada/firewall-configuracoes-avancadas/monitorar-e-calibrar-bot-manager.mdx index 51684b3730..d271a5d08b 100644 --- a/src/content/docs/pt-br/pages/secure-jornada/firewall-configuracoes-avancadas/monitorar-e-calibrar-bot-manager.mdx +++ b/src/content/docs/pt-br/pages/secure-jornada/firewall-configuracoes-avancadas/monitorar-e-calibrar-bot-manager.mdx @@ -125,7 +125,7 @@ Quatro valores carregam a calibração. `score` é o total que a função calcul `bot_category` é uma lista, unida por vírgula, das categorias das regras que a requisição correspondeu, então uma linha classificada como `legitimate` ainda pode nomear categorias de bad bot. Para cada campo que uma linha carrega e para os quatro valores que `classified` assume, consulte [Logs](/pt-br/documentacao/plataforma/firewall/bot-manager/logs/#campos). -A pontuação está na linha e em nenhum outro lugar. Os dois datasets GraphQL de Real-Time Metrics contam requisições por classificação, ação, modo, host, geografia e pelas URLs que o tráfego de bots alcançou, e nenhum dos dois carrega uma pontuação, então uma distribuição de pontuações é lida do log de report, e não de uma consulta. Esses datasets respondem às perguntas agregadas: consulte [Consulte dados do Bot Manager com GraphQL](/pt-br/documentacao/guias/plataforma/observabilidade/consultar-dados-bot-manager-com-graphql/) para as contagens de classificação, [Consulte as URLs mais atingidas por bots com GraphQL](/pt-br/documentacao/guias/plataforma/observabilidade/consultar-dados-bot-manager-breakdown-com-graphql/) para as URLs, e [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/#bot-manager) para os mesmos dados em gráficos. +A pontuação está na linha e em nenhum outro lugar. Os dois datasets GraphQL de Real-Time Metrics contam requisições por classificação, ação, modo, host, geografia e pelas URLs que o tráfego de bots alcançou, e nenhum dos dois carrega uma pontuação, então uma distribuição de pontuações é lida do log de report, e não de uma consulta. Esses datasets respondem às perguntas agregadas: consulte [Consulte dados do Bot Manager com GraphQL](/pt-br/documentacao/guias/plataforma/observabilidade/consultar-dados-bot-manager-com-graphql/) para as contagens de classificação, [Consulte as URLs mais atingidas por bots com GraphQL](/pt-br/documentacao/guias/plataforma/observabilidade/consultar-dados-bot-manager-breakdown-com-graphql/) para as URLs, e [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-secure/#bot-manager) para os mesmos dados em gráficos. --- diff --git a/src/content/docs/pt-br/pages/secure-jornada/troubleshoot/edge-firewall-monitorar-metricas..mdx b/src/content/docs/pt-br/pages/secure-jornada/troubleshoot/edge-firewall-monitorar-metricas..mdx index d884167a33..da98691b0e 100644 --- a/src/content/docs/pt-br/pages/secure-jornada/troubleshoot/edge-firewall-monitorar-metricas..mdx +++ b/src/content/docs/pt-br/pages/secure-jornada/troubleshoot/edge-firewall-monitorar-metricas..mdx @@ -22,7 +22,7 @@ Após criar um firewall e [ativar o módulo Web Application Firewall (WAF)](/pt- Para monitorar como o WAF processa requisições e ameaças: - + diff --git a/src/content/docs/pt-br/pages/secure-jornada/troubleshoot/intelligent-dns-monitorar-metricas.mdx b/src/content/docs/pt-br/pages/secure-jornada/troubleshoot/intelligent-dns-monitorar-metricas.mdx index 61682b9936..df80512875 100644 --- a/src/content/docs/pt-br/pages/secure-jornada/troubleshoot/intelligent-dns-monitorar-metricas.mdx +++ b/src/content/docs/pt-br/pages/secure-jornada/troubleshoot/intelligent-dns-monitorar-metricas.mdx @@ -21,7 +21,7 @@ Após hospedar seus domínios e cria zonas no [Edge DNS](/pt-br/documentacao/pla Para monitorar as consultas recebidas pela sua zona: - + --- diff --git a/src/content/docs/pt-br/pages/secure/bot-manager/logs.mdx b/src/content/docs/pt-br/pages/secure/bot-manager/logs.mdx index a381445d86..f68b9ceeed 100644 --- a/src/content/docs/pt-br/pages/secure/bot-manager/logs.mdx +++ b/src/content/docs/pt-br/pages/secure/bot-manager/logs.mdx @@ -109,7 +109,7 @@ Elevar um threshold reetiqueta o tráfego, além de impedir que a ação seja ex `bot_category` é derivado das regras que a requisição correspondeu, e é uma lista unida por vírgula, não um valor único. Uma requisição que correspondeu a regras de duas categorias carrega as duas, como `Bad Bot Signatures, Malicious Intent detected`. Como as categorias seguem as regras e o veredito segue o threshold, uma linha classificada como `legitimate` ainda pode nomear categorias de bad bot: as categorias dizem quais regras dispararam, e `classified` diz se o total delas cruzou o threshold. -Os pares que os dois campos assumem, e como uma requisição chega a cada um, estão abaixo. [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/#bot-manager) agrupa os seus gráficos pelos mesmos pares. +Os pares que os dois campos assumem, e como uma requisição chega a cada um, estão abaixo. [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-secure/#bot-manager) agrupa os seus gráficos pelos mesmos pares. | `classified` | `bot_category` | Como a requisição é identificada | | --- | --- | --- | @@ -175,7 +175,7 @@ Azion CLI não devolve essas linhas. Enquanto uma instância pontua tráfego rea O Data Stream encaminha a linha de report para um endpoint que você configura, lendo-a da data source Functions, o que exige assinatura de [Functions](/pt-br/documentacao/plataforma/functions/). O encaminhamento é em tempo real, então um dashboard ou um alerta construído sobre esse endpoint vê uma linha no momento em que a função a escreve. Os campos que um endpoint recebe dependem do tipo dele. Para mais informações, consulte [Endpoints](/pt-br/documentacao/plataforma/data-stream/#endpoints). -O Real-Time Metrics carrega uma página **Bot Manager** com um dashboard **Overview** e um dashboard **Breakdown**. Os seus gráficos agregam a classificação que o log carrega: **Top Bot Action**, por exemplo, agrupa as requisições pela ação que a função aplicou. As métricas são geradas quase em tempo real, com um intervalo de agregação de até 60 segundos. Para mais informações, consulte [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/#bot-manager). +O Real-Time Metrics carrega uma página **Bot Manager** com um dashboard **Overview** e um dashboard **Breakdown**. Os seus gráficos agregam a classificação que o log carrega: **Top Bot Action**, por exemplo, agrupa as requisições pela ação que a função aplicou. As métricas são geradas quase em tempo real, com um intervalo de agregação de até 60 segundos. Para mais informações, consulte [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-secure/#bot-manager). Dois datasets GraphQL carregam os mesmos dados agregados para consulta. `botManagerMetrics` agrupa pela classificação, pela ação, pelo modo, pelo resultado do CAPTCHA, pelo host e pela geografia de uma requisição. `botManagerBreakdownMetrics` agrupa pelas URLs que o tráfego de bots alcançou e pelos endereços IP de onde ele veio. Os campos de cada um estão listados na página Campos da GraphQL API de Real-Time Metrics, em [botManagerMetrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#botmanagermetrics) e [botManagerBreakdownMetrics](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/#botmanagerbreakdownmetrics). diff --git a/src/content/docs/pt-br/pages/secure/firewall/boas-praticas.mdx b/src/content/docs/pt-br/pages/secure/firewall/boas-praticas.mdx index d26402567d..e8f7a8d7c0 100644 --- a/src/content/docs/pt-br/pages/secure/firewall/boas-praticas.mdx +++ b/src/content/docs/pt-br/pages/secure/firewall/boas-praticas.mdx @@ -377,7 +377,7 @@ Anote o limite ao lado de qualquer número que você tirar de um gráfico de cla ### Encaminhe o log de report do Bot Manager para um destino que você controla -As linhas de report aparecem em [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/), e [Data Stream](/pt-br/documentacao/plataforma/data-stream/#endpoints) as encaminha da fonte de dados Functions para um endpoint que você configura. [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/#bot-manager) guarda somente contagens, e as URLs que o tráfego de bots alcançou [por 60 dias](/pt-br/documentacao/plataforma/firewall/bot-manager/logs/#retencao), portanto, três meses depois, elas não têm resposta na plataforma. Uma cópia em um destino que você controla dura pelo tempo que você a mantiver. +As linhas de report aparecem em [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/), e [Data Stream](/pt-br/documentacao/plataforma/data-stream/#endpoints) as encaminha da fonte de dados Functions para um endpoint que você configura. [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-secure/#bot-manager) guarda somente contagens, e as URLs que o tráfego de bots alcançou [por 60 dias](/pt-br/documentacao/plataforma/firewall/bot-manager/logs/#retencao), portanto, três meses depois, elas não têm resposta na plataforma. Uma cópia em um destino que você controla dura pelo tempo que você a mantiver. O [modo de observação](/pt-br/documentacao/plataforma/firewall/boas-praticas/#inicie-bot-manager-em-modo-de-observacao) escreve uma linha para toda requisição, portanto reduza `internal_logs` quando a janela fechar. Leia os dashboards em uma agenda, e não depois de um incidente. Revise-os semanalmente, para que uma mudança no formato do tráfego apareça antes que alguém informe um sintoma. Para ler o report log por trás deles, consulte [Monitore e calibre o Bot Manager](/pt-br/documentacao/guias/seguranca-de-aplicacoes/bots-e-rede/monitorar-e-calibrar-bot-manager/). diff --git a/src/content/docs/pt-br/pages/secure/firewall/glossario.mdx b/src/content/docs/pt-br/pages/secure/firewall/glossario.mdx index d9266dadd0..6ed3a5b844 100644 --- a/src/content/docs/pt-br/pages/secure/firewall/glossario.mdx +++ b/src/content/docs/pt-br/pages/secure/firewall/glossario.mdx @@ -23,7 +23,7 @@ permalink: /documentacao/plataforma/firewall/glossario/ | Bot Manager | O produto que pontua cada requisição pelas evidências que ela carrega, como os cabeçalhos, o endereço e a sessão, e aplica uma ação quando o score alcança um limite. Ele não é um switch em **Modules**: é executado como uma instância de função no firewall, invocada por uma regra com o comportamento _Run Function_. [Firewall](/pt-br/documentacao/plataforma/firewall/#bot-manager) o descreve, e Bot Manager Lite é a edição self-service dele. | | Bot Manager Lite | A edição self-service do Bot Manager, instalada a partir do Azion Marketplace e executada como uma instância de função em um firewall. Ela pontua cada requisição com 26 regras estáticas e não calcula nenhum score dinâmico. [Bot Manager Lite](/pt-br/documentacao/plataforma/firewall/bot-manager/bot-manager-lite/) lista as regras, os argumentos e o log de report. | | categoria de bot | A categoria que Bot Manager registra para uma requisição no campo de log `bot_category`, com valores como `Search Engine Bot`, `Bad Bot Signatures` e `Credential Stuffing`. Bot Manager grava a única categoria em que a requisição melhor se encaixa, e Bot Manager Lite grava uma lista, separada por vírgulas, das classes de todas as regras a que a requisição correspondeu. [Logs](/pt-br/documentacao/plataforma/firewall/bot-manager/logs/#classificacao) lista todos os valores. | -| classificação | O veredito que Bot Manager registra para uma requisição no campo de log `classified`: `legitimate`, `good bot`, `bad bot` ou `under evaluation`. O veredito segue o limite em vigor, então o mesmo score aparece como `legitimate` com um limite e como `bad bot` com um limite menor. [Logs](/pt-br/documentacao/plataforma/firewall/bot-manager/logs/#classificacao) dá as condições de cada um, e [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/#bot-manager) mostra os quatro juntos em gráficos. | +| classificação | O veredito que Bot Manager registra para uma requisição no campo de log `classified`: `legitimate`, `good bot`, `bad bot` ou `under evaluation`. O veredito segue o limite em vigor, então o mesmo score aparece como `legitimate` com um limite e como `bad bot` com um limite menor. [Logs](/pt-br/documentacao/plataforma/firewall/bot-manager/logs/#classificacao) dá as condições de cada um, e [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-secure/#bot-manager) mostra os quatro juntos em gráficos. | | colisão | Dois usuários ou dispositivos distintos que compartilham um fingerprint, de modo que Bot Manager os pontua como uma única identidade. Com o argumento `engine_version` definido como `2`, Bot Manager deriva o fingerprint com um método JA4H que produz menos colisões que a versão `1`. [Argumentos](/pt-br/documentacao/plataforma/firewall/bot-manager/argumentos/#engine-version) compara as duas versões. | | comentário | Uma nota escrita depois de `#` no fim de um item de uma lista `ip_cidr`, armazenada com o item e sempre por último na linha, depois de qualquer data de expiração. Uma linha que começa com `#` não é uma linha desativada: a API a recusa como um item inválido com `22005 Invalid IP CIDR`. Listas dos tipos `asn` e `countries` recusam comentários, e [Network Lists](/pt-br/documentacao/plataforma/firewall/network-shield/network-lists/#anotacoes-de-item) documenta a sintaxe completa do item. | | comportamento | A ação que uma regra aplica a uma requisição quando os critérios dela correspondem a essa requisição. Um firewall oferece seis: _Deny (403 Forbidden)_, _Drop (Close Without Response)_, _Set Rate Limit_ e _Set Custom Response_ não precisam de nenhum produto, _Set WAF_ precisa de WAF e _Run Function_ precisa de [Functions](/pt-br/documentacao/plataforma/functions/). Somente _Set WAF_ e _Run Function_ podem ser seguidos de outro comportamento na mesma regra; [Rules Engine para Firewall](/pt-br/documentacao/plataforma/firewall/rules-engine/#comportamentos) documenta cada um. | diff --git a/src/content/docs/pt-br/pages/secure/firewall/solucao-de-problemas.mdx b/src/content/docs/pt-br/pages/secure/firewall/solucao-de-problemas.mdx index a82601a265..e12467d4e4 100644 --- a/src/content/docs/pt-br/pages/secure/firewall/solucao-de-problemas.mdx +++ b/src/content/docs/pt-br/pages/secure/firewall/solucao-de-problemas.mdx @@ -589,7 +589,7 @@ Usuários reais, ou crawlers que você quer, recebem `403` e a página de erro p O `threshold: 30` e a `action: deny` padrão deixam passar uma [requisição com formato de navegador](/pt-br/documentacao/plataforma/firewall/bot-manager/score-de-bots/#cookies-de-sessao), então uma requisição recusada correspondeu a regras que somaram o limite. - **Encontre essas regras** em `matched_rules`, nas linhas de report com `classified` em `legitimate` e um `score` perto do limite. -- **Acompanhe o [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/#bot-manager)**: uma queda em **Good Bot Hits** sugere crawlers recusados, e uma taxa baixa de solução em **Bot CAPTCHA**, bots desafiados. +- **Acompanhe o [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-secure/#bot-manager)**: uma queda em **Good Bot Hits** sugere crawlers recusados, e uma taxa baixa de solução em **Bot CAPTCHA**, bots desafiados. - **Desative as regras que os seus logs nomeiam** em `disabled_rules`, ou `disabled_static_rules` no Bot Manager, como [Argumentos](/pt-br/documentacao/plataforma/firewall/bot-manager/argumentos/#regras-desabilitadas) descreve. - **Eleve o limite quando muitas regras compartilham os falsos positivos**, ou acrescente o `fingerprint` de clientes confiáveis a `good_fingerprint_list`. - **Meça com `action: allow` primeiro**, como [Boas práticas de Firewall](/pt-br/documentacao/plataforma/firewall/boas-praticas/#inicie-bot-manager-em-modo-de-observacao) descreve. @@ -602,7 +602,7 @@ Uma grande parte do tráfego é classificada como `under evaluation` e permanece A função não encontrou nenhum bot, mas não tem os dados de fingerprint para descartar um ataque, como [Logs](/pt-br/documentacao/plataforma/firewall/bot-manager/logs/#under-evaluation) explica: visitantes novos trazem fingerprints inéditos, e um cliente que alterna endereços e user agents está tentando escapar. -- **Leia proporções, não totais**, no gráfico **Bot Traffic** do [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/#bot-manager). +- **Leia proporções, não totais**, no gráfico **Bot Traffic** do [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-secure/#bot-manager). - **Compare a janela com os seus lançamentos e campanhas**: a parcela cai à medida que os novos fingerprints se consolidam. - **Trate uma parcela persistente com endereços variáveis como evasão**: nenhum cliente fica tempo suficiente para ser classificado. diff --git a/src/content/docs/pt-br/pages/secure/waf/como-funciona.mdx b/src/content/docs/pt-br/pages/secure/waf/como-funciona.mdx index a61ee29c9d..fea30677d5 100644 --- a/src/content/docs/pt-br/pages/secure/waf/como-funciona.mdx +++ b/src/content/docs/pt-br/pages/secure/waf/como-funciona.mdx @@ -80,7 +80,7 @@ O loop custa tempo duas vezes. A janela guarda 3 dias, então uma evidência que ## Onde uma correspondência é reportada -Uma correspondência do WAF não deixa nada na resposta, então toda pergunta sobre ela é respondida a partir de uma superfície de reporte. [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/#waf) responde quantas, em requisições processadas e requisições bloqueadas ao longo do tempo. Real-Time Events responde qual requisição, uma linha por vez, com as regras internas que corresponderam e o score que cada família alcançou. Data Stream responde onde mais, enviando esses eventos para um sistema fora da Azion, e a GraphQL API consulta os mesmos dados. +Uma correspondência do WAF não deixa nada na resposta, então toda pergunta sobre ela é respondida a partir de uma superfície de reporte. [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/dashboards-secure/#waf) responde quantas, em requisições processadas e requisições bloqueadas ao longo do tempo. Real-Time Events responde qual requisição, uma linha por vez, com as regras internas que corresponderam e o score que cada família alcançou. Data Stream responde onde mais, enviando esses eventos para um sistema fora da Azion, e a GraphQL API consulta os mesmos dados. Uma requisição bloqueada é encontrada a partir da requisição, não da resposta. Ela é um `400` cujo upstream status é `0`, e o header `x-azion-request-id` dela encontra a sua linha. Essa consulta é o preço de manter a decisão fora da resposta. Um usuário bloqueado só consegue reportar uma página **Bad Request**, e a regra e o score são consultados depois. Para a query, consulte [Encontre o score de uma requisição bloqueada](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/como-encontrar-score-de-requisicoes-bloqueadas-pelo-waf/). diff --git a/src/includes/docs_help_center/en/real-time-metrics/data-streaming/requests/adding-filters/index.md b/src/includes/docs_help_center/en/real-time-metrics/data-streaming/requests/adding-filters/index.md deleted file mode 100644 index f45a8bf8a3..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/data-streaming/requests/adding-filters/index.md +++ /dev/null @@ -1,23 +0,0 @@ -## Adding filters - -Real-Time Metrics shows you a standard view of data related to all your applications, but, by using filters, you can adjust the graphs to match your requests. This way, you can view more specific data that fit your analysis. - -When you add a filter, you can set the **Field**, such as "Host", "Status", or "Scheme", and the **Operator**, such as "Like", "Range", or "Not equal". - -You can find more details about each field on the [Fields Metrics documentation](https://www.azion.com/en/documentation/products/graphql-api/features/metrics-fields/) and about operators on the [Queries documentation](https://www.azion.com/en/documentation/products/graphql-api-queries/#operators). - -You can also set the **value field** that'll be used. Depending on the variable you chose, it can accept values of the String, Int, or Float types. - -### Practical example - -You want to filter your data by endpoint type and you want the response to show only types that are similar to the one you inform. - -In this situation, you should use **Endpoint Type** and **Like**. In the value field, you should add the endpoint type that you want to view, such as "datadog". Then, your response will contain only the endpoint types that are like the one you informed. - -> **How can I edit or delete a filter?** -> -> After you add filters, each one shows on the **FILTERS** section. -> -> If you want to edit an existing filter, click on the text of the specific filter. Once the **Edit Filter** popover opens, you can change the filter's settings as you wish. -> -> If you want to delete an existing filter, click the **x** icon next to the specific filter. Repeat the action for each filter you want to delete. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/data-streaming/requests/index.md b/src/includes/docs_help_center/en/real-time-metrics/data-streaming/requests/index.md deleted file mode 100644 index dc28eb9468..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/data-streaming/requests/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- - -docs: [ -'Adding filters', -'Total Data Streamed', -'Total Requests' -] - ---- \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/data-streaming/requests/total-data-streamed/index.md b/src/includes/docs_help_center/en/real-time-metrics/data-streaming/requests/total-data-streamed/index.md deleted file mode 100644 index 73d8353efb..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/data-streaming/requests/total-data-streamed/index.md +++ /dev/null @@ -1,9 +0,0 @@ -## Total Data Streamed - -The Total Data Streamed graph shows you the total amount of data that was sent by the data streaming configured in your account. - -Data Streaming sends your logs in packets. Once you have 2,000 records, every 60 seconds pass, or data reaches the max size you've defined, one packet is sent. The graph then shows the sum of all packets sent during the period you've selected in the time range. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses bytes to show your data. It automatically converts your data into megabytes (MB), gigabytes (GB), or terabytes (TB), for example, according to the amount of data available to make your visualization easier. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/data-streaming/requests/total-requests/index.md b/src/includes/docs_help_center/en/real-time-metrics/data-streaming/requests/total-requests/index.md deleted file mode 100644 index 47dd73e525..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/data-streaming/requests/total-requests/index.md +++ /dev/null @@ -1,9 +0,0 @@ -## Total Requests - -The Data Streaming Total Requests graph shows you the sum, the total amount of requests that were processed by the data streaming configured in your account. - -Each request is made out of successful Data Streaming packets: when a packet with your logs is completed and sent, one request is created. Packets are created when you have 2,000 records, every 60 seconds pass, or data reaches the max size you've defined. - -The graph shows the sum of all requests that occurred during the period you've selected in the time range. - -Find out more about [Data Streaming](https://www.azion.com/en/documentation/products/data-streaming/). \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/bandwidth-saving/adding-filters/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/bandwidth-saving/adding-filters/index.md deleted file mode 100644 index 3e3db33411..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/bandwidth-saving/adding-filters/index.md +++ /dev/null @@ -1,23 +0,0 @@ -## Adding filters - -Real-Time Metrics shows you a standard view of data related to all your applications, but, by using filters, you can adjust the graphs to match your requests. This way, you can view more specific data that fit your analysis. - -When you add a filter, you can set the **Field**, such as "Host", "Status", or "Scheme", and the **Operator**, such as "Like", "Range", or "Not equal". - -You can find more details about each field on the [Fields Metrics documentation](https://www.azion.com/en/documentation/products/graphql-api/features/metrics-fields/) and about operators on the [Queries documentation](https://www.azion.com/en/documentation/products/graphql-api-queries/#operators). - -You can also set the **value field** that'll be used. Depending on the variable you chose, it can accept values of the String, Int, or Float types. - -### Practical example - -You want to filter your data by the amount of bandwidth saved by Image Processor, but, in the request, you only want results that are larger than a certain value. - -In this situation, you should use **Bandwidth Total** and **Greater than**. In the value field, you should add the value that you want to use as a starting point, such as "10500". Then, your response will contain only amounts of bandwidth that are greater than the specific value you set. - -> **How can I edit or delete a filter?** -> -> After you add filters, each one shows on the **FILTERS** section. -> -> If you want to edit an existing filter, click on the text of the specific filter. Once the **Edit Filter** popover opens, you can change the filter's settings as you wish. -> -> If you want to delete an existing filter, click the **x** icon next to the specific filter. Repeat the action for each filter you want to delete. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/bandwidth-saving/bandwidth-saving/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/bandwidth-saving/bandwidth-saving/index.md deleted file mode 100644 index d64a0d843f..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/bandwidth-saving/bandwidth-saving/index.md +++ /dev/null @@ -1,9 +0,0 @@ -## Bandwidth Saving - -The Bandwidth Saving graph shows you the sum of savings on all transmissions of images that were somehow processed and deliver by [Image Processor](https://www.azion.com/en/documentation/products/edge-application/image-processor/). - -The processing of images can be related to resizing, cropping, changing quality, or any other feature that Image Processor provides. If an image had any kind of treatment through Image Processor, the savings of those images in your domain are shown in the graph. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses bytes to show your data. It automatically converts your data into megabytes (MB), gigabytes (GB), or terabytes (TB), for example, according to the amount of data available to make your visualization easier. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/bandwidth-saving/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/bandwidth-saving/index.md deleted file mode 100644 index 268e0ba808..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/bandwidth-saving/index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- - -docs: [ -'Adding filters', -'Bandwidth Saving' -] - ---- \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/adding-filters/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/adding-filters/index.md deleted file mode 100644 index d5f9d5bedb..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/adding-filters/index.md +++ /dev/null @@ -1,23 +0,0 @@ -## Adding filters - -Real-Time Metrics shows you a standard view of data related to all your applications, but, by using filters, you can adjust the graphs to match your requests. This way, you can view more specific data that fit your analysis. - -When you add a filter, you can set the **Field**, such as "Host", "Status", or "Scheme", and the **Operator**, such as "Like", "Range", or "Not equal". - -You can find more details about each field on the [Fields Metrics documentation](https://www.azion.com/en/documentation/products/graphql-api/features/metrics-fields/) and about operators on the [Queries documentation](https://www.azion.com/en/documentation/products/graphql-api-queries/#operators). - -You can also set the **value field** that'll be used. Depending on the variable you chose, it can accept values of the String, Int, or Float types. - -### Practical example - -You want to filter your data by the amount of saved data, but, in the request, you want to set a specific value as a starting point to the data that'll be returned. - -In this situation, you should use **Saved Data** and **Greater than or equal**. In the value field, you should add the number value that you want as a cutoff, such as "8300". Then, your response will contain only amounts of saved data that start from and are greater than the specific value you set. - -> **How can I edit or delete a filter?** -> -> After you add filters, each one shows on the **FILTERS** section. -> -> If you want to edit an existing filter, click on the text of the specific filter. Once the **Edit Filter** popover opens, you can change the filter's settings as you wish. -> -> If you want to delete an existing filter, click the **x** icon next to the specific filter. Repeat the action for each filter you want to delete. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/bandwidth-offloaded/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/bandwidth-offloaded/index.md deleted file mode 100644 index e9c69dc5a3..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/bandwidth-offloaded/index.md +++ /dev/null @@ -1,11 +0,0 @@ -## Bandwidth Offloaded - -The Bandwidth Offloaded graph shows the percentage of bandwidth that was delivered directly by the edge, without having to search for the content on the origin before delivering it. - -Bandwidth represents the amount of information being received every second. At Azion, it represents the content that was delivered by your application every second during the period you've selected in the time range. - -The higher the percentage of offloading, the better the efficiency of your applications regarding the use of cache policies to preserve infrastructure. Azion's edge delivers the content from its cache, demanding less from your origin. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses percentages to show your data on offload graphs. All data related to offloading reflects the average number of your applications' access, and the graph then represents it with percentages (%). \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/edge-caching/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/edge-caching/index.md deleted file mode 100644 index eb7cf299b4..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/edge-caching/index.md +++ /dev/null @@ -1,23 +0,0 @@ -## Cache - -The Cache graph represents how all information regarding your Cache data is being accessed on Azion's edge. - -It provides a first layer of caching to the client content on Azion edges. The graph is divided into: - -> - **Data Transferred Total**: all data that was transferred in the process; value of Data Transferred In + Data Transferred Out. -> -> END USER -> EDGE -> ORIGIN + ORIGIN -> EDGE -> END USER -> -> - **Data Transferred In**: data transferred from the user to the edges, and from the edges to the client origin. -> -> END USER -> EDGE -> ORIGIN -> -> - **Data Transferred Out**: data transferred from the client origin to the edges, and from the edges to the user. -> -> ORIGIN -> EDGE -> END USER - -To use Cache and analyze data on it, you must activate it in your account. See the [Cache documentation](https://www.azion.com/en/documentation/platform/applications/cache/) for more information. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses bytes to show your data. It automatically converts your data into megabytes (MB), gigabytes (GB), or terabytes (TB), for example, according to the amount of data available to make your visualization easier. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/edge-offload/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/edge-offload/index.md deleted file mode 100644 index 8d8845a8de..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/edge-offload/index.md +++ /dev/null @@ -1,15 +0,0 @@ -## Edge Offload - -The Edge Offload graph shows the percentage of data delivered directly by the edge, without having to search for the content on the origin before delivering it. - -> END USER -> EDGE -> END USER - -The higher the percentage of offloading, the better the efficiency of your applications regarding the use of cache policies to preserve infrastructure. Azion's edge delivers the content from its cache, demanding less from your origin. - -### Practical example - -Your application has *1 GB of data*. If the graph shows your application had an average of *80% offload*, this means *800 MB out of 1 GB* were delivered directly by Azion's edge. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses percentages to show your data on offload graphs. All data related to offloading reflects the average number of your applications' access, and the graph then represents it with percentages (%). \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/index.md deleted file mode 100644 index bd849c9150..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/index.md +++ /dev/null @@ -1,15 +0,0 @@ ---- - -docs: [ -'Adding filters', -'Cache', -'Edge Offload', -'Saved Data', -'Missed Data', -'Total Bandwidth Usage', -'Bandwidth Offloaded', -'Saved Bandwidth', -'Missed Bandwidth' -] - ---- \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/missed-bandwidth/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/missed-bandwidth/index.md deleted file mode 100644 index 512a3ab687..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/missed-bandwidth/index.md +++ /dev/null @@ -1,13 +0,0 @@ -## Missed Bandwidth - -The Missed Bandwidth graph shows how much bandwidth was delivered when Azion's edge had to look for the content on the origin and deliver it to the end user. - -> Missed Bandwidth: the edge looks for the content on the origin and then delivers it to the end user. -> -> END USER -> EDGE -> ORIGIN -> EDGE -> END USER - -When the content isn't found on Azion's cache, it's necessary to take another step and look for it on the origin, and then deliver it to the end user. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses bits and bytes per second on all graphs related to bandwidth data. It automatically converts your data into megabits per second (bit/s) or kilobytes per second (kB/s), for example, according to the amount of data available to make your visualization easier. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/missed-data/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/missed-data/index.md deleted file mode 100644 index b9caee361e..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/missed-data/index.md +++ /dev/null @@ -1,13 +0,0 @@ -## Missed Data - -The Missed Data graph shows the total sum of your application's data when Azion's edge had to look for the content on the origin and deliver it to the end user. - -> Missed Data: the edge looks for the content on the origin and then delivers it to the end user. -> -> END USER -> EDGE -> ORIGIN -> EDGE -> END USER - -When the content isn't found on Azion's cache, it's necessary to take another step and look for it on the origin, and then deliver it to the end user. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses bytes to show your data. It automatically converts your data into megabytes (MB), gigabytes (GB), or terabytes (TB), for example, according to the amount of data available to make your visualization easier. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/saved-bandwidth/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/saved-bandwidth/index.md deleted file mode 100644 index 90ab6bbc76..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/saved-bandwidth/index.md +++ /dev/null @@ -1,13 +0,0 @@ -## Saved Bandwidth - -The Saved Bandwidth graph shows how much bandwidth was delivered directly by Azion's edge, without having to take the extra step of looking for the content on the origin. - -> Saved Bandwidth: content is delivered directly by the edge to the origin. -> -> END USER -> EDGE -> END USER - -A higher number of saved bandwidth means your application is using cache policies on Azion's edge more efficiently, demanding less from your origin during the period you've selected in the time range. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses bits and bytes per second on all graphs related to bandwidth data. It automatically converts your data into megabits per second (bit/s) or kilobytes per second (kB/s), for example, according to the amount of data available to make your visualization easier. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/saved-data/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/saved-data/index.md deleted file mode 100644 index cb4f249713..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/saved-data/index.md +++ /dev/null @@ -1,13 +0,0 @@ -## Saved Data - -The Saved Data graph shows the total sum of your application's data that was delivered directly by Azion's edge, without having to take the extra step of looking for the content on the origin. - -> Saved Data: content is delivered directly by the edge to the origin. -> -> END USER -> EDGE -> END USER - -A higher sum of saved data means your application is using cache policies on Azion's edge more efficiently, demanding less from your origin during the period you've selected in the time range. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses bytes to show your data. It automatically converts your data into megabytes (MB), gigabytes (GB), or terabytes (TB), for example, according to the amount of data available to make your visualization easier. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/total-bandwidth-usage/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/total-bandwidth-usage/index.md deleted file mode 100644 index 58f18f20f7..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/data-transferred/total-bandwidth-usage/index.md +++ /dev/null @@ -1,9 +0,0 @@ -## Total Bandwidth Usage - -The Total Bandwidth Usage graph shows the total amount of bandwidth your application used during the period you've selected in the time range. - -Bandwidth represents the amount of information being received every second. At Azion, it represents the content that was delivered by your application every second. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses bits and bytes per second on all graphs related to bandwidth data. It automatically converts your data into megabits per second (bit/s) or kilobytes per second (kB/s), for example, according to the amount of data available to make your visualization easier. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/adding-filters/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/adding-filters/index.md deleted file mode 100644 index 4124804f24..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/adding-filters/index.md +++ /dev/null @@ -1,23 +0,0 @@ -## Adding filters - -Real-Time Metrics shows you a standard view of data related to all your applications, but, by using filters, you can adjust the graphs to match your requests. This way, you can view more specific data that fit your analysis. - -When you add a filter, you can set the **Field**, such as "Host", "Status", or "Scheme", and the **Operator**, such as "Like", "Range", or "Not equal". - -You can find more details about each field on the [Fields Metrics documentation](https://www.azion.com/en/documentation/products/graphql-api/features/metrics-fields/) and about operators on the [Queries documentation](https://www.azion.com/en/documentation/products/graphql-api-queries/#operators). - -You can also set the **value field** that'll be used. Depending on the variable you chose, it can accept values of the String, Int, or Float types. - -### Practical example - -You want to filter your data by requests, but, in the request, you want to show only results that use the HTTPS method and that are larger than a certain value. - -In this situation, you should use **Https Requests Total** and **Greater than**. In the value field, you should add the value that you want to use as a starting point, such as "120". Then, your response will contain only results that are greater than the value informed. - -> **How can I edit or delete a filter?** -> -> After you add filters, each one shows on the **FILTERS** section. -> -> If you want to edit an existing filter, click on the text of the specific filter. Once the **Edit Filter** popover opens, you can change the filter's settings as you wish. -> -> If you want to delete an existing filter, click the **x** icon next to the specific filter. Repeat the action for each filter you want to delete. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/index.md deleted file mode 100644 index 8de16f7cc3..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- - -docs: [ -'Adding filters', -'Total Requests', -'Requests Offloaded', -'Saved Requests', -'Missed Requests', -'Total Requests per Second', -'Requests per Second Offloaded', -'Saved Requests per Second', -'Missed Requests per Second', -'Requests by Method' -] - ---- \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/missed-requests-per-second/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/missed-requests-per-second/index.md deleted file mode 100644 index cc23e402fa..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/missed-requests-per-second/index.md +++ /dev/null @@ -1,15 +0,0 @@ -## Missed Requests per Second - -The Missed Requests per Second graph shows the average of your application's requests per second when Azion's edge had to look for the content on the origin and deliver it to the end user. - -Whenever the content of your application is accessed, one request is processed. The graph then shows the average of all requests that were missed per second during the period you've selected in the time range. - -> Missed Requests: the edge looks for the content on the origin and then delivers it to the end user. -> -> END USER -> EDGE -> ORIGIN -> EDGE -> END USER - -When the content isn't found on Azion's cache, it's necessary to take another step and look for it on the origin, and then deliver it to the end user. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses averages of requests/second to show your data. Example: 0.026/s \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/missed-requests/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/missed-requests/index.md deleted file mode 100644 index c3690d6152..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/missed-requests/index.md +++ /dev/null @@ -1,11 +0,0 @@ -## Missed Requests - -The Missed Requests graph shows the total sum of your application's requests when Azion's edge had to look for the content on the origin and deliver it to the end user. - -Whenever the content of your application is accessed, one request is processed. The graph then shows all requests that were missed during the period you've selected in the time range. - -> Missed Requests: the edge looks for the content on the origin and then delivers it to the end user. -> -> END USER -> EDGE -> ORIGIN -> EDGE -> END USER - -When the content isn't found on Azion's cache, it's necessary to take another step and look for it on the origin, and then deliver it to the end user. The entire process counts as 1 request. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/requests-by-method/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/requests-by-method/index.md deleted file mode 100644 index fd7de9441f..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/requests-by-method/index.md +++ /dev/null @@ -1,10 +0,0 @@ -## Requests by Method - -The Requests by Method graph shows the sum of HTTP methods that were used in the requests made to your domain. At Azion, it indicates how the client interacted with the content on the domain associated with an application. - -> The graph is divided into: -> -> - **Requests Http Method Get**: retrieves resources from the server. -> - **Requests Http Method Post**: sends resources to the server. -> - **Requests Http Method Head**: retrieves data about the resource but doesn't return the content. -> - **Requests Http Method Others**: all other request methods, such as PUT or PATCH, are gathered on this option. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/requests-offloaded/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/requests-offloaded/index.md deleted file mode 100644 index e64b1f00c8..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/requests-offloaded/index.md +++ /dev/null @@ -1,15 +0,0 @@ -## Requests Offloaded - -The Requests Offloaded graph shows the percentage of requests that were delivered directly by the edge, without having to search for the content on the origin before delivering it. - -> END USER -> EDGE -> END USER - -The higher the percentage of offloading, the better the efficiency of your applications regarding the use of cache policies to preserve infrastructure. Azion's edge delivers the content from its cache, demanding less from your origin. - -### Practical example - -Your application received *5 requests*. If the graph shows your application had an average of *80% offload*, this means *4 out of 5* requests were delivered directly by Azion's edge. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses percentages to show your data on offload graphs. All data related to offloading reflects the average number of your applications' access, and the graph then presents it as percentages (%). \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/requests-per-second-offloaded/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/requests-per-second-offloaded/index.md deleted file mode 100644 index a7031510fe..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/requests-per-second-offloaded/index.md +++ /dev/null @@ -1,15 +0,0 @@ -## Requests per Second Offloaded - -The Requests per Second Offloaded graph shows the percentage of requests per second that were delivered directly by the edge, without having to search for the content on the origin before delivering it. - -**END USER -> EDGE -> ORIGIN** - -The higher the percentage of offloading, the better the efficiency of your applications regarding the use of cache policies to preserve infrastructure. Azion's edge delivers the content from its cache, demanding less from your origin. - -### Practical example - -Your application received *5 requests in 1 second*. If the graph shows your application had an average of *80% offload*, this means *4 out of 5* requests in that second were delivered directly by Azion's edge. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses percentages to show your data on offload graphs. All data related to offloading reflects the average number of your applications' access, and the graph then represents it with percentages (%). \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/saved-requests-per-second/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/saved-requests-per-second/index.md deleted file mode 100644 index ecd81d04bd..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/saved-requests-per-second/index.md +++ /dev/null @@ -1,15 +0,0 @@ -## Saved Requests per Second - -The Saved Requests per Second graph shows the average of your application's requests per second that were delivered directly by Azion's edge, without having to take the extra step of looking for the content on the origin. - -Whenever the content of your application is accessed, one request is processed. The graph then shows the average of all requests that were saved per second during the period you've selected in the time range. - -> Saved Requests: content is delivered directly by the edge to the origin. -> -> END USER -> EDGE -> END USER - -A higher average of saved requests per second means your application is using cache policies on Azion's edge more efficiently, demanding less from your origin during the period you've selected in the time range. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses averages of requests/second to show your data. Example: 0.026/s \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/saved-requests/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/saved-requests/index.md deleted file mode 100644 index 5fe975dc2b..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/saved-requests/index.md +++ /dev/null @@ -1,11 +0,0 @@ -## Saved Requests - -The Saved Requests graph shows the total sum of your application's requests that were delivered directly by Azion's edge, without having to take the extra step of looking for the content on the origin. - -Whenever the content of your application is accessed, one request is processed. The graph then shows all requests that were saved during the period you've selected in the time range. - -> Saved Requests: content is delivered directly by the edge to the origin. -> -> END USER -> EDGE -> END USER - -A higher sum of saved requests means your application is using cache policies on Azion's edge more efficiently, demanding less from your origin during the period you've selected in the time range. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/total-requests-per-second/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/total-requests-per-second/index.md deleted file mode 100644 index ecd4beb762..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/total-requests-per-second/index.md +++ /dev/null @@ -1,9 +0,0 @@ -## Total Requests per Second - -The Total Requests per Second graph shows you the average of requests per seconds that were processed on the application's domain configured in your account. - -Whenever the content of your application is accessed, one request is processed. The graph then shows the average of all requests that occurred per second during the period you've selected in the time range. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses averages of requests/second to show your data. Example: 0.026/s \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/total-requests/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/total-requests/index.md deleted file mode 100644 index 2ecc596e70..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/requests/total-requests/index.md +++ /dev/null @@ -1,13 +0,0 @@ -## Total Requests - -The Total Requests graph shows you the sum, the total amount of all types of requests that were processed on the application's domain configured in your account. - -Whenever the content of your application is accessed, one request is processed. The graph then shows all requests that occurred during the period you've selected in the time range. - -**1 access = 1 request** - -> The graph is divided into: -> -> - **Http Requests Total**: processed requests using the HTTP protocol. -> - **Edge Requests Total**: all types of requests; value of http + https. -> - **Https Requests Total**: processed requests using the HTTPS protocol, which uses encryption and verification. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/adding-filters/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/adding-filters/index.md deleted file mode 100644 index 87313760a7..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/adding-filters/index.md +++ /dev/null @@ -1,23 +0,0 @@ -## Adding filters - -Real-Time Metrics shows you a standard view of data related to all your applications, but, by using filters, you can adjust the graphs to match your requests. This way, you can view more specific data that fit your analysis. - -When you add a filter, you can set the **Field**, such as "Host", "Status", or "Scheme", and the **Operator**, such as "Like", "Range", or "Not equal". - -You can find more details about each field on the [Fields Metrics documentation](https://www.azion.com/en/documentation/products/graphql-api/features/metrics-fields/) and about operators on the [Queries documentation](https://www.azion.com/en/documentation/products/graphql-api-queries/#operators). - -You can also set the **value field** that'll be used. Depending on the variable you chose, it can accept values of the String, Int, or Float types. - -### Practical example - -You want to filter your data by status range, but, in the request, you only want results that are in the specific list of 500 statuses. - -In this situation, you should use **Requests Status Code 5xx** and **In**. In the value field, you should add the value that you want to filter by, such as "500". Then, your response will contain only data that are contained in the informed list. - -> **How can I edit or delete a filter?** -> -> After you add filters, each one shows on the **FILTERS** section. -> -> If you want to edit an existing filter, click on the text of the specific filter. Once the **Edit Filter** popover opens, you can change the filter's settings as you wish. -> -> If you want to delete an existing filter, click the **x** icon next to the specific filter. Repeat the action for each filter you want to delete. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/http-status-codes-2xx/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/http-status-codes-2xx/index.md deleted file mode 100644 index f7fe322936..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/http-status-codes-2xx/index.md +++ /dev/null @@ -1,12 +0,0 @@ -## HTTP Status Codes 2XX - -Whenever a domain that's associated with an Azion application receives a request, it also receives a specific status code according to the server's response. The graph then shows the sum of total requests that received a status 2XX. - -The 2XX status codes indicate successful requests on the server's side. This means the request passed the stages of: received, understood, accepted, and processed by the server, and the end user is able to see your domain's content. - -> The graph is divided into: -> -> - **Requests Status Code200**: the content was delivered to the user correctly. Standard status for a successful HTTP request. -> - **Requests Status Code204**: the server completed the request, but had no content to deliver. -> - **Requests Status Code206**: the server delivered only a part of the content because it was divided into parts. -> - **Requests Status Code2xx**: the server indicated other status of the 2XX type. They rarely occur, and are all gathered on this option. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/http-status-codes-3xx/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/http-status-codes-3xx/index.md deleted file mode 100644 index 66b7fa862f..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/http-status-codes-3xx/index.md +++ /dev/null @@ -1,12 +0,0 @@ -## HTTP Status Codes 3XX - -Whenever a domain that's associated with an Azion application receives a request, it also receives a specific status code according to the server's response. The graph then shows the sum of total requests that received a status 3XX. - -The 3XX status codes indicate redirection on the server's side. This means the request wasn't fully completed because the content was in another location, and it had to perform one more action to deliver your domain's content. - -> The graph is divided into: -> -> - **Requests Status Code301**: current and all future requests will be redirected to another URL. -> - **Requests Status Code302**: this request was temporarily redirected to another URL. -> - **Requests Status Code304**: the content header indicates that it hasn't been modified and doesn't need to be resent. It can deliver the existing file to the user’s browser. -> - **Requests Status Code3xx**: the server indicated other status of the 3XX type. They rarely occur, and are all gathered on this option. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/http-status-codes-4xx/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/http-status-codes-4xx/index.md deleted file mode 100644 index 79518ff0fd..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/http-status-codes-4xx/index.md +++ /dev/null @@ -1,12 +0,0 @@ -## HTTP Status Codes 4XX - -Whenever a domain that's associated with an Azion application receives a request, it also receives a specific status code according to the server's response. The graph then shows the sum of total requests that received a status 4XX. - -The 4XX status codes indicate there was an error on the client's side. This means the request couldn't be completed by the server because it identified an error, likely due to the page being unavailable or the request containing bad syntax. Therefore, the server couldn't deliver your domain's content. - -> The graph is divided into: -> -> - **Requests Status Code400**: the server can't process the request. Generally occurs due to an error with the request format. -> - **Requests Status Code403**: the request is valid, but wasn't authorized by the server. This means that the user or the IP address that's making the request isn't authorized to do so. -> - **Requests Status Code404**: the file that was requested doesn't exist on the origin server. -> - **Requests Status Code4xx**: the server indicated other status of the 4XX type. They rarely occur, and are all gathered on this option. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/http-status-codes-5xx/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/http-status-codes-5xx/index.md deleted file mode 100644 index 4147b9751d..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/http-status-codes-5xx/index.md +++ /dev/null @@ -1,12 +0,0 @@ -## HTTP Status Codes 5XX - -Whenever a domain that's associated with an Azion application receives a request, it also receives a specific status code according to the server's response. The graph then shows the sum of total requests that received a status 5XX. - -The 5XX status codes indicate there was an error on the server's side. This means that the request by the end user seemed to be valid, but for some reason the server couldn't perform the request or encountered an error in the process. Your domain's content still exists, it just couldn't be delivered. - -> The graph is divided into: -> -> - **Requests Status Code500**: generic message given when an unexpected error occurs on the server and it's unable to handle the request. -> - **Requests Status Code502**: when the server is acting as a Gateway or Proxy and receives an invalid response from the origin. Generally occurs when the origin server is offline. -> - **Requests Status Code503**: server isn't available. Generally a temporary status. -> - **Requests Status Code5xx**: the server indicated other status of the 5XX type. They rarely occur, and are all gathered on this option. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/index.md deleted file mode 100644 index 56e0648e14..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-applications/status-codes/index.md +++ /dev/null @@ -1,11 +0,0 @@ ---- - -docs: [ -'Adding filters', -'HTTP Status Codes 2XX', -'HTTP Status Codes 3XX', -'HTTP Status Codes 4XX', -'HTTP Status Codes 5XX' -] - ---- \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-functions/invocations/adding-filters/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-functions/invocations/adding-filters/index.md deleted file mode 100644 index 6c0864bdca..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-functions/invocations/adding-filters/index.md +++ /dev/null @@ -1,23 +0,0 @@ -## Adding filters - -Real-Time Metrics shows you a standard view of data related to all your applications, but, by using filters, you can adjust the graphs to match your requests. This way, you can view more specific data that fit your analysis. - -When you add a filter, you can set the **Field**, such as "Host", "Status", or "Scheme", and the **Operator**, such as "Like", "Range", or "Not equal". - -You can find more details about each field on the [Fields Metrics documentation](https://www.azion.com/en/documentation/products/graphql-api/features/metrics-fields/) and about operators on the [Queries documentation](https://www.azion.com/en/documentation/products/graphql-api-queries/#operators). - -You can also set the **value field** that'll be used. Depending on the variable you chose, it can accept values of the String, Int, or Float types. - -### Practical example - -You want to filter your data by the amount of applications invocations, but, in the request, you only want results that are smaller than a certain value. - -In this situation, you should use **Applications Invocations** and **Less than**. In the value field, you should add the value that you want as a cutoff, such as "50". Then, your response will contain all applications that had a smaller number of invocations than 50. - -> **How can I edit or delete a filter?** -> -> After you add filters, each one shows on the **FILTERS** section. -> -> If you want to edit an existing filter, click on the text of the specific filter. Once the **Edit Filter** popover opens, you can change the filter's settings as you wish. -> -> If you want to delete an existing filter, click the **x** icon next to the specific filter. Repeat the action for each filter you want to delete. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-functions/invocations/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-functions/invocations/index.md deleted file mode 100644 index ee60cc8a2c..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-functions/invocations/index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- - -docs: [ -'Adding filters', -'Total Invocations' -] - ---- \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/edge-functions/invocations/total-invocations/index.md b/src/includes/docs_help_center/en/real-time-metrics/edge-functions/invocations/total-invocations/index.md deleted file mode 100644 index c99bb50030..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/edge-functions/invocations/total-invocations/index.md +++ /dev/null @@ -1,12 +0,0 @@ -## Total Invocations - -The Total Invocations graph shows you the sum of all occasions in which your functions were called. - -> The graph is divided into: -> -> - **Firewall Invocations**: total amount of executed functions associated to a firewall. -> - **Applications Invocations**: total amount of executed functions associated to an application. - -Whenever one of your configured functions is executed, one invocation is calculated. - -Find out more on [how to build applications with Functions](https://www.azion.com/en/documentation/products/edge-application/edge-functions/). diff --git a/src/includes/docs_help_center/en/real-time-metrics/image-processor/requests/adding-filters/index.md b/src/includes/docs_help_center/en/real-time-metrics/image-processor/requests/adding-filters/index.md deleted file mode 100644 index d5557dc8ab..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/image-processor/requests/adding-filters/index.md +++ /dev/null @@ -1,23 +0,0 @@ -## Adding filters - -Real-Time Metrics shows you a standard view of data related to all your applications, but, by using filters, you can adjust the graphs to match your requests. This way, you can view more specific data that fit your analysis. - -When you add a filter, you can set the **Field**, such as "Host", "Status", or "Scheme", and the **Operator**, such as "Like", "Range", or "Not equal". - -You can find more details about each field on the [Fields Metrics documentation](https://www.azion.com/en/documentation/products/graphql-api/features/metrics-fields/) and about operators on the [Queries documentation](https://www.azion.com/en/documentation/products/graphql-api-queries/#operators). - -You can also set the **value field** that'll be used. Depending on the variable you chose, it can accept values of the String, Int, or Float types. - -### Practical example - -You want to filter your data by the amount of bytes sent through your images, but, in the request, you want to exhibit a specific range of values. - -In this situation, you should use **Bytes Sent** and **Range**. In the value fields, you should add the beginning and ending values that you want to filter by, such as "195" and "550". Then, your response will contain only data that are contained in the informed range. - -> **How can I edit or delete a filter?** -> -> After you add filters, each one shows on the **FILTERS** section. -> -> If you want to edit an existing filter, click on the text of the specific filter. Once the **Edit Filter** popover opens, you can change the filter's settings as you wish. -> -> If you want to delete an existing filter, click the **x** icon next to the specific filter. Repeat the action for each filter you want to delete. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/image-processor/requests/index.md b/src/includes/docs_help_center/en/real-time-metrics/image-processor/requests/index.md deleted file mode 100644 index 10fe91bebc..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/image-processor/requests/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- - -docs: [ -'Adding filters', -'Total Requests', -'Total Requests per Second' -] - ---- \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/image-processor/requests/total-requests-per-second/index.md b/src/includes/docs_help_center/en/real-time-metrics/image-processor/requests/total-requests-per-second/index.md deleted file mode 100644 index c2629b19b3..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/image-processor/requests/total-requests-per-second/index.md +++ /dev/null @@ -1,9 +0,0 @@ -## Total Requests per Second - -The Total Requests per Second graph shows you the average of requests per second related to a content that has images processed by [Image Processor](https://www.azion.com/en/documentation/products/edge-application/image-processor/). - -The processing of images can be related to resizing, cropping, changing quality, or any other feature that Image Processor provides. If an image had any kind of treatment through Image Processor, the average of requests to the image in the domain it's configured on that occurred per second during the period you've selected are shown in the graph. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses averages of requests/second to show your data. Example: 0.026/s \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/image-processor/requests/total-requests/index.md b/src/includes/docs_help_center/en/real-time-metrics/image-processor/requests/total-requests/index.md deleted file mode 100644 index a148a07d5f..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/image-processor/requests/total-requests/index.md +++ /dev/null @@ -1,7 +0,0 @@ -## Total Requests - -The Total Requests graph shows you the sum of all requests related to a content that has images processed by [Image Processor](https://www.azion.com/en/documentation/products/edge-application/image-processor/). - -The processing of images can be related to resizing, cropping, changing quality, or any other feature that Image Processor provides. - -If an image had any kind of treatment through Image Processor, the requests to the image in the domain it's configured on are shown in the graph. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/intelligent-dns/standard-queries/adding-filters/index.md b/src/includes/docs_help_center/en/real-time-metrics/intelligent-dns/standard-queries/adding-filters/index.md deleted file mode 100644 index e3fec3ee19..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/intelligent-dns/standard-queries/adding-filters/index.md +++ /dev/null @@ -1,23 +0,0 @@ -## Adding filters - -Real-Time Metrics shows you a standard view of data related to all your applications, but, by using filters, you can adjust the graphs to match your requests. This way, you can view more specific data that fit your analysis. - -When you add a filter, you can set the **Field**, such as "Host", "Status", or "Scheme", and the **Operator**, such as "Like", "Range", or "Not equal". - -You can find more details about each field on the [Fields Metrics documentation](https://www.azion.com/en/documentation/products/graphql-api/features/metrics-fields/) and about operators on the [Queries documentation](https://www.azion.com/en/documentation/products/graphql-api-queries/#operators). - -You can also set the **value field** that'll be used. Depending on the variable you chose, it can accept values of the String, Int, or Float types. - -### Practical example - -You want to filter your data by specific zones, but, in the request, you only want zones that are an exact match to the one you inform. - -In this situation, you should use **Zone Id** and **Equal**. In the value field, you should add the specific id you want to filter by, such as "1340". Then, your response will only contain that specified zone. - -> **How can I edit or delete a filter?** -> -> After you add filters, each one shows on the **FILTERS** section. -> -> If you want to edit an existing filter, click on the text of the specific filter. Once the **Edit Filter** popover opens, you can change the filter's settings as you wish. -> -> If you want to delete an existing filter, click the **x** icon next to the specific filter. Repeat the action for each filter you want to delete. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/intelligent-dns/standard-queries/index.md b/src/includes/docs_help_center/en/real-time-metrics/intelligent-dns/standard-queries/index.md deleted file mode 100644 index 9873c67710..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/intelligent-dns/standard-queries/index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- - -docs: [ -'Adding filters', -'Total Queries' -] - ---- \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/intelligent-dns/standard-queries/total-queries/index.md b/src/includes/docs_help_center/en/real-time-metrics/intelligent-dns/standard-queries/total-queries/index.md deleted file mode 100644 index 2c28099f6f..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/intelligent-dns/standard-queries/total-queries/index.md +++ /dev/null @@ -1,5 +0,0 @@ -## Total Queries - -The Total Queries graph shows you the total amount of queries received by your DNS configured on [Intelligent DNS](https://www.azion.com/en/documentation/products/intelligent-dns/). - -By using Intelligent DNS, your domains are hosted and managed on Azion. Then, whenever a query is made to your DNS during the period you’ve selected in the time range, the graph displays it. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/l2-caching/caching-offload/adding-filters/index.md b/src/includes/docs_help_center/en/real-time-metrics/l2-caching/caching-offload/adding-filters/index.md deleted file mode 100644 index 9dfc003406..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/l2-caching/caching-offload/adding-filters/index.md +++ /dev/null @@ -1,23 +0,0 @@ -## Adding filters - -Real-Time Metrics shows you a standard view of data related to all your applications, but, by using filters, you can adjust the graphs to match your requests. This way, you can view more specific data that fit your analysis. - -When you add a filter, you can set the **Field**, such as "Host", "Status", or "Scheme", and the **Operator**, such as "Like", "Range", or "Not equal". - -You can find more details about each field on the [Fields Metrics documentation](https://www.azion.com/en/documentation/products/graphql-api/features/metrics-fields/) and about operators on the [Queries documentation](https://www.azion.com/en/documentation/products/graphql-api-queries/#operators). - -You can also set the **value field** that'll be used. Depending on the variable you chose, it can accept values of the String, Int, or Float types. - -### Practical example - -You want to filter your data by percentage of offloading, but, in the request, you want to show only results that are larger than a certain value. - -In this situation, you should use **Offload** and **Greater than**. In the value field, you should add the value that you want to use as a starting point, such as "60". Then, your response will contain only results that are greater than the value informed. - -> **How can I edit or delete a filter?** -> -> After you add filters, each one shows on the **FILTERS** section. -> -> If you want to edit an existing filter, click on the text of the specific filter. Once the **Edit Filter** popover opens, you can change the filter's settings as you wish. -> -> If you want to delete an existing filter, click the **x** icon next to the specific filter. Repeat the action for each filter you want to delete. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/l2-caching/caching-offload/index.md b/src/includes/docs_help_center/en/real-time-metrics/l2-caching/caching-offload/index.md deleted file mode 100644 index 8081746768..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/l2-caching/caching-offload/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- - -docs: [ -'Adding filters', -'Tiered Cache', -'Tiered Cache Offload' -] - ---- \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/l2-caching/caching-offload/l2-caching/index.md b/src/includes/docs_help_center/en/real-time-metrics/l2-caching/caching-offload/l2-caching/index.md deleted file mode 100644 index ba47755bac..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/l2-caching/caching-offload/l2-caching/index.md +++ /dev/null @@ -1,23 +0,0 @@ -## Tiered Cache - -The Tiered Cache graph represents how all information regarding your Tiered Cache data is being accessed on Azion's edge. - -Tiered Cache is a feature for Applications that adds an extra layer of cache between the edge and the client origin. The graph is divided into: - -> - **Data Transferred Total**: all data that was transferred in the process; value of Data Transferred In + Data Transferred Out. -> -> EDGE -> TIERED CACHE -> ORIGIN + ORIGIN -> TIERED CACHE -> EDGE -> -> - **Data Transferred In**: data transferred from the edges and through Tiered Cache until the client origin. -> -> EDGE -> TIERED CACHE -> ORIGIN -> -> - **Data Transferred Out**: data transferred from the client origin and through Tiered Cache to the edges. -> -> ORIGIN -> TIERED CACHE -> EDGE - -To use Tiered Cache and analyze data on it, you must activate it in your account. See the [Tiered Cache documentation](https://www.azion.com/en/documentation/products/edge-application/l2-caching/) for more information. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses bytes to show your data. It automatically converts your data into megabytes (MB), gigabytes (GB), or terabytes (TB), for example, according to the amount of data available to make your visualization easier. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/l2-caching/caching-offload/l2-offload/index.md b/src/includes/docs_help_center/en/real-time-metrics/l2-caching/caching-offload/l2-offload/index.md deleted file mode 100644 index fcba9089d3..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/l2-caching/caching-offload/l2-offload/index.md +++ /dev/null @@ -1,15 +0,0 @@ -## Tiered Cache Offload - -The Tiered Cache Offload graph shows you the percentage of data delivered through Tiered Cache, without having to search for the content on the origin before delivering it. - -> EDGE -> TIERED CACHE -> EDGE - -The higher the percentage of offloading, the better the efficiency of your applications regarding the use of Tiered Cache policies to preserve infrastructure. Azion's edge delivers the content from its cache, demanding less from your origin. - -### Practical example - -Your application has *1 GB of data*. If the graph shows your application had an average of *80% offload*, this means *800 MB out of 1 GB* were delivered through Tiered Cache. - -> **In what unit does data appear on graphs?** -> -> Real-Time Metrics uses percentages to show your data on offload graphs. All data related to offloading reflects the average number of your applications' access, and the graph then represents it with percentages (%). \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/waf/threats/adding-filters/index.md b/src/includes/docs_help_center/en/real-time-metrics/waf/threats/adding-filters/index.md deleted file mode 100644 index 6100992b40..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/waf/threats/adding-filters/index.md +++ /dev/null @@ -1,23 +0,0 @@ -## Adding filters - -Real-Time Metrics shows you a standard view of data related to all your applications, but, by using filters, you can adjust the graphs to match your requests. This way, you can view more specific data that fit your analysis. - -When you add a filter, you can set the **Field**, such as "Host", "Status", or "Scheme", and the **Operator**, such as "Like", "Range", or "Not equal". - -You can find more details about each field on the [Fields Metrics documentation](https://www.azion.com/en/documentation/products/graphql-api/features/metrics-fields/) and about operators on the [Queries documentation](https://www.azion.com/en/documentation/products/graphql-api-queries/#operators). - -You can also set the **value field** that'll be used. Depending on the variable you chose, it can accept values of the String, Int, or Float types. - -### Practical example - -You want to filter your data by the amount of threat requests that were processed by WAF, but, in the request, you only want results that are in Learning mode. - -In this situation, you should use **Waf Requests Threat** and **Equal**. In the value field, you should add the value for Learning mode, which is "1". Then, your response will contain only results for requests in Learning mode. - -> **How can I edit or delete a filter?** -> -> After you add filters, each one shows on the **FILTERS** section. -> -> If you want to edit an existing filter, click on the text of the specific filter. Once the **Edit Filter** popover opens, you can change the filter's settings as you wish. -> -> If you want to delete an existing filter, click the **x** icon next to the specific filter. Repeat the action for each filter you want to delete. \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/waf/threats/cross-site-scripting-xss-threats/index.md b/src/includes/docs_help_center/en/real-time-metrics/waf/threats/cross-site-scripting-xss-threats/index.md deleted file mode 100644 index d8ee8351bd..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/waf/threats/cross-site-scripting-xss-threats/index.md +++ /dev/null @@ -1,9 +0,0 @@ -## Cross-Site scripting (XSS) Threats - -The Cross-Site Scripting (XSS) Threats graph shows you the sum of XSS attacks type made against your domains. - -An XSS threat injects client-side malicious scripts into pages viewed by your visitors, compromising your application and website's security. WAF analyzes each request and, when it's identified as a threat, blocks it. - -Then, the graph displays all requests that were identified as XSS threats during the period you've selected in the time range. - -For more details on how WAF analyzed the requests, see your logs through [Real-Time Events](https://www.azion.com/en/documentation/products/real-time-events/). \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/waf/threats/index.md b/src/includes/docs_help_center/en/real-time-metrics/waf/threats/index.md deleted file mode 100644 index 0870429402..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/waf/threats/index.md +++ /dev/null @@ -1,12 +0,0 @@ ---- - -docs: [ -'Adding filters', -'Threats vs Requests', -'Cross-Site scripting (XSS) Threats', -'Remote File Inclusion (RFI) Threats', -'SQL Injection Threats', -'Other Threats' -] - ---- \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/waf/threats/other-threats/index.md b/src/includes/docs_help_center/en/real-time-metrics/waf/threats/other-threats/index.md deleted file mode 100644 index 0e0a861704..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/waf/threats/other-threats/index.md +++ /dev/null @@ -1,7 +0,0 @@ -## Other Threats - -The Other Threats graph shows you the sum of all requests that WAF considered as a threat and didn't fit in other specific categories, such as XSS or RFI threats. - -WAF analyzes all requests made to your domains, and when it identifies one as a threat, blocks it. Then, the graph displays all requests that were identified as threats during the period you've selected in the time range. - -For more details on how WAF analyzed the requests, see your logs through [Real-Time Events](https://www.azion.com/en/documentation/products/real-time-events/). \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/waf/threats/remote-file-inclusion-rfi-threats/index.md b/src/includes/docs_help_center/en/real-time-metrics/waf/threats/remote-file-inclusion-rfi-threats/index.md deleted file mode 100644 index e65ff3104a..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/waf/threats/remote-file-inclusion-rfi-threats/index.md +++ /dev/null @@ -1,9 +0,0 @@ -## Remote File Inclusion (RFI) Threats - -The Remote File Inclusion (RFI) Threats graph shows you the sum of RFI attacks type made against your domains. - -An RFI threat usually includes remote files or scripts to your domain, compromising your application and website's security. WAF analyzes each request and, when it's identified as a threat, blocks it. - -Then, the graph displays all requests that were identified as RFI threats during the period you've selected in the time range. - -For more details on how WAF analyzed the requests, see your logs through [Real-Time Events](https://www.azion.com/en/documentation/products/real-time-events/). \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/waf/threats/sql-injection-threats/index.md b/src/includes/docs_help_center/en/real-time-metrics/waf/threats/sql-injection-threats/index.md deleted file mode 100644 index b264d5b0c7..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/waf/threats/sql-injection-threats/index.md +++ /dev/null @@ -1,9 +0,0 @@ -## SQL Injection Threats - -The SQL Injection Threats graph shows you the sum of SQL Injection attacks type made against your domains. - -An SQL injection threat injects a code to your domain seeking to view and attack data that they shouldn't be able to access, compromising your application and website's security. WAF analyzes each request, and when it's identified as a threat, blocks it. - -Then, the graph displays all requests that were identified as SQL injection threats during the period you've selected in the time range. - -For more details on how WAF analyzed the requests, see your logs through [Real-Time Events](https://www.azion.com/en/documentation/products/real-time-events/). \ No newline at end of file diff --git a/src/includes/docs_help_center/en/real-time-metrics/waf/threats/threats-vs-requests/index.md b/src/includes/docs_help_center/en/real-time-metrics/waf/threats/threats-vs-requests/index.md deleted file mode 100644 index a478353432..0000000000 --- a/src/includes/docs_help_center/en/real-time-metrics/waf/threats/threats-vs-requests/index.md +++ /dev/null @@ -1,13 +0,0 @@ -## Threats vs Requests - -The Threats vs Requests graph shows you the *sum* of attacks and regular requests made to your domain that were processed by [Web Application Firewall (WAF)](https://www.azion.com/en/documentation/products/edge-firewall/web-application-firewall/). - -WAF analyzes the requests made to your domain associated with an application, detects, and blocks any threats it identifies as malicious activity. - -> The graph displays the total amount of requests and attacks that were processed, and divides it into: - -> - **Waf Requests Blocked**: requests that were identified as a malicious threat and were blocked. -> - **Waf Requests Threats**: requests that were identified as possible threats but weren't blocked. -> - **Waf Requests Allowed**: normal requests that weren't identified as a threat. - -For a more detailed view on the threats occurring against your domains, see your logs through [Real-Time Events](https://www.azion.com/en/documentation/products/real-time-events/). \ No newline at end of file diff --git a/src/nav/trees/guides.json b/src/nav/trees/guides.json index de384874ed..5f020eb4d5 100644 --- a/src/nav/trees/guides.json +++ b/src/nav/trees/guides.json @@ -1619,7 +1619,13 @@ }, "items": [ { - "page": "docs_plugin_grafana_customize" + "page": "docs_plugin_grafana_customize", + "products": ["real-time-metrics"], + "kind": "how-to-guide", + "label": { + "en": "Build a custom Grafana dashboard", + "pt-br": "Crie um dashboard no Grafana" + } }, { "page": "docs_plugin_grafana_log_table" @@ -1630,10 +1636,47 @@ }, { "page": "docs_add_filters_metrics", - "products": ["real-time-metrics"] + "products": ["real-time-metrics"], + "kind": "how-to-guide", + "label": { + "en": "Filter a dashboard", + "pt-br": "Filtre um dashboard" + } }, { "page": "docs_analyze_metrics", + "products": ["real-time-metrics"], + "kind": "how-to-guide", + "label": { + "en": "Export a chart's data and query", + "pt-br": "Exporte a query e os dados de um gráfico" + } + }, + { + "page": "docs_guides_rtm_requests_by_status", + "label": { + "en": "Break down requests by status code", + "pt-br": "Detalhe as requisições por status code" + }, + "kind": "how-to-guide", + "products": ["real-time-metrics"] + }, + { + "page": "docs_guides_rtm_cache_offload", + "label": { + "en": "Measure cache offload for a domain", + "pt-br": "Meça o offload de cache de um domínio" + }, + "kind": "how-to-guide", + "products": ["real-time-metrics"] + }, + { + "page": "docs_guides_rtm_top_waf_threats", + "label": { + "en": "Find the top sources of WAF threats", + "pt-br": "Principais origens de ameaças do WAF" + }, + "kind": "how-to-guide", "products": ["real-time-metrics"] }, { @@ -1666,7 +1709,13 @@ "products": ["graphql"] }, { - "page": "docs_integrate_grafana" + "page": "docs_integrate_grafana", + "products": ["real-time-metrics", "real-time-events"], + "kind": "how-to-guide", + "label": { + "en": "Install the Azion plugin for Grafana", + "pt-br": "Instale o plugin da Azion para Grafana" + } }, { "page": "documentation_how_to_configurations_graphql_aggregated_data", @@ -1744,10 +1793,6 @@ { "page": "docs_grafana_best_practices" }, - { - "page": "docs_use_real_time_metrics", - "products": ["real-time-metrics"] - }, { "page": "documentation_how_to_configurations_splunk", "products": ["data-stream"] @@ -1762,7 +1807,12 @@ }, { "page": "docs_guides_query_httpBreakdownMetrics_graphql", - "products": ["real-time-metrics", "graphql"] + "products": ["real-time-metrics", "graphql"], + "kind": "how-to-guide", + "label": { + "en": "Query the httpBreakdownMetrics dataset", + "pt-br": "Consulte o dataset httpBreakdownMetrics" + } }, { "page": "docs_guides_query_bot_manager_breakdown_data_graphql", @@ -1799,17 +1849,31 @@ "products": ["data-stream"] }, { - "page": "docs_plugin_grafana_prebuilt" + "page": "docs_plugin_grafana_prebuilt", + "products": ["real-time-metrics"], + "kind": "how-to-guide", + "label": { + "en": "Import the pre-built Grafana dashboard", + "pt-br": "Importe o dashboard pré-configurado" + } }, { "page": "docs_grafana_data_transferred_dash_json", "kind": "how-to-guide", - "products": ["real-time-metrics"] + "products": ["real-time-metrics"], + "label": { + "en": "Import the Data Transferred dashboard", + "pt-br": "Importe o dashboard Data Transferred" + } }, { "page": "docs_grafana_metrics_events_dash_json", "kind": "how-to-guide", - "products": ["real-time-metrics"] + "products": ["real-time-metrics"], + "label": { + "en": "Import the Real-Time Metrics dashboard", + "pt-br": "Importe o dashboard Real-Time Metrics" + } } ] } diff --git a/src/nav/trees/real-time-metrics.json b/src/nav/trees/real-time-metrics.json index 6c980ed1e0..ddaa7a4752 100644 --- a/src/nav/trees/real-time-metrics.json +++ b/src/nav/trees/real-time-metrics.json @@ -1,10 +1,12 @@ { "id": "real-time-metrics", "title": { - "en": "Real-Time Metrics" + "en": "Real-Time Metrics", + "pt-br": "Real-Time Metrics" }, "description": { - "en": "Gain instant insights and operational visibility" + "en": "Gain instant insights and operational visibility", + "pt-br": "Obtenha insights instantâneos e visibilidade operacional" }, "parent": "root", "path": { @@ -27,6 +29,21 @@ "label": { "en": "Quickstart", "pt-br": "Primeiros passos" + }, + "slug": { + "en": "quickstart", + "pt-br": "primeiros-passos" + } + }, + { + "page": "documentation_products_real_time_metrics_how_it_works", + "label": { + "en": "How it works", + "pt-br": "Como funciona" + }, + "slug": { + "en": "how-it-works", + "pt-br": "como-funciona" } }, { @@ -47,10 +64,95 @@ }, "items": [ { - "page": "docs_products_historical_real_time_metrics" + "page": "documentation_products_real_time_metrics_filters_and_time_range", + "label": { + "en": "Filters and time range", + "pt-br": "Filtros e intervalo de tempo" + }, + "slug": { + "en": "filters-and-time-range", + "pt-br": "filtros-e-intervalo-de-tempo" + } + }, + { + "page": "documentation_products_real_time_metrics_build_dashboards", + "label": { + "en": "Build dashboards", + "pt-br": "Dashboards de Build" + }, + "slug": { + "en": "build-dashboards", + "pt-br": "dashboards-build" + } + }, + { + "page": "documentation_products_real_time_metrics_secure_dashboards", + "label": { + "en": "Secure dashboards", + "pt-br": "Dashboards de Secure" + }, + "slug": { + "en": "secure-dashboards", + "pt-br": "dashboards-secure" + } + }, + { + "page": "documentation_products_real_time_metrics_observe_dashboards", + "label": { + "en": "Observe dashboards", + "pt-br": "Dashboards de Observe" + }, + "slug": { + "en": "observe-dashboards", + "pt-br": "dashboards-observe" + } } ] }, + { + "page": "documentation_products_real_time_metrics_limits", + "label": { + "en": "Limits", + "pt-br": "Limites" + }, + "slug": { + "en": "limits", + "pt-br": "limites" + } + }, + { + "page": "documentation_products_real_time_metrics_best_practices", + "label": { + "en": "Best practices", + "pt-br": "Boas práticas" + }, + "slug": { + "en": "best-practices", + "pt-br": "boas-praticas" + } + }, + { + "page": "documentation_products_real_time_metrics_troubleshooting", + "label": { + "en": "Troubleshooting", + "pt-br": "Solução de problemas" + }, + "slug": { + "en": "troubleshooting", + "pt-br": "solucao-de-problemas" + } + }, + { + "page": "documentation_products_real_time_metrics_glossary", + "label": { + "en": "Glossary", + "pt-br": "Glossário" + }, + "slug": { + "en": "glossary", + "pt-br": "glossario" + } + }, { "label": { "en": "Management", @@ -63,7 +165,8 @@ "en": "Pricing", "pt-br": "Preços" }, - "linkOnly": true + "linkOnly": true, + "hash": "real-time-metrics" }, { "tree": "changelog",