diff --git a/packages/azure_functions/_dev/build/docs/README.md b/packages/azure_functions/_dev/build/docs/README.md index 5f2a38c4909..45600ef5d0f 100644 --- a/packages/azure_functions/_dev/build/docs/README.md +++ b/packages/azure_functions/_dev/build/docs/README.md @@ -1,32 +1,37 @@ -# Azure Functions +# Azure Functions Integration for Elastic -The Azure Functions integration allows you to monitor Azure Functions. Azure Functions is an event-driven, serverless compute platform that helps you develop more efficiently using the programming language of your choice. Triggers cause a function to run. A trigger defines how a function is invoked and a function must have exactly one trigger. +## Overview + +Azure Functions integration for Elastic enables collection of logs and metrics that give insight into the performance of your Azure Function Apps. The integration includes an out-of-the-box dashboard for visualising the monitoring data generated by apps hosted in Azure Functions. + +Azure Functions is an event-driven, serverless compute platform that helps you develop more efficiently using the programming language of your choice. Triggers cause a function to run. A trigger defines how a function is invoked and a function must have exactly one trigger. Use Azure Functions to build web APIs, respond to database changes, process IoT streams, manage message queues, and more. Refer common [Azure Functions scenarios](https://learn.microsoft.com/en-us/azure/azure-functions/functions-scenarios?pivots=programming-language-csharp) for more information. -## Hosting plans and metrics +### Compatibility -Each Azure Functions app requires a hosting plan: Consumption plan, Flex Consumption plan, Premium plan, Dedicated plan, or Container Apps. For more details on the various plans, check the [Azure Functions hosting options](https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale?WT.mc_id=Portal-WebsitesExtension). +This integration is compatible with Azure Functions runtime version 4.x. -These plans differ from eachother in the number of metrics they generate, which are then exported outside of Azure for other monitoring solutions like Elastic Observability. For example, metrics specific to Azure Function Apps, such as 'FunctionExecutionCount' and 'FunctionExecutionUnits', are only available for function apps operating on a Consumption (serverless) plan and are not observed in other plans. On the other hand, all other metrics are generated exclusively for Premium and Dedicated plans and are not available for the Consumption plan. +Metrics are collected from the Azure Monitor provider `Microsoft.Web/sites` and are available for Function Apps running on Windows and Linux under Consumption, Premium, and Dedicated (App Service) plans. -## Data streams -The Azure Functions integration contains two data streams: [Function App Logs](#logs) and [Metrics](#metrics) +Support for specific metrics may vary depending on the hosting plan and region. Some metrics (such as AppConnections and AverageMemoryWorkingSet) are available only for Premium and Dedicated plans. For more details on the various plans, check the [Azure Functions hosting options](https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale?WT.mc_id=Portal-WebsitesExtension). -### Logs -Supported log categories: +## What data does this integration collect? -| Log Category | Description | -|:----------------------------:|:------------------------------------------------------------------------------------------------------------------------------------:| -| Functionapplogs | Function app logs. | +The Azure Functions integration collects data of the following types: +* [Function App Logs](https://learn.microsoft.com/en-us/azure/azure-monitor/reference/tables/functionapplogs) - detailed logs for function executions, errors, and diagnostic information +* [Metrics](https://learn.microsoft.com/en-us/azure/azure-monitor/reference/supported-metrics/microsoft-web-sites-metrics) - quantitative measurements of function performance and resource usage +## What do I need to use this integration? -#### Requirements and setup +Elastic Agent must be installed. For more details, check the Elastic Agent [installation instructions](docs-content://reference/fleet/install-elastic-agents.md). You can install only one Elastic Agent per host. Refer to the [Azure Logs](https://docs.elastic.co/integrations/azure) page for more information about setting up and using this integration. -#### Configuration options +## How do I deploy this integration? + +### Configuration options `eventhub` : _string_ An Event Hub is a fully managed, real-time data ingestion service. Elastic recommends using only letters, numbers, and the hyphen (-) character for Event Hub names to maximize compatibility. You can use existing Event Hubs having underscores (_) in the Event Hub name; in this case, the integration will replace underscores with hyphens (-) when it uses the Event Hub name to create dependent Azure resources behind the scenes (e.g., the storage account container to store Event Hub consumer offsets). Elastic also recommends using a separate event hub for each log type as the field mappings of each log type differ. @@ -75,27 +80,11 @@ https://management.azure.com/ https://management.usgovcloudapi.net/ ``` -{{event "functionapplogs"}} - -**ECS Field Reference** - -Please refer to the following [document](https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html) for detailed information on ECS fields. - -{{fields "functionapplogs"}} - -### Metrics -**Metrics** give you insight into the performance of your Azure Function Apps. The integration includes an out-of-the-box dashboard for visualising the monitoring data generated by apps hosted in Azure Functions. - -#### Requirements - To use this integration you will need: * **Azure App Registration**: You need to set up an Azure App Registration to allow the Agent to access the Azure APIs. The App Registration requires the Monitoring Reader role to access to be able to collect metrics from Function Apps. See more details in the Setup section. * **Elasticsearch and Kibana**: You need Elasticsearch to store and search your data and Kibana to visualize and manage it. You can use our hosted Elasticsearch Service on Elastic Cloud, which is recommended, the [Native Azure Integration](https://azuremarketplace.microsoft.com/en/marketplace/apps/elastic.ec-azure-pp?tab=overview), or self-manage the Elastic Stack on your hardware. -#### Setup - - ```text ┌────────────────────┐ ┌─────────┐ ┌─-─────────────────────┐ │ │ │ │ │ azure.functions │ @@ -111,7 +100,7 @@ To start collecting data with this integration, you need to: * Set up a new Azure app registration by registering an app, adding credentials, and assigning an appropriate role. * Specify integration [settings](#main-options) in Kibana, which will determine how the integration will access the Azure APIs. -#### Register a new app +### Register a new app To create a new app registration: @@ -125,7 +114,7 @@ To create a new app registration: Take note of the **Application (client) ID**, which you will use later when specifying the **Client ID** in the integration settings. -#### Add credentials +### Add credentials Credentials allow your application to access Azure APIs and authenticate itself, requiring no interaction from a user at runtime. @@ -139,7 +128,7 @@ This integration uses Client Secrets to prove its identity. Take note of the content in the **Value** column in the **Client secrets** table, which you will use later when specifying a **Client Secret** in the integration settings. **This secret value is never displayed again after you leave this page.** Record the secret's value in a safe place. -#### Assign role +### Assign role 1. In the [Azure Portal](https://portal.azure.com/), search for and select **Subscriptions**. 2. Select the subscription to assign the application. @@ -159,14 +148,14 @@ Take note of the following values, which you will use later when specifying sett Your App Registration is now ready to be used with the Elastic Agent. -#### Additional Resources +### Additional Resources If you want to learn more about this process, you can read these two general guides from Microsoft: * [Quickstart: Register an application with the Microsoft identity platform](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app) * [Use the portal to create an Azure AD application and service principal that can access resources](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal) -#### Main options +### Main options The settings' main section contains all the options needed to access the Azure APIs and collect the Azure Functions metrics data. You will now use all the values from [App registration](#register-a-new-app) including: @@ -182,7 +171,7 @@ The settings' main section contains all the options needed to access the Azure A `Tenant ID` _string_ : The unique identifier of the Azure Active Directory's Tenant ID. -#### Advanced options +### Advanced options There are two additional advanced options: @@ -206,12 +195,42 @@ Examples: * `https://login.microsoftonline.com` for Azure PublicCloud * `https://login.microsoftonline.us` for Azure USGovernmentCloud -#### Metrics Reference +### Enable the integration in Elastic -{{event "metrics"}} +1. In Kibana navigate to **Management** > **Integrations**. +2. In the search bar, type **Azure Functions**. +3. Select the **Azure Functions** integration and add it. +4. If needed, install Elastic Agent on the systems which receive syslog messages or log files. +5. Enable and configure only the collection methods which you will use. + + * **To collect logs via syslog over TCP**, you'll need to configure the syslog server host and port details. -**ECS Field Reference** + * **To collect logs via syslog over UDP**, you'll need to configure the syslog server host and port details. -Please refer to the following [document](https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html) for detailed information on ECS fields. + * **To collect logs via log file**, configure the file path patterns which will be monitored, in the Paths field. + +6. Press **Save Integration** to begin collecting logs. + +### Validate log collection + +1. In Kibana, navigate to **Dashboards**. +2. In the search bar, type **Logs PANW**. +3. Select a dashboard overview for the data type you are collecting, and verify the dashboard information is populated. + +## Reference + +### ECS field reference for Logs + +{{fields "functionapplogs"}} + +### Example event + +{{event "functionapplogs"}} + +### ECS field reference for Metrics {{fields "metrics"}} + +### Example event + +{{event "metrics"}} diff --git a/packages/azure_functions/changelog.yml b/packages/azure_functions/changelog.yml index c203216928f..77d91dd1446 100644 --- a/packages/azure_functions/changelog.yml +++ b/packages/azure_functions/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.12.0" + changes: + - description: Update dashboard and documentation. + type: enhancement + link: https://github.com/elastic/integrations/pull/15638 - version: "0.11.0" changes: - description: Update the ingest pipeline to handle properties field as JSON object or string. diff --git a/packages/azure_functions/data_stream/metrics/agent/stream/stream.yml.hbs b/packages/azure_functions/data_stream/metrics/agent/stream/stream.yml.hbs index 9890a3affad..f2bc65a3bdd 100644 --- a/packages/azure_functions/data_stream/metrics/agent/stream/stream.yml.hbs +++ b/packages/azure_functions/data_stream/metrics/agent/stream/stream.yml.hbs @@ -29,7 +29,7 @@ resources: - resource_group: "{{this}}" resource_type: "Microsoft.Web/sites" metrics: - - name: ["FunctionExecutionCount", "FunctionExecutionUnits", "AppConnections", "AverageMemoryWorkingSet", "BytesReceived", "BytesSent", "CurrentAssemblies", "Gen0Collections", "Gen1Collections", "Gen2Collections", "Handles", "HealthCheckStatus", "Http2xx", "Http3xx", "Http4xx", "Http5xx", "HttpResponseTime", "IoOtherBytesPerSecond", "IoOtherOperationsPerSecond", "IoReadBytesPerSecond", "IoReadOperationsPerSecond", "IoWriteBytesPerSecond", "IoWriteOperationsPerSecond", "MemoryWorkingSet", "Requests", "RequestsInApplicationQueue", "Threads", "TotalAppDomains", "TotalAppDomainsUnloaded"] + - name: ["FunctionExecutionCount", "FunctionExecutionUnits", "AppConnections", "AverageMemoryWorkingSet", "BytesReceived", "BytesSent", "Gen0Collections", "Gen1Collections", "Gen2Collections", "Handles", "HealthCheckStatus", "Http2xx", "Http3xx", "Http4xx", "Http5xx", "HttpResponseTime", "IoOtherBytesPerSecond", "IoOtherOperationsPerSecond", "IoReadBytesPerSecond", "IoReadOperationsPerSecond", "IoWriteBytesPerSecond", "IoWriteOperationsPerSecond", "MemoryWorkingSet", "Requests", "RequestsInApplicationQueue", "Threads", "TotalAppDomains", "TotalAppDomainsUnloaded"] namespace: "Microsoft.Web/sites" timegrain: "PT5M" ignore_unsupported: true @@ -43,7 +43,7 @@ resources: {{#each resource_ids}} - resource_id: "{{this}}" metrics: - - name: ["FunctionExecutionCount", "FunctionExecutionUnits", "AppConnections", "AverageMemoryWorkingSet", "BytesReceived", "BytesSent", "CurrentAssemblies", "Gen0Collections", "Gen1Collections", "Gen2Collections", "Handles", "HealthCheckStatus", "Http2xx", "Http3xx", "Http4xx", "Http5xx", "HttpResponseTime", "IoOtherBytesPerSecond", "IoOtherOperationsPerSecond", "IoReadBytesPerSecond", "IoReadOperationsPerSecond", "IoWriteBytesPerSecond", "IoWriteOperationsPerSecond", "MemoryWorkingSet", "Requests", "RequestsInApplicationQueue", "Threads", "TotalAppDomains", "TotalAppDomainsUnloaded"] + - name: ["FunctionExecutionCount", "FunctionExecutionUnits", "AppConnections", "AverageMemoryWorkingSet", "BytesReceived", "BytesSent", "Gen0Collections", "Gen1Collections", "Gen2Collections", "Handles", "HealthCheckStatus", "Http2xx", "Http3xx", "Http4xx", "Http5xx", "HttpResponseTime", "IoOtherBytesPerSecond", "IoOtherOperationsPerSecond", "IoReadBytesPerSecond", "IoReadOperationsPerSecond", "IoWriteBytesPerSecond", "IoWriteOperationsPerSecond", "MemoryWorkingSet", "Requests", "RequestsInApplicationQueue", "Threads", "TotalAppDomains", "TotalAppDomainsUnloaded"] namespace: "Microsoft.Web/sites" timegrain: "PT5M" ignore_unsupported: true @@ -57,7 +57,7 @@ resources: {{#unless resource_groups }} - resource_query: "resourceType eq 'Microsoft.Web/sites'" metrics: - - name: ["FunctionExecutionCount", "FunctionExecutionUnits", "AppConnections", "AverageMemoryWorkingSet", "BytesReceived", "BytesSent", "CurrentAssemblies", "Gen0Collections", "Gen1Collections", "Gen2Collections", "Handles", "HealthCheckStatus", "Http2xx", "Http3xx", "Http4xx", "Http5xx", "HttpResponseTime", "IoOtherBytesPerSecond", "IoOtherOperationsPerSecond", "IoReadBytesPerSecond", "IoReadOperationsPerSecond", "IoWriteBytesPerSecond", "IoWriteOperationsPerSecond", "MemoryWorkingSet", "Requests", "RequestsInApplicationQueue", "Threads", "TotalAppDomains", "TotalAppDomainsUnloaded"] + - name: ["FunctionExecutionCount", "FunctionExecutionUnits", "AppConnections", "AverageMemoryWorkingSet", "BytesReceived", "BytesSent", "Gen0Collections", "Gen1Collections", "Gen2Collections", "Handles", "HealthCheckStatus", "Http2xx", "Http3xx", "Http4xx", "Http5xx", "HttpResponseTime", "IoOtherBytesPerSecond", "IoOtherOperationsPerSecond", "IoReadBytesPerSecond", "IoReadOperationsPerSecond", "IoWriteBytesPerSecond", "IoWriteOperationsPerSecond", "MemoryWorkingSet", "Requests", "RequestsInApplicationQueue", "Threads", "TotalAppDomains", "TotalAppDomainsUnloaded"] namespace: "Microsoft.Web/sites" timegrain: "PT5M" ignore_unsupported: true diff --git a/packages/azure_functions/docs/README.md b/packages/azure_functions/docs/README.md index b80db562329..99d962c2624 100644 --- a/packages/azure_functions/docs/README.md +++ b/packages/azure_functions/docs/README.md @@ -1,32 +1,37 @@ -# Azure Functions +# Azure Functions Integration for Elastic -The Azure Functions integration allows you to monitor Azure Functions. Azure Functions is an event-driven, serverless compute platform that helps you develop more efficiently using the programming language of your choice. Triggers cause a function to run. A trigger defines how a function is invoked and a function must have exactly one trigger. +## Overview + +Azure Functions integration for Elastic enables collection of logs and metrics that give insight into the performance of your Azure Function Apps. The integration includes an out-of-the-box dashboard for visualising the monitoring data generated by apps hosted in Azure Functions. + +Azure Functions is an event-driven, serverless compute platform that helps you develop more efficiently using the programming language of your choice. Triggers cause a function to run. A trigger defines how a function is invoked and a function must have exactly one trigger. Use Azure Functions to build web APIs, respond to database changes, process IoT streams, manage message queues, and more. Refer common [Azure Functions scenarios](https://learn.microsoft.com/en-us/azure/azure-functions/functions-scenarios?pivots=programming-language-csharp) for more information. -## Hosting plans and metrics +### Compatibility -Each Azure Functions app requires a hosting plan: Consumption plan, Flex Consumption plan, Premium plan, Dedicated plan, or Container Apps. For more details on the various plans, check the [Azure Functions hosting options](https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale?WT.mc_id=Portal-WebsitesExtension). +This integration is compatible with Azure Functions runtime version 4.x. -These plans differ from eachother in the number of metrics they generate, which are then exported outside of Azure for other monitoring solutions like Elastic Observability. For example, metrics specific to Azure Function Apps, such as 'FunctionExecutionCount' and 'FunctionExecutionUnits', are only available for function apps operating on a Consumption (serverless) plan and are not observed in other plans. On the other hand, all other metrics are generated exclusively for Premium and Dedicated plans and are not available for the Consumption plan. +Metrics are collected from the Azure Monitor provider `Microsoft.Web/sites` and are available for Function Apps running on Windows and Linux under Consumption, Premium, and Dedicated (App Service) plans. -## Data streams -The Azure Functions integration contains two data streams: [Function App Logs](#logs) and [Metrics](#metrics) +Support for specific metrics may vary depending on the hosting plan and region. Some metrics (such as AppConnections and AverageMemoryWorkingSet) are available only for Premium and Dedicated plans. For more details on the various plans, check the [Azure Functions hosting options](https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale?WT.mc_id=Portal-WebsitesExtension). -### Logs -Supported log categories: +## What data does this integration collect? -| Log Category | Description | -|:----------------------------:|:------------------------------------------------------------------------------------------------------------------------------------:| -| Functionapplogs | Function app logs. | +The Azure Functions integration collects data of the following types: +* [Function App Logs](https://learn.microsoft.com/en-us/azure/azure-monitor/reference/tables/functionapplogs) - detailed logs for function executions, errors, and diagnostic information +* [Metrics](https://learn.microsoft.com/en-us/azure/azure-monitor/reference/supported-metrics/microsoft-web-sites-metrics) - quantitative measurements of function performance and resource usage +## What do I need to use this integration? -#### Requirements and setup +Elastic Agent must be installed. For more details, check the Elastic Agent [installation instructions](docs-content://reference/fleet/install-elastic-agents.md). You can install only one Elastic Agent per host. Refer to the [Azure Logs](https://docs.elastic.co/integrations/azure) page for more information about setting up and using this integration. -#### Configuration options +## How do I deploy this integration? + +### Configuration options `eventhub` : _string_ An Event Hub is a fully managed, real-time data ingestion service. Elastic recommends using only letters, numbers, and the hyphen (-) character for Event Hub names to maximize compatibility. You can use existing Event Hubs having underscores (_) in the Event Hub name; in this case, the integration will replace underscores with hyphens (-) when it uses the Event Hub name to create dependent Azure resources behind the scenes (e.g., the storage account container to store Event Hub consumer offsets). Elastic also recommends using a separate event hub for each log type as the field mappings of each log type differ. @@ -75,116 +80,11 @@ https://management.azure.com/ https://management.usgovcloudapi.net/ ``` -An example event for `functionapplogs` looks as following: - -```json -{ - "@timestamp": "2023-05-23T20:11:59.000Z", - "azure": { - "category": "FunctionAppLogs", - "function": { - "app_name": "test-function", - "category": "Function.hello", - "event_name": "FunctionStarted", - "host_instance_id": "bb84c437-4c26-4d0b-a06d-7fc2f16976e3", - "host_version": "4.19.2.2", - "invocation_id": "d878e365-b3d6-4796-9292-7500acd0c677", - "level": "Information", - "level_id": 2, - "message": "Executing Functions.hello (Reason=This function was programmatically called via the host APIs., Id=d878e365-b3d6-4796-9292-7500acd0c677)", - "name": "Functions.hello", - "process_id": 67, - "role_instance": "54108609-638204200593759681" - }, - "operation_name": "Microsoft.Web/sites/functions/log", - "resource": { - "group": "TEST-RG", - "id": "/SUBSCRIPTIONS/12CABCB4-86E8-404F-A3D2-1DC9982F45CA/RESOURCEGROUPS/TEST-RG/PROVIDERS/MICROSOFT.WEB/SITES/TEST-FUNCTION", - "name": "TEST-FUNCTION", - "provider": "MICROSOFT.WEB/SITES" - }, - "subscription_id": "12CABCB4-86E8-404F-A3D2-1DC9982F45CA" - }, - "cloud": { - "account": { - "id": "12CABCB4-86E8-404F-A3D2-1DC9982F45CA" - }, - "provider": "azure" - }, - "ecs": { - "version": "8.11.0" - }, - "event": { - "original": "{\"time\":\"2023-05-23T20:11:59Z\",\"resourceId\":\"/SUBSCRIPTIONS/12CABCB4-86E8-404F-A3D2-1DC9982F45CA/RESOURCEGROUPS/TEST-RG/PROVIDERS/MICROSOFT.WEB/SITES/TEST-FUNCTION\",\"category\":\"FunctionAppLogs\",\"operationName\":\"Microsoft.Web/sites/functions/log\",\"level\":\"Informational\",\"location\":\"East US\",\"properties\":{\"appName\":\"test-function\",\"roleInstance\":\"54108609-638204200593759681\",\"message\":\"Executing Functions.hello (Reason=This function was programmatically called via the host APIs., Id=d878e365-b3d6-4796-9292-7500acd0c677)\",\"category\":\"Function.hello\",\"hostVersion\":\"4.19.2.2\",\"functionInvocationId\":\"d878e365-b3d6-4796-9292-7500acd0c677\",\"functionName\":\"Functions.hello\",\"hostInstanceId\":\"bb84c437-4c26-4d0b-a06d-7fc2f16976e3\",\"level\":\"Information\",\"levelId\":2,\"processId\":67,\"eventId\":1,\"eventName\":\"FunctionStarted\"}}" - }, - "observer": { - "product": "Azure Functions", - "type": "functions", - "vendor": "Azure" - }, - "tags": [ - "preserve_original_event" - ] -} -``` - -**ECS Field Reference** - -Please refer to the following [document](https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html) for detailed information on ECS fields. - -**Exported fields** - -| Field | Description | Type | -|---|---|---| -| @timestamp | Event timestamp. | date | -| azure.category | The log category name. | keyword | -| azure.event_primary_stamp_name | The primary stamp name for the event | keyword | -| azure.event_stamp_name | The stamp name for the event | keyword | -| azure.event_stamp_type | The stamp type for the event | keyword | -| azure.function.app_name | The Function application name. | keyword | -| azure.function.category | The category of the operation. | keyword | -| azure.function.event_id | The event ID. | long | -| azure.function.event_name | The event name. | keyword | -| azure.function.exception_details | The exception details. This includes the exception type, message, and stack trace. | match_only_text | -| azure.function.exception_message | The exception message. | match_only_text | -| azure.function.exception_type | The exception type. | keyword | -| azure.function.host_instance_id | The host instance ID. | keyword | -| azure.function.host_version | The Functions host version. | keyword | -| azure.function.invocation_id | The invocation ID that logged the message. | keyword | -| azure.function.level | The log level. Valid values are Trace, Debug, Information, Warning, Error, or Critical. | keyword | -| azure.function.level_id | The integer value of the log level. Valid values are 0 (Trace), 1 (Debug), 2 (Information), 3 (Warning), 4 (Error), or 5 (Critical). | long | -| azure.function.message | The log message. | keyword | -| azure.function.name | The name of the function that logged the message. | keyword | -| azure.function.process_id | The process ID. | long | -| azure.function.role_instance | The role instance ID. | keyword | -| azure.operation_name | The operation name. | keyword | -| azure.resource.group | Azure Resource group | keyword | -| azure.resource.id | Resource ID | keyword | -| azure.resource.name | Name | keyword | -| azure.resource.provider | Resource type/namespace | keyword | -| azure.subscription_id | Azure subscription ID | keyword | -| azure.tenant_id | tenant ID | keyword | -| data_stream.dataset | Data stream dataset name. | constant_keyword | -| data_stream.namespace | Data stream namespace. | constant_keyword | -| data_stream.type | Data stream type. | constant_keyword | -| dataset.name | Dataset name. | constant_keyword | -| dataset.namespace | Dataset namespace. | constant_keyword | -| dataset.type | Dataset type. | constant_keyword | - - -### Metrics -**Metrics** give you insight into the performance of your Azure Function Apps. The integration includes an out-of-the-box dashboard for visualising the monitoring data generated by apps hosted in Azure Functions. - -#### Requirements - To use this integration you will need: * **Azure App Registration**: You need to set up an Azure App Registration to allow the Agent to access the Azure APIs. The App Registration requires the Monitoring Reader role to access to be able to collect metrics from Function Apps. See more details in the Setup section. * **Elasticsearch and Kibana**: You need Elasticsearch to store and search your data and Kibana to visualize and manage it. You can use our hosted Elasticsearch Service on Elastic Cloud, which is recommended, the [Native Azure Integration](https://azuremarketplace.microsoft.com/en/marketplace/apps/elastic.ec-azure-pp?tab=overview), or self-manage the Elastic Stack on your hardware. -#### Setup - - ```text ┌────────────────────┐ ┌─────────┐ ┌─-─────────────────────┐ │ │ │ │ │ azure.functions │ @@ -200,7 +100,7 @@ To start collecting data with this integration, you need to: * Set up a new Azure app registration by registering an app, adding credentials, and assigning an appropriate role. * Specify integration [settings](#main-options) in Kibana, which will determine how the integration will access the Azure APIs. -#### Register a new app +### Register a new app To create a new app registration: @@ -214,7 +114,7 @@ To create a new app registration: Take note of the **Application (client) ID**, which you will use later when specifying the **Client ID** in the integration settings. -#### Add credentials +### Add credentials Credentials allow your application to access Azure APIs and authenticate itself, requiring no interaction from a user at runtime. @@ -228,7 +128,7 @@ This integration uses Client Secrets to prove its identity. Take note of the content in the **Value** column in the **Client secrets** table, which you will use later when specifying a **Client Secret** in the integration settings. **This secret value is never displayed again after you leave this page.** Record the secret's value in a safe place. -#### Assign role +### Assign role 1. In the [Azure Portal](https://portal.azure.com/), search for and select **Subscriptions**. 2. Select the subscription to assign the application. @@ -248,14 +148,14 @@ Take note of the following values, which you will use later when specifying sett Your App Registration is now ready to be used with the Elastic Agent. -#### Additional Resources +### Additional Resources If you want to learn more about this process, you can read these two general guides from Microsoft: * [Quickstart: Register an application with the Microsoft identity platform](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app) * [Use the portal to create an Azure AD application and service principal that can access resources](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal) -#### Main options +### Main options The settings' main section contains all the options needed to access the Azure APIs and collect the Azure Functions metrics data. You will now use all the values from [App registration](#register-a-new-app) including: @@ -271,7 +171,7 @@ The settings' main section contains all the options needed to access the Azure A `Tenant ID` _string_ : The unique identifier of the Azure Active Directory's Tenant ID. -#### Advanced options +### Advanced options There are two additional advanced options: @@ -295,7 +195,188 @@ Examples: * `https://login.microsoftonline.com` for Azure PublicCloud * `https://login.microsoftonline.us` for Azure USGovernmentCloud -#### Metrics Reference +### Enable the integration in Elastic + +1. In Kibana navigate to **Management** > **Integrations**. +2. In the search bar, type **Azure Functions**. +3. Select the **Azure Functions** integration and add it. +4. If needed, install Elastic Agent on the systems which receive syslog messages or log files. +5. Enable and configure only the collection methods which you will use. + + * **To collect logs via syslog over TCP**, you'll need to configure the syslog server host and port details. + + * **To collect logs via syslog over UDP**, you'll need to configure the syslog server host and port details. + + * **To collect logs via log file**, configure the file path patterns which will be monitored, in the Paths field. + +6. Press **Save Integration** to begin collecting logs. + +### Validate log collection + +1. In Kibana, navigate to **Dashboards**. +2. In the search bar, type **Logs PANW**. +3. Select a dashboard overview for the data type you are collecting, and verify the dashboard information is populated. + +## Reference + +### ECS field reference for Logs + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| azure.category | The log category name. | keyword | +| azure.event_primary_stamp_name | The primary stamp name for the event | keyword | +| azure.event_stamp_name | The stamp name for the event | keyword | +| azure.event_stamp_type | The stamp type for the event | keyword | +| azure.function.app_name | The Function application name. | keyword | +| azure.function.category | The category of the operation. | keyword | +| azure.function.event_id | The event ID. | long | +| azure.function.event_name | The event name. | keyword | +| azure.function.exception_details | The exception details. This includes the exception type, message, and stack trace. | match_only_text | +| azure.function.exception_message | The exception message. | match_only_text | +| azure.function.exception_type | The exception type. | keyword | +| azure.function.host_instance_id | The host instance ID. | keyword | +| azure.function.host_version | The Functions host version. | keyword | +| azure.function.invocation_id | The invocation ID that logged the message. | keyword | +| azure.function.level | The log level. Valid values are Trace, Debug, Information, Warning, Error, or Critical. | keyword | +| azure.function.level_id | The integer value of the log level. Valid values are 0 (Trace), 1 (Debug), 2 (Information), 3 (Warning), 4 (Error), or 5 (Critical). | long | +| azure.function.message | The log message. | keyword | +| azure.function.name | The name of the function that logged the message. | keyword | +| azure.function.process_id | The process ID. | long | +| azure.function.role_instance | The role instance ID. | keyword | +| azure.operation_name | The operation name. | keyword | +| azure.resource.group | Azure Resource group | keyword | +| azure.resource.id | Resource ID | keyword | +| azure.resource.name | Name | keyword | +| azure.resource.provider | Resource type/namespace | keyword | +| azure.subscription_id | Azure subscription ID | keyword | +| azure.tenant_id | tenant ID | keyword | +| data_stream.dataset | Data stream dataset name. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| dataset.name | Dataset name. | constant_keyword | +| dataset.namespace | Dataset namespace. | constant_keyword | +| dataset.type | Dataset type. | constant_keyword | + + +### Example event + +An example event for `functionapplogs` looks as following: + +```json +{ + "@timestamp": "2023-05-23T20:11:59.000Z", + "azure": { + "category": "FunctionAppLogs", + "function": { + "app_name": "test-function", + "category": "Function.hello", + "event_name": "FunctionStarted", + "host_instance_id": "bb84c437-4c26-4d0b-a06d-7fc2f16976e3", + "host_version": "4.19.2.2", + "invocation_id": "d878e365-b3d6-4796-9292-7500acd0c677", + "level": "Information", + "level_id": 2, + "message": "Executing Functions.hello (Reason=This function was programmatically called via the host APIs., Id=d878e365-b3d6-4796-9292-7500acd0c677)", + "name": "Functions.hello", + "process_id": 67, + "role_instance": "54108609-638204200593759681" + }, + "operation_name": "Microsoft.Web/sites/functions/log", + "resource": { + "group": "TEST-RG", + "id": "/SUBSCRIPTIONS/12CABCB4-86E8-404F-A3D2-1DC9982F45CA/RESOURCEGROUPS/TEST-RG/PROVIDERS/MICROSOFT.WEB/SITES/TEST-FUNCTION", + "name": "TEST-FUNCTION", + "provider": "MICROSOFT.WEB/SITES" + }, + "subscription_id": "12CABCB4-86E8-404F-A3D2-1DC9982F45CA" + }, + "cloud": { + "account": { + "id": "12CABCB4-86E8-404F-A3D2-1DC9982F45CA" + }, + "provider": "azure" + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "original": "{\"time\":\"2023-05-23T20:11:59Z\",\"resourceId\":\"/SUBSCRIPTIONS/12CABCB4-86E8-404F-A3D2-1DC9982F45CA/RESOURCEGROUPS/TEST-RG/PROVIDERS/MICROSOFT.WEB/SITES/TEST-FUNCTION\",\"category\":\"FunctionAppLogs\",\"operationName\":\"Microsoft.Web/sites/functions/log\",\"level\":\"Informational\",\"location\":\"East US\",\"properties\":{\"appName\":\"test-function\",\"roleInstance\":\"54108609-638204200593759681\",\"message\":\"Executing Functions.hello (Reason=This function was programmatically called via the host APIs., Id=d878e365-b3d6-4796-9292-7500acd0c677)\",\"category\":\"Function.hello\",\"hostVersion\":\"4.19.2.2\",\"functionInvocationId\":\"d878e365-b3d6-4796-9292-7500acd0c677\",\"functionName\":\"Functions.hello\",\"hostInstanceId\":\"bb84c437-4c26-4d0b-a06d-7fc2f16976e3\",\"level\":\"Information\",\"levelId\":2,\"processId\":67,\"eventId\":1,\"eventName\":\"FunctionStarted\"}}" + }, + "observer": { + "product": "Azure Functions", + "type": "functions", + "vendor": "Azure" + }, + "tags": [ + "preserve_original_event" + ] +} +``` + +### ECS field reference for Metrics + +**Exported fields** + +| Field | Description | Type | Unit | Metric Type | +|---|---|---|---|---| +| @timestamp | Event timestamp. | date | | | +| azure.application_id | The application ID | keyword | | | +| azure.dimensions.\* | Azure metric dimensions. | object | | | +| azure.functions.app_connections.avg | The number of bound sockets existing in the sandbox (w3wp.exe and its child processes). A bound socket is created by calling bind()/connect() APIs and remains until said socket is closed with CloseHandle()/closesocket(). For WebApps and FunctionApps.. | long | | counter | +| azure.functions.average_memory_working_set.avg | The average amount of memory used by the app, in MiB. For WebApps and FunctionApps. | long | byte | gauge | +| azure.functions.bytes_received.total | The amount of incoming bandwidth consumed by the app, in MiB. | long | byte | gauge | +| azure.functions.bytes_sent.total | The amount of outgoing bandwidth consumed by the app, in MiB. | long | byte | gauge | +| azure.functions.current_assemblies.avg | The current number of Assemblies loaded across all AppDomains in this application. | long | | gauge | +| azure.functions.file_system_usage.avg | Percentage of filesystem quota consumed by the app. | long | byte | gauge | +| azure.functions.function_execution_count.total | Function Execution Count. For FunctionApps only. | long | | counter | +| azure.functions.function_execution_units.total | Function Execution Units. For FunctionApps only. | long | | counter | +| azure.functions.gen_0_collections.total | The number of times the generation 0 objects are garbage collected since the start of the app process. Higher generation GCs include all lower generation GCs. | long | | counter | +| azure.functions.gen_1_collections.total | The number of times the generation 1 objects are garbage collected since the start of the app process. Higher generation GCs include all lower generation GCs. | long | | counter | +| azure.functions.gen_2_collections.total | The number of times the generation 2 objects are garbage collected since the start of the app process. Higher generation GCs include all lower generation GCs. | long | | counter | +| azure.functions.handles.avg | The total number of handles currently open by the app process. | long | | counter | +| azure.functions.health_check_status.avg | Health check status. | long | | gauge | +| azure.functions.http2xx.total | The count of requests resulting in an HTTP status code \>= 200 but \< 300. | long | | counter | +| azure.functions.http3xx.total | The count of requests resulting in an HTTP status code \>= 300 but \< 400. | long | | counter | +| azure.functions.http4xx.total | The count of requests resulting in an HTTP status code \>= 400 but \< 500. | long | | counter | +| azure.functions.http5xx.total | The count of requests resulting in an HTTP status code \>= 500 but \< 600. | long | | counter | +| azure.functions.http_response_time.avg | The time taken for the app to serve requests, in seconds. | long | s | gauge | +| azure.functions.io_other_bytes_per_second.total | The rate at which the app process is issuing bytes to I/O operations that don't involve data, such as control operations. Shown as bytespersecond. | long | | gauge | +| azure.functions.io_other_operations_per_second.total | The rate at which the app process is issuing I/O operations that aren't read or write operations. Shown as bytespersecond. | long | | gauge | +| azure.functions.io_read_bytes_per_second.total | The rate at which the app process is reading bytes from I/O operations. Shown as bytespersecond. | long | | gauge | +| azure.functions.io_read_operations_per_second.total | The rate at which the app process is issuing read I/O operations. Shown as bytespersecond. | long | | gauge | +| azure.functions.io_write_bytes_per_second.total | The rate at which the app process is writing bytes to I/O operations. Shown as bytespersecond. | long | | gauge | +| azure.functions.io_write_operations_per_second.total | The rate at which the app process is issuing write I/O operations. Shown as bytespersecond. | long | | gauge | +| azure.functions.memory_working_set.avg | The current amount of memory used by the app, in MiB. | long | byte | gauge | +| azure.functions.private_bytes.avg | Private Bytes is the current size, in bytes, of memory that the app process has allocated that can't be shared with other processes. | long | byte | gauge | +| azure.functions.requests.total | The total number of requests regardless of their resulting HTTP status code. | long | | counter | +| azure.functions.requests_inapplication_queue.avg | The number of requests in the application request queue. | long | | counter | +| azure.functions.threads.avg | The number of threads currently active in the app process. | long | | gauge | +| azure.functions.total_app_domains.avg | The current number of AppDomains loaded in this application. | long | | gauge | +| azure.functions.total_app_domains_unloaded.avg | The total number of AppDomains unloaded since the start of the application. | long | | gauge | +| azure.namespace | The namespace selected | keyword | | | +| azure.resource.group | The resource group | keyword | | | +| azure.resource.id | The id of the resource | keyword | | | +| azure.resource.name | The name of the resource | keyword | | | +| azure.resource.tags.\* | Azure resource tags. | object | | | +| azure.resource.type | The type of the resource | keyword | | | +| azure.subscription_id | The subscription ID | keyword | | | +| azure.timegrain | The Azure metric timegrain | keyword | | | +| cloud.image.id | Image ID for the cloud instance. | keyword | | | +| data_stream.dataset | Data stream dataset name. | constant_keyword | | | +| data_stream.namespace | Data stream namespace. | constant_keyword | | | +| data_stream.type | Data stream type. | constant_keyword | | | +| dataset.name | Dataset name. | constant_keyword | | | +| dataset.namespace | Dataset namespace. | constant_keyword | | | +| dataset.type | Dataset type. | constant_keyword | | | +| host.containerized | If the host is a container. | boolean | | | +| host.os.build | OS build information. | keyword | | | +| host.os.codename | OS codename, if any. | keyword | | | + + +### Example event An example event for `metrics` looks as following: @@ -445,65 +526,3 @@ An example event for `metrics` looks as following: } } ``` - -**ECS Field Reference** - -Please refer to the following [document](https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html) for detailed information on ECS fields. - -**Exported fields** - -| Field | Description | Type | Unit | Metric Type | -|---|---|---|---|---| -| @timestamp | Event timestamp. | date | | | -| azure.application_id | The application ID | keyword | | | -| azure.dimensions.\* | Azure metric dimensions. | object | | | -| azure.functions.app_connections.avg | The number of bound sockets existing in the sandbox (w3wp.exe and its child processes). A bound socket is created by calling bind()/connect() APIs and remains until said socket is closed with CloseHandle()/closesocket(). For WebApps and FunctionApps.. | long | | counter | -| azure.functions.average_memory_working_set.avg | The average amount of memory used by the app, in MiB. For WebApps and FunctionApps. | long | byte | gauge | -| azure.functions.bytes_received.total | The amount of incoming bandwidth consumed by the app, in MiB. | long | byte | gauge | -| azure.functions.bytes_sent.total | The amount of outgoing bandwidth consumed by the app, in MiB. | long | byte | gauge | -| azure.functions.current_assemblies.avg | The current number of Assemblies loaded across all AppDomains in this application. | long | | gauge | -| azure.functions.file_system_usage.avg | Percentage of filesystem quota consumed by the app. | long | byte | gauge | -| azure.functions.function_execution_count.total | Function Execution Count. For FunctionApps only. | long | | counter | -| azure.functions.function_execution_units.total | Function Execution Units. For FunctionApps only. | long | | counter | -| azure.functions.gen_0_collections.total | The number of times the generation 0 objects are garbage collected since the start of the app process. Higher generation GCs include all lower generation GCs. | long | | counter | -| azure.functions.gen_1_collections.total | The number of times the generation 1 objects are garbage collected since the start of the app process. Higher generation GCs include all lower generation GCs. | long | | counter | -| azure.functions.gen_2_collections.total | The number of times the generation 2 objects are garbage collected since the start of the app process. Higher generation GCs include all lower generation GCs. | long | | counter | -| azure.functions.handles.avg | The total number of handles currently open by the app process. | long | | counter | -| azure.functions.health_check_status.avg | Health check status. | long | | gauge | -| azure.functions.http2xx.total | The count of requests resulting in an HTTP status code \>= 200 but \< 300. | long | | counter | -| azure.functions.http3xx.total | The count of requests resulting in an HTTP status code \>= 300 but \< 400. | long | | counter | -| azure.functions.http4xx.total | The count of requests resulting in an HTTP status code \>= 400 but \< 500. | long | | counter | -| azure.functions.http5xx.total | The count of requests resulting in an HTTP status code \>= 500 but \< 600. | long | | counter | -| azure.functions.http_response_time.avg | The time taken for the app to serve requests, in seconds. | long | s | gauge | -| azure.functions.io_other_bytes_per_second.total | The rate at which the app process is issuing bytes to I/O operations that don't involve data, such as control operations. Shown as bytespersecond. | long | | gauge | -| azure.functions.io_other_operations_per_second.total | The rate at which the app process is issuing I/O operations that aren't read or write operations. Shown as bytespersecond. | long | | gauge | -| azure.functions.io_read_bytes_per_second.total | The rate at which the app process is reading bytes from I/O operations. Shown as bytespersecond. | long | | gauge | -| azure.functions.io_read_operations_per_second.total | The rate at which the app process is issuing read I/O operations. Shown as bytespersecond. | long | | gauge | -| azure.functions.io_write_bytes_per_second.total | The rate at which the app process is writing bytes to I/O operations. Shown as bytespersecond. | long | | gauge | -| azure.functions.io_write_operations_per_second.total | The rate at which the app process is issuing write I/O operations. Shown as bytespersecond. | long | | gauge | -| azure.functions.memory_working_set.avg | The current amount of memory used by the app, in MiB. | long | byte | gauge | -| azure.functions.private_bytes.avg | Private Bytes is the current size, in bytes, of memory that the app process has allocated that can't be shared with other processes. | long | byte | gauge | -| azure.functions.requests.total | The total number of requests regardless of their resulting HTTP status code. | long | | counter | -| azure.functions.requests_inapplication_queue.avg | The number of requests in the application request queue. | long | | counter | -| azure.functions.threads.avg | The number of threads currently active in the app process. | long | | gauge | -| azure.functions.total_app_domains.avg | The current number of AppDomains loaded in this application. | long | | gauge | -| azure.functions.total_app_domains_unloaded.avg | The total number of AppDomains unloaded since the start of the application. | long | | gauge | -| azure.namespace | The namespace selected | keyword | | | -| azure.resource.group | The resource group | keyword | | | -| azure.resource.id | The id of the resource | keyword | | | -| azure.resource.name | The name of the resource | keyword | | | -| azure.resource.tags.\* | Azure resource tags. | object | | | -| azure.resource.type | The type of the resource | keyword | | | -| azure.subscription_id | The subscription ID | keyword | | | -| azure.timegrain | The Azure metric timegrain | keyword | | | -| cloud.image.id | Image ID for the cloud instance. | keyword | | | -| data_stream.dataset | Data stream dataset name. | constant_keyword | | | -| data_stream.namespace | Data stream namespace. | constant_keyword | | | -| data_stream.type | Data stream type. | constant_keyword | | | -| dataset.name | Dataset name. | constant_keyword | | | -| dataset.namespace | Dataset namespace. | constant_keyword | | | -| dataset.type | Dataset type. | constant_keyword | | | -| host.containerized | If the host is a container. | boolean | | | -| host.os.build | OS build information. | keyword | | | -| host.os.codename | OS codename, if any. | keyword | | | - diff --git a/packages/azure_functions/img/azure-functions-overview.png b/packages/azure_functions/img/azure-functions-overview.png new file mode 100644 index 00000000000..1806a51e2cd Binary files /dev/null and b/packages/azure_functions/img/azure-functions-overview.png differ diff --git a/packages/azure_functions/img/azure-functions-overview1.png b/packages/azure_functions/img/azure-functions-overview1.png deleted file mode 100644 index 47a3d61496b..00000000000 Binary files a/packages/azure_functions/img/azure-functions-overview1.png and /dev/null differ diff --git a/packages/azure_functions/img/azure-functions-overview2.png b/packages/azure_functions/img/azure-functions-overview2.png deleted file mode 100644 index 1dd590be74a..00000000000 Binary files a/packages/azure_functions/img/azure-functions-overview2.png and /dev/null differ diff --git a/packages/azure_functions/img/azure-functions-overview3.png b/packages/azure_functions/img/azure-functions-overview3.png deleted file mode 100644 index 3d22d27980b..00000000000 Binary files a/packages/azure_functions/img/azure-functions-overview3.png and /dev/null differ diff --git a/packages/azure_functions/kibana/dashboard/azure_functions-5b40c9c0-33d4-11ee-8d85-2d7adebebd1b.json b/packages/azure_functions/kibana/dashboard/azure_functions-19fb3b7c-1918-461e-8686-51ed09051b2f.json similarity index 74% rename from packages/azure_functions/kibana/dashboard/azure_functions-5b40c9c0-33d4-11ee-8d85-2d7adebebd1b.json rename to packages/azure_functions/kibana/dashboard/azure_functions-19fb3b7c-1918-461e-8686-51ed09051b2f.json index 9a11a237901..e94ec3e2692 100644 --- a/packages/azure_functions/kibana/dashboard/azure_functions-5b40c9c0-33d4-11ee-8d85-2d7adebebd1b.json +++ b/packages/azure_functions/kibana/dashboard/azure_functions-19fb3b7c-1918-461e-8686-51ed09051b2f.json @@ -4,7 +4,8 @@ "chainingSystem": "HIERARCHICAL", "controlStyle": "oneLine", "ignoreParentSettingsJSON": "{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}", - "panelsJSON": "{\"ff8243f3-9c96-4cb0-b703-0af0107bc8f7\":{\"type\":\"optionsListControl\",\"order\":0,\"grow\":false,\"width\":\"medium\",\"explicitInput\":{\"id\":\"ff8243f3-9c96-4cb0-b703-0af0107bc8f7\",\"fieldName\":\"azure.resource.name\",\"title\":\"Filter by Function App\",\"enhancements\":{},\"selectedOptions\":[]}},\"bebd2bf5-eb88-4157-b86b-e6fd9e322b13\":{\"type\":\"optionsListControl\",\"order\":1,\"grow\":false,\"width\":\"medium\",\"explicitInput\":{\"id\":\"bebd2bf5-eb88-4157-b86b-e6fd9e322b13\",\"fieldName\":\"azure.resource.group\",\"title\":\"Filter by resource group\",\"enhancements\":{}}}}" + "panelsJSON": "{\"e03be735-2cb4-474d-91f5-5529d8f00f4d\":{\"grow\":false,\"order\":0,\"type\":\"optionsListControl\",\"width\":\"medium\",\"explicitInput\":{\"id\":\"e03be735-2cb4-474d-91f5-5529d8f00f4d\",\"dataViewId\":\"metrics-*\",\"fieldName\":\"azure.resource.name\",\"title\":\"Filter by Function App\",\"searchTechnique\":\"prefix\",\"runPastTimeout\":null,\"singleSelect\":null,\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"},\"existsSelected\":null,\"exclude\":null,\"placeholder\":null,\"hideActionBar\":null,\"hideExclude\":null,\"hideExists\":null,\"hideSort\":null}},\"f7df8e2f-51d8-4cf4-84ac-1836c1cc14fc\":{\"grow\":false,\"order\":1,\"type\":\"optionsListControl\",\"width\":\"medium\",\"explicitInput\":{\"id\":\"f7df8e2f-51d8-4cf4-84ac-1836c1cc14fc\",\"dataViewId\":\"metrics-*\",\"fieldName\":\"azure.resource.group\",\"title\":\"Filter by resource group\",\"searchTechnique\":\"prefix\",\"runPastTimeout\":null,\"singleSelect\":null,\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"},\"existsSelected\":null,\"exclude\":null,\"placeholder\":null,\"hideActionBar\":null,\"hideExclude\":null,\"hideExists\":null,\"hideSort\":null}}}", + "showApplySelections": false }, "description": "", "kibanaSavedObjectMeta": { @@ -35,7 +36,7 @@ ], "query": { "language": "kuery", - "query": "" + "query": "data_stream.dataset : \"azure.function\" " } } }, @@ -47,6 +48,116 @@ "useMargins": true }, "panelsJSON": [ + { + "embeddableConfig": { + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "imageConfig": { + "altText": "", + "backgroundColor": "", + "sizing": { + "objectFit": "contain" + }, + "src": { + "fileId": "zja7y43s9qbtvsi2o0pq9gbv", + "fileImageMeta": null, + "type": "file" + } + } + }, + "gridData": { + "h": 9, + "i": "a84d3dad-16f9-4244-918c-36a9f6e01933", + "w": 11, + "x": 0, + "y": 0 + }, + "panelIndex": "a84d3dad-16f9-4244-918c-36a9f6e01933", + "type": "image" + }, + { + "embeddableConfig": { + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "savedVis": { + "data": { + "aggs": [], + "searchSource": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "description": "", + "id": "", + "params": { + "fontSize": 12, + "markdown": "## Overview", + "openLinksInNewTab": false + }, + "title": "", + "type": "markdown", + "uiState": {} + } + }, + "gridData": { + "h": 3, + "i": "e403d2b4-1856-409d-8b7c-68fffbbbe6a0", + "w": 11, + "x": 11, + "y": 0 + }, + "panelIndex": "e403d2b4-1856-409d-8b7c-68fffbbbe6a0", + "type": "visualization" + }, + { + "embeddableConfig": { + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "savedVis": { + "data": { + "aggs": [], + "searchSource": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "description": "", + "id": "", + "params": { + "fontSize": 12, + "markdown": "## Function App Activity", + "openLinksInNewTab": false + }, + "title": "", + "type": "markdown", + "uiState": {} + } + }, + "gridData": { + "h": 3, + "i": "f5ac953c-bdfd-4d13-af36-27dac8999691", + "w": 26, + "x": 22, + "y": 0 + }, + "panelIndex": "f5ac953c-bdfd-4d13-af36-27dac8999691", + "type": "visualization" + }, { "embeddableConfig": { "attributes": { @@ -61,6 +172,7 @@ "adHocDataViews": {}, "datasourceStates": { "formBased": { + "currentIndexPatternId": "metrics-*", "layers": { "f6c3c469-2e64-4120-b144-997fb70575e2": { "columnOrder": [ @@ -80,7 +192,8 @@ "sourceField": "azure.resource.name" } }, - "incompleteColumns": {} + "incompleteColumns": {}, + "indexPatternId": "metrics-*" } } }, @@ -98,7 +211,10 @@ "layerId": "f6c3c469-2e64-4120-b144-997fb70575e2", "layerType": "data", "metricAccessor": "b0f015a9-aab1-4b26-b28f-65ce55f354de", - "showBar": false + "showBar": false, + "titlesTextAlign": "left", + "valueFontMode": "fit", + "valuesTextAlign": "center" } }, "title": "", @@ -109,29 +225,23 @@ "hidePanelTitles": true }, "gridData": { - "h": 6, - "i": "58a522e8-acf6-4ad1-a5cc-a699ce9c26c0", - "w": 10, - "x": 0, - "y": 0 + "h": 11, + "i": "0ddffee8-47c7-4ce0-be99-5b1f89d6fd6f", + "w": 11, + "x": 11, + "y": 3 }, - "panelIndex": "58a522e8-acf6-4ad1-a5cc-a699ce9c26c0", + "panelIndex": "0ddffee8-47c7-4ce0-be99-5b1f89d6fd6f", "title": "Number of Active Function Apps", "type": "lens" }, { "embeddableConfig": { "attributes": { - "description": "Health Check Status indicates if there are any unhealthy instances and if they need replacing. A value of 100 means all instances of the App reported a healthy status. ", "references": [ { "id": "metrics-*", - "name": "indexpattern-datasource-layer-113434b9-c581-4b79-9344-13864154c598", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "60014cf3-d9b4-46e8-ae69-999d31086fbc", + "name": "indexpattern-datasource-layer-f672395d-d98c-46e2-b4b5-3751144544e1", "type": "index-pattern" } ], @@ -139,31 +249,31 @@ "adHocDataViews": {}, "datasourceStates": { "formBased": { + "currentIndexPatternId": "metrics-*", "layers": { - "113434b9-c581-4b79-9344-13864154c598": { + "f672395d-d98c-46e2-b4b5-3751144544e1": { "columnOrder": [ - "68c19ae2-0676-4b4a-90e7-c60d2ca556ac", - "8952901b-a1b3-4bb5-9605-c68a31cef340", - "6439d7ec-458f-4daf-a97a-101e6f025660" + "6a10fdf4-3be1-472a-8a39-253dd0854fba", + "d44e6a6f-bea6-42b9-8a7c-f9b875ee489b", + "156adeac-6436-4a2a-8c9a-eb6fa79deb5c" ], "columns": { - "6439d7ec-458f-4daf-a97a-101e6f025660": { - "customLabel": true, + "156adeac-6436-4a2a-8c9a-eb6fa79deb5c": { "dataType": "number", "filter": { "language": "kuery", - "query": "azure.functions.health_check_status.avg: *" + "query": "\"azure.functions.function_execution_count.total\": *" }, "isBucketed": false, - "label": "ExecutionCount", - "operationType": "sum", + "label": "Last value of azure.functions.function_execution_count.total", + "operationType": "last_value", "params": { - "emptyAsNull": true + "sortField": "@timestamp" }, "scale": "ratio", "sourceField": "azure.functions.function_execution_count.total" }, - "68c19ae2-0676-4b4a-90e7-c60d2ca556ac": { + "6a10fdf4-3be1-472a-8a39-253dd0854fba": { "dataType": "string", "isBucketed": true, "label": "Top 10 values of azure.resource.name", @@ -175,7 +285,7 @@ "includeIsRegex": false, "missingBucket": false, "orderBy": { - "columnId": "6439d7ec-458f-4daf-a97a-101e6f025660", + "columnId": "156adeac-6436-4a2a-8c9a-eb6fa79deb5c", "type": "column" }, "orderDirection": "desc", @@ -188,10 +298,11 @@ "scale": "ordinal", "sourceField": "azure.resource.name" }, - "8952901b-a1b3-4bb5-9605-c68a31cef340": { + "d44e6a6f-bea6-42b9-8a7c-f9b875ee489b": { + "customLabel": true, "dataType": "date", "isBucketed": true, - "label": "@timestamp", + "label": " ", "operationType": "date_histogram", "params": { "dropPartials": false, @@ -202,52 +313,21 @@ "sourceField": "@timestamp" } }, + "ignoreGlobalFilters": false, "incompleteColumns": {}, + "indexPatternId": "metrics-*", "sampling": 1 } } }, + "indexpattern": { + "layers": {} + }, "textBased": { "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": "azure.functions.health_check_status.avg: *", - "disabled": false, - "index": "60014cf3-d9b4-46e8-ae69-999d31086fbc", - "key": "query", - "negate": false, - "type": "custom", - "value": "{\"bool\":{\"filter\":[{\"bool\":{\"minimum_should_match\":1,\"should\":[{\"exists\":{\"field\":\"azure.functions.health_check_status.avg\"}}]}}],\"must\":[],\"must_not\":[],\"should\":[]}}" - }, - "query": { - "bool": { - "filter": [ - { - "bool": { - "minimum_should_match": 1, - "should": [ - { - "exists": { - "field": "azure.functions.health_check_status.avg" - } - } - ] - } - } - ], - "must": [], - "must_not": [], - "should": [] - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -255,31 +335,40 @@ }, "visualization": { "axisTitlesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": true - }, - "fittingFunction": "None", - "gridlinesVisibilitySettings": { "x": true, - "yLeft": true, + "yLeft": false, "yRight": true }, - "labelsOrientation": { - "x": 0, - "yLeft": 0, - "yRight": 0 - }, "layers": [ { "accessors": [ - "6439d7ec-458f-4daf-a97a-101e6f025660" + "156adeac-6436-4a2a-8c9a-eb6fa79deb5c" ], - "layerId": "113434b9-c581-4b79-9344-13864154c598", + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "f672395d-d98c-46e2-b4b5-3751144544e1", "layerType": "data", + "position": "top", "seriesType": "line", - "splitAccessor": "68c19ae2-0676-4b4a-90e7-c60d2ca556ac", - "xAccessor": "8952901b-a1b3-4bb5-9605-c68a31cef340" + "showGridlines": false, + "splitAccessor": "6a10fdf4-3be1-472a-8a39-253dd0854fba", + "xAccessor": "d44e6a6f-bea6-42b9-8a7c-f9b875ee489b" } ], "legend": { @@ -287,11 +376,7 @@ "position": "bottom" }, "preferredSeriesType": "line", - "tickLabelsVisibilitySettings": { - "x": true, - "yLeft": true, - "yRight": true - }, + "title": "Empty XY chart", "valueLabels": "hide" } }, @@ -299,241 +384,58 @@ "type": "lens", "visualizationType": "lnsXY" }, - "description": "Captures the number of execution of the function app. ", - "enhancements": {}, - "hidePanelTitles": false + "enhancements": {} }, "gridData": { - "h": 15, - "i": "b9d5606f-9607-4c90-a75f-c2857b266bfa", - "w": 15, - "x": 10, - "y": 0 + "h": 11, + "i": "67753b8a-7cbf-4d02-bc86-56de1b9666cd", + "w": 26, + "x": 22, + "y": 3 }, - "panelIndex": "b9d5606f-9607-4c90-a75f-c2857b266bfa", - "title": "Function Execution Count by Function Apps", + "panelIndex": "67753b8a-7cbf-4d02-bc86-56de1b9666cd", + "title": "Executions - by function apps", "type": "lens" }, { "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-8e323fe9-19c2-405d-bbf6-ba61dc9a190f", - "type": "index-pattern" - } - ], - "state": { - "adHocDataViews": {}, - "datasourceStates": { - "formBased": { - "layers": { - "8e323fe9-19c2-405d-bbf6-ba61dc9a190f": { - "columnOrder": [ - "c4d0be17-9d74-468d-8e55-a064664300d1", - "2cbcc3e5-5848-4a88-910b-7c845618ae2e", - "b37bb938-9515-453c-a5ff-f384a7351317", - "b37bb938-9515-453c-a5ff-f384a7351317X1", - "b37bb938-9515-453c-a5ff-f384a7351317X0", - "b37bb938-9515-453c-a5ff-f384a7351317X2" - ], - "columns": { - "2cbcc3e5-5848-4a88-910b-7c845618ae2e": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Total number of invocations", - "operationType": "sum", - "params": { - "emptyAsNull": true - }, - "scale": "ratio", - "sourceField": "azure.functions.requests.total" - }, - "b37bb938-9515-453c-a5ff-f384a7351317": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Success Percentage", - "operationType": "formula", - "params": { - "format": { - "id": "percent", - "params": { - "decimals": 2 - } - }, - "formula": "sum(azure.functions.http2xx.total) / sum(azure.functions.requests.total) ", - "isFormulaBroken": false - }, - "references": [ - "b37bb938-9515-453c-a5ff-f384a7351317X2" - ], - "scale": "ratio" - }, - "b37bb938-9515-453c-a5ff-f384a7351317X0": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Part of Success Percentage", - "operationType": "sum", - "params": { - "emptyAsNull": false - }, - "scale": "ratio", - "sourceField": "azure.functions.http2xx.total" - }, - "b37bb938-9515-453c-a5ff-f384a7351317X1": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Part of Success Percentage", - "operationType": "sum", - "params": { - "emptyAsNull": false - }, - "scale": "ratio", - "sourceField": "azure.functions.requests.total" - }, - "b37bb938-9515-453c-a5ff-f384a7351317X2": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Part of Success Percentage", - "operationType": "math", - "params": { - "tinymathAst": { - "args": [ - "b37bb938-9515-453c-a5ff-f384a7351317X0", - "b37bb938-9515-453c-a5ff-f384a7351317X1" - ], - "location": { - "max": 73, - "min": 0 - }, - "name": "divide", - "text": "sum(azure.functions.http2xx.total) / sum(azure.functions.requests.total) ", - "type": "function" - } - }, - "references": [ - "b37bb938-9515-453c-a5ff-f384a7351317X0", - "b37bb938-9515-453c-a5ff-f384a7351317X1" - ], - "scale": "ratio" - }, - "c4d0be17-9d74-468d-8e55-a064664300d1": { - "customLabel": true, - "dataType": "string", - "isBucketed": true, - "label": "Top 10 Function Apps", - "operationType": "terms", - "params": { - "exclude": [], - "excludeIsRegex": false, - "include": [], - "includeIsRegex": false, - "missingBucket": false, - "orderBy": { - "columnId": "2cbcc3e5-5848-4a88-910b-7c845618ae2e", - "type": "column" - }, - "orderDirection": "desc", - "otherBucket": true, - "parentFormat": { - "id": "terms" - }, - "size": 10 - }, - "scale": "ordinal", - "sourceField": "azure.resource.name" - } - }, - "incompleteColumns": {}, - "sampling": 1 - } - } - }, - "textBased": { - "layers": {} + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "savedVis": { + "data": { + "aggs": [], + "searchSource": { + "filter": [], + "query": { + "language": "kuery", + "query": "" } - }, - "filters": [], - "internalReferences": [], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "columns": [ - { - "columnId": "c4d0be17-9d74-468d-8e55-a064664300d1", - "isTransposed": false - }, - { - "alignment": "left", - "colorMode": "cell", - "columnId": "2cbcc3e5-5848-4a88-910b-7c845618ae2e", - "isTransposed": false, - "palette": { - "name": "positive", - "params": { - "stops": [ - { - "color": "#d6e9e4", - "stop": 20 - }, - { - "color": "#aed3ca", - "stop": 40 - }, - { - "color": "#85bdb1", - "stop": 60 - }, - { - "color": "#5aa898", - "stop": 80 - }, - { - "color": "#209280", - "stop": 100 - } - ] - }, - "type": "palette" - }, - "summaryRow": "none" - }, - { - "alignment": "left", - "columnId": "b37bb938-9515-453c-a5ff-f384a7351317", - "isTransposed": false - } - ], - "layerId": "8e323fe9-19c2-405d-bbf6-ba61dc9a190f", - "layerType": "data" } }, + "description": "", + "id": "", + "params": { + "fontSize": 12, + "markdown": "## Azure Functions Performance and Health overview\n\nProvides a unified view of Azure Functions performance and reliability.\nTracks:\n- Total invocations\n- Top \u0026 underperforming Function Apps\n- Resource utilization (memory, I/O, network)\n- Error and throughput trends\n\nUse this to identify scaling patterns, performance bottlenecks, and reliability issues.", + "openLinksInNewTab": false + }, "title": "", - "type": "lens", - "visualizationType": "lnsDatatable" - }, - "description": "Shows the number of successful invocations as a percentage of the total invocations per function app. ", - "enhancements": {}, - "hidePanelTitles": false + "type": "markdown", + "uiState": {} + } }, "gridData": { - "h": 15, - "i": "44c459b4-623b-4534-ba78-8904669ae9cb", - "w": 23, - "x": 25, - "y": 0 + "h": 18, + "i": "d91f3695-7cc9-42e6-a263-452b32531716", + "w": 11, + "x": 0, + "y": 9 }, - "panelIndex": "44c459b4-623b-4534-ba78-8904669ae9cb", - "title": "Success Rate", - "type": "lens" + "panelIndex": "d91f3695-7cc9-42e6-a263-452b32531716", + "type": "visualization" }, { "embeddableConfig": { @@ -549,59 +451,35 @@ "adHocDataViews": {}, "datasourceStates": { "formBased": { + "currentIndexPatternId": "metrics-*", "layers": { "b0c25d59-67fb-4970-8b15-1da58db41925": { "columnOrder": [ - "87ec7063-bff9-4d15-87e7-8f1da7b3f12b", "bf6104e4-667c-4384-b819-842c52698256" ], "columns": { - "87ec7063-bff9-4d15-87e7-8f1da7b3f12b": { - "dataType": "string", - "isBucketed": true, - "label": "Top 10 values of azure.resource.name", - "operationType": "terms", - "params": { - "accuracyMode": false, - "exclude": [], - "excludeIsRegex": false, - "include": [], - "includeIsRegex": false, - "missingBucket": false, - "orderBy": { - "columnId": "bf6104e4-667c-4384-b819-842c52698256", - "type": "column" - }, - "orderDirection": "desc", - "otherBucket": true, - "parentFormat": { - "id": "terms" - }, - "size": 10 - }, - "scale": "ordinal", - "sourceField": "azure.resource.name" - }, "bf6104e4-667c-4384-b819-842c52698256": { - "customLabel": false, + "customLabel": true, "dataType": "number", "isBucketed": false, - "label": "Sum of azure.functions.requests.total", + "label": "Total Function Executions", "operationType": "sum", "params": { "emptyAsNull": true, "format": { "id": "number", "params": { - "decimals": 0 + "compact": true, + "decimals": 1 } } }, "scale": "ratio", - "sourceField": "azure.functions.requests.total" + "sourceField": "azure.functions.function_execution_count.total" } }, - "incompleteColumns": {} + "incompleteColumns": {}, + "indexPatternId": "metrics-*" } } }, @@ -616,52 +494,41 @@ "query": "" }, "visualization": { - "layers": [ - { - "categoryDisplay": "default", - "layerId": "b0c25d59-67fb-4970-8b15-1da58db41925", - "layerType": "data", - "legendDisplay": "default", - "legendPosition": "right", - "metrics": [ - "bf6104e4-667c-4384-b819-842c52698256" - ], - "nestedLegend": false, - "numberDisplay": "percent", - "primaryGroups": [ - "87ec7063-bff9-4d15-87e7-8f1da7b3f12b" - ] - } - ], - "shape": "donut" + "layerId": "b0c25d59-67fb-4970-8b15-1da58db41925", + "layerType": "data", + "metricAccessor": "bf6104e4-667c-4384-b819-842c52698256", + "showBar": false, + "titlesTextAlign": "left", + "valueFontMode": "fit", + "valuesTextAlign": "center" } }, "title": "", "type": "lens", - "visualizationType": "lnsPie" + "visualizationType": "lnsMetric" }, "enhancements": {}, "hidePanelTitles": false }, "gridData": { - "h": 9, - "i": "9196bdde-1f73-46f5-97f6-09db15a28b61", - "w": 10, - "x": 0, - "y": 6 + "h": 13, + "i": "78b09166-6e79-4a45-91ac-8cf5409aa8eb", + "w": 11, + "x": 11, + "y": 14 }, - "panelIndex": "9196bdde-1f73-46f5-97f6-09db15a28b61", - "title": "Total Number of Invocations across Function Apps", + "panelIndex": "78b09166-6e79-4a45-91ac-8cf5409aa8eb", + "title": "", "type": "lens" }, { "embeddableConfig": { "attributes": { - "description": "Number of Function invocations that resulted in a HTTP 2xx response code", + "description": "The current amount of memory used by the app. ", "references": [ { "id": "metrics-*", - "name": "indexpattern-datasource-layer-4689dc73-dc78-4c03-b975-62264d68c33b", + "name": "indexpattern-datasource-layer-750303c4-2d5f-4b67-8018-cba6ccc3e3f8", "type": "index-pattern" } ], @@ -669,26 +536,16 @@ "adHocDataViews": {}, "datasourceStates": { "formBased": { + "currentIndexPatternId": "metrics-*", "layers": { - "4689dc73-dc78-4c03-b975-62264d68c33b": { + "750303c4-2d5f-4b67-8018-cba6ccc3e3f8": { "columnOrder": [ - "cb555077-660a-4e41-8974-9ad2d8e3b235", - "a3e51351-a9f0-414d-857e-d908e3919b15", - "a074efc1-3210-40c8-af5b-ba97da2de1ac" + "6a78eb36-cec6-41f4-bda8-c88c3fdabe7f", + "03e43362-ec04-4c0a-8cdf-0bd29107feee", + "1d2a33f9-47f5-4483-bd25-bf258b7fe434" ], "columns": { - "a074efc1-3210-40c8-af5b-ba97da2de1ac": { - "dataType": "number", - "isBucketed": false, - "label": "Sum of azure.functions.http2xx.total", - "operationType": "sum", - "params": { - "emptyAsNull": true - }, - "scale": "ratio", - "sourceField": "azure.functions.http2xx.total" - }, - "a3e51351-a9f0-414d-857e-d908e3919b15": { + "03e43362-ec04-4c0a-8cdf-0bd29107feee": { "dataType": "date", "isBucketed": true, "label": "@timestamp", @@ -701,145 +558,24 @@ "scale": "interval", "sourceField": "@timestamp" }, - "cb555077-660a-4e41-8974-9ad2d8e3b235": { - "dataType": "string", - "isBucketed": true, - "label": "Top 10 values of azure.resource.name", - "operationType": "terms", - "params": { - "exclude": [], - "excludeIsRegex": false, - "include": [], - "includeIsRegex": false, - "missingBucket": false, - "orderBy": { - "columnId": "a074efc1-3210-40c8-af5b-ba97da2de1ac", - "type": "column" - }, - "orderDirection": "desc", - "otherBucket": true, - "parentFormat": { - "id": "terms" - }, - "size": 10 - }, - "scale": "ordinal", - "sourceField": "azure.resource.name" - } - }, - "incompleteColumns": {}, - "sampling": 1 - } - } - }, - "textBased": { - "layers": {} - } - }, - "filters": [], - "internalReferences": [], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "axisTitlesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": true - }, - "fittingFunction": "None", - "gridlinesVisibilitySettings": { - "x": true, - "yLeft": true, - "yRight": true - }, - "labelsOrientation": { - "x": 0, - "yLeft": 0, - "yRight": 0 - }, - "layers": [ - { - "accessors": [ - "a074efc1-3210-40c8-af5b-ba97da2de1ac" - ], - "layerId": "4689dc73-dc78-4c03-b975-62264d68c33b", - "layerType": "data", - "position": "top", - "seriesType": "bar", - "showGridlines": false, - "splitAccessor": "cb555077-660a-4e41-8974-9ad2d8e3b235", - "xAccessor": "a3e51351-a9f0-414d-857e-d908e3919b15" - } - ], - "legend": { - "isVisible": true, - "position": "bottom" - }, - "preferredSeriesType": "bar", - "tickLabelsVisibilitySettings": { - "x": true, - "yLeft": true, - "yRight": true - }, - "valueLabels": "hide" - } - }, - "title": "", - "type": "lens", - "visualizationType": "lnsXY" - }, - "enhancements": {}, - "hidePanelTitles": false - }, - "gridData": { - "h": 14, - "i": "5430e8a9-47ae-4c82-96b7-b0287026409f", - "w": 16, - "x": 0, - "y": 15 - }, - "panelIndex": "5430e8a9-47ae-4c82-96b7-b0287026409f", - "title": "HTTP 2xx Responses", - "type": "lens" - }, - { - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-54edca01-9fb6-444a-8d98-ddb0ff36f9be", - "type": "index-pattern" - } - ], - "state": { - "adHocDataViews": {}, - "datasourceStates": { - "formBased": { - "layers": { - "54edca01-9fb6-444a-8d98-ddb0ff36f9be": { - "columnOrder": [ - "6eddce7c-5301-479c-ab7b-8c574999c145", - "38a86941-b5ec-4a83-9684-0f70bb14a361", - "94937bdd-d5bb-469e-83b9-89e34f3a4614" - ], - "columns": { - "38a86941-b5ec-4a83-9684-0f70bb14a361": { - "dataType": "date", - "isBucketed": true, - "label": "@timestamp", - "operationType": "date_histogram", + "1d2a33f9-47f5-4483-bd25-bf258b7fe434": { + "dataType": "number", + "isBucketed": false, + "label": "Average of azure.functions.average_memory_working_set.avg", + "operationType": "average", "params": { - "dropPartials": false, - "includeEmptyRows": true, - "interval": "auto" + "emptyAsNull": true, + "format": { + "id": "bytes", + "params": { + "decimals": 0 + } + } }, - "scale": "interval", - "sourceField": "@timestamp" + "scale": "ratio", + "sourceField": "azure.functions.average_memory_working_set.avg" }, - "6eddce7c-5301-479c-ab7b-8c574999c145": { + "6a78eb36-cec6-41f4-bda8-c88c3fdabe7f": { "dataType": "string", "isBucketed": true, "label": "Top 10 values of azure.resource.name", @@ -851,7 +587,7 @@ "includeIsRegex": false, "missingBucket": false, "orderBy": { - "columnId": "94937bdd-d5bb-469e-83b9-89e34f3a4614", + "columnId": "1d2a33f9-47f5-4483-bd25-bf258b7fe434", "type": "column" }, "orderDirection": "desc", @@ -863,21 +599,10 @@ }, "scale": "ordinal", "sourceField": "azure.resource.name" - }, - "94937bdd-d5bb-469e-83b9-89e34f3a4614": { - "customLabel": false, - "dataType": "number", - "isBucketed": false, - "label": "Sum of azure.functions.http4xx.total", - "operationType": "sum", - "params": { - "emptyAsNull": true - }, - "scale": "ratio", - "sourceField": "azure.functions.http4xx.total" } }, "incompleteColumns": {}, + "indexPatternId": "metrics-*", "sampling": 1 } } @@ -912,22 +637,22 @@ "layers": [ { "accessors": [ - "94937bdd-d5bb-469e-83b9-89e34f3a4614" + "1d2a33f9-47f5-4483-bd25-bf258b7fe434" ], - "layerId": "54edca01-9fb6-444a-8d98-ddb0ff36f9be", + "layerId": "750303c4-2d5f-4b67-8018-cba6ccc3e3f8", "layerType": "data", "position": "top", - "seriesType": "bar", + "seriesType": "area_stacked", "showGridlines": false, - "splitAccessor": "6eddce7c-5301-479c-ab7b-8c574999c145", - "xAccessor": "38a86941-b5ec-4a83-9684-0f70bb14a361" + "splitAccessor": "6a78eb36-cec6-41f4-bda8-c88c3fdabe7f", + "xAccessor": "03e43362-ec04-4c0a-8cdf-0bd29107feee" } ], "legend": { "isVisible": true, "position": "bottom" }, - "preferredSeriesType": "bar", + "preferredSeriesType": "area", "tickLabelsVisibilitySettings": { "x": true, "yLeft": true, @@ -940,29 +665,69 @@ "type": "lens", "visualizationType": "lnsXY" }, - "description": "Number of Function invocations that resulted in a HTTP 2xx response code", + "description": "The current amount of memory used by the app. ", "enhancements": {}, "hidePanelTitles": false }, "gridData": { - "h": 14, - "i": "7a4bc820-cc0e-40fb-9aee-83ccf7615fa2", - "w": 16, - "x": 16, - "y": 15 + "h": 13, + "i": "554e04cb-aeb1-4e2f-955d-23fe191ee4c4", + "w": 26, + "x": 22, + "y": 14 }, - "panelIndex": "7a4bc820-cc0e-40fb-9aee-83ccf7615fa2", - "title": "HTTP 4xx Responses", + "panelIndex": "554e04cb-aeb1-4e2f-955d-23fe191ee4c4", + "title": "Memory Usage - by Function Apps", "type": "lens" }, + { + "embeddableConfig": { + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "savedVis": { + "data": { + "aggs": [], + "searchSource": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "description": "", + "id": "", + "params": { + "fontSize": 12, + "markdown": "## Request Success and Failure Rates", + "openLinksInNewTab": false + }, + "title": "", + "type": "markdown", + "uiState": {} + } + }, + "gridData": { + "h": 3, + "i": "6f3f9fe0-fad0-412f-9dfa-1320f4c646d3", + "w": 48, + "x": 0, + "y": 27 + }, + "panelIndex": "6f3f9fe0-fad0-412f-9dfa-1320f4c646d3", + "type": "visualization" + }, { "embeddableConfig": { "attributes": { - "description": "Number of server errors or exceptions. ", + "description": "Number of Function invocations that resulted in a HTTP 2xx response code", "references": [ { "id": "metrics-*", - "name": "indexpattern-datasource-layer-419ba4b9-c54a-4e44-b7dc-475a2b04e4a8", + "name": "indexpattern-datasource-layer-4689dc73-dc78-4c03-b975-62264d68c33b", "type": "index-pattern" } ], @@ -971,25 +736,38 @@ "datasourceStates": { "formBased": { "layers": { - "419ba4b9-c54a-4e44-b7dc-475a2b04e4a8": { + "4689dc73-dc78-4c03-b975-62264d68c33b": { "columnOrder": [ - "ed0b46b6-3210-492d-b67b-027e0b427588", - "f4765a92-4ba2-4936-afa3-7e8648c99a8d", - "8d98f3f5-27bb-4ad2-82ec-277d763ab9cc" + "cb555077-660a-4e41-8974-9ad2d8e3b235", + "a3e51351-a9f0-414d-857e-d908e3919b15", + "a074efc1-3210-40c8-af5b-ba97da2de1ac" ], "columns": { - "8d98f3f5-27bb-4ad2-82ec-277d763ab9cc": { + "a074efc1-3210-40c8-af5b-ba97da2de1ac": { "dataType": "number", "isBucketed": false, - "label": "Sum of azure.functions.http5xx.total", + "label": "Sum of azure.functions.http2xx.total", "operationType": "sum", "params": { "emptyAsNull": true }, "scale": "ratio", - "sourceField": "azure.functions.http5xx.total" + "sourceField": "azure.functions.http2xx.total" }, - "ed0b46b6-3210-492d-b67b-027e0b427588": { + "a3e51351-a9f0-414d-857e-d908e3919b15": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "cb555077-660a-4e41-8974-9ad2d8e3b235": { "dataType": "string", "isBucketed": true, "label": "Top 10 values of azure.resource.name", @@ -1001,7 +779,7 @@ "includeIsRegex": false, "missingBucket": false, "orderBy": { - "columnId": "8d98f3f5-27bb-4ad2-82ec-277d763ab9cc", + "columnId": "a074efc1-3210-40c8-af5b-ba97da2de1ac", "type": "column" }, "orderDirection": "desc", @@ -1013,19 +791,6 @@ }, "scale": "ordinal", "sourceField": "azure.resource.name" - }, - "f4765a92-4ba2-4936-afa3-7e8648c99a8d": { - "dataType": "date", - "isBucketed": true, - "label": "@timestamp", - "operationType": "date_histogram", - "params": { - "dropPartials": false, - "includeEmptyRows": true, - "interval": "auto" - }, - "scale": "interval", - "sourceField": "@timestamp" } }, "incompleteColumns": {}, @@ -1063,13 +828,15 @@ "layers": [ { "accessors": [ - "8d98f3f5-27bb-4ad2-82ec-277d763ab9cc" + "a074efc1-3210-40c8-af5b-ba97da2de1ac" ], - "layerId": "419ba4b9-c54a-4e44-b7dc-475a2b04e4a8", + "layerId": "4689dc73-dc78-4c03-b975-62264d68c33b", "layerType": "data", + "position": "top", "seriesType": "bar", - "splitAccessor": "ed0b46b6-3210-492d-b67b-027e0b427588", - "xAccessor": "f4765a92-4ba2-4936-afa3-7e8648c99a8d" + "showGridlines": false, + "splitAccessor": "cb555077-660a-4e41-8974-9ad2d8e3b235", + "xAccessor": "a3e51351-a9f0-414d-857e-d908e3919b15" } ], "legend": { @@ -1089,28 +856,28 @@ "type": "lens", "visualizationType": "lnsXY" }, + "description": "Number of Function invocations that resulted in a HTTP 2xx response code", "enhancements": {}, "hidePanelTitles": false }, "gridData": { - "h": 14, - "i": "266a1bc1-c35b-4959-96c1-5d799a98754c", + "h": 13, + "i": "40e09647-df05-4d42-b685-509dcf980ecf", "w": 16, - "x": 32, - "y": 15 + "x": 0, + "y": 30 }, - "panelIndex": "266a1bc1-c35b-4959-96c1-5d799a98754c", - "title": "HTTP 5xx Error Responses", + "panelIndex": "40e09647-df05-4d42-b685-509dcf980ecf", + "title": "Successful Requests (2xx)", "type": "lens" }, { "embeddableConfig": { "attributes": { - "description": "The time taken for the app to serve requests.", "references": [ { "id": "metrics-*", - "name": "indexpattern-datasource-layer-8d0f0cfa-b115-4100-ba7e-1cadee108055", + "name": "indexpattern-datasource-layer-54edca01-9fb6-444a-8d98-ddb0ff36f9be", "type": "index-pattern" } ], @@ -1119,14 +886,14 @@ "datasourceStates": { "formBased": { "layers": { - "8d0f0cfa-b115-4100-ba7e-1cadee108055": { + "54edca01-9fb6-444a-8d98-ddb0ff36f9be": { "columnOrder": [ - "ae3ff95a-e30f-4e6d-a3c0-d589a984b82f", - "234483e9-2403-442e-bb76-d6315e2517af", - "bde63578-63d7-43ab-ad04-0b810b2f4033" + "6eddce7c-5301-479c-ab7b-8c574999c145", + "38a86941-b5ec-4a83-9684-0f70bb14a361", + "94937bdd-d5bb-469e-83b9-89e34f3a4614" ], "columns": { - "234483e9-2403-442e-bb76-d6315e2517af": { + "38a86941-b5ec-4a83-9684-0f70bb14a361": { "dataType": "date", "isBucketed": true, "label": "@timestamp", @@ -1139,7 +906,7 @@ "scale": "interval", "sourceField": "@timestamp" }, - "ae3ff95a-e30f-4e6d-a3c0-d589a984b82f": { + "6eddce7c-5301-479c-ab7b-8c574999c145": { "dataType": "string", "isBucketed": true, "label": "Top 10 values of azure.resource.name", @@ -1151,7 +918,7 @@ "includeIsRegex": false, "missingBucket": false, "orderBy": { - "columnId": "bde63578-63d7-43ab-ad04-0b810b2f4033", + "columnId": "94937bdd-d5bb-469e-83b9-89e34f3a4614", "type": "column" }, "orderDirection": "desc", @@ -1164,16 +931,17 @@ "scale": "ordinal", "sourceField": "azure.resource.name" }, - "bde63578-63d7-43ab-ad04-0b810b2f4033": { + "94937bdd-d5bb-469e-83b9-89e34f3a4614": { + "customLabel": false, "dataType": "number", "isBucketed": false, - "label": "Average of azure.functions.http_response_time.avg", - "operationType": "average", + "label": "Sum of azure.functions.http4xx.total", + "operationType": "sum", "params": { "emptyAsNull": true }, "scale": "ratio", - "sourceField": "azure.functions.http_response_time.avg" + "sourceField": "azure.functions.http4xx.total" } }, "incompleteColumns": {}, @@ -1211,22 +979,22 @@ "layers": [ { "accessors": [ - "bde63578-63d7-43ab-ad04-0b810b2f4033" + "94937bdd-d5bb-469e-83b9-89e34f3a4614" ], - "layerId": "8d0f0cfa-b115-4100-ba7e-1cadee108055", + "layerId": "54edca01-9fb6-444a-8d98-ddb0ff36f9be", "layerType": "data", "position": "top", - "seriesType": "line", + "seriesType": "bar", "showGridlines": false, - "splitAccessor": "ae3ff95a-e30f-4e6d-a3c0-d589a984b82f", - "xAccessor": "234483e9-2403-442e-bb76-d6315e2517af" + "splitAccessor": "6eddce7c-5301-479c-ab7b-8c574999c145", + "xAccessor": "38a86941-b5ec-4a83-9684-0f70bb14a361" } ], "legend": { "isVisible": true, "position": "bottom" }, - "preferredSeriesType": "line", + "preferredSeriesType": "bar", "tickLabelsVisibilitySettings": { "x": true, "yLeft": true, @@ -1239,29 +1007,29 @@ "type": "lens", "visualizationType": "lnsXY" }, - "description": "The time taken for the app to serve requests.", + "description": "Number of Function invocations that resulted in a HTTP 2xx response code", "enhancements": {}, "hidePanelTitles": false }, "gridData": { - "h": 15, - "i": "5ef0d281-2eff-415a-ac37-d778985db835", - "w": 24, - "x": 0, - "y": 29 + "h": 13, + "i": "89f6fa0c-4cb0-4ed7-9971-f8d047761019", + "w": 16, + "x": 16, + "y": 30 }, - "panelIndex": "5ef0d281-2eff-415a-ac37-d778985db835", - "title": "Averave Response Time(in seconds)", + "panelIndex": "89f6fa0c-4cb0-4ed7-9971-f8d047761019", + "title": "Client Errors (4xx)", "type": "lens" }, { "embeddableConfig": { "attributes": { - "description": "The current amount of memory used by the app. ", + "description": "Number of server errors or exceptions. ", "references": [ { "id": "metrics-*", - "name": "indexpattern-datasource-layer-750303c4-2d5f-4b67-8018-cba6ccc3e3f8", + "name": "indexpattern-datasource-layer-419ba4b9-c54a-4e44-b7dc-475a2b04e4a8", "type": "index-pattern" } ], @@ -1270,44 +1038,25 @@ "datasourceStates": { "formBased": { "layers": { - "750303c4-2d5f-4b67-8018-cba6ccc3e3f8": { + "419ba4b9-c54a-4e44-b7dc-475a2b04e4a8": { "columnOrder": [ - "6a78eb36-cec6-41f4-bda8-c88c3fdabe7f", - "03e43362-ec04-4c0a-8cdf-0bd29107feee", - "1d2a33f9-47f5-4483-bd25-bf258b7fe434" + "ed0b46b6-3210-492d-b67b-027e0b427588", + "f4765a92-4ba2-4936-afa3-7e8648c99a8d", + "8d98f3f5-27bb-4ad2-82ec-277d763ab9cc" ], "columns": { - "03e43362-ec04-4c0a-8cdf-0bd29107feee": { - "dataType": "date", - "isBucketed": true, - "label": "@timestamp", - "operationType": "date_histogram", - "params": { - "dropPartials": false, - "includeEmptyRows": true, - "interval": "auto" - }, - "scale": "interval", - "sourceField": "@timestamp" - }, - "1d2a33f9-47f5-4483-bd25-bf258b7fe434": { + "8d98f3f5-27bb-4ad2-82ec-277d763ab9cc": { "dataType": "number", "isBucketed": false, - "label": "Average of azure.functions.average_memory_working_set.avg", - "operationType": "average", + "label": "Sum of azure.functions.http5xx.total", + "operationType": "sum", "params": { - "emptyAsNull": true, - "format": { - "id": "bytes", - "params": { - "decimals": 0 - } - } + "emptyAsNull": true }, "scale": "ratio", - "sourceField": "azure.functions.average_memory_working_set.avg" + "sourceField": "azure.functions.http5xx.total" }, - "6a78eb36-cec6-41f4-bda8-c88c3fdabe7f": { + "ed0b46b6-3210-492d-b67b-027e0b427588": { "dataType": "string", "isBucketed": true, "label": "Top 10 values of azure.resource.name", @@ -1319,7 +1068,7 @@ "includeIsRegex": false, "missingBucket": false, "orderBy": { - "columnId": "1d2a33f9-47f5-4483-bd25-bf258b7fe434", + "columnId": "8d98f3f5-27bb-4ad2-82ec-277d763ab9cc", "type": "column" }, "orderDirection": "desc", @@ -1331,6 +1080,19 @@ }, "scale": "ordinal", "sourceField": "azure.resource.name" + }, + "f4765a92-4ba2-4936-afa3-7e8648c99a8d": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" } }, "incompleteColumns": {}, @@ -1368,22 +1130,20 @@ "layers": [ { "accessors": [ - "1d2a33f9-47f5-4483-bd25-bf258b7fe434" + "8d98f3f5-27bb-4ad2-82ec-277d763ab9cc" ], - "layerId": "750303c4-2d5f-4b67-8018-cba6ccc3e3f8", + "layerId": "419ba4b9-c54a-4e44-b7dc-475a2b04e4a8", "layerType": "data", - "position": "top", - "seriesType": "area", - "showGridlines": false, - "splitAccessor": "6a78eb36-cec6-41f4-bda8-c88c3fdabe7f", - "xAccessor": "03e43362-ec04-4c0a-8cdf-0bd29107feee" + "seriesType": "bar", + "splitAccessor": "ed0b46b6-3210-492d-b67b-027e0b427588", + "xAccessor": "f4765a92-4ba2-4936-afa3-7e8648c99a8d" } ], "legend": { "isVisible": true, "position": "bottom" }, - "preferredSeriesType": "area", + "preferredSeriesType": "bar", "tickLabelsVisibilitySettings": { "x": true, "yLeft": true, @@ -1396,21 +1156,61 @@ "type": "lens", "visualizationType": "lnsXY" }, - "description": "The current amount of memory used by the app. ", + "description": "Number of server errors or exceptions. ", "enhancements": {}, "hidePanelTitles": false }, "gridData": { - "h": 15, - "i": "4f589bdd-7bbf-4b5e-88f7-68272155780d", - "w": 24, - "x": 24, - "y": 29 + "h": 13, + "i": "3c3cd51b-3145-4166-abd4-8cb4fd0f9b11", + "w": 16, + "x": 32, + "y": 30 }, - "panelIndex": "4f589bdd-7bbf-4b5e-88f7-68272155780d", - "title": "Memory Working Set by Function Apps", + "panelIndex": "3c3cd51b-3145-4166-abd4-8cb4fd0f9b11", + "title": "Server Errors (5xx)", "type": "lens" }, + { + "embeddableConfig": { + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "savedVis": { + "data": { + "aggs": [], + "searchSource": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "description": "", + "id": "", + "params": { + "fontSize": 12, + "markdown": "## Resource \u0026 I/O Usage", + "openLinksInNewTab": false + }, + "title": "", + "type": "markdown", + "uiState": {} + } + }, + "gridData": { + "h": 3, + "i": "af5e7701-7485-4d85-b439-e8a15a367c30", + "w": 48, + "x": 0, + "y": 43 + }, + "panelIndex": "af5e7701-7485-4d85-b439-e8a15a367c30", + "type": "visualization" + }, { "embeddableConfig": { "attributes": { @@ -1426,6 +1226,7 @@ "adHocDataViews": {}, "datasourceStates": { "formBased": { + "currentIndexPatternId": "metrics-*", "layers": { "5e26da41-85b9-4f3d-b666-9b027f19f4c0": { "columnOrder": [ @@ -1473,11 +1274,10 @@ "sourceField": "azure.resource.name" }, "f807ce10-f26f-4f0a-a838-2baea3bb5ac2": { - "customLabel": false, "dataType": "number", "isBucketed": false, - "label": "Sum of azure.functions.bytes_received.total", - "operationType": "sum", + "label": "Average of azure.functions.bytes_received.total", + "operationType": "average", "params": { "emptyAsNull": true, "format": { @@ -1492,6 +1292,7 @@ } }, "incompleteColumns": {}, + "indexPatternId": "metrics-*", "sampling": 1 } } @@ -1557,14 +1358,14 @@ "hidePanelTitles": false }, "gridData": { - "h": 15, - "i": "96b12503-3f63-4f80-9419-f8d25b7356fc", + "h": 14, + "i": "f8ccc765-1b05-43b4-bbf5-db03e5f03cc4", "w": 24, "x": 0, - "y": 44 + "y": 46 }, - "panelIndex": "96b12503-3f63-4f80-9419-f8d25b7356fc", - "title": "Top 10 Function Apps by Bytes Received ", + "panelIndex": "f8ccc765-1b05-43b4-bbf5-db03e5f03cc4", + "title": "Network Inbound", "type": "lens" }, { @@ -1582,6 +1383,7 @@ "adHocDataViews": {}, "datasourceStates": { "formBased": { + "currentIndexPatternId": "metrics-*", "layers": { "fa95f5df-3ddf-44ed-88b8-793641935e0a": { "columnOrder": [ @@ -1606,8 +1408,8 @@ "6d32a3d7-e8d2-4061-9d93-eeca1d25d957": { "dataType": "number", "isBucketed": false, - "label": "Sum of azure.functions.bytes_sent.total", - "operationType": "sum", + "label": "Average of azure.functions.bytes_sent.total", + "operationType": "average", "params": { "emptyAsNull": true, "format": { @@ -1647,6 +1449,7 @@ } }, "incompleteColumns": {}, + "indexPatternId": "metrics-*", "sampling": 1 } } @@ -1714,14 +1517,14 @@ "hidePanelTitles": false }, "gridData": { - "h": 15, - "i": "578f6fe3-6edb-4678-b13c-1e9510f1942b", + "h": 14, + "i": "9152cbda-787c-4cd0-a83d-d5e903f6969e", "w": 24, "x": 24, - "y": 44 + "y": 46 }, - "panelIndex": "578f6fe3-6edb-4678-b13c-1e9510f1942b", - "title": "Top 10 Function Apps by Bytes Sent ", + "panelIndex": "9152cbda-787c-4cd0-a83d-d5e903f6969e", + "title": "Network Outbound", "type": "lens" }, { @@ -1739,6 +1542,7 @@ "adHocDataViews": {}, "datasourceStates": { "formBased": { + "currentIndexPatternId": "metrics-*", "layers": { "cc027ebf-f1dc-44ef-8907-7b7a407a7fe0": { "columnOrder": [ @@ -1763,14 +1567,16 @@ "755983df-cc70-41bc-88d7-56ae24060492": { "dataType": "number", "isBucketed": false, - "label": "Sum of azure.functions.io_read_bytes_per_second.total", - "operationType": "sum", + "label": "Average of azure.functions.io_read_bytes_per_second.total", + "operationType": "average", "params": { "emptyAsNull": true, "format": { - "id": "bytes", + "id": "number", "params": { - "decimals": 0 + "compact": true, + "decimals": 0, + "suffix": "B/s" } } }, @@ -1804,6 +1610,7 @@ } }, "incompleteColumns": {}, + "indexPatternId": "metrics-*", "sampling": 1 } } @@ -1843,7 +1650,7 @@ "layerId": "cc027ebf-f1dc-44ef-8907-7b7a407a7fe0", "layerType": "data", "position": "top", - "seriesType": "bar", + "seriesType": "area_stacked", "showGridlines": false, "splitAccessor": "d3c92de9-3de0-4478-a4a6-432e2c42c0ab", "xAccessor": "10d4106f-6c96-4dc2-8866-3f1fe7e81898" @@ -1853,7 +1660,7 @@ "isVisible": true, "position": "bottom" }, - "preferredSeriesType": "bar", + "preferredSeriesType": "area_stacked", "tickLabelsVisibilitySettings": { "x": true, "yLeft": true, @@ -1871,14 +1678,14 @@ "hidePanelTitles": false }, "gridData": { - "h": 15, - "i": "f7c59600-cc99-4d51-b8f8-20976818476a", + "h": 14, + "i": "356efbbd-4bfa-4ea8-9add-56d367380094", "w": 24, "x": 0, - "y": 59 + "y": 60 }, - "panelIndex": "f7c59600-cc99-4d51-b8f8-20976818476a", - "title": "IO Read Bytes Per Second", + "panelIndex": "356efbbd-4bfa-4ea8-9add-56d367380094", + "title": "Disk Read Throughput (Bytes/sec)", "type": "lens" }, { @@ -1896,6 +1703,7 @@ "adHocDataViews": {}, "datasourceStates": { "formBased": { + "currentIndexPatternId": "metrics-*", "layers": { "0efd9b40-6f73-459b-8a6d-22bb9ea9f8f5": { "columnOrder": [ @@ -1907,14 +1715,16 @@ "017dace0-c878-45e7-8d98-bfba5bdade86": { "dataType": "number", "isBucketed": false, - "label": "Sum of azure.functions.io_write_bytes_per_second.total", - "operationType": "sum", + "label": "Average of azure.functions.io_write_bytes_per_second.total", + "operationType": "average", "params": { "emptyAsNull": true, "format": { - "id": "bytes", + "id": "number", "params": { - "decimals": 0 + "compact": true, + "decimals": 0, + "suffix": "B/s" } } }, @@ -1961,6 +1771,7 @@ } }, "incompleteColumns": {}, + "indexPatternId": "metrics-*", "sampling": 1 } } @@ -2028,14 +1839,14 @@ "hidePanelTitles": false }, "gridData": { - "h": 15, - "i": "ba3dfc7e-d929-4dac-ba7e-d979652ec83a", + "h": 14, + "i": "4d0e9918-629a-4fd7-83fc-e187996ccf48", "w": 24, "x": 24, - "y": 59 + "y": 60 }, - "panelIndex": "ba3dfc7e-d929-4dac-ba7e-d979652ec83a", - "title": "IO Write Bytes Per Second", + "panelIndex": "4d0e9918-629a-4fd7-83fc-e187996ccf48", + "title": "Disk Write Throughput (Bytes/sec)", "type": "lens" }, { @@ -2053,6 +1864,7 @@ "adHocDataViews": {}, "datasourceStates": { "formBased": { + "currentIndexPatternId": "metrics-*", "layers": { "e16f3e88-0dc5-490a-b45d-86b3dbd359a3": { "columnOrder": [ @@ -2064,15 +1876,15 @@ "32a41b5b-b737-4fd0-8b22-4a009d9c5555": { "dataType": "number", "isBucketed": false, - "label": "Sum of azure.functions.io_read_operations_per_second.total", - "operationType": "sum", + "label": "Average of azure.functions.io_read_operations_per_second.total", + "operationType": "average", "params": { "emptyAsNull": true, "format": { - "id": "bytes", + "id": "number", "params": { "decimals": 0, - "suffix": "/s" + "suffix": "B/s" } } }, @@ -2119,6 +1931,7 @@ } }, "incompleteColumns": {}, + "indexPatternId": "metrics-*", "sampling": 1 } } @@ -2158,7 +1971,7 @@ "layerId": "e16f3e88-0dc5-490a-b45d-86b3dbd359a3", "layerType": "data", "position": "top", - "seriesType": "line", + "seriesType": "bar_stacked", "showGridlines": false, "splitAccessor": "c5f39387-452a-4a77-8c48-831ecf41d972", "xAccessor": "d59f84c1-e509-4b82-bb73-8b30500124ec" @@ -2168,7 +1981,7 @@ "isVisible": true, "position": "bottom" }, - "preferredSeriesType": "line", + "preferredSeriesType": "bar", "showCurrentTimeMarker": false, "tickLabelsVisibilitySettings": { "x": true, @@ -2187,14 +2000,14 @@ "hidePanelTitles": false }, "gridData": { - "h": 15, - "i": "dc27d0ce-7296-4640-8bcd-d23a8f4830ab", + "h": 14, + "i": "5a61075c-a0bc-4fa7-a18c-d4cc547876cf", "w": 24, "x": 0, "y": 74 }, - "panelIndex": "dc27d0ce-7296-4640-8bcd-d23a8f4830ab", - "title": "IO Read Operations Per Second", + "panelIndex": "5a61075c-a0bc-4fa7-a18c-d4cc547876cf", + "title": "Disk Read Ops (Bytes/sec)", "type": "lens" }, { @@ -2212,6 +2025,7 @@ "adHocDataViews": {}, "datasourceStates": { "formBased": { + "currentIndexPatternId": "metrics-*", "layers": { "effd480b-5d45-4c7e-9883-114e91117829": { "columnOrder": [ @@ -2221,18 +2035,17 @@ ], "columns": { "4ff3447e-d940-4369-8cec-7f6ef83dd20f": { - "customLabel": false, "dataType": "number", "isBucketed": false, - "label": "Sum of azure.functions.io_write_operations_per_second.total", - "operationType": "sum", + "label": "Average of azure.functions.io_write_operations_per_second.total", + "operationType": "average", "params": { "emptyAsNull": true, "format": { - "id": "bytes", + "id": "number", "params": { "decimals": 0, - "suffix": "/s" + "suffix": "B/s" } } }, @@ -2279,6 +2092,7 @@ } }, "incompleteColumns": {}, + "indexPatternId": "metrics-*", "sampling": 1 } } @@ -2318,7 +2132,7 @@ "layerId": "effd480b-5d45-4c7e-9883-114e91117829", "layerType": "data", "position": "top", - "seriesType": "line", + "seriesType": "bar_stacked", "showGridlines": false, "splitAccessor": "62dfa6f9-8995-4b01-8038-0a32c921ce4e", "xAccessor": "fb0c0a99-931d-407b-90e1-a7695f4e877a" @@ -2328,7 +2142,7 @@ "isVisible": true, "position": "bottom" }, - "preferredSeriesType": "line", + "preferredSeriesType": "bar", "tickLabelsVisibilitySettings": { "x": true, "yLeft": true, @@ -2346,24 +2160,25 @@ "hidePanelTitles": false }, "gridData": { - "h": 15, - "i": "f907a3c8-a7aa-4cb8-8708-e316bb3cdeb6", + "h": 14, + "i": "0aa1cd7d-870e-4e2d-a075-9fc6bcfc1011", "w": 24, "x": 24, "y": 74 }, - "panelIndex": "f907a3c8-a7aa-4cb8-8708-e316bb3cdeb6", - "title": "IO Write Operations Per Second", + "panelIndex": "0aa1cd7d-870e-4e2d-a075-9fc6bcfc1011", + "title": "Disk Write Ops (Bytes/sec)", "type": "lens" } ], "timeRestore": false, - "title": "[Azure Functions] Overview", - "version": 1 + "title": "[Azure Functions] Overview (1)", + "version": 3 }, "coreMigrationVersion": "8.8.0", - "created_at": "2024-04-18T12:11:00.652Z", - "id": "azure_functions-5b40c9c0-33d4-11ee-8d85-2d7adebebd1b", + "created_at": "2025-10-07T14:40:37.998Z", + "created_by": "u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0", + "id": "azure_functions-19fb3b7c-1918-461e-8686-51ed09051b2f", "managed": false, "references": [ { @@ -2373,95 +2188,81 @@ }, { "id": "metrics-*", - "name": "58a522e8-acf6-4ad1-a5cc-a699ce9c26c0:indexpattern-datasource-layer-f6c3c469-2e64-4120-b144-997fb70575e2", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "b9d5606f-9607-4c90-a75f-c2857b266bfa:indexpattern-datasource-layer-113434b9-c581-4b79-9344-13864154c598", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "b9d5606f-9607-4c90-a75f-c2857b266bfa:60014cf3-d9b4-46e8-ae69-999d31086fbc", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "44c459b4-623b-4534-ba78-8904669ae9cb:indexpattern-datasource-layer-8e323fe9-19c2-405d-bbf6-ba61dc9a190f", + "name": "0ddffee8-47c7-4ce0-be99-5b1f89d6fd6f:indexpattern-datasource-layer-f6c3c469-2e64-4120-b144-997fb70575e2", "type": "index-pattern" }, { "id": "metrics-*", - "name": "9196bdde-1f73-46f5-97f6-09db15a28b61:indexpattern-datasource-layer-b0c25d59-67fb-4970-8b15-1da58db41925", + "name": "67753b8a-7cbf-4d02-bc86-56de1b9666cd:indexpattern-datasource-layer-f672395d-d98c-46e2-b4b5-3751144544e1", "type": "index-pattern" }, { "id": "metrics-*", - "name": "5430e8a9-47ae-4c82-96b7-b0287026409f:indexpattern-datasource-layer-4689dc73-dc78-4c03-b975-62264d68c33b", + "name": "78b09166-6e79-4a45-91ac-8cf5409aa8eb:indexpattern-datasource-layer-b0c25d59-67fb-4970-8b15-1da58db41925", "type": "index-pattern" }, { "id": "metrics-*", - "name": "7a4bc820-cc0e-40fb-9aee-83ccf7615fa2:indexpattern-datasource-layer-54edca01-9fb6-444a-8d98-ddb0ff36f9be", + "name": "554e04cb-aeb1-4e2f-955d-23fe191ee4c4:indexpattern-datasource-layer-750303c4-2d5f-4b67-8018-cba6ccc3e3f8", "type": "index-pattern" }, { "id": "metrics-*", - "name": "266a1bc1-c35b-4959-96c1-5d799a98754c:indexpattern-datasource-layer-419ba4b9-c54a-4e44-b7dc-475a2b04e4a8", + "name": "40e09647-df05-4d42-b685-509dcf980ecf:indexpattern-datasource-layer-4689dc73-dc78-4c03-b975-62264d68c33b", "type": "index-pattern" }, { "id": "metrics-*", - "name": "5ef0d281-2eff-415a-ac37-d778985db835:indexpattern-datasource-layer-8d0f0cfa-b115-4100-ba7e-1cadee108055", + "name": "89f6fa0c-4cb0-4ed7-9971-f8d047761019:indexpattern-datasource-layer-54edca01-9fb6-444a-8d98-ddb0ff36f9be", "type": "index-pattern" }, { "id": "metrics-*", - "name": "4f589bdd-7bbf-4b5e-88f7-68272155780d:indexpattern-datasource-layer-750303c4-2d5f-4b67-8018-cba6ccc3e3f8", + "name": "3c3cd51b-3145-4166-abd4-8cb4fd0f9b11:indexpattern-datasource-layer-419ba4b9-c54a-4e44-b7dc-475a2b04e4a8", "type": "index-pattern" }, { "id": "metrics-*", - "name": "96b12503-3f63-4f80-9419-f8d25b7356fc:indexpattern-datasource-layer-5e26da41-85b9-4f3d-b666-9b027f19f4c0", + "name": "f8ccc765-1b05-43b4-bbf5-db03e5f03cc4:indexpattern-datasource-layer-5e26da41-85b9-4f3d-b666-9b027f19f4c0", "type": "index-pattern" }, { "id": "metrics-*", - "name": "578f6fe3-6edb-4678-b13c-1e9510f1942b:indexpattern-datasource-layer-fa95f5df-3ddf-44ed-88b8-793641935e0a", + "name": "9152cbda-787c-4cd0-a83d-d5e903f6969e:indexpattern-datasource-layer-fa95f5df-3ddf-44ed-88b8-793641935e0a", "type": "index-pattern" }, { "id": "metrics-*", - "name": "f7c59600-cc99-4d51-b8f8-20976818476a:indexpattern-datasource-layer-cc027ebf-f1dc-44ef-8907-7b7a407a7fe0", + "name": "356efbbd-4bfa-4ea8-9add-56d367380094:indexpattern-datasource-layer-cc027ebf-f1dc-44ef-8907-7b7a407a7fe0", "type": "index-pattern" }, { "id": "metrics-*", - "name": "ba3dfc7e-d929-4dac-ba7e-d979652ec83a:indexpattern-datasource-layer-0efd9b40-6f73-459b-8a6d-22bb9ea9f8f5", + "name": "4d0e9918-629a-4fd7-83fc-e187996ccf48:indexpattern-datasource-layer-0efd9b40-6f73-459b-8a6d-22bb9ea9f8f5", "type": "index-pattern" }, { "id": "metrics-*", - "name": "dc27d0ce-7296-4640-8bcd-d23a8f4830ab:indexpattern-datasource-layer-e16f3e88-0dc5-490a-b45d-86b3dbd359a3", + "name": "5a61075c-a0bc-4fa7-a18c-d4cc547876cf:indexpattern-datasource-layer-e16f3e88-0dc5-490a-b45d-86b3dbd359a3", "type": "index-pattern" }, { "id": "metrics-*", - "name": "f907a3c8-a7aa-4cb8-8708-e316bb3cdeb6:indexpattern-datasource-layer-effd480b-5d45-4c7e-9883-114e91117829", + "name": "0aa1cd7d-870e-4e2d-a075-9fc6bcfc1011:indexpattern-datasource-layer-effd480b-5d45-4c7e-9883-114e91117829", "type": "index-pattern" }, { "id": "metrics-*", - "name": "controlGroup_ff8243f3-9c96-4cb0-b703-0af0107bc8f7:optionsListDataView", + "name": "controlGroup_8a2aaf76-9dd2-46dd-87d3-b51842c665ed:optionsListDataView", "type": "index-pattern" }, { "id": "metrics-*", - "name": "controlGroup_bebd2bf5-eb88-4157-b86b-e6fd9e322b13:optionsListDataView", + "name": "controlGroup_6faa8a7f-df90-4df4-a807-6b27423384fb:optionsListDataView", "type": "index-pattern" } ], "type": "dashboard", - "typeMigrationVersion": "8.9.0" + "typeMigrationVersion": "10.2.0", + "updated_by": "u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0" } \ No newline at end of file diff --git a/packages/azure_functions/manifest.yml b/packages/azure_functions/manifest.yml index 4574f83cc0f..186405476ad 100644 --- a/packages/azure_functions/manifest.yml +++ b/packages/azure_functions/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: azure_functions title: "Azure Functions" -version: "0.11.0" +version: "0.12.0" source: license: "Elastic-2.0" description: "Get metrics and logs from Azure Functions" @@ -28,15 +28,7 @@ icons: size: 32x32 type: image/svg+xml screenshots: - - src: /img/azure-functions-overview1.png - title: Azure Functions Overview dashboard - size: 600x600 - type: image/png - - src: /img/azure-functions-overview2.png - title: Azure Functions Overview dashboard - size: 600x600 - type: image/png - - src: /img/azure-functions-overview3.png + - src: /img/azure-functions-overview.png title: Azure Functions Overview dashboard size: 600x600 type: image/png