diff --git a/docs/_reporting/data/README.md b/docs/_reporting/data/README.md index b4cc9f6a8..07927afd6 100644 --- a/docs/_reporting/data/README.md +++ b/docs/_reporting/data/README.md @@ -17,6 +17,7 @@ Leverage open data to normalize and enhance your FinOps reporting. On this page - [📏 Pricing units](#-pricing-units) +- [💡 Recommendation types](#-recommendation-types) - [🗺️ Regions](#️-regions) - [📚 Resource types](#-resource-types) - [🎛️ Services](#️-services) @@ -65,6 +66,30 @@ A few important notes about the data:
+## 💡 Recommendation types + +Microsoft Azure Advisor has over 300 different recommendation types, but does not include details about the recommendations in a structured way. The recommendations types file provides a list of Azure Advisor recommendation types you may find to provide additional context like names, descriptions, documentation links, and more. + +Sample data: + + + +| RecommendationTypeId | Category | Impact | ServiceName | ResourceType | Key | Message | Version | LearnMoreLink | +| ------------------------------------ | ---------------------- | ------ | -------------------------- | ----------------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| a205074f-8049-48b3-903f-556f5e530ae3 | Cost | High | ReservedInstances | microsoft.subscriptions/subscriptions | CosmosDBReservedCapacity | Buy reserved instance | 9.1 | https://aka.ms/rirecommendations | +| 94aea435-ef39-493f-a547-8408092c22a7 | Cost | High | Virtual Machine Scale Sets | microsoft.compute/virtualmachinescalesets | LowUsageVmss | Shut down or resize your virtual machine scale sets | 9.9 | https://aka.ms/aa_lowusagerec_vmss_learnmore | +| afdf4c1a-e46b-4817-a5d6-4b9909f58e2a | Cost | Low | Azure Synapse Analytics | microsoft.synapse/workspaces | EnableSynapseSparkComputeAutoPauseGuidance | Consider enabling automatic pause feature on spark compute | 3.1 | https://aka.ms/EnableSynapseSparkComputeAutoPauseGuidance | +| ed651749-cd37-4fd5-9897-01b416926745 | High Availability | Medium | Site Recovery | microsoft.compute/virtualmachines | ASRUnprotectedVMs | Enable virtual machine replication | 7 | https://aka.ms/azure-site-recovery-dr-azure-vms | +| 9c0c3708-17f6-4108-9aff-f0e052c3cd41 | Operational Excellence | Low | Azure App Service | microsoft.subscriptions/subscriptions | AzureApplicationService | Eliminate replica staging environments and ship new versions and features with zero downtime using deployment slots | 1.0 | https://docs.microsoft.com/azure/app-service/deploy-staging-slots | +| a06456ed-afb7-4d16-86fd-0054e25268ed | Performance | Medium | Virtual Machines | microsoft.compute/virtualmachines | AccelNetDisengaged | Enable Accelerated Networking to improve network performance and latency | 2.1 | https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms | + + + +[Download](https://github.com/microsoft/finops-toolkit/releases/latest/download/RecommendationTypes.csv){: .btn .mb-4 .mb-md-0 .mr-4 } +[See PowerShell](../../_automation/powershell/data/Get-FinOpsRecommendationType.md){: .btn .mb-4 .mb-md-0 .mr-4 } + +
+ ## 🗺️ Regions Microsoft Cost Management provides various values for resource locations that are occasionally inconsistent due to different underlying systems providing the data. The Regions file provides a list of values you may find within common cost-related datasets (e.g., Cost Management exports and price sheets) along with their related Azure region IDs and names. diff --git a/src/open-data/RecommendationTypes.csv b/src/open-data/RecommendationTypes.csv new file mode 100644 index 000000000..1b2e2f370 --- /dev/null +++ b/src/open-data/RecommendationTypes.csv @@ -0,0 +1,354 @@ +"Id","Category","Control","Impact","ServiceName","ResourceType","Key","Message","State","Version","Description","LongDescription","Benefits","Tip","LearnMoreLink" +"3a3c1a2a-8597-4d3a-981a-0a24a0ee9de4","Performance",,"Medium","Virtual Machines","microsoft.compute/virtualmachines","AccelNetConfiguration","Enable Accelerated Networking to improve network performance and latency","Active","1","Enable Accelerated Networking to improve network performance and latency","We have detected that Accelerated Networking is not enabled on VM resources in your existing deployment that may be capable of supporting this feature. If your VM OS image supports Accelerated Networking as detailed in the documentation, make sure to enable this free feature on these VMs to maximize the performance and latency of your networking workloads in cloud","Improves performance throughput while reducing latency and jitter","Enable Accelerated Networking to improve network performance and latency.","https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms" +"a06456ed-afb7-4d16-86fd-0054e25268ed","Performance",,"Medium","Virtual Machines","microsoft.compute/virtualmachines","AccelNetDisengaged","Enable Accelerated Networking to improve network performance and latency","Active","2.1","Accelerated Networking may require stopping and starting the VM","We have detected that Accelerated Networking is not engaged on a VM resources in your existing deployment even though the feature has been requested. In rare cases like this, it may be necessary to stop and start your VM, at your convenience, to re-engage AccelNet.","Improves performance throughput while reducing latency and jitter","Accelerated Networking needs VM Stop then Start to improve network performance and latency.","https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms" +"9c0c3708-17f6-4108-9aff-f0e052c3cd41","Operational Excellence",,"Low","Azure App Service","microsoft.subscriptions/subscriptions","AzureApplicationService","Eliminate replica staging environments and ship new versions and features with zero downtime using deployment slots","Active","1.0","Set up staging environments in Azure App Service","Deploying an app to a slot first and swapping it into production makes sure that all instances of the slot are warmed up before being swapped into production. This eliminates downtime when you deploy your app. The traffic redirection is seamless, no requests are dropped because of swap operations.","Validate changes in a staging slot, then swap to production.",,"https://docs.microsoft.com/azure/app-service/deploy-staging-slots" +"1d3b5a51-62d4-4b77-96f6-40ed0a3aa21f","Operational Excellence",,"Low","Azure App Service","microsoft.web/sites","AzureAppService-StagingEnv","Eliminate replica staging environments and ship new versions and features with zero downtime using deployment slots","Active","1.0","Set up staging environments in Azure App Service","Deploying an app to a slot first and swapping it into production makes sure that all instances of the slot are warmed up before being swapped into production. This eliminates downtime when you deploy your app. The traffic redirection is seamless, no requests are dropped because of swap operations.","Validate changes in a staging slot, then swap to production.",,"https://docs.microsoft.com/azure/app-service/deploy-staging-slots" +"3629448e-9b3e-4c5d-96ec-4760bbfde5ab","Performance",,"Medium","Microsoft Azure Attestation","microsoft.attestation/attestationproviders","UpgradeAttestationAPI","Update Attestation API","Active","2","Update Attestation API Version","We have identified API calls from outdated Attestation API for resources under this subscription. We recommend switching to the latest Attestation API versions. You need to update your existing code to use the latest API version. This ensures you receive the latest features and performance improvements.","Latest Attestation API contain fixes for known issues and additional improvements.","","https://docs.microsoft.com/rest/api/attestation" +"7fc8d697-5101-4dd2-abf5-32deac4b9cae","Performance",,"Medium","Microsoft Automanage","microsoft.compute/virtualmachines","UpdateToLatestApi","Update Automanage API","Active","5","Update Automanage to the latest API Version","We have identified sdk calls from outdated API for resources under this subscription. We recommend switching to the latest sdk versions. This ensures you receive the latest features and performance improvements.","Latest Automanage API contain fixes for known issues and additional improvements.",,"https://docs.microsoft.com/azure/automanage/reference-sdk" +"03290f58-8985-479f-8a38-ac7d803cff62","Performance",,"Medium","Microsoft Automanage","microsoft.hybridcompute/machines","UpdateToLatestApiHci","Update Automanage API","Active","5","Update Automanage to the latest API Version","We have identified sdk calls from outdated API for resources under this subscription. We recommend switching to the latest sdk versions. This ensures you receive the latest features and performance improvements.","Latest Automanage API contain fixes for known issues and additional improvements.",,"https://docs.microsoft.com/azure/automanage/reference-sdk" +"eeb4ed3e-4e9b-40b4-84fb-5514d0be0eda","Performance",,"High","Azure VMware Solution","microsoft.avs/privateclouds","vSANCapacity","Your vSAN utilization is high and out of SLA compliance","Active","1.1","vSAN capacity utilization has crossed critical threshold","Your vSAN capacity utilization has reached 75%. The cluster utilization is required to remain below the 75% critical threshold for SLA compliance. Please add new nodes to VSphere cluster to increase capacity or delete VMs to reduce consumption or adjust VM workloads","Maintain the health and performance of your vSAN operations","","https://docs.microsoft.com/azure/azure-vmware/concepts-private-clouds-clusters" +"dce06269-d180-402f-8c2a-744fa26a0adf","Operational Excellence",,"Medium","Azure CLI Tools - Azure CLI, PowerShell and Terraform","microsoft.subscriptions/subscriptions","UpgradeLatestAzureCLIVersion","Upgrade to the latest Azure CLI version","Disabled","2.2","Upgrade Azure CLI to the latest version","We have detected that one or more machines associated with your Azure subscription are using an outdated version of Azure CLI. To ensure the best possible experience, we recommend upgrading all machines to the latest version. Please wisely postpone or dismiss based on your business judgment.","Latest version will fix known security issues and feature bugs","Upgrade to the latest Azure CLI version","https://learn.microsoft.com/cli/azure/" +"bce95beb-3389-4e64-8863-d196cc2f69dc","Cost",,"Medium","Azure Data Explorer","microsoft.kusto/clusters","SkuChangeForAzureDataExplorer","Change to a more cost effective and better performing SKU","Active","2.3","Change Data Explorer clusters to a more cost effective and better performing SKU","You have resources operating under a nonoptimal SKU. We recommend migrating to a more cost effective and better performing SKU. This SKU should reduce your costs and improve overall performance. We have calculated the required instance count that meets both the CPU and cache of your cluster.","Optimize cost",,"https://aka.ms/clusterChooseSku" +"4e13bb59-a859-45b5-ab5a-19363a34084e","Cost",,"Medium","Azure Data Explorer","microsoft.kusto/clusters","Right-size for cost","Consider scaling resource to the recommended configuration","Disabled","5","Right-size Data Explorer resources for optimal cost","One or more of these were detected: Low data capacity, CPU utilization, or memory utilization. The recommended action to improve the performance is to scale down and/or scale in the resource to the recommended configuration shown.","Optimize cost",,"https://aka.ms/adxskusize" +"2397042e-4064-41ca-a50e-4e845051bb0b","Cost",,"Medium","Azure Data Explorer","microsoft.kusto/clusters","EnableOptimizedAutoscaleAzureDataExplorer","Enable Optimized Autoscale for Data Explorer resources.","Active","5.2","Enable Optimized Autoscale for Data Explorer resources","Looks like your resource could have automatically scaled to reduce costs (based on your actual usage during the last week, cache utilization, ingestion utilization, CPU, and streaming ingests utilization). To optimize costs and performance, we recommend enabling Optimized Autoscale. You are encouraged to choose the recommended minimum and maximum instance count that we have provided.","Optimize cost",,"https://aka.ms/adxoptimizedautoscale" +"d9c2f871-904e-4907-8572-0a33b0651f01","Cost",,"Medium","Azure Data Explorer","microsoft.kusto/clusters","ADX stopped resource","Consider deleting the resource","Active","5.1","Unused stopped Data Explorer resources","This recommendation surfaces all stopped Data Explorer resources that have been stopped for at least 60 days. Consider deleting the resources.","Optimize cost",,"https://aka.ms/adxunusedstoppedcluster" +"fa2649e9-e1a5-4d07-9b26-51c080d9a9ba","High Availability","Other","High","Azure Data Explorer","microsoft.kusto/clusters","ClusterFailedToInstallOrResumeDueVirtualNetwork","Resolve virtual network issues","Active","9.2","Resolve virtual network issues","Service failed to install or resume due to virtual network (VNet) issues. To resolve this issue, follow the steps in the troubleshooting guide. ","Improve reliability, availability, performance, and new feature capabilities",,"https://learn.microsoft.com/azure/data-explorer/vnet-deploy-troubleshoot" +"f011adf6-475a-48c9-bf26-8db051cb6964","Performance",,"Medium","Azure Data Explorer","microsoft.kusto/clusters","UpdateCachePoliciesForAdxTables","Query time range is too wide - Consider setting your cache period (policy) to the recommended value","Disabled","5.5","Review table cache policies for Data Explorer tables","This recommendation surfaces Data Explorer tables with a high number of queries that look back beyond the configured cache period (policy). (You'll see the top 10 tables by query percentage that access out-of-cache data). The recommended action to improve the performance: Limit queries on this table to the minimal necessary time range (within the defined policy). Alternatively, if data from the entire time range is required, increase the cache period to the recommended value.","Optimize performance",,"https://aka.ms/adxcachepolicy" +"f2bcadd1-713b-4acc-9810-4170a5d01dea","High Availability","Other","High","Azure Data Explorer","microsoft.kusto/clusters","SubnetIsMissingDelegationForKusto","Add subnet delegation for 'Microsoft.Kusto/clusters'","Active","12.2","Add subnet delegation for 'Microsoft.Kusto/clusters'","If a subnet isn’t delegated, the associated Azure service won’t be able to operate within it. Your subnet doesn’t have the required delegation. Delegate your subnet for 'Microsoft.Kusto/clusters'.","Improve reliability, availability, performance, and new feature capabilities",,"https://learn.microsoft.com/azure/virtual-network/subnet-delegation-overview" +"a17ff303-56eb-4382-ac2c-ac7e317945fc","Performance",,"Medium","Azure Data Explorer (Kusto)","microsoft.kusto/clusters","PerformanceEnableOptimizedAutoscaleAzureDataExplorer","Enable Optimized Autoscale for Data Explorer resources.","Active","3.1","Enable Optimized Autoscale for Data Explorer resources","Looks like your resource could have automatically scaled to improve performance (based on your actual usage during the last week, cache utilization, ingestion utilization, CPU, and streaming ingests utilization). To optimize costs and performance, we recommend enabling Optimized Autoscale.","Optimize performance",,"https://aka.ms/adxoptimizedautoscale" +"da4d47d5-b48b-4308-93bc-29d954424e76","Performance",,"Medium","Azure Data Explorer","microsoft.kusto/clusters","Right-size ADX resource","Consider scaling Data Explorer resources to the recommended configuration","Disabled","5","Right-size Data Explorer resources for optimal performance.","This recommendation surfaces all Data Explorer resources which exceed the recommended data capacity (80%). The recommended action to improve the performance is to scale to the recommended configuration shown.","Optimize performance",,"https://aka.ms/adxskuperformance" +"354D7BBB-A243-4BE1-A8B9-43DBFC05C44A","Cost",,"Medium","Azure Data Explorer","microsoft.kusto/clusters","StopUnusedClusters","Consider stopping the resource","Active","4","Unused running Data Explorer resources","This recommendation surfaces all running Data Explorer resources with no user activity. Consider stopping the resources.","Optimize Azure spend",,"https://docs.microsoft.com/azure/data-explorer/azure-advisor#azure-data-explorer-unused-cluster" +"900b17ec-0125-458a-a065-6c213e57c342","Cost",,"Medium","Azure Data Explorer","microsoft.kusto/clusters","RunCleanupCommandForAzureDataExplorer","Run the cleanup command to detect and delete unused storage in Data Explorer resources","Active","2.8","Cleanup unused storage in Data Explorer resources","Over time, internal extents merge operations can accumulate redundant and unused storage artifacts that remain beyond the data retention period. While this unreferenced data doesn’t negatively impact the performance, it can lead to more storage use and larger costs than necessary. This recommendation surfaces Data Explorer resources that have unused storage artifacts. The recommended action is to run the cleanup command to detect and delete unused storage artifacts and reduce cost. Note that data recoverability will be reset to the cleanup time and will not be available on data that was created before running the cleanup.","Optimize cost",,"https://aka.ms/adxcleanextentcontainers" +"947a627a-532d-44f8-8e23-4f365a80a2ba","Cost",,"Medium","Azure Data Explorer","microsoft.kusto/clusters","ReduceCacheForAzureDataExplorerTables","Reduce the cache in the cache policy","Active","7.4","Reduce Data Explorer table cache policy to optimize costs","Based on your actual usage during the last month, update the cache policy to reduce the hot cache for the table. With autoscale enabled, the cluster can potentially scale in and thus reduce costs. Our goal is that more than 95% of the queries read data from the hot cache (*) The analysis is based only on user queries that scanned data.","Reduce cost",,"https://aka.ms/adxcachepolicy" +"9a3ea211-a282-4ab6-a63b-81024975b796","Operational Excellence",,"Medium","Azure Data Explorer","microsoft.kusto/clusters","ReduceCacheForAzureDataExplorerTablesOperational Excellence","Reduce the cache in the cache policy","Active","3.1","Reduce the cache policy on your Data Explorer tables","Based on your actual usage during the last month, update the cache policy to reduce the hot cache for the table. The number of instances in your cluster is determined by the CPU and ingestion load, not by the amount of data held in the hot cache and may change based on your usage. Based on current usage, changing the cache isn't enough to reduce the number of instances, we recommend further optimizations,such as changing the SKU, reducing the CPU load, and enabling autoscale to scale in efficiently. ","Cache reduction",,"https://aka.ms/adxcachepolicy" +"389653ce-d564-4b95-aac4-ca30e1602536","Performance",,"Medium","Azure Data Explorer","microsoft.kusto/clusters","IncreaseCacheForAzureDataExplorerTablesToImprovePerformance","Increase the cache in the cache policy","Active","3.3","Increase the cache in the cache policy","Based on your actual usage during the last month, update the cache policy to increase the hot cache for the table. Note that the retention period must always be larger than the cache period. If, after increasing the cache, the retention period is lower than the cache period, please update the retention policy.(*) The analysis is based only on user queries that scanned data. ","Optimize performance",,"https://aka.ms/adxcachepolicy" +"dace9b52-e456-4384-a6ee-82b8d815953c","Operational Excellence",,"Medium","Azure CLI Tools - Azure CLI, PowerShell and Terraform","microsoft.subscriptions/subscriptions","UpgradeLatestAzurePSVersion","Upgrade to the latest Azure PowerShell version","Disabled","2.2","Upgrade Azure PowerShell to the latest version","We have detected that one or more machines associated with your Azure subscription are using an outdated version of Azure PowerShell. To ensure the best possible experience, we recommend upgrading all machines to the latest version. Please wisely postpone or dismiss based on your business judgment.","Latest version will fix known security issues and feature bugs","Upgrade to the latest Azure PowerShell version","https://learn.microsoft.com/powershell/azure/" +"7c3484ae-c299-46d0-912d-d77aaeb1feb7","Operational Excellence",,"Medium","Azure Spring Cloud","microsoft.appplatform/spring","UpgradeAzureSpringCloudAPI","Update Azure Spring Cloud API","Active","2","Update Azure Spring Cloud API Version","We have identified API calls from outdated Azure Spring Cloud API for resources under this subscription. We recommend switching to the latest Spring Cloud API version. You need to update your existing code to use the latest API version. Also, you need to upgrade your Azure SDK and Azure CLI to the latest version. This ensures you receive the latest features and performance improvements.","Latest Azure Spring Cloud API contains latest fixes, performance improvements, and new feature capabilities.","","https://docs.microsoft.com/azure/spring-cloud" +"a0b3b756-caef-4f1c-9546-576e9f4cc7da","Operational Excellence",,"Medium","Azure Spring Cloud","microsoft.appplatform/spring","SpringCloudUpgradeOutdatedSDK","Upgrade your outdated Azure Spring Cloud SDK to the latest version","Active","3","Update your outdated Azure Spring Cloud SDK to the latest version","We have identified API calls from an outdated Azure Spring Cloud SDK. We recommend upgrading to the latest version for the latest fixes, performance improvements, and new feature capabilities.","Improve reliability, performance, and new feature capabilites.",,"https://docs.microsoft.com/azure/spring-cloud" +"a37462ed-d4d7-4c42-bf88-f16a60e2f8b6","Operational Excellence",,"High","Batch","microsoft.batch/batchaccounts","EolImage","Batch pools using image with an imminent expiration date","Active","3","Recreate your pool with a new image","Your pool is using an image with an imminent expiration date. Please recreate the pool with a new image to avoid potential interruptions. A list of newer images is available via the ListSupportedImages API.","Avoid potential interruptions","Use the ListSupportedImages API to find a newer image for your pools. Periodically refresh your view of end-of-life dates pertinent to your pools.","https://aka.ms/batch_expiring_image_learn_more" +"962f2d6d-b2c7-4c48-9e61-2a857051815d","Operational Excellence",,"Medium","Batch","microsoft.batch/batchaccounts","OldPool","Old node agents on Batch pools","Active","7.2","Recreate your pool to get the latest node agent features and fixes","Your pool has an old node agent. Consider recreating your pool to get the latest node agent updates and bug fixes.","Improved functionality and stability","Consider recreating old pools to get the latest node agent, which includes the latest updates and bug fixes. Alternatively, scale the pool down to 0 nodes and then resize back up.","https://aka.ms/batch_oldpool_learnmore" +"a49b0685-56d6-468d-b879-7e021a2395e3","Operational Excellence",,"High","Batch","microsoft.batch/batchaccounts","RecreatePool","Deprecated internal component on Batch pools","Active","2","Delete and recreate your pool to remove a deprecated internal component","Your pool is using a deprecated internal component. Please delete and recreate your pool for improved stability and performance.","Improved stability and performance","Please delete and recreate your pool for improved stability and performance.","https://aka.ms/batch_deprecatedcomponent_learnmore" +"48ae14cb-10de-4bd9-a005-5c25f498649b","Operational Excellence",,"High","Batch","microsoft.batch/batchaccounts","RemoveA8_A11Pools","Pools using a VM size that will be retired soon","Active","3","Delete and recreate your pool using a VM size that will soon be retired","Your pool is using A8-A11 VMs, which are set to be retired in March 2021. Please delete your pool and recreate it with a different VM size.","Avoid potential interruptions","Delete your pool and recreate it with a different VM size to avoid potential interruptions when the VM size is retired.","https://aka.ms/batch_a8_a11_retirement_learnmore" +"bbc3f0f1-85b7-4bcb-b474-0e02571eb5fa","Operational Excellence",,"High","Batch","microsoft.batch/batchaccounts","UpgradeAPI","API versions scheduled for deprecation","Active","4","Upgrade to the latest API version to ensure your Batch account remains operational.","In the past 14 days, you have invoked a Batch management or service API version that is scheduled for deprecation. Upgrade to the latest API version to ensure your Batch account remains operational.","Improved functionality and stability","Upgrade to the latest API version to ensure your Batch account remains operational.","https://aka.ms/batch_deprecatedapi_learnmore" +"a5ab10c5-424a-4818-9fba-ddca1eee531a","Performance",,"Medium","Redis Cache","microsoft.cache/redis","RedisCacheConnectedClients","Improve your Cache and application performance when running with many connected clients","Active","1","Improve your Cache and application performance when running with many connected clients","Cache instances perform best when not running under high server load which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce the server load or scale to a different size or sku with more capacity.","Ensure optimal performance and high availability through best practices","You can improve your Cache and application performance when running with many connected clients by scaling to a different size or sku","https://aka.ms/redis/recommendations/connections" +"e34f1fd6-7d4b-4030-9c1a-0b413675cb40","Performance",,"High","Redis Cache","microsoft.cache/redis","RedisCacheConnectedClientsHigh","Improve your Cache and application performance when running with many connected clients","Active","1","Improve your Cache and application performance when running with many connected clients","Cache instances perform best when not running under high server load which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce the server load or scale to a different size or sku with more capacity.","Ensure optimal performance and high availability through best practices","You can improve your Cache and application performance when running with many connected clients by scaling to a different size or sku","https://aka.ms/redis/recommendations/connections" +"f160c11d-9aab-4d41-979f-d119dec02392","Operational Excellence",,"High","Redis Cache","microsoft.cache/redis","ConsiderUsingRedisEnterprise","Consider upgrading to Azure Cache for Redis Enterprise","Active","1","You may benefit from using an Enterprise tier cache instance","This instance of Azure Cache for Redis is using one or more advanced features from the list - more than 6 shards, geo-replication, zone-redundancy or persistence. Consider switching to an Enterprise tier cache to get the most out of your Redis experience. Enterprise tier caches offer higher availability, better performance and more powerful features like active geo-replication.","Better performance, higher availability, and additional features.","Consider upgrading to Azure Cache for Redis Enterprise.","https://aka.ms/redisenterpriseupgrade" +"7c380315-6ad9-4fb2-8930-a8aeb1d6241b","High Availability","Other","Medium","Redis Cache","microsoft.cache/redis","RedisCacheMemoryFragmentation","Increase fragmentation memory reservation","Active","6","Increase fragmentation memory reservation","Fragmentation and memory pressure can cause availability incidents. To help in reduce cache failures when running under high memory pressure, increase reservation of memory for fragmentation through the maxfragmentationmemory-reserved setting available in the Advanced Settings options.","Avoid availability incidents when your cache has high memory fragmentation","You can avoid availability incidents by increasing fragmentation memory reservation","http://aka.ms/redis/recommendations/memory-policies" +"a67201dd-6df0-4838-8258-5abf26adc8f6","Performance",,"Medium","Redis Cache","microsoft.cache/redis","RedisCacheNetworkBandwidth","Improve your Cache and application performance when running with high network bandwidth","Active","1","Improve your Cache and application performance when running with high network bandwidth","Cache instances perform best when not running under high network bandwidth which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce network bandwidth or scale to a different size or sku with more capacity.","Ensure optimal performance and high availability through best practices","You can improve your Cache and application performance with high network bandwith by scaling to a different size or sku","https://aka.ms/redis/recommendations/bandwidth" +"a616baa6-74dd-45ac-a2a3-ab278d63f2d7","Performance",,"High","Redis Cache","microsoft.cache/redis","RedisCacheNetworkBandwidthHigh","Improve your Cache and application performance when running with high network bandwidth","Active","1","Improve your Cache and application performance when running with high network bandwidth","Cache instances perform best when not running under high network bandwidth which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce network bandwidth or scale to a different size or sku with more capacity.","Ensure optimal performance and high availability through best practices","You can improve your Cache and application performance with high network bandwith by scaling to a different size or sku","https://aka.ms/redis/recommendations/bandwidth" +"e387838a-4fbc-47d5-9a3d-9d1aaa218345","Operational Excellence",,"Medium","Redis Cache","microsoft.cache/redis","Persistence","Enable Persistence","Active","1","Redis persistence allows you to persist data stored in a cache so you can reload data from an event that caused data loss.","Redis persistence allows you to persist data stored in Redis. You can also take snapshots and back up the data. If there's a hardware failure, the persisted data is automatically loaded in your cache instance. Data loss is possible if a failure occurs where Cache nodes are down.","Avoid data loss due to hardware failure or Cache node failure","Enable Persistence to avoid data loss in case of hardware or node failure.","https://aka.ms/redis/persistence" +"204cc04b-0e75-46f9-9a43-9bcb39955236","Operational Excellence",,"High","Redis Cache","microsoft.cache/redis","MigrateFromCloudService","Migrate from Cloud Service","Active","1","Cloud service caches are being retired in August 2024, migrate before then to avoid any problems","This instance of Azure Cache for Redis has a dependency on Cloud Services (classic) which is being retired in August 2024. Please follow the instructions found in the learn more link to migrate to an instance without this dependency. If you need to upgrade your cache to Redis 6 please note that upgrading a cache with a dependency on cloud services is not supported. You should migrate your cache instance to Virtual Machine Scale Set before upgrading. For more information, see https://learn.microsoft.com/azure/azure-cache-for-redis/cache-faq for details on cloud services hosted caches. Note: If you have completed your migration away from Cloud Services, please allow up to 24 hours for this recommendation to be removed","Avoid service interruptions by migrating before cloud services are retired.","Migrate from Cloud Service before the end of support.","https://docs.microsoft.com/azure/azure-cache-for-redis/cache-faq#caches-with-a-dependency-on-cloud-services-%28classic%29" +"a25fccfd-854d-4c1a-9fae-aa0597a45e27","Performance",,"Medium","Redis Cache","microsoft.cache/redis","RedisCacheServerLoad","Improve your Cache and application performance when running with high server load","Active","1","Improve your Cache and application performance when running with high server load","Cache instances perform best when not running under high server load which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce the server load or scale to a different size or sku with more capacity.","Ensure optimal performance and high availability through best practices","You can improve your Cache and application performance with high server load by scaling to a different size or sku","https://aka.ms/redis/recommendations/cpu" +"dcd94184-c5fb-4e80-ac1e-7f11930b4f77","Performance",,"High","Redis Cache","microsoft.cache/redis","RedisCacheServerLoadHigh","Improve your Cache and application performance when running with high server load","Active","1","Improve your Cache and application performance when running with high server load","Cache instances perform best when not running under high server load which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce the server load or scale to a different size or sku with more capacity.","Ensure optimal performance and high availability through best practices","You can improve your Cache and application performance with high server load by scaling to a different size or sku","https://aka.ms/redis/recommendations/cpu" +"77204a4e-03ed-4db5-b059-3c3a26145b43","Operational Excellence",,"Medium","Redis Cache","microsoft.cache/redis","PersistenceSoftEnable","Check to see if Soft Delete is enabled","Active","2","Using persistence with soft delete enabled can increase storage costs.","Check to see if your storage account has soft delete enabled before using the data persistence feature. Using data persistence with soft delete causes very high storage costs. For more information, see https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-premium-persistence#how-do-i-check-if-soft-delete-is-enabled-on-my-storage-account","Avoid high storage costs due to soft delete","Check to see if Soft Delete is enabled to reduce high storage costs.","https://aka.ms/redis/persistence" +"faf7de8d-ccb9-4364-aad1-4852e489b2f3","Operational Excellence",,"High","Redis Cache","microsoft.cache/redis","TLSVersion","Support for TLS versions 1.0 and 1.1 is retiring on October 31, 2024.","Active","1.1","Support for TLS versions 1.0 and 1.1 is retiring on October 31, 2024.","Support for TLS 1.0/1.1 is retiring on October 31, 2024. Please configure your cache to use TLS 1.2 only and your application should using TLS 1.2 or later. See https://aka.ms/TLSVersions for more information.","Keep your cache secure.","Use TLS 1.2 to keep your cache secure.","https://aka.ms/TLSVersions" +"2f57b58b-1677-4c31-8a37-be79838d14ca","Performance",,"Medium","Redis Cache","microsoft.cache/redis","UnresponsiveClient","Improve cache throughput by scaling app host machine.","Active","1","Cache instances perform best when the host machines where client application runs is able to keep up with responses from the cache.","Cache instances perform best when the host machines where client application runs is able to keep up with responses from the cache. If client host machine is running hot on memory, CPU or network bandwidth, the cache responses will not reach your application fast enough and could result in higher latency.","You can improve your cache throughput and latency.","Consider scaling up the host machine where your client application runs.","https://docs.microsoft.com/azure/azure-cache-for-redis/cache-troubleshoot-client" +"16d0cf25-463d-4a20-8f18-d8d71edf92e3","Performance",,"Medium","Redis Cache","microsoft.cache/redis","RedisCacheUsedMemory","Improve your Cache and application performance when running with high memory pressure","Active","1","Improve your Cache and application performance when running with high memory pressure","Cache instances perform best when not running under high memory pressure which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce used memory or scale to a different size or sku with more capacity.","Ensure optimal performance and high availability through best practices","You can improve your Cache and application performance with high memory pressure by scaling to a different size or sku","https://aka.ms/redis/recommendations/memory" +"64dce138-80d7-48ad-934b-025a425386a7","Performance",,"High","Redis Cache","microsoft.cache/redis","RedisCacheUsedMemoryHigh","Improve your Cache and application performance when running with high memory pressure","Active","1","Improve your Cache and application performance when running with high memory pressure","Cache instances perform best when not running under high memory pressure which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce used memory or scale to a different size or sku with more capacity.","Ensure optimal performance and high availability through best practices","You can improve your Cache and application performance with high memory pressure by scaling to a different size or sku","https://aka.ms/redis/recommendations/memory" +"b1184137-cf30-4a62-87bd-5e287b911a46","Performance",,"Medium","Redis Cache","microsoft.cache/redis","RedisCacheUsedMemoryRSS","Improve your Cache and application performance when running with high memory pressure","Active","1","Improve your Cache and application performance when memory rss usage is high.","Cache instances perform best when not running under high memory pressure which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce used memory or scale to a different size or sku with more capacity.","Ensure optimal performance and high availability through best practices","You can improve your Cache and application performance with high memory pressure by scaling to a different size or sku","https://aka.ms/redis/recommendations/memory" +"2adfe155-4639-4d83-9814-15ce7454fa25","Performance",,"High","Redis Cache","microsoft.cache/redis","RedisCacheUsedMemoryRSSHigh","Improve your Cache and application performance when running with high memory pressure","Active","1","Improve your Cache and application performance when memory rss usage is high.","Cache instances perform best when not running under high memory pressure which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce used memory or scale to a different size or sku with more capacity.","Ensure optimal performance and high availability through best practices","You can improve your Cache and application performance with high memory pressure by scaling to a different size or sku","https://aka.ms/redis/recommendations/memory" +"dc33091b-a748-4418-b4b0-d3d97466efe4","Operational Excellence",,"Medium","Redis Cache","microsoft.cache/redis","PrivateLink","Avoid affecting cache functionality by using private link.","Active","1","Injecting a cache into a virtual network (VNet) imposes complex requirements on your network configuration. This is a common source of incidents affecting customer applications","Injecting a cache into a virtual network (VNet) imposes complex requirements on your network configuration. It's difficult to configure the network accurately and avoid affecting cache functionality. It's easy to break the cache accidentally while making configuration changes for other network resources. This is a common source of incidents affecting customer applications","Avoid affecting cache functionality.","Use private link to avoid affecting cache functionality","https://aka.ms/VnetToPrivateLink" +"abb1f687-2d58-4197-8f5b-8882f05c04b8","Cost",,"High","Virtual Machines","microsoft.capacity/reservationorders/reservations","ReservedInstancePurchaseNew","Renew your reserved instances","Active","3","Configure automatic renewal for your expiring reservation","Reserved instances listed below are expiring soon or recently expired. Your resources will continue to operate normally, however, you will be billed at the on-demand rates going forward. To optimize your costs, configure automatic renewal for these reservations or purchase a replacement manually.","Continue to receive discounted rates for your resources","Configure auto-renewal for your expiring reservations to continue receiving discounted rates.","https://aka.ms/reservedinstances" +"ceecfd41-89b3-4c64-afe6-984c9cc03126","High Availability","Other","High","Azure Front Door X","microsoft.cdn/profiles","EdgioCdnManagedSecretExpiringOrExpired","Azure CDN From Edgio, Managed Certificate Renewal Unsuccessful. Additional Validation Required.","Active","7.1","Azure CDN From Edgio, Managed Certificate Renewal Unsuccessful. Additional Validation Required.","Azure CDN from Edgio employs CNAME delegation to renew certificates with DigiCert for managed certificate renewals. It is essential that Custom Domains resolve to an azureedge.net endpoint for the automatic renewal process with DigiCert to be successful. Please ensure your Custom Domain's CNAME and CAA records are configured correctly. Should you require further assistance, please submit a support case to Azure to re-attempt the renewal request.","Ensure service availability.",,"" +"4e1c2077-7c73-4ace-b4aa-f11b36c28290","High Availability","Business Continuity","High","Azure Front Door X","microsoft.cdn/profiles","RenewExpiredBYOC","Renew the expired Azure Front Door customer certificate to avoid service disruption","Active","10","Renew the expired Azure Front Door customer certificate to avoid service disruption","When customer certificates for Azure Front Door Standard and Premium profiles expire, you might have service disruptions. To avoid service disruption, renew the certificate before it expires.","Ensure service availability.",,"https://docs.microsoft.com/azure/frontdoor/standard-premium/how-to-configure-https-custom-domain#use-your-own-certificate" +"be29e4bc-2609-49ca-bb76-5df17bb71bc3","High Availability","Other","High","Azure Front Door X","microsoft.cdn/profiles","RenewExpiringBYOC","Renew the expiring Azure Front Door customer certificate to avoid service disruption","Disabled","9","Renew the expiring Azure Front Door customer certificate to avoid service disruption","Some of the customer certificates for Azure Front Door Standard and Premium profiles are expiring. Please renew the certificate in time to avoid service disruption.","Ensure service availability.",,"https://docs.microsoft.com/azure/frontdoor/standard-premium/how-to-configure-https-custom-domain?WT.mc_id=Portal-Microsoft_Azure_Expert#certificate-renewal-and-changing-certificate-types" +"bfe85fd2-ee53-4c35-8781-7790da2107e1","High Availability","Business Continuity","High","Azure Front Door X","microsoft.cdn/profiles","RevalidateDomainOwnership","Re-validate domain ownership for the Azure Front Door managed certificate renewal","Active","5.8","Re-validate domain ownership for the Azure Front Door managed certificate renewal","Azure Front Door (AFD) can't automatically renew the managed certificate because the domain isn't CNAME mapped to AFD endpoint. For the managed certificate to be automatically renewed, revalidate domain ownership.",,,"https://docs.microsoft.com/azure/frontdoor/standard-premium/how-to-add-custom-domain#domain-validation-state" +"2c057605-4707-4d3e-bbb0-a7fe9b6a626b","High Availability","Other","Medium","Azure Front Door X","microsoft.cdn/profiles","SwitchVersionBYOC","Switch Secret version to 'Latest' for the Azure Front Door customer certificate","Active","7.1","Switch Secret version to 'Latest' for the Azure Front Door customer certificate","Configure the Azure Front Door (AFD) customer certificate secret to 'Latest' for the AFD to refer to the latest secret version in Azure Key Vault, allowing the secret can be automatically rotated.","‘Latest’ version can be automatically rotated.",,"https://docs.microsoft.com/azure/frontdoor/standard-premium/how-to-configure-https-custom-domain#certificate-renewal-and-changing-certificate-types" +"e607041e-3194-42ad-9994-b6ea5ec12f5e","Performance",,"Medium","Azure Front Door X","microsoft.cdn/profiles","UpgradeCDNToLatestSDKLanguage","Upgrade Azure Front Door Standard and Premium SDK version","Active","4.7","Upgrade SDK version recommendation","The latest version of Azure Front Door Standard and Premium Client Library or SDK contains fixes to issues reported by customers and proactively identified through our QA process. The latest version also carries reliability and performance optimization in addition to new features that can improve your overall experience using Azure Front Door Standard and Premium.","Improve reliability, performance, and new feature capabilites.",,"https://aka.ms/afd/tiercomparison" +"9411bc9f-d181-497c-b519-4154ae04fb00","High Availability","Business Continuity","High","Azure Front Door X","microsoft.cdn/profiles","ValidateDomainOwnership","Validate domain ownership by adding DNS TXT record to DNS provider","Active","8.1","Validate domain ownership by adding DNS TXT record to DNS provider","Validate domain ownership by adding the DNS TXT record to your DNS provider. Validating domain ownership through TXT records enhances security and ensures proper control over your domain.","Ensure service availability.",,"https://docs.microsoft.com/azure/frontdoor/standard-premium/how-to-add-custom-domain#domain-validation-state" +"d472fb24-d23c-480f-896f-b3095d5bd868","Cost",,"High","Virtual Machines","microsoft.classiccompute/virtualmachines","LowUsageVmClassic","Shut down or resize your virtual machine","Disabled","3","Right-size or shutdown underutilized virtual machines","We've analyzed the usage patterns of your virtual machine over the past 7 days, and identified virtual machines with low usage. While certain scenarios can result in low utilization by design, you can often save money by managing the size and number of virtual machines.","savings per year","You can optimize underutilized virtual machines to reduce your monthly Azure spend.","https://aka.ms/aa_lowusagerec_learnmore" +"c6da5a5f-149d-4550-82c9-ec3921a586f3","Performance",,"Medium","Azure Communication Services","microsoft.communication/communicationservices","UpgradeCallingSdk","Use recommended version of Calling SDK","Active","2","Use recommended version of Calling SDK","Azure Communication Services Calling SDK can be used to enable voice, video, screen-sharing, and other real-time communication. Update to the recommended version of Calling SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.","Newer versions of Calling SDK contain latest fixes and new features",,"https://docs.microsoft.com/azure/communication-services/concepts/voice-video-calling/calling-sdk-features" +"c9f07cd1-54a4-4bc9-bdb6-87d97e4b99fe","Performance",,"High","Azure Communication Services","microsoft.communication/communicationservices","UpgradeCallingSdkHighPriority","Use recommended version of Calling SDK (High Priority)","Active","2","Use recommended version of Calling SDK (High Priority)","Azure Communication Services Calling SDK can be used to enable voice, video, screen-sharing, and other real-time communication. Update to the recommended version of Calling SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.","Newer versions of Calling SDK contain latest fixes and new features",,"https://docs.microsoft.com/azure/communication-services/concepts/voice-video-calling/calling-sdk-features" +"28da6c5a-8e1f-47eb-beb3-62fd50cbb593","Performance",,"Medium","Azure Communication Services","microsoft.communication/communicationservices","UpgradeChatSdk","Use recommended version of Chat SDK","Active","2","Use recommended version of Chat SDK","Azure Communication Services Chat SDK can be used to add rich, real-time chat to your applications. Update to the recommended version of Chat SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.","Newer versions of Chat SDK contain latest fixes and new features",,"https://docs.microsoft.com/azure/communication-services/concepts/chat/sdk-features" +"a383aac0-2eed-4dac-8050-3675fdc8eded","Performance",,"Medium","Azure Communication Services","microsoft.communication/communicationservices","UpgradeIdentitySdk","Use recommended version of Identity SDK","Active","2","Use recommended version of Identity SDK","Azure Communication Services Identity SDK can be used to manage identities, users, and access tokens. Update to the recommended version of Identity SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.","Newer versions of Identity SDK contain latest fixes and new features",,"https://docs.microsoft.com/azure/communication-services/concepts/sdk-options" +"5e8e752c-3851-461c-9bc4-407bbf3ebd94","Performance",,"Medium","Azure Communication Services","microsoft.communication/communicationservices","UpgradePhoneNumbersSdk","Use recommended version of Phone Numbers SDK","Active","2","Use recommended version of Phone Numbers SDK","Azure Communication Services Phone Numbers SDK can be used to acquire and manage phone numbers. Update to the recommended version of Phone Numbers SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.","Newer versions of Phone Numbers SDK contain latest fixes and new features",,"https://docs.microsoft.com/azure/communication-services/concepts/sdk-options" +"f323a06f-b141-49f5-adbd-81899c67ced2","Performance",,"Medium","Azure Communication Services","microsoft.communication/communicationservices","UpgradeResourceManagerSdk","Use recommended version of Resource Manager SDK","Disabled","2","Use recommended version of Resource Manager SDK","Resource Manager SDK can be used to provision and manage Azure Communication Services resources. Update to the recommended version of Resource Manager SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.","Newer versions of Resource Manager SDK contain latest fixes and new features",,"https://docs.microsoft.com/azure/communication-services/quickstarts/create-communication-resource?tabs=windows&pivots=platform-net" +"abcb78e5-6f21-4f64-badd-c147f457fb0a","Performance",,"Medium","Azure Communication Services","microsoft.communication/communicationservices","UpgradeRoomsSdk","Use recommended version of Rooms SDK","Active","1.1","Use recommended version of Rooms SDK","Azure Communication Services Rooms SDK can be used to control who can join a call, when they can meet, and how they can collaborate. Update to the recommended version of Rooms SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.","New versions of Rooms SDK contain latest fixes and features",,"https://learn.microsoft.com/azure/communication-services/concepts/rooms/room-concept" +"30bcc7b0-bcab-4b60-a530-53ccbb64663f","Performance",,"Medium","Azure Communication Services","microsoft.communication/communicationservices","UpgradeServerCallingSdk","Use recommended version of Call Automation SDK","Active","3","Use recommended version of Call Automation SDK","Azure Communication Services Call Automation SDK can be used to make and manage calls, play audio, and configure recording. Update to the recommended version of Call Automation SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.","Newer versions of Call Automation SDK contain latest fixes and new features",,"https://docs.microsoft.com/azure/communication-services/concepts/voice-video-calling/call-automation-apis" +"bf23065c-8829-4fa1-8152-09d4066e11a3","Performance",,"Medium","Azure Communication Services","microsoft.communication/communicationservices","UpgradeSmsSdk","Use recommended version of SMS SDK","Active","2","Use recommended version of SMS SDK","Azure Communication Services SMS SDK can be used to send and receive SMS messages. Update to the recommended version of SMS SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.","Newer versions of SMS SDK contain latest fixes and new features",,"https://docs.microsoft.com/azure/communication-services/concepts/telephony-sms/sdk-features" +"d5aa8a47-54a0-43ed-b4b4-eed22fd1a92c","Performance",,"Medium","Azure Communication Services","microsoft.communication/communicationservices","UpgradeTurnSdk","Use recommended version of Network Traversal SDK","Disabled","2.1","Use recommended version of Network Traversal SDK","Azure Communication Services Network Traversal SDK can be used to access TURN servers for low-level data transport. Update to the recommended version of Network Traversal SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.","Newer versions of Network Traversal SDK contain latest fixes and new features",,"https://docs.microsoft.com/azure/communication-services/concepts/sdk-options" +"459f28d1-3669-43a7-8981-2dcbfa862608","Performance",,"Medium","SAP on Azure","microsoft.subscriptions/subscriptions","UpdateToLatestWaasApiVersionAtSub","Upgrade to the latest Workloads API version","Active","2","Upgrade Workloads API to the latest version (Azure Center for SAP solutions API)","We have identified calls to an outdated Workloads API version for resources under this resource group. We recommend switching to the latest Workloads API version to ensure uninterrupted access to latest features and performance improvements in Azure Center for SAP solutions. If there are multiple Virtual Instances for SAP solutions (VIS) shown in the recommendation, please ensure you update the API version for all VIS resources.","Latest Workloads API contain fixes for known issues and additional improvements","Upgrade to the latest Workloads API version","https://go.microsoft.com/fwlink/?linkid=2228001" +"f5a05237-91e2-4ecf-8394-f020c33665a1","Performance",,"Medium","SAP on Azure","microsoft.subscriptions/subscriptions","UpgradeToLatestWaasSdkVersionAtSub","Upgrade to the latest Workloads SDK version for Azure Center for SAP solutions","Active","2","Upgrade Workloads SDK to the latest version (Azure Center for SAP solutions SDK)","We have identified calls to an outdated Workloads SDK version from resources in this Resource Group. Please upgrade to the latest Workloads SDK version to get the latest features and the best results in terms of model quality, performance and service availability for Azure Center for SAP solutions. If there are multiple Virtual Instances for SAP solutions (VIS) shown in the recommendation, please ensure you update the SDK version for all VIS resources.","Latest Workloads SDK contains fixes for known issues and additional improvements.","","https://go.microsoft.com/fwlink/?linkid=2228000" +"93214083-e48e-420e-881f-89d02265f831","Performance",,"Medium","Azure Migrate","microsoft.subscriptions/subscriptions","UpdateToLatestSapMigrateDiscoveryApiVersionAtSub","Upgrade to the latest SAP Migrate Discovery API version","Active","2","Upgrade SAP Migrate Discovery API to the latest version","An outdated version of the SAP Migrate Discovery API has been detected for resources within the SAP Discovery Site under your subscription. To ensure access to the latest features and performance enhancements, we recommend upgrading to the most recent version of the API.","Latest API contain fixes for known issues and additional improvements","Upgrade to the latest SAP Migrate Discovery API version","https://go.microsoft.com/fwlink/?linkid=2263529" +"1ee8eace-1e7e-4d73-8547-1f687c72979b","Performance",,"Medium","Azure Migrate","microsoft.subscriptions/subscriptions","UpgradeToLatestSapMigrateDiscoverySdkVersionAtSub","Upgrade to the latest SAP Migrate Discovery SDK version","Active","2","Upgrade SAP Migrate Discovery SDK to the latest version","An outdated version of the SAP Migrate Discovery SDK has been detected for resources within the SAP Discovery Site under your subscription. To ensure access to the latest features and performance enhancements, we recommend upgrading to the most recent version of the SDK.","Latest SAP Migrate Discovery SDK contains fixes for known issues and additional improvements.","","https://go.microsoft.com/fwlink/?linkid=2263529" +"02cfb5ef-a0c1-4633-9854-031fbda09946","High Availability","High Availability","High","Storage","microsoft.compute/availabilitysets","ManagedDisksAvSet","Use Managed Disks","Active","8","Improve data reliability by using Managed Disks","Virtual machines in an Availability Set with disks that share either storage accounts or storage scale units are not resilient to single storage scale unit failures during outages. Migrate to Azure Managed Disks to ensure that the disks of different VMs in the Availability Set are sufficiently isolated to avoid a single point of failure.","Ensure business continuity through data resilience","You can use Managed Disks to ensure data resilience.","https://aka.ms/aa_avset_manageddisk_learnmore" +"702b474d-698f-4029-9f9d-4782c626923e","Cost",,"High","Storage","microsoft.compute/snapshots","ManagedDiskSnapshot","Use Standard snapshots for Managed Disks","Active","1.2","Use Standard Storage to store Managed Disks snapshots","To save 60% of cost, we recommend storing your snapshots in Standard Storage, regardless of the storage type of the parent disk. This option is the default for Managed Disks snapshots. Migrate your snapshot from Premium to Standard Storage. Refer to Managed Disks pricing details.","60% reduction in the snapshot cost for Managed Disks",,"https://aka.ms/aa_manageddisksnapshot_learnmore" +"ed651749-cd37-4fd5-9897-01b416926745","High Availability","Disaster Recovery","Medium","Site Recovery","microsoft.compute/virtualmachines","ASRUnprotectedVMs","Enable virtual machine replication","Active","7","Enable virtual machine replication to protect your applications from regional outage","Virtual machines are resilient to regional outages when replication to another region is enabled. To reduce adverse business impact during an Azure region outage, we recommend enabling replication of all business-critical virtual machines.","Ensure business continuity in case of any Azure region outage",,"https://aka.ms/azure-site-recovery-dr-azure-vms" +"bcfeb92b-fe93-4cea-adc6-e747055518e9","High Availability","Other","High","Site Recovery","microsoft.compute/virtualmachines","ASRUpdateOutboundConnectivityProtocolToServiceTags","Update your outbound connectivity protocol to Service Tags for Azure Site Recovery","Active","9","Update your outbound connectivity protocol to Service Tags for Azure Site Recovery","IP address-based allowlisting is a vulnerable way to control outbound connectivity for firewalls, Service Tags are a good alternative. We highly recommend the use of Service Tags, to allow connectivity to Azure Site Recovery services for the machines.","Ensures better security, stability and resiliency than hard coded IP Addresses",,"https://aka.ms/azure-site-recovery-using-service-tags" +"7cdecd2c-a8b0-41cf-b0a4-528bd4d85f5a","Performance",,"Medium","Storage","microsoft.compute/virtualmachines","AzureStorageVmUltraDisk","Learn more about Ultra disk","Active","4","Take advantage of Ultra Disk low latency for your log disks and improve your database workload performance.","Ultra disk is available in the same region as your database workload. Ultra disk offers high throughput, high IOPS, and consistent low latency disk storage for your database workloads: For Oracle DBs, you can now use either 4k or 512E sector sizes with Ultra disk depending on your Oracle DB version. For SQL server, leveraging Ultra disk for your log disk might offer more performance for your database. See instructions here for migrating your log disk to Ultra disk.","Boost the performance of your database on IaaS VMs by using Ultra disk as log disk.","","https://docs.microsoft.com/azure/virtual-machines/disks-enable-ultra-ssd?tabs=azure-portal" +"9b0d1cf7-8a3a-4c8b-8f9f-1c3e70e399d6","Performance",,"Medium","Storage","microsoft.compute/virtualmachines","MatchProdVMProdDisks","Match production Virtual Machines with Production Disk for consistent performance and better latency","Active","1.2","Match production Virtual Machines with Production Disk for consistent performance and better latency","Production virtual machines need production disks if you want to get the best performance. We see that you are running a production level virtual machine, however, you are using a low performing disk with standard HDD. Upgrading your disks that are attached to your production disks, either Standard SSD or Premium SSD, will benefit you with a more consistent experience and improvements in latency.","More consistent performance, better latency","Match Production Virtual Machine with Production Disks.","https://docs.microsoft.com/azure/virtual-machines/windows/disks-types#disk-comparison" +"58d6648d-32e8-4346-827c-4f288dd8ca24","High Availability","High Availability","Medium","Storage","microsoft.compute/virtualmachines","MigrateStandardStorageAccountToPremium","Migrate Standard disks to Premium disks","Disabled","8","Upgrade the standard disks attached to your premium-capable VM to premium disks","Using Standard SSD disks with premium VMs may lead to suboptimal performance and latency issues. We recommend that you consider upgrading the standard disks to premium disks. For any Single Instance Virtual Machine using premium storage for all Operating System Disks and Data Disks, we guarantee Virtual Machine Connectivity of at least 99.9%. When choosing to upgrade, there are two factors to consider. The first factor is that upgrading requires a VM reboot and that takes 3-5 minutes to complete. The second is if the VMs in the list are mission-critical production VMs, evaluate the improved availability against the cost of premium disks.","Improved availability with single VM SLA available only when all disks are premium",,"https://aka.ms/aa_storagestandardtopremium_learnmore" +"02c15f98-aedb-481b-884b-af5847b2bf3d","High Availability","Other","Medium","Virtual Machines","microsoft.compute/virtualmachines","SIVM","Use availability sets","Disabled","6","Use availability sets for improved fault tolerance","Group two or more virtual machines in an availability set to ensure at least one virtual machine is available during an outage.","Ensure business continuity through virtual machine resilience",,"https://aka.ms/aa_sivmrec_learnmore" +"158f0a07-0a66-4a25-9e37-c43c49c8dd64","Performance",,"High","Virtual Machines","microsoft.subscriptions/subscriptions","ComputeStaleSDKRecommendation","Update your current Compute Management SDK version to the most recent version","Disabled","5","Update your current Compute Management SDK version to the most recent version.","We have identified API calls from outdated Compute Management SDKs for resources under this subscription. We recommend switching to the latest Compute Management SDK versions. You need to update your existing code or scripts to use the latest SDK version. This ensures you receive the latest security and performance improvements.","Improved security, performance, data resiliency, and support for new features.","Regularly update your Compute Management SDK versions to prevent security issues and access new features.","https://aka.ms/azureSDKReadMe" +"57ecb3cd-f2b4-4cad-8b3a-232cca527a0b","High Availability","High Availability","High","Storage","microsoft.compute/virtualmachines","UpgradeVMToManagedDisksWithoutAdditionalCost","Upgrade VM to Managed Disks at no additional cost","Active","6","Upgrade VM from Premium Unmanaged Disks to Managed Disks at no additional cost","Azure Managed Disks provide higher resiliency, simplified service management, higher scale target and more choices among several disk types. Your VM is using premium unmanaged disks that can be migrated to managed disks at no additional cost through the portal in less than 5 minutes.","Leverage higher resiliency and other benefits of Managed Disks",,"https://aka.ms/md_overview" +"af0be9f8-e590-48d0-9e19-380d8819b8dc","High Availability","Other","Medium","Backup","microsoft.compute/virtualmachines","VmNoBackup","Enable Virtual Machine Backup","Disabled","7.1","Enable virtual machine backup to protect your data from corruption and accidental deletion","Configure virtual machine backup to protect your mission critical data against accidental deletion or corruption.","Improved data resilience and performance","You can enable virtual machine backup to protect your data from corruption or accidental deletion.","https://aka.ms/aa_vmbackup_learnmore" +"11f04d70-5bb3-4065-b717-1f11b2e050a8","High Availability","Service Upgrade and Retirement","High","Compute_Images","microsoft.compute/virtualmachines","VMRunningDeprecatedImage","Upgrade your VM to alternative image version","Active","16","Upgrade your deprecated Virtual Machine image to a newer image","Virtual Machines (VMs) in your subscription are running on images scheduled for deprecation. Once the image is deprecated, new VMs can't be created from the deprecated image. To prevent disruption to your workloads, upgrade to a newer image. (VMRunningDeprecatedImage)","Minimize any potential disruptions to your VM workloads",,"https://aka.ms/DeprecatedImagesFAQ" +"937d85a4-11b2-4e13-a6b5-9e15e3d74d7b","High Availability","Service Upgrade and Retirement","High","Compute_Images","microsoft.compute/virtualmachines","VMRunningDeprecatedOfferLevelImage","Upgrade to a newer offer of Virtual Machine image","Active","9","Upgrade to a newer offer of Virtual Machine image","Virtual Machines (VMs) in your subscription are running on images scheduled for deprecation. Once the image is deprecated, new VMs can't be created from the deprecated image. To prevent disruption to your workloads, upgrade to a newer image. (VMRunningDeprecatedOfferLevelImage)","Minimize any potential disruptions to your VM workloads",,"https://aka.ms/DeprecatedImagesFAQ" +"681acf17-11c3-4bdd-8f71-da563c79094c","High Availability","Service Upgrade and Retirement","High","Compute_Images","microsoft.compute/virtualmachines","VMRunningDeprecatedPlanLevelImage","Upgrade to a newer SKU of Virtual Machine image","Active","10","Upgrade to a newer SKU of Virtual Machine image","Virtual Machines (VMs) in your subscription are running on images scheduled for deprecation. Once the image is deprecated, new VMs can't be created from the deprecated image. To prevent disruption to your workloads, upgrade to a newer image.","Minimize any potential disruptions to your VM workloads",,"https://aka.ms/DeprecatedImagesFAQ" +"3b739bd1-c193-4bb6-a953-1362ee3b03b2","High Availability","Service Upgrade and Retirement","High","Compute_Images","microsoft.compute/virtualmachinescalesets","VMScaleSetRunningDeprecatedImage","Upgrade your VMSS to alternative image version","Active","10","Upgrade your VMSS to alternative image version","VMSS in your subscription are running on images that have been scheduled for deprecation. Once the image is deprecated, your VMSS workloads would no longer scale out. Upgrade to newer version of the image to prevent disruption to your workload.","Minimize any potential disruptions to your VMSS workloads",,"https://aka.ms/DeprecatedImagesFAQ" +"3d18d7cd-bdec-4c68-9160-16a677d0f86a","High Availability","Service Upgrade and Retirement","High","Compute_Images","microsoft.compute/virtualmachinescalesets","VMScaleSetRunningDeprecatedOfferImage","Upgrade your VMSS to alternative image Offer","Active","10","Upgrade your VMSS to alternative image offer","VMSS in your subscription are running on images that have been scheduled for deprecation. Once the image is deprecated, your VMSS workloads would no longer scale out. To prevent disruption to your workload, upgrade to newer offer of the image.","Minimize any potential disruptions to your VMSS workloads",,"https://aka.ms/DeprecatedImagesFAQ" +"44abb62e-7789-4f2f-8001-fa9624cb3eb3","High Availability","Service Upgrade and Retirement","High","Compute_Images","microsoft.compute/virtualmachinescalesets","VMScaleSetRunningDeprecatedPlanImage","Upgrade your VMSS to alternative image SKU","Active","10","Upgrade your VMSS to alternative image SKU","VMSS in your subscription are running on images that have been scheduled for deprecation. Once the image is deprecated, your VMSS workloads would no longer scale out. To prevent disruption to your workload, upgrade to newer SKU of the image.","Minimize any potential disruptions to your VMSS workloads",,"https://aka.ms/DeprecatedImagesFAQ" +"A0C6DF20-B77A-4215-A877-A8EE03CEB156","Operational Excellence",,"Low","Azure Container Apps","microsoft.app/containerapps","UseLatestApiVersion","The api version you use for Microsoft.App is deprecated, please use latest api version","Active","1","The api version you use for Microsoft.App is deprecated, please use latest api version","The api version you use for Microsoft.App is deprecated, please use latest api version","More stable api experience",,"http://aka.ms/containerappsapiversion" +"c692e862-953b-49fe-9c51-e5d2792c1cc1","High Availability","Other","High","Azure Container Apps","microsoft.app/managedenvironments","CreateNewContainerAppsEnvironment","Re-create your your Container Apps environment to avoid DNS issues","Active","6","Re-create your your Container Apps environment to avoid DNS issues","There's a potential networking issue with your Container Apps environments that might cause DNS issues. We recommend that you create a new Container Apps environment, re-create your Container Apps in the new environment, and delete the old Container Apps environment.","Avoid DNS failures in your Container Apps Environment.",,"https://aka.ms/createcontainerapp" +"b9ce2d2e-554b-4391-8ebc-91c570602b04","High Availability","Other","Medium","Azure Container Apps","microsoft.app/containerapps","ContainerAppCustomDomainCertificateNearExpiration","Renew custom domain certificate","Active","6","Renew custom domain certificate","The custom domain certificate you uploaded is near expiration. To prevent possible service downtime, renew your certificate and upload the new certificate for your container apps.","Your service wont fail because of expired certificate.",,"https://aka.ms/containerappcustomdomaincert" +"fa6c0880-da2e-42fd-9cb3-e1267ec5b5c2","High Availability","Other","High","Azure Container Apps","microsoft.app/containerapps","ContainerAppManagedCertificateAutoRenewalFailure","Managed certificate failed to renew.","Active","6","An issue has been detected that is preventing the renewal of your Managed Certificate.","We detected the managed certificate used by the Container App has failed to auto renew. Please follow the documentation link to make sure that the DNS settings of your custom domain are correct.","Avoid downtime due to an expired certificate.",,"https://aka.ms/containerapps/managed-certificates" +"9be5f344-6fa5-4abc-a1f2-61ae6192a075","High Availability","High Availability","Medium","Azure Container Apps","microsoft.app/containerapps","ContainerAppMinimalReplicaCountTooLow","Increase the minimal replica count for your containerized application","Active","6","Increase the minimal replica count for your containerized application","The minimal replica count set for your Azure Container App containerized application might be too low, which can cause resilience, scalability, and load balancing issues. For better availability, consider increasing the minimal replica count.","Better availability for your container app.",,"https://aka.ms/containerappscalingrules" +"f6e3ad9c-5d58-48ba-b06b-ebffba60dd18","Cost",,"Medium","Data Factory","microsoft.datafactory/factories/pipelines","ADFFailingPipelines","Delete failing ADF pipelines","Active","2.2","Delete failing ADF pipelines","Repeatedly failing pipelines have been detected in your Azure Data Factory resource. Know that you're being billed for them even though they are not serving you while failing. Review them to resolve issues or delete failing pipelines that are no longer needed to save on costs.","Reduce billing costs by addressing issues with or deleting your failing Data Factory pipelines",,"https://aka.ms/aa_advisor_adfpipeline" +"eb4f67d2-2440-4d58-bec7-6de73cc5ba75","Performance",,"Medium","Data Factory","microsoft.datafactory/factories/triggers","ADFThrottledTriggers","Review your throttled Data Factory Triggers","Active","1","Review your throttled Data Factory Triggers","A high volume of throttling has been detected in an event-based trigger that runs in your Data Factory resource. This is causing your pipeline runs to drop from the run queue. Review the trigger definition to resolve issues and increase performance.","Ensure better performance by reviewing and editing your event-based trigger definition",,"https://aka.ms/adf-create-event-trigger" +"a77dd319-ffb5-4f88-bdf2-e98e59afc79f","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbformariadb/servers","OrcasMariaDBAuditLog","Increase the reliability of MariaDB audit logs.","Active","1","Increase the reliability of audit logs","Our internal telemetry shows that the server's audit logs may have been lost over the past day. This can occur when your server is experiencing a CPU heavy workload or a server generates a large number of audit logs over a short period of time. We recommend only logging the necessary events required for your audit purposes using the following server parameters: audit_log_events, audit_log_exclude_users, audit_log_include_users. If the CPU usage on your server is high due to your workload, we recommend increasing the server's vCores to improve performance.","Improve the reliability of audit logs for monitoring and troubleshooting.","You can improve the reliability of MariaDB audit logs by only logging events you need.","https://aka.ms/mariadb-audit-logs" +"860d2d5d-7934-4ccb-a34a-577adf3022a6","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbformariadb/servers","OrcasMariaDbConcurrentConnection","Scale the MariaDB server to higher SKU","Active","1","Scale the MariaDB server to higher SKU","Our internal telemetry shows that the server may be unable to support the connection requests because of the maximum supported connections for the given SKU. This may result in a large number of failed connections requests which adversly affect the the performance. To improve performance, we recommend to move to higher memory SKU by increasing vCore or switching to Memory-Optimized SKUs.","Improve query performance by allowing more concurrent connections","You can improve the query performance of your MariaDB database by scaling your server to a higher SKU.","https://aka.ms/mariadbconnectionlimits" +"a5f888e3-8cf4-4491-b2ba-b120e14eb7ce","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbformariadb/servers","OrcasMariaDbCpuOverlaod","Increase the MariaDB server vCores","Active","1","Increase the MariaDB server vCores","Our internal telemetry shows that the CPU has been running under high utilization for an extended period of time over the last 7 days. High CPU utilization may lead to slow query performance. To improve performance, we recommend moving to a larger compute size.","Improve query performance by reducing CPU pressure","You can improve the query performance of your MariaDB database by increasing the server vCores.","https://aka.ms/mariadbpricing" +"a092afdb-6f20-4b42-8d8f-423ac8d71a3f","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbformariadb/servers","OrcasMariaDbMemoryCache","Move your MariaDB server to Memory Optimzed SKU","Active","1","Move your MariaDB server to Memory Optimzed SKU","Our internal telemetry shows that there is high churn in the buffer pool for this server which can result in slower query performance and increased IOPS. To improve performance, please review your workload queries to identify opportunities to minimize memory consumed. If no such opportunity found, then we recommend moving to higher SKU with more memory or increase storage size to get more IOPS.","Improve query performance by caching more data in memory","You can improve the query performance of your MariaDB database by moving your server to a Memory Optimized SKU.","https://aka.ms/mariadbpricing" +"2af11142-942e-45c1-8ce8-d9d2df25aae9","Cost",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbformariadb/servers","OrcasMariaDbCpuRightSize","Right-size underutilized MariaDB server","Active","1.1","Right-size underutilized MariaDB servers","Our internal telemetry shows that the MariaDB database server resources have been underutilized for an extended period of time over the last 7 days. Low resource utilization results in unwanted expenditure which can be fixed without significant performance impact. To reduce your costs and efficiently manage your resources, we recommend reducing the compute size (vCores) by half.","Reduce cost by right-sizing the MariaDB server","You can improve the overall resource spend for your Azure Database for MariaDB by scaling down the compute resources by half.","https://aka.ms/mariadbpricing" +"dc791c8d-a74e-4b3e-b7f1-40793399ecd6","Performance",,"High","Open Source RDBMS (Orcas)","microsoft.dbformariadb/servers","OrcasMariaDbStorageLimit","Increase the Server Storage limit","Active","1","Scale the storage limit for MariaDB server","Our internal telemetry shows that the server may be constrained because it is approaching limits for the currently provisioned storage values. This may result in degraded performance or in the server being moved to read-only mode. To ensure continued performance, we recommend increasing the provisioned storage amount or turning ON the ""Auto-Growth"" feature for automatic storage increases","Improve query performance by allocating larger storage for the server",,"https://aka.ms/mariadbstoragelimits" +"fba7355d-0f26-4015-9b14-17bdc584081a","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbformysql/flexibleservers","OrcasMeruMySqlComputeSeriesUpgradeEv5","Upgrade to Ev5 compute series","Active","2","Boost your workload performance by 30% with the new Ev5 compute hardware","With the new Ev5 compute hardware, you can boost workload performance by 30% with higher concurrency and better throughput. Navigate to the Compute+Storage blade on the Azure Portal and switch to Ev5 compute at no additional cost. Ev5 compute provides best performance among other VM series in terms of QPS and latency.","With the new Ev5 compute hardware, you can boost workload performance by 30% with higher concurrency and better throughput.","With the new Ev5 compute hardware, you can boost workload performance by 30% with higher concurrency and better throughput.","https://techcommunity.microsoft.com/t5/azure-database-for-mysql-blog/boost-azure-mysql-business-critical-flexible-server-performance/ba-p/3603698" +"5f043aef-0ac4-4dd6-941b-7f4697ebad47","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbformysql/flexibleservers","OrcasMeruMysqlConnectionUpsell","Increase connection limit by adding vCores or switching to a higher SKU.","Active","1.2","Scale the MySQL Flexible Server to a higher SKU","Our telemetry indicates that your Flexible Server is exceeding the connection limits associated with your current SKU. A large number of failed connection requests may adversely affect server performance. To improve performance, we recommend increasing the number of vCores or switching to a higher SKU.","Improve Flexible Server performance by enabling more concurrent connections.","You can raise the connection limit of your MySQL Flexible Server by increasing vCores or switching to a higher SKU.","https://aka.ms/azure_mysql_flexible_server_storage" +"96181a8c-f81b-45c0-83d2-5c4cf62843c4","Performance",,"High","Open Source RDBMS (Orcas)","microsoft.dbformysql/flexibleservers","OrcasMeruMysqlCpuUpcell","Increase your Flexible Server's CPU vCore.","Active","1","Increase the MySQL Flexible Server vCores.","Our internal telemetry shows that the CPU has been running under high utilization for an extended period of time over the last 7 days. High CPU utilization may lead to slow query performance. To improve performance, we recommend moving to a larger compute size.","Improve query performance by reducing CPU pressure","You can improve the query performance of your MySQL database by increasing the Flexible Server vCores.","https://aka.ms/azure_mysql_flexible_server_pricing" +"89b7919e-60cc-42a3-adb7-2be468f6ecb9","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbformysql/flexibleservers","OrcasMeruMysqlMemoryUpsell","Move your MySQL server to Memory Optimized SKU","Active","1","Move your MySQL server to Memory Optimized SKU","Our internal telemetry shows that there is high memory usage for this server which can result in slower query performance and increased IOPS. To improve performance, please review your workload queries to identify opportunities to minimize memory consumed. If no such opportunity found, then we recommend moving to higher SKU with more memory or increase storage size to get more IOPS.","Improve query performance by caching more data in memory","You can improve the query performance of your MySQL database by moving your server to a Memory Optimized SKU.","https://aka.ms/azure_mysql_flexible_server_storage" +"f9604823-849a-4fe0-b9be-bc937d6b4618","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbformysql/flexibleservers","OrcasMeruMysqlReadReplicaUpsell","Add a MySQL Read Replica","Active","1.1","Add a MySQL Read Replica server","Our internal telemetry shows that you may have a read intensive workload running, which results in resource contention for this server. This may lead to slow query performance for the server. To improve performance, we recommend you add a read replica, and offload some of your read workloads to the replica.","Improve query performance by scaling out reads","You can improve the query performance of your MySQL database my adding a Read Replica server.","https://aka.ms/flexible-server-mysql-read-replicas" +"6abfe73d-9b26-414c-9e94-62f1db8d653b","Performance",,"High","Open Source RDBMS (Orcas)","microsoft.dbformysql/flexibleservers","OrcasMeruMySqlStorageUpsell","Increase the storage limit for MySQL Flexible Server","Active","2.5","Increase the storage limit for MySQL Flexible Server","Our internal telemetry shows that the server may be constrained because it is approaching limits for the currently provisioned storage values. This may result in degraded performance or in the server being moved to read-only mode. To ensure continued performance, we recommend increasing the provisioned storage amount.","Improve server performance by increasing the storage limit","You can improve your MySQL Flexible Server performance by increasing the storage limit.","https://aka.ms/azure_mysql_flexible_server_storage" +"feae9d98-0d24-48eb-ac98-0cedeefd5b9a","Operational Excellence",,"High","Open Source RDBMS (Orcas)","microsoft.dbformysql/flexibleservers","OrcasMeruMySqlTlsDeprecation","Deprecating Client communication over TLSv1.0 and TLSv1.1","Active","1.4","Your Azure Database for MySQL - Flexible Server is vulnerable using weak, deprecated TLSv1 or TLSv1.1 protocols","To support modern security standards, MySQL community edition discontinued the support for communication over Transport Layer Security (TLS) 1.0 and 1.1 protocols. Microsoft will also stop supporting connection over TLSv1 and TLSv1.1 to Azure Database for MySQL - Flexible server soon to comply with the modern security standards . We recommend you upgrade your client driver to support TLSv1.2.","Secured & Strong TLS protocol for communication","You can get secured & strong TLS protocol for communication by deprecating the TLSv1.0 and TLSv1.1.","https://aka.ms/encrypted_connection_deprecated_protocols" +"f44c8e21-9f13-4b8e-a839-7141dd5645bb","Performance",,"High","Open Source RDBMS (Orcas)","microsoft.dbformysql/flexibleservers","OrcasMeruMysqlTmpTable","Improve performance by optimizing MySQL temporary-table sizing.","Active","1","Improve performance by optimizing MySQL temporary-table sizing.","Our internal telemetry indicates that your MySQL server may be incurring unncessary I/O overhead due to low temporary-table parameter settings. This may result in unnecessary disk-based transactions and reduced performance. We recommend that you increase the 'tmp_table_size' and 'max_heap_table_size' parameter values to reduce the number of disk-based transactions.","Improve MySQL workload performance by reducing I/O overhead associated with disk-based transactions","You can adjust your MySQL temporary-table sizing to improve database performance.","https://dev.mysql.com/doc/refman/8.0/en/internal-temporary-tables.html#internal-temporary-tables-engines" +"997839f4-48e4-49e4-9b15-628a7757765c","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbformysql/servers","OrcasMySQLAuditLog","Increase the reliability of MySQL audit logs.","Active","1","Increase the reliability of audit logs","Our internal telemetry shows that the server's audit logs may have been lost over the past day. This can occur when your server is experiencing a CPU heavy workload or a server generates a large number of audit logs over a short period of time. We recommend only logging the necessary events required for your audit purposes using the following server parameters: audit_log_events, audit_log_exclude_users, audit_log_include_users. If the CPU usage on your server is high due to your workload, we recommend increasing the server's vCores to improve performance.","Improve the reliability of audit logs for monitoring and troubleshooting.","You can improve the reliability of MySQL audit logs by only logging events you need.","https://aka.ms/mysql-audit-logs" +"944611b9-0357-4272-a9ac-a97a65932599","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbformysql/servers","OrcasMySQLConcurrentConnection","Scale the MySQL server to higher SKU","Active","1","Scale the MySQL server to higher SKU","Our internal telemetry shows that the server may be unable to support the connection requests because of the maximum supported connections for the given SKU. This may result in a large number of failed connections requests which adversly affect the the performance. To improve performance, we recommend to move to higher memory SKU by increasing vCore or switching to Memory-Optimized SKUs.","Improve query performance by allowing more concurrent connections","You can improve the query performance of your MySQL database by scaling your server to a higher SKU.","https://aka.ms/mysqlconnectionlimits" +"f62ef41c-2cdb-4f4e-9dc9-a391c579b0fb","Performance",,"High","Open Source RDBMS (Orcas)","microsoft.dbformysql/servers","OrcasMySQLConnectionPooling","Improve MySQL connection management","Active","1","Improve MySQL connection management","Our internal telemetry indicates that your application connecting to MySQL server may not be managing connections efficiently. This may result in unnecessary resource consumption and overall higher application latency. To improve connection management, we recommend that you reduce the number of short-lived connections and eliminate unnecessary idle connections. This can be done by configuring a server side connection-pooler, such as ProxySQL.","Improve performance by reducing overhead associated with short-lived and idle database connections","You can manage your MySQL database connections more efficiently by configuring a connection pooler, such as ProxySQL.","https://aka.ms/azure_mysql_connection_pooling" +"2cbca084-4e80-4720-a7fe-dc8c3074e8ca","Performance",,"High","Open Source RDBMS (Orcas)","microsoft.dbformysql/servers","OrcasMySQLConnectionRedirection","Improve MySQL connection latency","Active","1","Improve MySQL connection latency","Our internal telemetry indicates that your application connecting to MySQL server may not be managing connections efficiently. This may result in higher application latency. To improve connection latency, we recommend that you enable connection redirection. This can be done by enabling the connection redirection feature of the PHP driver.","Reduce network latency between client applications","You can manage your MySQL database connections more efficiently by enabling connection redirection.","https://aka.ms/azure_mysql_connection_redirection" +"0fb3f293-899e-458a-81cc-ad263dd89629","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbformysql/servers","OrcasMySQLCpuOverload","Increase the MySQL server vCores","Active","1","Increase the MySQL server vCores","Our internal telemetry shows that the CPU has been running under high utilization for an extended period of time over the last 7 days. High CPU utilization may lead to slow query performance. To improve performance, we recommend moving to a larger compute size.","Improve query performance by reducing CPU pressure","You can improve the query performance of your MySQL database by increasing the server vCores.","https://aka.ms/mysqlpricing" +"74aa92b7-9c42-4640-9b1b-8ab645c86a00","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbformysql/servers","OrcasMySQLMemoryCache","Move your MySQL server to Memory Optimized SKU","Active","1","Move your MySQL server to Memory Optimized SKU","Our internal telemetry shows that there is high churn in the buffer pool for this server which can result in slower query performance and increased IOPS. To improve performance, please review your workload queries to identify opportunities to minimize memory consumed. If no such opportunity found, then we recommend moving to higher SKU with more memory or increase storage size to get more IOPS.","Improve query performance by caching more data in memory","You can improve the query performance of your MySQL database by moving your server to a Memory Optimized SKU.","https://aka.ms/mysqlpricing" +"1efe9592-f5ae-4167-97d7-63e973821fca","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbformysql/servers","OrcasMySQLReadReplica","Add a MySQL Read Replica","Active","1","Add a MySQL Read Replica server","Our internal telemetry shows that you may have a read intensive workload running, which results in resource contention for this server. This may lead to slow query performance for the server. To improve performance, we recommend you add a read replica, and offload some of your read workloads to the replica.","Improve query performance by scaling out reads","You can improve the query performance of your MySQL database my adding a Read Replica server.","https://aka.ms/mysqlreadreplica" +"7e76e54f-7978-4d48-9ab9-a4da5b7c69a3","Cost",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbformysql/servers","OrcasMySQLCpuRightSize","Right-size underutilized MySQL server","Active","2.1","Right-size underutilized MySQL servers","Our internal telemetry shows that the MySQL database server resources have been underutilized for an extended period of time over the last 7 days. Low resource utilization results in unwanted expenditure which can be fixed without significant performance impact. To reduce your costs and efficiently manage your resources, we recommend reducing the compute size (vCores) by half.","Reduce cost by right-sizing the MySQL server","You can improve the overall resource spend for your Azure Database for MySQL by scaling down the compute resources by half.","https://aka.ms/mysqlpricing" +"c0576597-4910-48b5-9828-5b3a99190b82","Performance",,"High","Open Source RDBMS (Orcas)","microsoft.dbformysql/servers","OrcasMySQLStorageLimit","Increase the Server Storage limit","Active","1","Scale the storage limit for MySQL server","Our internal telemetry shows that the server may be constrained because it is approaching limits for the currently provisioned storage values. This may result in degraded performance or in the server being moved to read-only mode. To ensure continued performance, we recommend increasing the provisioned storage amount or turning ON the ""Auto-Growth"" feature for automatic storage increases","Improve query performance by allocating larger storage for the server",,"https://aka.ms/mysqlstoragelimits" +"99811474-2a6c-4d40-ac91-ae76c76e3258","Performance",,"High","Open Source RDBMS (Orcas)","microsoft.dbformysql/servers","OrcasMySqlTmpTables","Improve performance by optimizing MySQL temporary-table sizing","Active","1","Improve performance by optimizing MySQL temporary-table sizing","Our internal telemetry indicates that your MySQL server may be incurring unnecessary I/O overhead due to low temporary-table parameter settings. This may result in unnecessary disk-based transactions and reduced performance. We recommend that you increase the 'tmp_table_size' and 'max_heap_table_size' parameter values to reduce the number of disk-based transactions.","Improve MySQL workload performance by reducing I/O overhead associated with disk-based transactions","You can adjust your MySQL temporary-table sizing to improve database performance.","https://aka.ms/azure_mysql_tmp_table" +"b26edab6-a8dc-4903-b29f-d3b7fb9e0f9c","Performance",,"High","Azure Database for PostgreSQL - Hyperscale (Citus)","microsoft.dbforpostgresql/servergroupsv2","MarlinStorageLimitRecommendation","Increase the storage limit for Hyperscale (Citus) Server Group","Active","1","Increase the storage limit for Hyperscale (Citus) server group","Our internal telemetry shows that one or more nodes in the server group may be constrained because they are approaching limits for the currently provisioned storage values. This may result in degraded performance or in the server being moved to read-only mode. To ensure continued performance, we recommend increasing the provisioned disk space.","Improve server performance by increasing the storage and continue to use server in read-write mode.","Increase the storage limit for Hyperscale (Citus) Server Group","https://docs.microsoft.com/azure/postgresql/howto-hyperscale-scale-grow#increase-storage-on-nodes" +"c3c74c9e-e241-496c-be3f-57a2797aa91f","Performance",,"High"," Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servergroups","OrcasPostgreSqlCitusDistributeData","Distribute data in server group to distribute workload among nodes","Active","1","Distribute data in server group to distribute workload among nodes","It looks like the data has not been distributed in this server group but stays on the coordinator. For full Hyperscale (Citus) benefits distribute data on worker nodes in this server group.","Improve query performance by utilizing resource of each node in the server group",,"https://go.microsoft.com/fwlink/?linkid=2135201" +"426292db-b3e8-46f6-ad3e-d46753943afb","Performance",,"High","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servergroups","OrcasPostgreSqlCitusRebalanceData","Rebalance data in Hyperscale (Citus) server group to distribute workload among worker nodes more evenly","Active","1","Rebalance data in Hyperscale (Citus) server group to distribute workload among worker nodes more evenly","It looks like the data is not well balanced between worker nodes in this Hyperscale (Citus) server group. In order to use each worker node of the Hyperscale (Citus) server group effectively rebalance data in this server group.","Get the most of Hyperscale (Citus) by utilizing resources of each node more evenly",,"https://go.microsoft.com/fwlink/?linkid=2148869" +"4b0be860-1d79-4360-861a-5382fdb0532c","Performance",,"High","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlCitusStorageLimitHyperscaleCitus","Increase the storage limit for Hyperscale (Citus) Server Group","Active","1","Increase the storage limit for Hyperscale (Citus) server group","Our internal telemetry shows that one or more nodes in the server group may be constrained because they are approaching limits for the currently provisioned storage values. This may result in degraded performance or in the server being moved to read-only mode. To ensure continued performance, we recommend increasing the provisioned disk space.","Improve server performance by increasing the storage and continue to use server in read-write mode.","Increase the storage limit for Hyperscale (Citus) Server Group","https://docs.microsoft.com/azure/postgresql/howto-hyperscale-scale-grow#increase-storage-on-nodes" +"6008fcbf-6eb7-48b3-b528-2ec5bae4f94e","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/flexibleservers","OrcasMeruMeruLogDuration","Set log_duration to OFF","Disabled","2","Optimize log_duration settings for PostgreSQL on Azure Database","Our internal telemetry indicates that you have log_duration enabled, for better performance, set it to OFF","Improve server performance by changing log_duration to OFF","You can improve your PostgreSQL performance by setting log_duration to OFF","https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-logging" +"523847ec-6157-4e9f-b3ae-01079123a420","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/flexibleservers","OrcasMeruMeruLogErrorVerbosity","Set log_error_verbosity to DEFAULT","Disabled","2","Optimize log_error_verbosity settings for PostgreSQL on Azure Database","Our internal telemetry indicates that you have log_error_verbosity enabled, for better performance, set it to DEFAULT","Improve server performance by changing log_error_verbosity to DEFAULT","You can improve your PostgreSQL performance by setting log_error_verbosity to DEFAULT","https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-logging" +"0f5b008d-ab30-4cb6-954f-b66a66d11d37","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/flexibleservers","OrcasMeruMeruLogMinDuration","Set log_min_duration to -1","Disabled","2","Optimize log_min_duration settings for PostgreSQL on Azure Database","Our internal telemetry indicates that you have log_min_duration enabled, for better performance, set it to -1","Improve server performance by changing log_min_duration to -1","You can improve your PostgreSQL performance by setting log_min_duration to -1","https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-logging" +"c3b02a4b-331f-4223-8d5c-20d2d7e439df","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/flexibleservers","OrcasMeruMeruLogStatement","Set log_statement to NONE","Disabled","2","Optimize log_statement settings for PostgreSQL on Azure Database","Our internal telemetry indicates that you have log_statement enabled, for better performance, set it to NONE","Improve server performance by changing log_statement to NONE","You can improve your PostgreSQL performance by setting log_statement to NONE","https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-logging" +"7c1948cd-2cd7-4343-9c26-be576842e378","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/flexibleservers","OrcasMeruMeruQueryCaptureMode","Set pg_qs.query_capture_mode to NONE","Disabled","2","Optimize pg_qs.query_capture_mode settings for PostgreSQL on Azure Database","Our internal telemetry indicates that you have pg_qs.query_capture_mode enabled, for better performance, set it to NONE","Improve server performance by changing pg_qs.query_capture_mode to NONE","You can improve your PostgreSQL performance by setting pg_qs.query_capture_mode to NONE","https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-query-store-best-practices" +"21160291-a460-4534-9f17-80f038b166f8","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/flexibleservers","OrcasMeruMeruWorkMem","Increase server parameter: work_mem","Disabled","2","Increase the work_mem to avoid excessive disk spilling from sort and hash","Our internal telemetry shows that the configuration work_mem is too small for your PostgreSQL server which is resulting in disk spilling and degraded query performance. To improve this, we recommend to increase the work_mem limit for the server which will help to reduce the scenarios when the sort or hash happens on disk, thereby improving the overall query performance.","Improve query performance by allocating more work_mem for the sort or hash operations thus avoiding unnecessary disk read and write.","You can improve your PostgreSQL performance by increasing server parameter: work_mem","https://aka.ms/runtimeconfiguration" +"d229f650-eed6-46df-9fe3-977af82e377f","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/flexibleservers","OrcasMeruOrcasPostgreSQLConnectionPooling","Set pgbouncer.enabled to TRUE","Disabled","2","Optimize PostgreSQL performance by enabling PGBouncer","Our Internal telemetry indiceates that you can improve PostgreSQL performance by enabling PGBouncer","Improve server performance by changing pgbouncer.enabled to TRUE","Improve PostgreSQL performance by enabling PGBouncer","https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-pgbouncer" +"2b099658-9ec3-4582-af92-e09e90a516da","Performance",,"High","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/flexibleservers","OrcasMeruIntelligentTuning","Set Intelligent tuning to ON","Disabled","2","Improve PostgreSQL - Flexible Server performance by enabling Intelligent tuning","Our internal telemetry suggests that you can improve storage performance by enabling Intelligent tuning","Improve PostgreSQL - Flexible Server performance by enabling Intelligent tuning","You can improve your PostgreSQL - Flexible Server performance by enabling Intelligent tuning","https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-intelligent-tuning" +"33f26810-57d0-4612-85ff-a83ee9be884a","High Availability","Other","High","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/flexibleservers","OrcasPostgreSqlFlexibleServerLogicalReplicationSlots","Remove inactive logical replication slots","Active","9","Remove inactive logical replication slots (important)","Inactive logical replication slots can result in degraded server performance and unavailability due to write ahead log (WAL) file retention and buildup of snapshot files. Your Azure Database for PostgreSQL flexible server might have inactive logical replication slots. THIS NEEDS IMMEDIATE ATTENTION. Either delete the inactive replication slots, or start consuming the changes from these slots, so that the slots' Log Sequence Number (LSN) advances and is close to the current LSN of the server.","Improve PostgreSQL availability by removing inactive logical replication slots","You can improve your PostgreSQL availability by removing inactive logical replication slots.","https://aka.ms/azure_postgresql_flexible_server_logical_decoding" +"30331dd3-8462-481d-974c-fb5797f323a8","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasMeruMemoryUpsell","Move your PostgreSQL Flexible Server to Memory Optimized SKU","Disabled","2","Move your PostgreSQL Flexible Server to Memory Optimized SKU","Our internal telemetry shows that there is high churn in the buffer pool for this server which can result in slower query performance and increased IOPS. To improve performance, please review your workload queries to identify opportunities to minimize memory consumed. If no such opportunity found, then we recommend moving to higher SKU with more memory or increase storage size to get more IOPS.","Improve query performance by caching more data in memory","You can improve the query performance of your PostgreSQL database by moving your Flexible Server to a Memory Optimized SKU.","https://aka.ms/azure_postgresql_flexible_server_pricing" +"2f77028c-f3a0-467c-9dd3-4d29d56ad460","Performance",,"High","Azure Database for PostgreSQL - Flexible Server","microsoft.dbforpostgresql/servers","OrcasPostgreSqlFlexibleServerStorageLimit","Increase the PostgreSQL Flexible Server storage limit","Disabled","3","Increase the storage limit for PostgreSQL Flexible Server","Our internal telemetry shows that the server may be constrained because it is approaching limits for the currently provisioned storage values. This may result in degraded performance or in the server being moved to read-only mode. To ensure continued performance, we recommend increasing the provisioned storage amount.","Improve server performance by increasing the storage limit","You can improve your PostgreSQL Flexible Server performance by increasing the storage limit.","https://aka.ms/azure_postgresql_flexible_server_limits" +"f5abcb36-180d-45f7-9a88-f5939823e528","Performance",,"High","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/flexibleservers","OrcasPostgreSqlMeruMigration","Consider the upgrade to FSPG","Disabled","2","Migrate your database from SSPG to FSPG","Please consider our new offering Azure Database for PostgreSQL Flexible Server that provides richer capabilities such as zone resilient HA, predictable performance, maximum control, custom maintenance window, cost optimization controls and simplified developer experience. Learn more.","Please consider our new offering Azure Database for PostgreSQL Flexible Server that provides richer capabilities such as zone resilient HA, predictable performance, maximum control, custom maintenance window, cost optimization controls and simplified developer experience. Learn more.","Please consider our new offering Azure Database for PostgreSQL Flexible Server that provides richer capabilities such as zone resilient HA, predictable performance, maximum control, custom maintenance window, cost optimization controls and simplified developer experience. Learn more.","https://aka.ms/sspg-upgrade" +"bd109fe8-a2cf-415a-adcb-5e9f9fc1d3c0","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlConcurrentConnection","Scale the PostgreSQL server to higher SKU","Disabled","2","Scale the PostgreSQL server to higher SKU","Our internal telemetry shows that the server may be unable to support the connection requests because of the maximum supported connections for the given SKU. This may result in a large number of failed connections requests which adversly affect the the performance. To improve performance, we recommend to move to higher memory SKU by increasing vCore or switching to Memory-Optimized SKUs.","Improve query performance by allowing more concurrent connections","You can improve the query performance of your PostgreSQL database by scaling your server to a higher SKU.","https://aka.ms/postgresqlconnectionlimits" +"84978654-5304-4b2a-81f6-022d18a8b676","Performance",,"High","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlConnectionPooling","Improve PostgreSQL connection management","Disabled","2","Improve PostgreSQL connection management","Our internal telemetry indicates that your PostgreSQL server may not be managing connections efficiently. This may result in unnecessary resource consumption and overall higher application latency. To improve connection management, we recommend that you reduce the number of short-lived connections and eliminate unnecessary idle connections. This can be done by configuring a server side connection-pooler, such as PgBouncer.","Improve performance by reducing overhead associated with short-lived and idle database connections","You can manage your PostgreSQL database connections more efficiently by configuring a connection pooler, such as PgBouncer.","https://aka.ms/azure_postgresql_connection_pooling" +"38500a53-575d-44b7-8f29-6cd534137438","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlCpuOverload","Increase the PostgreSQL server vCores","Disabled","2","Increase the PostgreSQL server vCores","Our internal telemetry shows that the CPU has been running under high utilization for an extended period of time over the last 7 days. High CPU utilization may lead to slow query performance. To improve performance, we recommend moving to a larger compute size.","Improve query performance by reducing CPU pressure","You can improve the query performance of your PostgreSQL database by increasing the server vCores.","https://aka.ms/postgresqlpricing" +"993cf5a8-a5c6-4dd6-ac68-fd8c5681d93e","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlLogDuration","Set LogDuration to OFF","Disabled","2","Optimize logging settings by setting LogDuration to OFF","Optimize logging settings by setting LogDuration to OFF","Improve server performance I/O","You can improve your PostgreSQL performance by setting LogDuration to OFF","N/A" +"661dd0c2-5d39-4cfb-ba57-59808643e36d","Performance",,"High","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlLogErrorVerbosity","Adjust server parameter: log_error_verbosity","Disabled","2","Improve PostgreSQL log performance","Our internal telemetry indicates that your PostgreSQL server has been configured to output VERBOSE error logs. This can be useful for troubleshooting your database, but it can also result in reduced database performance. To improve performance, we recommend that you change the log_error_verbosity parameter to the DEFAULT setting.","Improve database performance by changing the log_error_verbosity parameter to the DEFAULT setting","You can improve your PostgreSQL database performance by changing your log_error_verbosity setting.","https://aka.ms/azure_postgresql_log_settings" +"624b0218-0a0e-4b48-a961-33dbafdebb47","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlLoggingCollector","Set LoggingCollector to OFF","Disabled","2","Optimize logging settings by setting LoggingCollector to OFF","Optimize logging settings by setting LoggingCollector to OFF","Improve server performance I/O","You can improve your PostgreSQL performance by setting LoggingCollector to OFF","N/A" +"6f33a917-418c-4608-b34f-4ff0e7be8637","High Availability","Other","High","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlLogicalReplicationSlots","Remove inactive logical replication slots","Active","9","Remove inactive logical replication slots","When an Orcas PostgreSQL flexible server has inactive logical replication slots, degraded server performance and unavailability due to write ahead log (WAL) file retention and buildup of snapshot files might occur. THIS NEEDS IMMEDIATE ATTENTION. Either delete the inactive replication slots, or start consuming the changes from these slots, so that the slots' Log Sequence Number (LSN) advances and is close to the current LSN of the server.","Improve PostgreSQL availability by removing inactive logical replication slots","You can improve your PostgreSQL availability by removing inactive logical replication slots.","https://aka.ms/azure_postgresql_logical_decoding" +"04e5099a-9064-4e52-8f3b-322c54dc4cf9","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlLogMinDuration","Set LoggingCollector to -1","Disabled","2","Optimize logging settings by setting LoggingCollector to -1","Optimize logging settings by setting LoggingCollector to -1","Improve server performance I/O","You can improve your PostgreSQL performance by setting LoggingCollector to -1","N/A" +"c1f5f212-7dda-4fb2-aa42-8178bfc8f189","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlLogStatement","Set LogStatement to NONE","Disabled","2","Optimize logging settings by setting LogStatement to NONE","Optimize logging settings by setting LogStatement to NONE","Improve server performance I/O","You can improve your PostgreSQL performance by setting LogStatement to NONE","N/A" +"47b11ec4-7950-43a1-b6b5-f051f812bd34","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlMemoryCache","Move your PostgreSQL server to Memory Optimized SKU","Disabled","2","Move your PostgreSQL server to Memory Optimized SKU","Our internal telemetry shows that there is high churn in the buffer pool for this server which can result in slower query performance and increased IOPS. To improve performance, please review your workload queries to identify opportunities to minimize memory consumed. If no such opportunity found, then we recommend moving to higher SKU with more memory or increase storage size to get more IOPS.","Improve query performance by caching more data in memory","You can improve the query performance of your PostgreSQL database by moving your server to a Memory Optimized SKU.","https://aka.ms/postgresqlpricing" +"feba5625-68c8-4b53-90b4-8a9de4f71e9e","Performance",,"High","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlQueryCaptureMode","Set pg_qs.query_capture_mode to NONE when not troubleshooting","Disabled","3","Optimize query store on an Azure Database for PostgreSQL when not troubleshooting","Our internal telemetry indicates that your PostgreSQL database has been configured to track query performance using the pg_qs.query_capture_mode parameter. While troubleshooting, we suggest setting the pg_qs.query_capture_mode parameter to TOP or ALL. When not troubleshooting, we recommend that you set the pg_qs.query_capture_mode parameter to NONE.","Optimize PostgreSQL performance by changing the pg_qs.query_capture_mode parameter to NONE when not troubleshooting","You can optimize your PostgreSQL performance by changing your pg_qs.query_capture_mode setting to NONE when not troubleshooting.","https://aka.ms/azure_postgresql_query_store" +"8fd46c9b-5ba1-4133-8a5d-dfc61e1195b1","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlReadReplica","Add PostgreSQL Read Replica","Disabled","2","Add a PostgreSQL Read Replica server","Our internal telemetry shows that you may have a read intensive workload running, which results in resource contention for this server. This may lead to slow query performance for the server. To improve performance, we recommend you add a read replica, and offload some of your read workloads to the replica.","Improve query performance by scaling out reads","You can improve the query performance of your PostgreSQL database my adding a Read Replica server.","https://aka.ms/postgresqlreadreplica" +"a8604ddc-7087-4752-b0b3-8fed1a5a37a6","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlReplaceParameter","Set ReplaceParameter to OFF","Disabled","2","Optimize logging settings by setting ReplaceParameter to OFF","Optimize logging settings by setting ReplaceParameter to OFF","Improve server performance I/O","You can improve your PostgreSQL performance by setting ReplaceParameter to OFF","N/A" +"38f4a461-1543-4089-854c-90e7edf37707","Cost",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlCpuRightSize","Right-size underutilized PostgreSQL server","Disabled","3.1","Right-size underutilized PostgreSQL servers","Our internal telemetry shows that the PostgreSQL database server resources have been underutilized for an extended period of time over the last 7 days. Low resource utilization results in unwanted expenditure which can be fixed without significant performance impact. To reduce your costs and efficiently manage your resources, we recommend reducing the compute size (vCores) by half.","Reduce cost by right-sizing the PostgreSQL server","You can improve the overall resource spend for your Azure Database for PostgreSQL by scaling down the compute resources by half.","https://aka.ms/postgresqlpricing" +"b8d89adf-9b67-4c44-8a08-5f40f5a5f1ab","Performance",,"High","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlStatStatementsTrack","Set pg_stat_statements.track to NONE","Disabled","2","Optimize query statistics collection on an Azure Database for PostgreSQL","Our internal telemetry indicates that your PostgreSQL server has been configured to track query statistics using the pg_stat_statements module. While useful for troubleshooting, it can also result in reduced server performance. To improve performance, we recommend that you change the pg_stat_statements.track parameter to NONE.","Improve server performance by changing the pg_stat_statements.track parameter to NONE","You can improve your PostgreSQL server performance by changing your pg_stat_statements.track setting to NONE.","https://aka.ms/azure_postgresql_optimize_query_stats" +"ae2b8ab9-f6b9-4531-ba04-44f00880dc18","Performance",,"High","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlStorageLimit","Increase the Server Storage limit","Disabled","2","Scale the storage limit for PostgreSQL server","Our internal telemetry shows that the server may be constrained because it is approaching limits for the currently provisioned storage values. This may result in degraded performance or in the server being moved to read-only mode. To ensure continued performance, we recommend increasing the provisioned storage amount or turning ON the ""Auto-Growth"" feature for automatic storage increases","Improve query performance by allocating larger storage for the server",,"https://aka.ms/postgresqlstoragelimits" +"e2fa79e2-b3e0-11e9-a2a3-2a2ae2dbcce4","Performance",,"Medium","Open Source RDBMS (Orcas)","microsoft.dbforpostgresql/servers","OrcasPostgreSqlWorkMem","Increase server parameter: work_mem","Disabled","2","Increase the work_mem to avoid excessive disk spilling from sort and hash","Our internal telemetry shows that the configuration work_mem is too small for your PostgreSQL server which is resulting in disk spilling and degraded query performance. To improve this, we recommend to increase the work_mem limit for the server which will help to reduce the scenarios when the sort or hash happens on disk, thereby improving the overall query performance.","Improve query performance by allocating more work_mem for the sort or hash operations thus avoiding unnecessary disk read and write.",,"https://aka.ms/runtimeconfiguration" +"dd8bef5d-5a56-4239-b25b-a25f283e12f5","Performance",,"Medium","Azure Health AI Deidentification Service","microsoft.healthdataaiservices/deidservices","UpgradeDeIDAPIVersion","Upgrade to the latest Azure Health De-Identification API Version","Active","1","Upgrade to latest API Version for Azure Health De-Identification","Upgrading to the latest API Version for Azure Health De-Identification ensures maximal performance. If using the Health De-Identification SDK, upgrade to the most recent package version. Alternatively, you can use the Azure Portal to create/manage Health De-Identification resources.","Improved reliability and performance","Keep your API version up-to-date for the best performance and reliability","https://learn.microsoft.com/en-us/azure/healthcare-apis/deidentification/" +"ed25ee86-c6b4-4485-a129-3c0ec1b523da","Performance",,"Medium","Azure Health AI Deidentification Service","microsoft.healthdataaiservices/deidservices","UpgradeDeIDDataPlaneAPIVersion","Use latest Azure Health De-Identification data plane API version","Active","1","Use newest API version for Azure Health De-Identification","Use the newest API version for Azure Health De-Identification. For the Health De-Identification SDK, upgrade to the newest package version. Verify all API requests include the api-version query parameter.","Newest API version offers enhanced throughput and security.","Ensure your API version is up-to-date for the best performance and reliability","https://learn.microsoft.com/azure/healthcare-apis/deidentification" +"061dcd4a-2090-4ec0-b4e0-ec9eaae5cf80","Operational Excellence",,"Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBAttachments","Migrate Azure Cosmos DB attachments to Azure Blob Storage","Active","2","Migrate Azure Cosmos DB attachments to Azure Blob Storage","We noticed that your Azure Cosmos collection is using the legacy attachments feature. We recommend migrating attachments to Azure Blob Storage to improve the resiliency and scalability of your blob data.","Improve attachment blob resiliency and scalability",,"https://docs.microsoft.com/azure/cosmos-db/attachments#migrating-attachments-to-azure-blob-storage" +"cdf51428-a41b-4735-ba23-39f3b7cde20c","Cost",,"Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBAutoscaleRecommendations","Enable autoscale on your Azure Cosmos DB database or container","Active","1.1","Enable autoscale on your Azure Cosmos DB database or container","Based on your usage in the past 7 days, you can save by enabling autoscale. For each hour, we compared the RU/s provisioned to the actual utilization of the RU/s (what autoscale would have scaled to) and calculated the cost savings across the time period. Autoscale helps optimize your cost by scaling down RU/s when not in use.","Optimize Azure spend",,"https://docs.microsoft.com/azure/cosmos-db/provision-throughput-autoscale" +"683b5e32-48aa-4b46-a822-4e22a20ee244","Performance",,"Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBDefaultIndexingWithManyPaths","Optimize your Azure Cosmos DB indexing policy to only index what's needed","Active","1","Optimize your Azure Cosmos DB indexing policy to only index what's needed","Your Azure Cosmos DB containers are using the default indexing policy, which indexes every property in your documents. Because you're storing large documents, a high number of properties get indexed, resulting in high Request Unit consumption and poor write latency. To optimize write performance, we recommend overriding the default indexing policy to only index the properties used in your queries.","Improve the write throughput of your container",,"https://docs.microsoft.com/azure/cosmos-db/index-policy" +"5e4e9f04-9201-4fd9-8af6-a9539d13d8ec","High Availability","Scalability ","High","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBFixedCollections","Configure Azure Cosmos DB containers with a partition key","Active","8","Configure Azure Cosmos DB containers with a partition key","When Azure Cosmos DB nonpartitioned collections reach their provisioned storage quota, you lose the ability to add data. Your Cosmos DB nonpartitioned collections are approaching their provisioned storage quota. Migrate these collections to new collections with a partition key definition so they can automatically be scaled out by the service.","Scale your containers seamlessly with increase in storage or request rates without running into any limits",,"https://docs.microsoft.com/azure/cosmos-db/partitioning-overview#choose-partitionkey" +"4a993d7c-9d83-4d85-b5a9-7cce0b136378","Cost",,"Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBFreeTierOverage","Review the configuration of your Azure Cosmos DB free tier account","Active","3.2","Review the configuration of your Azure Cosmos DB free tier account","Your Azure Cosmos DB free tier account is currently containing resources with a total provisioned throughput exceeding 1000 Request Units per second (RU/s). Because Azure Cosmos DB's free tier only covers the first 1000 RU/s of throughput provisioned across your account, any throughput beyond 1000 RU/s are billed at the regular pricing. As a result, we anticipate that you are charged for the throughput currently provisioned on your Azure Cosmos DB account.","Confirm your expected Azure Cosmos DB costs",,"https://docs.microsoft.com/azure/cosmos-db/understand-your-bill#azure-free-tier" +"75c8c891-46d2-41fa-a81c-84e870a139a9","Performance",,"High","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBGatewayMode","Configure your Azure Cosmos DB applications to use Direct connectivity in the SDK","Active","3.1","Configure your Azure Cosmos DB applications to use Direct connectivity in the SDK","We noticed that your Azure Cosmos DB applications are using Gateway mode via the Cosmos DB .NET or Java SDKs. We recommend switching to Direct connectivity for lower latency and higher scalability.","Improved latency and high availability for your applications",,"https://docs.microsoft.com/azure/cosmos-db/performance-tips#networking" +"3a7c4990-18e7-4581-b62d-c745260e7c5b","Performance",,"Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBHierarchicalPartitionKey","Use hierarchical partition keys for optimal data distribution","Active","1","Use hierarchical partition keys for optimal data distribution","This account has a custom setting that allows the logical partition size in a container to exceed the limit of 20 GB. This setting was applied by the Azure Cosmos DB team as a temporary measure to give you time to re-architect your application with a different partition key. It is not recommended as a long-term solution, as SLA guarantees are not honored when the limit is increased. You can now use hierarchical partition keys (preview) to re-architect your application. The feature allows you to exceed the 20 GB limit by setting up to three partition keys, ideal for multi-tenant scenarios or workloads that use synthetic keys.","Optimize data distribution and performance",,"https://devblogs.microsoft.com/cosmosdb/hierarchical-partition-keys-private-preview/" +"bdb595a4-e148-41f9-98e8-68ec92d1932e","High Availability","Scalability ","Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBHighMetadataOperations","Use static Cosmos DB client instances in your code and cache the names of databases and collections","Active","6","Use static Cosmos DB client instances in your code and cache the names of databases and collections","A high number of metadata operations on an account can result in rate limiting. Metadata operations have a system-reserved request unit (RU) limit. Avoid rate limiting from metadata operations by using static Cosmos DB client instances in your code and caching the names of databases and collections.","Optimize your RU usage and avoid rate limiting",,"https://docs.microsoft.com/azure/cosmos-db/performance-tips" +"a4255ba5-b07e-45ae-99ca-25e6c2079e3c","Cost",,"Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBIdleContainers","Decrease provisioned throughput or delete your idle Azure Cosmos DB containers","Active","3","Consider taking action on your idle Azure Cosmos DB containers","We haven't detected any activity over the past 30 days on one or more of your Azure Cosmos DB containers. Consider lowering their throughput, or deleting them if you don't plan on using them.","Optimize Azure spend",,"https://docs.microsoft.com/azure/cosmos-db/how-to-provision-container-throughput" +"44a0a07f-23a2-49df-b8dc-a1b14c7c6a9d","High Availability","Other","Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBKeyVaultWrap","Your Cosmos DB account is unable to access its linked Azure Key Vault hosting your encryption key","Active","6","Check linked Azure Key Vault hosting your encryption key","When an Azure Cosmos DB account can't access its linked Azure Key Vault hosting the encyrption key, data access and security issues might happen. Your Azure Key Vault's configuration is preventing your Cosmos DB account from contacting the key vault to access your managed encryption keys. If you recently performed a key rotation, ensure that the previous key, or key version, remains enabled and available until Cosmos DB completes the rotation. The previous key or key version can be disabled after 24 hours, or after the Azure Key Vault audit logs don't show any activity from Azure Cosmos DB on that key or key version.","Update your configurations to continue using customer-managed keys and access your data",,"https://docs.microsoft.com/azure/cosmos-db/how-to-setup-cmk" +"213974c8-ed9c-459f-9398-7cdaa3c28856","High Availability","Other","Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBLazyIndexing","Consider Consistent indexing mode on Azure Cosmos DB containers","Active","7","Configure consistent indexing mode on Azure Cosmos DB containers","Azure Cosmos containers configured with the Lazy indexing mode update asynchronously, which improves write performance, but can impact query freshness. Your container is configured with the Lazy indexing mode. If query freshness is critical, use Consistent Indexing Mode for immediate index updates.","Improve query result consistency and reliability",,"https://docs.microsoft.com/azure/cosmos-db/how-to-manage-indexing-policy" +"bc9e5110-a220-4ab9-8bc9-53f92d3eef70","High Availability","Service Upgrade and Retirement","High","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBMaxGlobalLSNReachedV2","Upgrade to 2.6.14 version of the Async Java SDK v2 to avoid a critical issue or upgrade to Java SDK v4 as Async Java SDK v2 is being deprecated","Active","6","Hotfix - Upgrade to 2.6.14 version of the Async Java SDK v2 or to Java SDK v4","There's a critical bug in version 2.6.13 (and lower) of the Azure Cosmos DB Async Java SDK v2 causing errors when a Global logical sequence number (LSN) greater than the Max Integer value is reached. The error happens transparently to you by the service after a large volume of transactions occur in the lifetime of an Azure Cosmos DB container. Note: While this is a critical hotfix for the Async Java SDK v2, we still highly recommend you migrate to the [Java SDK v4](https://docs.microsoft.com/azure/cosmos-db/sql/sql-api-sdk-java-v4).","If action isn’t taken, all create, read, update, and delete operations may begin to fail with NumberFormatException",,"https://docs.microsoft.com/azure/cosmos-db/sql/sql-api-sdk-async-java" +"38942ae5-3154-4e0b-98d9-23aa061c334b","High Availability","Service Upgrade and Retirement","High","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBMaxGlobalLSNReachedV4","Upgrade to the current recommended version of the Java SDK v4 to avoid a critical issue","Active","6","Critical issue - Upgrade to the current recommended version of the Java SDK v4","There's a critical bug in version 4.15 and lower of the Azure Cosmos DB Java SDK v4 causing errors when a Global logical sequence number (LSN) greater than the Max Integer value is reached. This happens transparently to you by the service after a large volume of transactions occur in the lifetime of an Azure Cosmos DB container. Avoid this problem by upgrading to the current recommended version of the Java SDK v4","If action isn’t taken, all create, read, update, and delete operations may begin to fail with NumberFormatException",,"https://docs.microsoft.com/azure/cosmos-db/sql/sql-api-sdk-java-v4" +"52fef986-5897-4359-8b92-0f22749f0d73","Operational Excellence",,"Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBMigrateToContinuousBackup","Improve resiliency by migrating your Azure Cosmos DB accounts to continuous backup","Active","1.1","Improve resiliency by migrating your Azure Cosmos DB accounts to continuous backup","Your Azure Cosmos DB accounts are configured with periodic backup. Continuous backup with point-in-time restore is now available on these accounts. With continuous backup, you can restore your data to any point in time within the past 30 days. Continuous backup may also be more cost-effective as a single copy of your data is retained.","Improve the resiliency of your Azure Cosmos DB workloads",,"https://docs.microsoft.com/azure/cosmos-db/continuous-backup-restore-introduction" +"6aa7a0df-192f-4dfa-bd61-f43db4843e7d","Cost",,"Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBMigrateToManualThroughputFromAutoscale","Configure manual throughput instead of autoscale on your Azure Cosmos DB database or container","Active","2.1","Configure manual throughput instead of autoscale on your Azure Cosmos DB database or container","Based on your usage in the past 7 days, you can save by using manual throughput instead of autoscale. Manual throughput is more cost-effective when average utilization of your maximum throughput (RU/s) is greater than 66% or less than or equal to 10%.","Optimize Azure spend",,"https://docs.microsoft.com/azure/cosmos-db/how-to-choose-offer" +"ceb9372d-60f6-4564-8033-a8b1ead4fa76","Cost",,"Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBMongoMigrationUpgrade","Migrate your Azure Cosmos DB API for MongoDB account to v4.2 to save on query/storage costs and utilize new features","Active","2.1","Migrate your Azure Cosmos DB API for MongoDB account to v4.2 to save on query/storage costs and utilize new features","Migrate your database account to a new database account to take advantage of Azure Cosmos DB's API for MongoDB v4.2. Upgrading to v4.20 can reduce your storage costs by up to 55% and your query costs by up to 45% by leveraging a new storage format. Numerous other features such as multi-document transactions are also included in v4.2. When upgrading, you must also migrate the data in your existing account to a new account created using version 4.2. Azure Data Factory or Studio 3T can assist you in migrating your data.","Improved reliability, query/storage efficiency, performance, and new feature capabilities",,"https://docs.microsoft.com/azure/cosmos-db/mongodb/feature-support-42" +"123039b5-0fda-4744-9a17-d6b5d5d122b2","High Availability","Service Upgrade and Retirement","Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBMongoNudge36AwayFrom32","Use the new 3.6+ endpoint to connect to your upgraded Azure Cosmos DB's API for MongoDB account","Active","6","Use the new 3.6+ endpoint to connect to your upgraded Azure Cosmos DB's API for MongoDB account","Some of your applications are connecting to your upgraded Azure Cosmos DB's API for MongoDB account using the legacy 3.2 endpoint - [accountname].documents.azure.com. Use the new endpoint - [accountname].mongo.cosmos.azure.com (or its equivalent in sovereign, government, or restricted clouds).","Take advantage of the latest features in version 3.6+ of Azure Cosmos DB's API for MongoDB",,"https://docs.microsoft.com/azure/cosmos-db/mongodb-feature-support-40" +"0da795d9-26d2-4f02-a019-0ec383363c88","High Availability","Other","Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBMongoSelfServeUpgrade","Upgrade your Azure Cosmos DB API for MongoDB account to v4.2 to save on query/storage costs and utilize new features","Active","7","Upgrade your Azure Cosmos DB API for MongoDB account to v4.2 to save on query/storage costs and utilize new features","Your Azure Cosmos DB API for MongoDB account is eligible to upgrade to version 4.2. Upgrading to v4.2 can reduce your storage costs by up to 55% and your query costs by up to 45% by leveraging a new storage format. Numerous additional features such as multi-document transactions are also included in v4.2.","Improved reliability, query/storage efficiency, performance, and new feature capabilities",,"https://docs.microsoft.com/azure/cosmos-db/mongodb-version-upgrade" +"ec6fe20c-08d6-43da-ac18-84ac83756a88","High Availability","Other","High","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBMongoServerSideRetries","Enable Server Side Retry (SSR) on your Azure Cosmos DB's API for MongoDB account","Active","6","Enable Server Side Retry (SSR) on your Azure Cosmos DB's API for MongoDB account","When an account is throwing a TooManyRequests error with the 16500 error code, enabling Server Side Retry (SSR) can help mitigate the issue.","Prevent throttling and improve your query reliability and performance",,"https://docs.microsoft.com/azure/cosmos-db/prevent-rate-limiting-errors" +"8b993855-1b3f-4392-8860-6ed4f5afd8a7","Cost",,"Low","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBOptimizeRU","Optimize RU provisioning for Azure Cosmos DB","Active","2","Provision the optimal amount of Request Units for Azure Cosmos DB","This recommendation analyzes usage data in the past 3 weeks and recommends the optimal amount of Request Units to provision for an Azure Cosmos DB. The recommendation is based on the maximum Request Units used in every 5-minute interval and any throttling reports in the 3-week period.","Optimize Azure spend",,"https://aka.ms/aa_cosmosdb_ru_learnmore" +"0f04b7d8-55cd-4cac-b324-d7ed9b11fab0","Performance",,"Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBOrderByHighRUCharge","Add composite indexes to your Azure Cosmos DB container","Disabled","2","Add composite indexes to your Azure Cosmos DB container","Your Azure Cosmos DB containers are running ORDER BY queries incurring high Request Unit (RU) charges. It is recommended to add composite indexes to your containers' indexing policy to improve the RU consumption and decrease the latency of these queries.","Run ORDER BY queries more efficiently",,"https://docs.microsoft.com/azure/cosmos-db/index-policy#composite-indexes" +"bf161e78-ce57-4198-82e8-a34522045518","Operational Excellence",,"High","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBPartitionMerge","Enable partition merge to configure an optimal database partition layout","Active","3.2","Enable partition merge to configure an optimal database partition layout","Your account has collections that could benefit from enabling partition merge. Minimizing the number of partitions will reduce rate limiting and resolve storage fragmentation problems. Containers are likely to benefit from this if the RU/s per physical partition is < 3000 RUs and storage is < 20 GB.","Improve performance and lower the chance of rate-limiting",,"https://docs.microsoft.com/azure/cosmos-db/merge?tabs=azure-powershell" +"bf161e78-ce57-4198-82e8-a34522045518","Operational Excellence",,"High","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBPartitionMerge","Enable partition merge to configure an optimal database partition layout","Active","3.3","Enable partition merge to configure an optimal database partition layout","Your account has collections that could benefit from enabling partition merge. Minimizing the number of partitions will reduce rate limiting and resolve storage fragmentation problems. Containers are likely to benefit from this if the RU/s per physical partition is < 3000 RUs and storage is < 20 GB.","Improve performance and lower the chance of rate-limiting",,"https://docs.microsoft.com/azure/cosmos-db/merge?tabs=azure-powershell" +"e27c5181-5005-4dc3-a449-89b726a3bf54","Performance",,"Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBQueryPageSize","Configure your Azure Cosmos DB query page size (MaxItemCount) to -1","Active","2.1","Configure your Azure Cosmos DB query page size (MaxItemCount) to -1","You are using the query page size of 100 for queries for your Azure Cosmos container. We recommend using a page size of -1 for faster scans.","End to end query latency will be improved significantly",,"https://docs.microsoft.com/azure/cosmos-db/sql-api-query-metrics#max-item-count" +"b57f7a29-dcc8-43de-86fa-18d3f9d3764d","High Availability","Business Continuity","Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBSingleRegionProdAccounts","Add a second region to your production workloads on Azure Cosmos DB","Active","6","Add a second region to your production workloads on Azure Cosmos DB","Production workloads on Azure Cosmos DB run in a single region might have availability issues, this appears to be the case with some of your Cosmos DB accounts. Increase their availability by configuring them to span at least two Azure regions. NOTE: Additional regions incur additional costs.","Improve the availability of your production workloads",,"https://docs.microsoft.com/azure/cosmos-db/high-availability" +"893a1342-e1f6-49ec-97dc-c5c4471438c2","Cost",,"Low","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBOptimizeUnusedContainer","Optimize Unused Containers for Azure Cosmos DB","Disabled","1.1","Consider taking action on your unused containers","This recommendation shows if Azure Cosmos DB containers and/or geo-replications are unused by looking at their usage data for the past 30 days. It is recommended to reduce the provisioned throughput to the configuration minimum if the stored data is still needed, or delete the container if it is no longer needed. If you have geo-replication enabled, ensure that you're using all the regions chosen.","Optimize Azure spend",,"https://aka.ms/cosmosdb/usage-cost" +"51a4e6bd-5a95-4a41-8309-40f5640fdb8b","High Availability","Other","Medium","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBUpgradeOldSDK","Upgrade your old Azure Cosmos DB SDK to the latest version","Active","11","Upgrade old Azure Cosmos DB SDK to the latest version","An Azure Cosmos DB account using an old version of the SDK lacks the latest fixes and improvements. Your Azure Cosmos DB account is using an old version of the SDK. For the latest fixes, performance improvements, and new feature capabilities, upgrade to the latest version.","Improved reliability, performance, and new feature capabilities",,"https://docs.microsoft.com/azure/cosmos-db/" +"60a55165-9ccd-4536-81f6-e8dc6246d3d2","High Availability","Service Upgrade and Retirement","High","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBUpgradeOutdatedSDK","Upgrade your deprecated Azure Cosmos DB SDK to a supported version","Active","10","Upgrade outdated Azure Cosmos DB SDK to the latest version","An Azure Cosmos DB account using an old version of the SDK lacks the latest fixes and improvements. Your Azure Cosmos DB account is using an outdated version of the SDK. We recommend upgrading to the latest version for the latest fixes, performance improvements, and new feature capabilities.","Improved reliability, performance, and new feature capabilities",,"https://docs.microsoft.com/azure/cosmos-db/" +"bf161e78-ce57-4198-82e8-a34522045518","Operational Excellence",,"High","Azure Cosmos DB","microsoft.documentdb/databaseaccounts","CosmosDBPartitionMerge","Enable partition merge to configure an optimal database partition layout","Active","4.7","Enable partition merge to configure an optimal database partition layout","Your account has collections that could benefit from enabling partition merge. Minimizing the number of partitions will reduce rate limiting and resolve storage fragmentation problems. Containers are likely to benefit from this if the RU/s per physical partition is < 3000 RUs and storage is < 20 GB.","Improve performance and lower the chance of rate-limiting",,"https://docs.microsoft.com/azure/cosmos-db/merge?tabs=azure-powershell" +"dc045941-8e65-437b-992b-1f0acd28bb6e","Cost",,"Medium","Virtual Machines","microsoft.subscriptions/subscriptions","EphemeralOsDisk","Use Ephemeral OS Disk","Active","4.1","Use Virtual Machines with Ephemeral OS Disk enabled to save cost and get better performance","With Ephemeral OS Disk, Customers get these benefits: Save on storage cost for OS disk. Get lower read/write latency to OS disk. Faster VM Reimage operation by resetting OS (and Temporary disk) to its original state. It is more preferable to use Ephemeral OS Disk for short-lived IaaS VMs or VMs with stateless workloads.","Reduced storage cost, lower read/write latency, faster reimage operation for OS disk. More preferable for short-lived IaaS VMs or VMs with stateless workloads","Ephemeral OS disk incurs no storage cost for OS disk and provides lower read/write latency to the OS disk. It also provides faster VM reimage operation to wipe the contents on OS disk and reset the VM to its original state. This significantly reduces the idle time involved with multiple VM create/delete operations.","https://docs.microsoft.com/azure/virtual-machines/windows/ephemeral-os-disks" +"fec68ad4-95b5-4dca-9e20-afa10b3e5401","Performance",,"Medium","Azure App Service","microsoft.subscriptions/subscriptions","AzureExpressRoute","Experience more predictable, consistent latency with a private connection to Azure","Active","1.0","Experience more predictable, consistent latency with a private connection to Azure","Improve the performance, privacy, and reliability of your business-critical apps by extending your on-premises networks to Azure with Azure ExpressRoute. Establish private ExpressRoute connections directly from your WAN, through a cloud exchange facility, or through POP and IPVPN connections.","Fast, private, bandwidth up to 100 Gbps, plus cost benefits",,"https://docs.microsoft.com/azure/expressroute/expressroute-howto-circuit-portal-resource-manager" +"835e829e-9af6-4758-80d2-98df565d1524","Performance",,"Medium","Azure Kubernetes Service","microsoft.containerservice/fleets","UpdateToLatestFleetApi","Update Fleet API","Active","2","Update Fleet API to the latest Version","We have identified sdk calls from outdated Fleet API for resources under this subscription. We recommend switching to the latest sdk versions. This ensures you receive the latest features and performance improvements.","Latest Fleet API contain fixes for known issues and additional improvements.","","" +"a5e8a0f8-2c84-407a-b3d8-f371d684363b","High Availability","Service Upgrade and Retirement","Medium","Azure Fluid Relay Service","microsoft.fluidrelay/fluidrelayservers","UpgradeClientLibrary","Upgrade your Azure Fluid Relay client library","Active","14","Azure Fluid Relay client library should be upgraded","If the Azure Fluid Relay service is invoked with an old client library, it might cause appplication problems. To ensure your application remains operational, upgrade your Azure Fluid Relay client library to the latest version. Upgrading provides the most up-to-date functionality, and enhancements in performance and stability.","Improved reliability",,"https://learn.microsoft.com/en-us/azure/azure-fluid-relay/concepts/version-compatibility" +"8109a740-abe9-453e-91fc-c25598de73d0","Performance",,"Medium","HDInsight","microsoft.hdinsight/clusters","AccWriteCandidate","Consider upgrading to Accelerated Writes to improve performance of your HBase cluster","Active","2","Consider using Accelerated Writes feature in your HBase cluster to improve cluster performance.","You are seeing this advisor recommendation because HDInsight team's system log shows that in the past 7 days, your cluster has encountered the following scenarios:\n 1. High WAL sync time latency\n 2. High write request count (at least 3 one hour windows of over 1000 avg_write_requests/second/node)\n\nThese conditions are indicators that your cluster is suffering from high write latencies. This could be due to heavy workload performed on your cluster.\nTo improve the performance of your cluster, you may want to consider utilizing the Accelerated Writes feature provided by Azure HDInsight HBase. The Accelerated Writes feature for HDInsight Apache HBase clusters attaches premium SSD-managed disks to every RegionServer (worker node) instead of using cloud storage. As a result, provides low write-latency and better resiliency for your applications.\nTo read more on this feature, please visit link: ","Lower write-latency and better resiliency for your applications.","Consider upgrading to Accelerated Writes to improve performance of your HBase cluster","https://docs.microsoft.com/azure/hdinsight/hbase/apache-hbase-accelerated-writes" +"e459ed06-6204-4c85-9f75-9b046b68578a","Performance",,"Medium","HDInsight","microsoft.hdinsight/clusters","CompactionQueueCandidate","Increasing compaction threads count","Active","3","Consider increasing your compaction threads for compactions to complete faster","The compaction queue in your region servers are more than 2000 suggesting that more data requires compaction. Slower compactions can impact read performance as the number of files to read are more. More files without compaction can also impact the heap usage related to how files interact with Azure file system.","Faster compactions would ensure faster reads and less heap usage.","Increase compaction thread count to improve read performance","https://docs.microsoft.com/azure/hdinsight/hbase/apache-hbase-advisor" +"469b5242-26ee-4a4c-ba65-97479166bcf1","Performance",,"Medium","HDInsight","microsoft.hdinsight/clusters","FlushQueueCandidate","Tuning the flushes","Active","3","Consider increasing the flusher threads","The flush queue size in your region servers are more than 100 or there are updates getting blocked frequently. Tuning of the flush handler is recommended.","Faster flushes would clear the writes from being blocked.","Increase flush handler count to improve write performance","https://docs.microsoft.com/azure/hdinsight/hbase/apache-hbase-advisor" +"cd31b398-afa9-40fb-875b-18737857198c","High Availability","Other","High","HDInsight","microsoft.hdinsight/clusters","GCSCertRotation","Enable critical updates to be applied to your HDInsight clusters","Disabled","7","Enable critical updates to be applied to your HDInsight clusters","HDInsight service is applying an important certificate related update to your cluster. However, one or more policies in your subscription are preventing HDInsight service from creating or modifying network resources (Load balancer, Network Interface and Public IP address) associated with your clusters and applying this update. Please take actions to allow HDInsight service to create or modify network resources (Load balancer, Network interface and Public IP address) associated with your clusters before Jan 13, 2021 05:00 PM UTC. The HDInsight team will be performing updates between Jan 13, 2021 05:00 PM UTC and Jan 16, 2021 05:00 PM UTC. Failure to apply this update may result in your clusters becoming unhealthy and unusable. ","Ensure cluster health and stability","Enable critical updates to be applied to your HDInsight clusters","https://docs.microsoft.com/azure/hdinsight/hdinsight-hadoop-provision-linux-clusters" +"d3a6303c-ac8f-4a9c-aad9-939b440d17ba","High Availability","Other","High","HDInsight","microsoft.hdinsight/clusters","GCSCertRotationR3DropRecreate","Drop and recreate your HDInsight clusters to apply critical updates","Disabled","6","Drop and recreate your HDInsight clusters to apply critical updates","The HDInsight service has attempted to apply a critical certificate update on all your running clusters. However, due to some custom configuration changes, we are unable to apply the certificate updates on some of your clusters. Please drop and recreate your cluster before Jan 25th, 2021 to prevent the cluster from becoming unhealthy and unusable. ","Ensure cluster health and stability","Drop and recreate your HDInsight clusters to apply critical updates","https://docs.microsoft.com/azure/hdinsight/hdinsight-hadoop-provision-linux-clusters" +"dddd213b-87b9-439e-a607-a9ecd94e0ae1","High Availability","Other","High","HDInsight","microsoft.hdinsight/clusters","GCSCertRotationR3PlanPatch","Apply critical updates to your HDInsight clusters","Disabled","5.1","Apply critical updates to your HDInsight clusters","The HDInsight service has attempted to apply a critical certificate update on all your running clusters. However, one or more policies in your subscription are preventing HDInsight service from creating or modifying network resources (Load balancer, Network Interface and Public IP address) associated with your clusters and applying this update. Please remove or update your policy assignment to allow HDInsight service to create or modify network resources (Load balancer, Network interface and Public IP address) associated with your clusters before Jan 21, 2021 05:00 PM UTC. The HDInsight team will be performing updates between Jan 21, 2021 05:00 PM UTC and Jan 23, 2021 05:00 PM UTC. To verify the policy update, you can try to create network resources (Load balancer, Network interface and Public IP address) in the same resource group and Subnet where your cluster is in. Failure to apply this update may result in your clusters becoming unhealthy and unusable. You can also drop and recreate your cluster before Jan 25th, 2021 to prevent the cluster from becoming unhealthy and unusable. The HDInsight service will send another notification if we failed to apply the update to your clusters.","Ensure cluster health and stability","Apply critical updates to your HDInsight clusters","https://docs.microsoft.com/azure/hdinsight/hdinsight-hadoop-provision-linux-clusters" +"69740e3e-5b96-4b0e-b9b8-4d7573e3611c","High Availability","Other","High","HDInsight","microsoft.hdinsight/clusters","GCSCertRotationRound2","Apply critical updates by dropping and recreating your HDInsight clusters (certificate rotation round 2)","Active","6","Apply critical updates by dropping and recreating your HDInsight clusters (certificate rotation round 2)","The HDInsight service attempted to apply a critical certificate update on your running clusters. However, due to some custom configuration changes, we're unable to apply the updates on all clusters. To prevent those clusters from becoming unhealthy and unusable, drop and recreate your clusters.","Ensure cluster health and stability","Apply critical updates by dropping and recreating your HDInsight clusters (certificate rotation round 2)","https://docs.microsoft.com/azure/hdinsight/hdinsight-hadoop-provision-linux-clusters" +"80c1538d-5962-4b54-8018-1bed379e4029","Performance",,"Medium","HDInsight","microsoft.hdinsight/clusters","HBaseMemstoreReadPercentage","HBase Query advisor for tuning memstore reads","Active","2","Reads happen on most recent data","More than 75% of your read requests are landing on the memstore. That indicates that the reads are primarily on recent data. This suggests that even if a flush happens on the memstore, the recent file needs to be accessed and that file needs to be in the cache.","If the reads are on the most recent data, the suggested config changes will help you do the reads from the memory as much as possible, therefore helping with faster read performance.","HBase reads tuning","https://docs.microsoft.com/azure/hdinsight/hbase/apache-hbase-advisor" +"36dff9ef-afde-40f5-b742-79a0bafcf6c2","High Availability","Other","High","HDInsight","microsoft.hdinsight/clusters","KafkaVersionRetirement","Deprecation of Kafka 1.1 in HDInsight 4.0 Kafka cluster","Disabled","8","Deprecation of Kafka 1.1 in HDInsight 4.0 Kafka cluster","Starting July 1, 2020, customers will not be able to create new Kafka clusters with Kafka 1.1 on HDInsight 4.0. Existing clusters will run as is without support from Microsoft. Consider moving to Kafka 2.1 on HDInsight 4.0 by June 30 2020 to avoid potential system/support interruption.","Avoid potential system/support interruption","Deprecation of Kafka 1.1 in HDInsight 4.0 Kafka cluster","https://aka.ms/hdiretirekafka" +"353bcb88-3747-4a7a-8b1c-374117db5668","High Availability","Other","High","HDInsight","microsoft.hdinsight/clusters","PreventVMReboot","Prevent HDInsight cluster VMs from rebooting periodically","Disabled","6","Prevent HDInsight cluster VMs from rebooting periodically.","Starting from mid November 2020, you may have noticed HDInsight cluster VMs getting rebooted on a regular basis. This could be caused by: 1. Clamav is enabled on your cluster and it could consume large amount of memory. Under certain conditions this could trigger node reboot. 2. Microsoft is updating Azure services in a phased manner to use TLS certificates from a different set of Certificate Authorities (CAs). When a new CA certificate is available, HDInsight detects and adds the certificate to the JDK trust store and schedules a reboot in a staggered manner. HDInsight is deploying fixes and applying patch for all running clusters for both issues. To apply the fix immediately and avoid unexpected VMs rebooting, you can run below script actions on all cluster nodes as a persistent script action. HDInsight will post another notice after the fix and patching complete. See recommended actions below to download required scripts.","Avoid unexpected VMs rebooting.","Prevent HDInsight cluster VMs from rebooting periodically","https://docs.microsoft.com/azure/security/fundamentals/tls-certificate-changes" +"076f2cce-a86e-4175-adba-4a7456839a47","Performance",,"Medium","HDInsight","microsoft.hdinsight/clusters","RegionCountCandidate","Region count tuning.","Active","3","Check your region counts as you have blocking updates.","Region counts needs to be adjusted to avoid updates getting blocked. It might require a scale up of the cluster by adding new nodes.","Brings more parallelism and ensures writes are more uniform.","Tune the cluster based on the number of regions","https://docs.microsoft.com/azure/hdinsight/hbase/apache-hbase-advisor" +"3b6f9784-2bf9-4348-a1e6-4554504f213d","Performance",,"Medium","HDInsight","microsoft.hdinsight/clusters","ScanQueryTuningcandidate","Revisit your scan queries","Active","2","More than 75% of your queries are full scan queries.","More than 75% of the scan queries on your cluster are doing a full region/table scan. Modify your scan queries to avoid full region or table scans.","Faster scan performance","Set start and stop rows to scans","https://docs.microsoft.com/azure/hdinsight/hbase/apache-hbase-advisor" +"20dfc768-7850-4176-9707-b9bb52afb95a","High Availability","Other","High","HDInsight","microsoft.hdinsight/clusters","SparkVersionRetirement","Deprecation of Older Spark Versions in HDInsight Spark cluster","Disabled","8","Deprecation of Older Spark Versions in HDInsight Spark cluster","Starting July 1, 2020, customers will not be able to create new Spark clusters with Spark 2.1 and 2.2 on HDInsight 3.6, and Spark 2.3 on HDInsight 4.0. Existing clusters will run as is without support from Microsoft. ","Avoid potential system/support interruption.","Deprecation of Older Spark Versions in HDInsight Spark cluster","https://aka.ms/hdiretirespark" +"11741e31-c2ca-4739-92de-04ff7eca697c","High Availability","Service Upgrade and Retirement","High","HDInsight","microsoft.hdinsight/clusters","VMDeprecation","Action required: Migrate your A8–A11 HDInsight cluster before 1 March 2021","Disabled","6","Action required: Migrate your A8–A11 HDInsight cluster before 1 March 2021","You're receiving this notice because you have one or more active A8, A9, A10 or A11 HDInsight cluster. The A8-A11 virtual machines (VMs) will be retired in all regions on 1 March 2021. After that date, all clusters using A8-A11 will be deallocated. Migrate your affected clusters to another HDInsight supported VM (https://azure.microsoft.com/pricing/details/hdinsight/) before that date. For more details, see 'Learn More' link or contact us at askhdinsight@microsoft.com","Avoid cluster getting deallocated.","Action required: Migrate your A8–A11 HDInsight cluster before 1 March 2021","https://azure.microsoft.com/updates/a8-a11-azure-virtual-machine-sizes-will-be-retired-on-march-1-2021/" +"06c03895-e210-4153-a4a0-a5e5c8e8eb83","Performance",,"High","Virtual Machines","microsoft.compute/virtualmachines","UpgradeSizeHighVMUtilV0","Upgrade the size of your most active virtual machines to prevent resource exhaustion and improve performance","Active","0","Upgrade the size of your most active virtual machines to prevent resource exhaustion and improve performance","We analyzed data for the past 7 days and identified virtual machines (VMs) with high utilization across different metrics (i.e., CPU, Memory, and VM IO). Those VMs may experience performance issues since they are nearing/at their SKU's limits. Consider upgrading their SKU to improve performance.","Improve the performance and reliability of your VMs","You can improve the performance and reliability of your highly utilized virtual machines","https://aka.ms/aa_resizehighusagevmrec_learnmore" +"9d5717d2-4708-4e3f-bdda-93b3e6f1715b","High Availability","Other","Medium","Azure Arc enabled Servers","microsoft.hybridcompute/machines","ArcServerAgentVersion","Upgrade the Azure Connected Machine agent","Active","8","Upgrade to the latest version of the Azure Connected Machine agent","The Azure Connected Machine agent is updated regularly with bug fixes, stability enhancements, and new functionality. For the best Azure Arc experience, upgrade your agent to the latest version.","Improved stability and new functionality",,"https://docs.microsoft.com/azure/azure-arc/servers/manage-agent" +"03e77a09-fc67-4bb6-86ed-42bda42fb9ad","Operational Excellence",,"Medium","Azure Monitor","microsoft.insights/scheduledqueryrules","ScheduledQueryRulesRp","Log alert rule was disabled","Active","3","Log alert rule was disabled","The alert rule was disabled by Azure Monitor as it was causing service issues. To enable the alert rule, contact support.","Ensure continued monitoring and alerting for your resources",,"https://aka.ms/aa_logalerts_queryrepair" +"2b5eac39-9f50-4d8d-bc9b-1e1e07c5c37e","Operational Excellence",,"Medium","Azure Monitor","microsoft.insights/scheduledqueryrules","ScheduledQueryRulesLogAlert","Repair log alert rule","Active","3","Repair your log alert rule","We have detected that one or more of your alert rules have invalid queries specified in their condition section. Log alert rules are created in Azure Monitor and are used to run analytics queries at specified intervals. The results of the query determine if an alert needs to be triggered. Analytics queries may become invalid overtime due to changes in referenced resources, tables, or commands. We recommend that you correct the query in the alert rule to prevent it from getting auto-disabled and ensure monitoring coverage of your resources in Azure.","Ensure continued monitoring and alerting for your resources",,"https://aka.ms/aa_logalerts_queryrepair" +"51b1fad8-4838-426f-9871-107bc089677b","High Availability","Service Upgrade and Retirement","Medium","Iot Hub","microsoft.devices/iothubs","UpgradeEdgeSdk","Upgrade Microsoft Edge device runtime to a supported version for IoT Hub","Active","7","Upgrade Microsoft Edge device runtime to a supported version for IoT Hub","When Edge devices use outdated versions, performance degradation might occur. We recommend you upgrade to the latest supported version of the Azure IoT Edge runtime.","Ensure business continuity with latest supported version for your Edge devices","","https://aka.ms/IOTEdgeSDKCheck" +"d448c687-b808-4143-bbdc-02c35478198a","High Availability","Service Upgrade and Retirement","Medium","Iot Hub","microsoft.devices/iothubs","UpgradeDeviceClientSdk","Upgrade Device Client SDK for IotHub","Active","7.6","Upgrade device client SDK to a supported version for IotHub","When devices use an outdated SDK, performance degradation can occur. Some or all of your devices are using an outdated SDK. We recommend you upgrade to a supported SDK version.","Ensure business continuity with supported SDK for your devices","","https://aka.ms/iothubsdk" +"9017e82f-b7ac-4a06-8b9b-5858cb3d5113","Performance",,"Medium","KeyVault","microsoft.keyvault/vaults","UpgradeKeyVaultSDK","Update Key Vault Library","Active","1","Update Key Vault SDK Version","New Key Vault Client Libraries are split to keys, secrets, and certificates SDKs, which are integrated with recommended Azure Identity library to provide seamless authentication to Key Vault across all languages and environments. It also contains several performance fixes to issues reported by customers and proactively identified through our QA process.

**PLEASE DISMISS:**
If Key Vault is integrated with Azure Storage, Disk or other Azure services which can use old Key Vault SDK and when all your current custom applications are using .NET SDK 4.0 or above.","Latest Key Vault Client Libraries contain fixes for known issues and additional improvements.","","https://docs.microsoft.com/azure/key-vault/general/client-libraries" +"47e36ece-24bb-4d3e-8172-af28c9df172d","Performance",,"Medium","Key Vault","microsoft.keyvault/managedhsms","UpgradeKeyVaultMHSMSDK","Update Key Vault Library","Active","2","Update Key Vault SDK Version","New Key Vault Client Libraries are split to keys, secrets, and certificates SDKs, which are integrated with recommended Azure Identity library to provide seamless authentication to Key Vault across all languages and environments. It also contains several performance fixes to issues reported by customers and proactively identified through our QA process. Important: Please be aware that you can only remediate recommendation for custom applications you have access to. Recommendations can be shown due to integration with other Azure services like Storage, Disk encryption, which are in process to update to new version of our SDK. If you use .NET 4.0 in all your applications please dismiss","Latest Key Vault Client Libraries contain fixes for known issues and additional improvements.","","https://docs.microsoft.com/azure/key-vault/general/client-libraries" +"3dbfbe10-4a27-4d10-9369-256e99f83a9c","Performance",,"Medium","Language Service","microsoft.cognitiveservices/accounts","UpgradeToLatestAPILanguage","Upgrade to the latest API version of Azure Cognitive Service for Language","Active","4","Upgrade to the latest API version of Azure Cognitive Service for Language","Please upgrade to the latest API version to get the best results in terms of model quality, performance and service availability.","Better service availability and performance","","https://aka.ms/language-api" +"3f319edd-fdce-4ab5-8f6d-c63dc4cea73b","Performance",,"Medium","Language","microsoft.cognitiveservices/accounts","UpgradeToLatestSDKLanguage","Upgrade to the latest SDK version for Language","Active","4","Upgrade to the latest Cognitive Service Language SDK version","Please upgrade to the latest SDK version to get the best results in terms of model quality, performance and service availability.","Better service availability and performance","","https://aka.ms/language-api" +"94aea435-ef39-493f-a547-8408092c22a7","Cost",,"High","Virtual Machine Scale Sets","microsoft.compute/virtualmachinescalesets","LowUsageVmss","Shut down or resize your virtual machine scale sets","Active","9.9","Right-size or shutdown underutilized virtual machine scale sets","We've analyzed the usage patterns of your virtual machine scale sets over the past 7 days and identified virtual machine scale sets with low usage. While certain scenarios can result in low utilization by design, you can often save money by managing the size and number of virtual machine scale sets.","savings","You can optimize underutilized virtual machine scale sets to reduce your monthly Azure spend.","https://aka.ms/aa_lowusagerec_vmss_learnmore" +"e10b1381-5f0a-47ff-8c7b-37bd13d7c974","Cost",,"High","Virtual Machines","microsoft.compute/virtualmachines","LowUsageVmV2","Shut down or resize your virtual machine","Active","8.4","Right-size or shutdown underutilized virtual machines","We've analyzed the usage patterns of your virtual machine and identified virtual machines with low usage. While certain scenarios can result in low utilization by design, you can often save money by managing the size and number of virtual machines.","savings","You can optimize underutilized virtual machines to reduce your monthly Azure spend.","https://aka.ms/aa_lowusagerec_learnmore" +"36c3633b-daac-4e01-af95-11b8c2f4fe20","Performance",,"High","Storage","microsoft.compute/virtualmachines","ManagedDisksStorageAccount","Use Managed Disks","Active","2","Use Managed disks to prevent disk I/O throttling","Your virtual machine disks belong to a storage account that has reached its scalability target, and is susceptible to I/O throttling. To protect your virtual machine from performance degradation and to simplify storage management, use Managed Disks.","Improved data resilience and performance","You can use Managed Disks to prevent disk throttling and improve virtual machine performance.","https://aka.ms/aa_avset_manageddisk_learnmore" +"1e6ead2a-8ebc-4381-8c99-e2937ae32700","Operational Excellence",,"Low","Azure Lighthouse","microsoft.subscriptions/subscriptions","OnboardCSPSubscriptionsToLighthouse","Use Azure Lighthouse to simply and securely manage customer subscriptions at scale","Active","1","Use Azure Lighthouse to simply and securely manage customer subscriptions at scale","Using Azure Lighthouse improves security and reduces unnecessary access to your customer tenants by enabling more granular permissions for your users. It also allows for greater scalability, as your users can work across multiple customer subscriptions using a single login in your tenant.","Scalable, secure, and simplified management experience","You can use Azure Lighthouse to manage your customers with granular access to customer resources.","https://docs.microsoft.com/azure/lighthouse/concepts/cloud-solution-provider" +"b7c9fd99-a979-40b4-ab48-b1dfab6bb41a","High Availability","Scalability ","Medium","Media Services","microsoft.media/mediaservices","AccountQuotaLimit","Increase Media Services quotas or limits","Active","7","Increase Media Services quotas or limits","When a media account hits its quota limits, disruption of service might occur. To avoid any disruption of service, review current usage of assets, content key policies, and stream policies and increase quota limits for the entities that are close to hitting the limit. You can request quota limits be increased by opening a ticket and adding relevant details. TIP: Don't create additional Azure Media accounts in an attempt to obtain higher limits.","Avoid any disruption to service due to customer exceeding quota limits.","","https://aka.ms/ams-quota-recommendation/" +"e47b63ff-82bb-4350-a806-706085980c27","Cost",,"Low","CloudES_AzureAdvisor","microsoft.network/trafficmanagerprofiles","AdvisorMockRecommendationType","Mock Recommendation for Advisor","Active","1.1","Mock recommendation type for Advisor","Mock recommendation type","Mock Recommendation",,"https://aka.ms/advisordocs" +"3e873dd9-3ad8-4553-aba5-19fc4d4077fc","High Availability","Other","High","CloudES_AzureAdvisor","microsoft.compute/virtualmachines","FETestARGRecommendation","ARG sample recommendations - For FE testing","Disabled","7","FE - ARG sample recommendations","This is a sample ARG recommendation - FE.","FE ARG recommendation - Sample",,"" +"6af349c1-a2a5-4021-999a-4b8503c50aa2","Cost",,"Medium","CloudES_AzureAdvisor","microsoft.compute/virtualmachines","KustoMockRecommendationType","KustoMockRecommendationType","Active","4.2","Mock recommendation type for Kusto-based ingestion","Mock recommendation type for Kusto-based ingestion.","KustoMockRecommendationType",,"https://aka.ms/advisordocs" +"059423fc-3cbb-4983-abc8-2e1c74fda214","Cost",,"Low","CloudES_AzureAdvisor","microsoft.subscriptions/subscriptions","SubscriptionMockRecommendationType","Mock recommendation type for subscription-level recommendations #1","Active","3.2","Mock recommendation type for subscription-level recommendations #1","Mock recommendation type for subscription-level recommendations.","SubscriptionMockRecommendationType",,"https://aka.ms/advisordocs" +"6a2b1e70-bd4c-4163-86de-5243d7ac05ee","High Availability","Business Continuity","Medium","Application Gateway","microsoft.network/applicationgateways","AppGateway","Upgrade gateway size or add more instances","Active","7","Upgrade your SKU or add more instances","Deploying two or more medium or large sized instances ensures business continuity (fault tolerance) during outages caused by planned or unplanned maintenance.","Ensure business continuity through application gateway resilience",,"https://aka.ms/aa_gatewayrec_learnmore" +"52a9d0a7-efe1-4512-9716-394abd4e0ab1","High Availability","Other","Medium","Application Gateway","microsoft.network/applicationgateways","AppGatewayHostOverride","Do not override hostname to ensure website integrity","Active","12","Avoid hostname override to ensure site integrity","Avoid overriding the hostname when configuring Application Gateway. Having a domain on the frontend of Application Gateway different than the one used to access the backend, can lead to broken cookies or redirect URLs. Make sure the backend is able to deal with the domain difference, or update the Application Gateway configuration so the hostname doesn't need to be overwritten towards the backend. When used with App Service, attach a custom domain name to the Web App and avoid use of the *.azurewebsites.net host name towards the backend. Note that a different frontend domain isn't a problem in all situations, and certain categories of backends like REST APIs, are less sensitive in general.","Ensure site integrity and avoid broken cookies or redirect urls through a resilient Application Gateway configuration.",,"https://aka.ms/appgw-advisor-usecustomdomain" +"2ee9f31e-df58-4893-b3e7-66c0cd74183a","Performance",,"Medium","Hot Application Gateway","microsoft.network/applicationgateways","HotAppGateway","Properly scale your Application Gateway","Active","4","Make sure you have enough instances in your Application Gateway to support your traffic","Your Application Gateway has been running on high utilization recently and under heavy load, you may experience traffic loss or increase in latency. It is important that you scale your Application Gateway according to your traffic and with a bit of a buffer so that you are prepared for any traffic surges or spikes and minimizing the impact that it may have in your QoS. Application Gateway v1 SKU (Standard/WAF) supports manual scaling and v2 SKU (Standard_v2/WAF_v2) support manual and autoscaling. In case of manual scaling, increase your instance count and if autoscaling is enabled, make sure your maximum instance count is set to a higher value so Application Gateway can scale out as the traffic increases","Ensure availability of your sites","Properly scale your Application Gateway","https://aka.ms/hotappgw" +"17ebccd8-1405-405c-8695-1981d115ffdc","Performance",,"High","Azure Bastion","microsoft.network/bastionhosts","RecreateBastionResource","Delete and recreate your Azure Bastion resource before February 19, 2021","Active","2","Delete and recreate your Azure Bastion resource before February 19, 2021","We are unable to update your Azure Bastion resource due to its current configuration. Please delete and recreate your resource before February 19, 2021 to receive the updates. If you do not delete and recreate your resource by this date, it will automatically be deleted and recreated for you.","Receive necessary updates for your Azure Bastion resource.",,"https://docs.microsoft.com/azure/bastion/tutorial-create-host-portal" +"da6630fb-4286-4996-92a3-a43f5f26dd34","Cost",,"Medium","ExpressRoute","microsoft.network/expressroutecircuits","ExpressRouteCircuit","Delete ExpressRoute circuit in Not Provisioned state","Disabled","3","Delete ExpressRoute circuits in the provider status of Not Provisioned","We noticed that your ExpressRoute circuit is in the provider status of Not Provisioned for more than one month. This circuit is currently billed hourly to your subscription. We recommend that you delete the circuit if you aren't planning to provision the circuit with your connectivity provider.","Cost savings",,"https://aka.ms/expressroute" +"643be269-d022-4185-b945-66837496a879","High Availability","Business Continuity","Medium","ExpressRoute","microsoft.network/expressroutecircuits","UseGlobalReachForDR","Use Global Reach for disaster recovery","Disabled","7","Use ExpressRoute Global Reach to improve your design for disaster recovery","Unconnected ExpressRoute circuits peered in at least two different locations can cause traffic problems. To allow traffic to continue flowing between your on-premises network and Azure environments if one circuit loses connectivity, connect the circuits to each other using ExpressRoute Global Reach. You can establish Global Reach connections between circuits in different peering locations within the same metro or across metros.","Implement a disaster recovery design and maintain connectivity between your on-premises networks and Azure in the event of a failure",,"https://docs.microsoft.com/azure/expressroute/about-upgrade-circuit-bandwidth" +"17454550-1543-4068-bdaf-f3ed7cdd3d86","High Availability","Monitoring and Alerting","Medium","ExpressRoute","microsoft.network/expressroutecircuits","ExpressRouteGatewayE2EMonitoring","Implement ExpressRoute Monitor on Network Performance Monitor for end-to-end monitoring of your ExpressRoute circuit","Active","6","Implement ExpressRoute Monitor on Network Performance Monitor","When ExpressRoute circuit isn't monitored by ExpressRoute Monitor on Network Performance, you miss notifications of loss, latency, and performance of on-premises to Azure resources, and Azure to on-premises resources. For end-to-end monitoring, implement ExpressRoute Monitor on Network Performance.","Improve time-to-detect and time-to-mitigate issues in your network and provide insights on your network path via ExpressRoute",,"https://docs.microsoft.com/azure/expressroute/how-to-npm" +"f606607c-ee34-445e-997e-49d7cb563fe0","Performance",,"High","ExpressRoute","microsoft.network/expressroutecircuits","UpgradeERCircuitBandwidth","Upgrade your ExpressRoute circuit bandwidth","Active","1","Upgrade your ExpressRoute circuit bandwidth to accommodate your bandwidth needs","You have been using over 90% of your procured circuit bandwidth recently. If you exceed your allocated bandwidth, you will experience an increase in dropped packets sent over ExpressRoute. Upgrade your circuit bandwidth to maintain performance if your bandwidth needs remain this high.","Prevent packet drops caused by bandwidth oversubscription",,"https://docs.microsoft.com/azure/expressroute/about-upgrade-circuit-bandwidth" +"70f87e66-9b2d-4bfa-ae38-1d7d74837689","High Availability","Business Continuity","Medium","ExpressRoute","microsoft.network/virtualnetworkgateways","ExpressRouteGatewayRedundancy","Implement multiple ExpressRoute circuits in your Virtual Network for cross premises resiliency","Active","6","Implement multiple ExpressRoute circuits in your Virtual Network for cross premises resiliency","When an ExpressRoute gateway only has one ExpressRoute circuit associated to it, resiliency issues might occur. To ensure peering location redundancy and resiliency, connect one or more additional circuits to your gateway.","Improve resiliency in case of ExpressRoute peering location failure",,"https://docs.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute" +"b020ff96-37bf-4a64-8bd5-2bfb3fdf3f87","Performance",,"High","Traffic Manager","microsoft.network/trafficmanagerprofiles","FastFailOverTTL","Configure Time to Live","Active","2","Configure DNS Time to Live to 20 seconds","Time to Live (TTL) affects how recent of a response a client will get when it makes a request to Azure Traffic Manager. Reducing the TTL value means that the client will be routed to a functioning endpoint faster in the case of a failover. Configure your TTL to 20 seconds to route traffic to a health endpoint as quickly as possible.","Improve availability by failing over to healthy endpoints",,"https://aka.ms/Ngfw4r" +"6cd70072-c45c-4716-bf7b-b35c18e46e72","High Availability","Business Continuity","Medium","Traffic Manager","microsoft.network/trafficmanagerprofiles","GeneralProfile","Add Endpoint","Active","8","Add at least one more endpoint to the profile, preferably in another Azure region","Profiles need more than one endpoint to ensure availability if one of the endpoints fails. We also recommend that endpoints be in different regions.","Improve resiliency by allowing failover",,"https://aka.ms/AA1o0x4" +"0bbe0a49-3c63-49d3-ab4a-aa24198f03f7","High Availability","Business Continuity","High","Traffic Manager","microsoft.network/trafficmanagerprofiles","GeographicProfile","Add Endpoint","Active","6","Add an endpoint configured to ""All (World)""","For geographic routing, traffic is routed to endpoints in defined regions. When a region fails, there is no pre-defined failover. Having an endpoint where the Regional Grouping is configured to ""All (World)"" for geographic profiles avoids traffic black holing and guarantees service availablity.","Improve resiliency by avoiding traffic black holes",,"https://aka.ms/Rf7vc5" +"d374a732-e69b-41dc-bbc2-a7234e2270be","Performance",,"Medium","Traffic Manager","microsoft.network/trafficmanagerprofiles","ProfileTTL","Configure Time to Live","Active","4","Configure DNS Time to Live to 60 seconds","Time to Live (TTL) affects how recent of a response a client will get when it makes a request to Azure Traffic Manager. Reducing the TTL value means that the client will be routed to a functioning endpoint faster in the case of a failover. Configure your TTL to 60 seconds to route traffic to a health endpoint as quickly as possible.","Improve availability by failing over to healthy endpoints faster",,"https://aka.ms/Um3xr5" +"0db76759-6d22-4262-93f0-2f989ba2b58e","High Availability","Business Continuity","Medium","Traffic Manager","microsoft.network/trafficmanagerprofiles","ProximityProfile","Add or Move Endpoint","Active","5","Add or move one endpoint to another Azure region","All endpoints associated to this proximity profile are in the same region. Users from other regions may experience long latency when attempting to connect. Adding or moving an endpoint to another region will improve overall performance for proximity routing and provide better availability if all endpoints in one region fail.","Improve resiliency by allowing failover to another region",,"https://aka.ms/Ldkkdb" +"43a3c88f-5bef-46c8-8e17-932159b3287d","Performance",,"Medium","NVA Engineering","microsoft.compute/virtualmachines","AristaNVAAccelNet","Accelerated Networking Recommendation for Arista Networks vEOS Router","Disabled","1","Arista Networks vEOS Router may experience high CPU utilization, reduced throughput and high latency.","We have identified that your Virtual Machine might be running a version of Arista Networks vEOS Router Image that is running older drivers for Accelerated Networking, which may cause the product to revert to using the standard, synthetic network interface which does not use Accelerated Networking. It is recommended that you upgrade to a newer version of the image that addresses this issue and enable Accelerated Networking. Please contact Arista Networks for further instructions on how to upgrade your Network Virtual Appliance Image.","You will not experience an unexpected degradation in network performance.","Upgrade Arista Networks vEOS Router image version to eliminate any unexpected degradation in network performance.","https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms" +"1f39d16f-68b9-472b-a82d-cf7b5bed0430","Performance",,"Medium","NVA Engineering","microsoft.compute/virtualmachines","AristaVeosANUpgradeRecommendation","Upgrade your Network Virtual Appliance Version to enable Accelerated Networking on all platforms.","Disabled","1","Update to the latest version of your Arista VEOS product for Accelerated Networking support.","We have identified that your Virtual Machine might be running a version of software image that is running older drivers for Accelerated Networking (AN). It has a synthetic network interface which, either, is not AN capable or is not compatible with all Azure hardware. It is recommended that you upgrade to the latest version of the image that addresses this issue and enable Accelerated Networking. Please contact your vendor for further instructions on how to upgrade your Network Virtual Appliance Image.","Faster network throughput with lower latency.","Upgrade your Network Virtual Appliance image version to eliminate any unexpected degradation in network performance.","https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms" +"270c5ab3-31d0-461f-bf8d-55d739552d31","Performance",,"Medium","NVA Engineering","microsoft.compute/virtualmachines","BarracudaNVAAccelNet","Accelerated Networking Recommendation for Barracuda Networks NextGen Firewall","Disabled","1","Barracuda Networks NextGen Firewall may experience high CPU utilization, reduced throughput and high latency.","We have identified that your Virtual Machine might be running a version of Barracuda Networks NextGen Firewall Image that is running older drivers for Accelerated Networking, which may cause the product to revert to using the standard, synthetic network interface which does not use Accelerated Networking. It is recommended that you upgrade to a newer version of the image that addresses this issue and enable Accelerated Networking. Please contact Barracuda Networks for further instructions on how to upgrade your Network Virtual Appliance Image.","You will not experience an unexpected degradation in network performance.","Upgrade Barracuda Networks NextGen Firewall image version to eliminate any unexpected degradation in network performance.","https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms" +"f892f705-a708-47b0-9de2-95a958c479c2","Performance",,"Medium","NVA Engineering","microsoft.compute/virtualmachines","BarracudaNgANUpgradeRecommendation","Upgrade your Network Virtual Appliance Version to enable Accelerated Networking on all platforms.","Disabled","1","Update to the latest version of your Barracuda NG Firewall product for Accelerated Networking support.","We have identified that your Virtual Machine might be running a version of software image that is running older drivers for Accelerated Networking (AN). It has a synthetic network interface which, either, is not AN capable or is not compatible with all Azure hardware. It is recommended that you upgrade to the latest version of the image that addresses this issue and enable Accelerated Networking. Please contact your vendor for further instructions on how to upgrade your Network Virtual Appliance Image.","Faster network throughput with lower latency.","Upgrade your Network Virtual Appliance image version to eliminate any unexpected degradation in network performance.","https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms" +"d6b4832b-5ad3-454c-ac5f-1543bd1462dc","Performance",,"Medium","NVA Engineering","microsoft.compute/virtualmachines","CheckPointCGANUpgradeRecommendation","Upgrade your Network Virtual Appliance Version to enable Accelerated Networking on all platforms.","Disabled","2.2","Update to the latest version of your Check Point product for Accelerated Networking support.","We have identified that your Virtual Machine (VM) might be running a version of software image that is running older drivers for Accelerated Networking (AN). Your VM has a synthetic network interface that is either not AN capable or is not compatible with all Azure hardware. We recommend that you upgrade to the latest version of the image that addresses this issue and enable Accelerated Networking. Please contact your vendor for further instructions on how to upgrade your Network Virtual Appliance Image.","Faster network throughput with lower latency.","Upgrade your Network Virtual Appliance image version to eliminate any unexpected degradation in network performance.","https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms" +"6230537d-113a-42ec-9357-c08d01602787","High Availability","Other","High","NVA Engineering","microsoft.compute/virtualmachines","CheckPointPlatformServicingKnownIssueA","Known Issue with Check Point Network Virtual Appliance image version","Disabled","5","Check Point Virtual Machine may lose Network Connectivity.","We have identified that your Virtual Machine might be running a version of Check Point image that has been known to lose network connectivity in the event of a platform servicing operation. It is recommended that you upgrade to a newer version of the image that addresses this issue. Please contact Check Point for further instructions on how to upgrade your image.","Ensure business continuity through better network connectivity.","Upgrade Network Virtual Appliance image to ensure business continuity.","https://supportcenter.checkpoint.com/supportcenter/portal?eventSubmit_doGoviewsolutiondetails=&solutionid=sk151752&partition=Advanced&product=CloudGuard" +"33b66f53-738a-4200-8672-63c47a15144e","Performance",,"Medium","NVA Engineering","microsoft.compute/virtualmachines","Cisco1000vANUpgradeRecommendation","Upgrade your Network Virtual Appliance Version to enable Accelerated Networking on all platforms.","Disabled","1","Update to the latest version of your Cisco Cloud Services Router 1000V product for Accelerated Networking support.","We have identified that your Virtual Machine might be running a version of software image that is running older drivers for Accelerated Networking (AN). It has a synthetic network interface which, either, is not AN capable or is not compatible with all Azure hardware. It is recommended that you upgrade to the latest version of the image that addresses this issue and enable Accelerated Networking. Please contact your vendor for further instructions on how to upgrade your Network Virtual Appliance Image.","Faster network throughput with lower latency.","Upgrade your Network Virtual Appliance image version to eliminate any unexpected degradation in network performance.","https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms" +"7747ce74-9209-4fe4-8dd8-6cd74ac1c9ba","Performance",,"Medium","NVA Engineering","microsoft.compute/virtualmachines","CiscoCSRNVAAccelNet","Accelerated Networking Recommendation for Cisco Cloud Services Router 1000V","Disabled","1","Cisco Cloud Services Router 1000V may experience high CPU utilization, reduced throughput and high latency.","We have identified that your Virtual Machine might be running a version of Cisco Cloud Services Router 1000V Image that is running older drivers for Accelerated Networking, which may cause the product to revert to using the standard, synthetic network interface which does not use Accelerated Networking. It is recommended that you upgrade to a newer version of the image that addresses this issue and enable Accelerated Networking. Please contact Cisco for further instructions on how to upgrade your Network Virtual Appliance Image.","You will not experience an unexpected degradation in network performance.","Upgrade Cisco Cloud Services Router 1000V image version to eliminate any unexpected degradation in network performance.","https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms" +"48432aa1-f081-4de9-9e7e-e2e6a7d354bb","Performance",,"Medium","NVA Engineering","microsoft.compute/virtualmachines","F5BigIpANUpgradeRecommendation","Upgrade your Network Virtual Appliance Version to enable Accelerated Networking on all platforms.","Disabled","1","Update to the latest version of your F5 BigIp product for Accelerated Networking support.","We have identified that your Virtual Machine might be running a version of software image that is running older drivers for Accelerated Networking (AN). It has a synthetic network interface which, either, is not AN capable or is not compatible with all Azure hardware. It is recommended that you upgrade to the latest version of the image that addresses this issue and enable Accelerated Networking. Please contact your vendor for further instructions on how to upgrade your Network Virtual Appliance Image.","Faster network throughput with lower latency.","Upgrade your Network Virtual Appliance image version to eliminate any unexpected degradation in network performance.","https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms" +"a71bfb94-b9e8-473e-b0a5-9fafc92cdb05","Operational Excellence",,"Medium","NVA Engineering","microsoft.compute/virtualmachines","GetF5vulnK03009991","NVA Image no longer suppported and not available in Market Place","Disabled","1","The iControl REST interface has an unauthenticated remote command execution vulnerability.","This vulnerability allows for unauthenticated attackers with network access to the iControl REST interface, through the BIG-IP management interface and self IP addresses, to execute arbitrary system commands, create or delete files, and disable services. This vulnerability can only be exploited through the control plane and cannot be exploited through the data plane. Exploitation can lead to complete system compromise. The BIG-IP system in Appliance mode is also vulnerable","Avoid security incidents and unauthorized access to VM.","Please review the information in the link ","https://support.f5.com/csp/article/K03009991" +"148fec38-cb1b-46ad-84b9-41233d07d4d9","Operational Excellence",,"Medium","NVA Engineering","microsoft.compute/virtualmachines","GetVmListANDisabled","NVA Accellerated Networking enabled but not working","Disabled","1","NVA Accelerated Networking enabled but potentially not working.","Desired state for Accelerated Networking is set to ‘true’ for one or more interfaces on this VM, but actual state for accelerated networking is not enabled.","Accelerated Networking offers improvements in network performance and reduced latency.","Please review the information in the link","https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli" +"c571b9b2-fe79-4785-8083-30b7b57a4f3d","Performance",,"Medium","NVA Engineering","microsoft.compute/virtualmachines","NetAppNVAAccelNet","Accelerated Networking Recommendation for NetApp Cloud Volumes ONTAP","Disabled","1","NetApp Cloud Volumes ONTAP may experience high CPU utilization, reduced throughput and high latency.","We have identified that your Virtual Machine might be running a version of NetApp Cloud Volumes ONTAP Image that is running older drivers for Accelerated Networking, which may cause the product to revert to using the standard, synthetic network interface which does not use Accelerated Networking. It is recommended that you upgrade to a newer version of the image that addresses this issue and enable Accelerated Networking. Please contact NetApp for further instructions on how to upgrade your Network Virtual Appliance Image.","You will not experience an unexpected degradation in network performance.","Upgrade NetApp Cloud Volumes ONTAP image version to eliminate any unexpected degradation in network performance.","https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms" +"4dce8273-2f9d-4c20-91ab-9485b03b7d10","Performance",,"Medium","NVA Engineering","microsoft.compute/virtualmachines","NetAppANUpgradeRecommendation","Upgrade your Network Virtual Appliance Version to enable Accelerated Networking on all platforms.","Disabled","1","Update to the latest version of your NetApp product for Accelerated Networking support.","We have identified that your Virtual Machine might be running a version of software image that is running older drivers for Accelerated Networking (AN). It has a synthetic network interface which, either, is not AN capable or is not compatible with all Azure hardware. It is recommended that you upgrade to the latest version of the image that addresses this issue and enable Accelerated Networking. Please contact your vendor for further instructions on how to upgrade your Network Virtual Appliance Image.","Faster network throughput with lower latency.","Upgrade your Network Virtual Appliance image version to eliminate any unexpected degradation in network performance.","https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms" +"010692cc-0668-43fa-b7dc-6766efb22e59","Performance",,"High","NVA","microsoft.compute/virtualmachines","NVAHighCPU","NVA with high CPU","Disabled","1","Consider increasing the size of your NVA to address persistent high CPU","When NVAs run at high CPU, packets can get dropped resulting in connection failures or high latency due to network retransmits. Your NVA is running at high CPU, so you should consider increasing the VM size as allowed by the NVA vendor's licensing requirements.","Reduce the odds of packet drops","","https://aka.ms/NVAHighCPU" +"f266acba-699d-4900-ae93-1bb488fd69df","Performance",,"Medium","NVA Engineering","microsoft.compute/virtualmachines","NvaMaxFlowLimit","NVA VM Instance Maximum Flow Limit","Disabled","1.1","NVA may see traffic loss due to hitting the maximum number of flows.","Packet loss has been observed for this Virtual Machine due to hitting or exceeding the maximum number of flows for a VM instance of this size on Azure","You will see increased performance","Scale to use more VMs or increase the VM size to more than 8 cores","https://docs.microsoft.com/azure/virtual-network/virtual-machine-network-throughput" +"e9a96e96-c68f-4604-b9ff-6b57ffb693da","Performance",,"Medium","NVA Engineering","microsoft.compute/virtualmachines","PaloAltoNVAAccelNet","Accelerated Networking Recommendation for Palo Alto Networks VM-Series Firewall","Disabled","1","Palo Alto Networks VM-Series Firewall may experience high CPU utilization, reduced throughput and high latency.","We have identified that your Virtual Machine might be running a version of Palo Alto Networks VM-Series Firewall Image that is running older drivers for Accelerated Networking, which may cause the product to revert to using the standard, synthetic network interface which does not use Accelerated Networking. It is recommended that you upgrade to a newer version of the image that addresses this issue and enable Accelerated Networking. Please contact Palo Alto Networks for further instructions on how to upgrade your Network Virtual Appliance Image.","You will not experience an unexpected degradation in network performance.","Upgrade Palo Alto Networks VM-Series Firewall image version to eliminate any unexpected degradation in network performance.","https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms" +"1964f651-15e7-4519-bd86-9a7c5335bfe4","Performance",,"Medium","NVA Engineering","microsoft.compute/virtualmachines","PaloAltoFWANUpgradeRecommendation","Upgrade your Network Virtual Appliance Version to enable Accelerated Networking on all platforms.","Disabled","1","Update to the latest version of your Palo Alto Firewall product for Accelerated Networking support.","We have identified that your Virtual Machine might be running a version of software image that is running older drivers for Accelerated Networking (AN). It has a synthetic network interface which, either, is not AN capable or is not compatible with all Azure hardware. It is recommended that you upgrade to the latest version of the image that addresses this issue and enable Accelerated Networking. Please contact your vendor for further instructions on how to upgrade your Network Virtual Appliance Image.","Faster network throughput with lower latency.","Upgrade your Network Virtual Appliance image version to eliminate any unexpected degradation in network performance.","https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms" +"f3be5a9b-2583-4a1c-b774-2481c00ccb04","High Availability","Other","Medium","VPN Gateway","microsoft.network/virtualnetworkgateways","ActiveActiveGatewaySingleTunnel","Configure redundant tunnel","Disabled","5","Configure redundant tunnel for your active-active VPN gateway","In active-active configuration, each Azure gateway instance has a unique public IP address, and each establishes an IPsec/IKE S2S VPN tunnel to your on-premises VPN device specified in your local network gateway and connection. Note that both VPN tunnels are actually part of the same connection. You need to configure your on-premises VPN device to accept or establish two S2S VPN tunnels to those two Azure VPN gateway public IP addresses.","Improve availability and aggregate throughput","You can configure redundant tunnels for your active-active vpn gateway to improve availability.","https://aka.ms/aa_activeactive_singletun_learnmore" +"e070c4bf-afaf-413e-bc00-e476b89c5f3d","High Availability","High Availability","Medium","VPN Gateway","microsoft.network/virtualnetworkgateways","BasicVPNGateway","Move to production gateway SKUs from Basic gateways","Active","6","Move to production gateway SKUs from Basic gateways","The Basic VPN SKU is for development or testing scenarios. If you're using the VPN gateway for production, move to a production SKU, which offers higher numbers of tunnels, Border Gateway Protocol (BGP), active-active configuration, custom IPsec/IKE policy, and increased stability and availability.","Additional available features and higher stability and availability",,"https://aka.ms/aa_basicvpngateway_learnmore" +"129d8c1e-a4d2-4bac-86ce-c7c2b2e37feb","Cost",,"Medium","VPN Gateway","microsoft.network/virtualnetworkgateways","IdleVNetGateway","Delete or reconfigure idle virtual network gateways","Active","1.1","Repurpose or delete idle virtual network gateways","We noticed that your virtual network gateway has been idle for over 90 days. This gateway is being billed hourly. You may want to reconfigure this gateway, or delete it if you don't intend to use it anymore.","savings","You can delete or repurpose idle virtual network gateways to reduce your Azure spend.","https://aka.ms/aa_idlevpngateway_learnmore" +"f78c8e26-9c40-4a74-a091-f76aecb49099","Performance",,"High","VPN Gateway","microsoft.network/virtualnetworkgateways","HighP2SConnectionsVNetGateway","P2S Gateway with High Connection Count","Active","1","Consider increasing the size of your VNet Gateway SKU to address high P2S use","Each gateway SKU can only support a specified count of concurrent P2S connections. Your connection count is close to your gateway limit, so additional connection attempts may fail.","Increasing the size of your gateway will allow you to support more concurrent P2S users","","https://aka.ms/HighP2SConnectionsVNetGateway" +"c249dc0e-9a17-423e-838a-d72719e8c5dd","High Availability","Business Continuity","Medium","VPN Gateway","microsoft.network/virtualnetworkgateways","VNetGatewayActiveActive","Enable Active-Active gateways for redundancy","Active","6","Enable Active-Active gateways for redundancy","In active-active configuration, both instances of the VPN gateway establish site-to-site (S2S) VPN tunnels to your on-premise VPN device. When a planned maintenance or unplanned event happens to one gateway instance, traffic is automatically switched over to the other active IPsec tunnel.","Ensure business continuity through connection resilience","Enable Active-Active configuration for your VPN gateways for redundancy.","https://aka.ms/aa_vpnha_learnmore" +"2e41fe84-7173-4fe9-b257-61aa4679c3fe","Performance",,"High","VPN Gateway","microsoft.network/virtualnetworkgateways","HighCPUVNetGateway","VPN Gateway with High CPU","Active","1","Consider increasing the size of your VNet Gateway SKU to address consistently high CPU use","Under high traffic load, the VPN gateway may drop packets due to high CPU. You should consider upgrading your VPN Gateway SKU since your VPN has consistently been running at .","Increasing the size of your VPN gateway will ensure that connections aren't dropped due to high CPU","","https://aka.ms/HighCPUP2SVNetGateway" +"7c27d589-c7ed-47e1-8fe9-fe12ea81634a","Operational Excellence",,"High","Network Watcher","microsoft.network/networksecuritygroups","NSGFlowLogsenableTA","Enable Traffic Analytics for NSG","Active","2","Enable Traffic Analytics to view insights into traffic patterns across Azure resources","Traffic Analytics is a cloud-based solution that provides visibility into user and application activity in Azure. Traffic analytics analyzes Network Watcher network security group (NSG) flow logs to provide insights into traffic flow. With traffic analytics, you can view top talkers across Azure and non Azure deployments, investigate open ports, protocols and malicious flows in your environment and optimize your network deployment for performance. You can process flow logs at 10 mins and 60 mins processing intervals, giving you faster analytics on your traffic.","Identify top talkers, traffic hotspots, resource utilisation and security based on traffic patterns in NSG","* Use 10 mins processing interval for faster insights. * You can select Flog Logs version 2 to see bytes and packets per flow","https://aka.ms/aa_enableta_learnmore" +"6f087e7e-afdf-4a3d-a1de-41d70404b9cb","Operational Excellence",,"High","CloudNet_NetworkWatcher","microsoft.network/networkwatchers/flowlogs","UpgradeNSGToVnetFlowLog","Upgrade NSG flow logs to VNet flow logs","Active","9","Upgrade NSG flow logs to VNet flow logs","Virtual Network flow log allows you to record IP traffic flowing in a virtual network. It provides several benefits over Network Security Group flow log like simplified enablement, enhanced coverage, accuracy, performance and observability of Virtual Network Manager rules and encryption status.","Improved coverage and additional functionality",,"https://aka.ms/vnetflowlogspreviewdocs" +"a15a8fbc-22ac-41af-9039-2c9c4a7128e0","Operational Excellence",,"High","Azure Advisor","microsoft.compute/virtualmachines","AddMonitorProdVM"," Add Azure Monitor to your virtual machine (VM) labeled as production","Disabled","4.1","Add Azure Monitor to your virtual machine (VM) labeled as production","Azure Monitor for VMs monitors your Azure virtual machines (VM) and virtual machine scale sets at scale. It analyzes the performance and health of your Windows and Linux VMs, and it monitors their processes and dependencies on other resources and external processes. It includes support for monitoring performance and application dependencies for VMs that are hosted on-premises or in another cloud provider."," Azure Monitor analyzes performance, health, and processes on your Windows and Linux VMs","Azure Monitor analyzes performance, health, and processes on your Windows and Linux VMs","https://docs.microsoft.com/azure/azure-monitor/insights/vminsights-overview" +"bbd39b95-99d9-4b7e-b66b-8813081307c1","Operational Excellence",,"Medium","Azure Advisor","microsoft.subscriptions/subscriptions","AddTagPolicy","Assign the 'Add or replace a tag on resources' policy","Disabled","2.1","Enforce 'Add or replace a tag on resources' using Azure Policy","Azure Policy is a service in Azure that you use to create, assign, and manage policies. These policies enforce different rules and effects over your resources. This policy adds or replaces the specified tag and value when any resource is created or updated. Existing resources can be remediated by triggering a remediation task. Does not modify tags on resource groups.","This specific policy allows for resources to be tagged or for tags to be replaced.","Azure Policy allows IT admins to define, assign, and, manage standards for resources in their environment.","https://docs.microsoft.com/azure/governance/policy/overview" +"6d395b56-af36-4f01-a814-f8ba08e49c24","Operational Excellence",,"Medium","Azure Advisor","microsoft.subscriptions/subscriptions","AllowedLocationsPolicy","Assign the 'Allowed locations' policy","Disabled","2.1","Enforce 'Allowed locations' using Azure Policy","Azure Policy is a service in Azure that you use to create, assign, and manage policies. These policies enforce different rules and effects over your resources. This policy enables you to restrict the locations your organization can specify when deploying resources. Use to enforce your geo-compliance requirements.","This specific policy restricts the available locations where your organization can deploy new resources.","Azure Policy allows IT admins to define, assign, and, manage standards for resources in their environment.","https://docs.microsoft.com/azure/governance/policy/overview" +"56089005-f16c-4b41-ba0d-2eb3549292d5","Operational Excellence",,"Medium","Azure Advisor","microsoft.subscriptions/subscriptions","AllowedVirtualMachineSkuPolicy","Assign the 'Allowed virtual machine SKUs' policy","Disabled","2.1","Enforce 'Allowed virtual machine SKUs' using Azure Policy","Azure Policy is a service in Azure that you use to create, assign, and manage policies. These policies enforce different rules and effects over your resources. This policy enables you to specify a set of virtual machine SKUs that your organization can deploy.","This specific policy restricts the virtual machine SKUs that your organization can deploy.","Azure Policy allows IT admins to define, assign, and, manage standards for resources in their environment.","https://docs.microsoft.com/azure/governance/policy/overview" +"142bcb82-aa8d-44e8-98d4-2b39125f2324","Operational Excellence",,"High","Azure Advisor","microsoft.subscriptions/subscriptions","AuditForManagedDisksPolicy","Enforce 'Audit VMs that do not use managed disks' using Azure Policy","Disabled","2.1","Enforce 'Audit VMs that do not use managed disks' using Azure Policy","Azure Policy is a service in Azure that you use to create, assign, and manage policies. These policies enforce different rules and effects over your resources. This policy audits VMs that do not use managed disks.","This specific policy audits VMs that do not use managed disks.","Azure Policy allows IT admins to define, assign, and, manage standards for resources in their environment.","https://docs.microsoft.com/azure/governance/policy/overview" +"b2c74ac7-061e-4164-b272-ecb0940f5965","Operational Excellence",,"Medium","Azure Advisor","microsoft.subscriptions/subscriptions","InheritTagPolicy","Assign the 'Inherit a tag from the resource group' policy","Disabled","2.1","Enforce 'Inherit a tag from the resource group' using Azure Policy","Azure Policy is a service in Azure that you use to create, assign, and manage policies. These policies enforce different rules and effects over your resources. This policy adds or replaces the specified tag and value from the parent resource group when any resource is created or updated. Existing resources can be remediated by triggering a remediation task.","This specific policy allows for resources to inherit tags from the parent resource group.","Azure Policy allows IT admins to define, assign, and, manage standards for resources in their environment.","https://docs.microsoft.com/azure/governance/policy/overview" +"c6b94711-f1f5-4e7e-9c89-c17ed4190969","Performance",,"Medium","Storage","microsoft.storage/storageaccounts","PremiumBlobStorageAccount","Use premium performance block blob storage","Active","1.1","Use premium performance block blob storage","One or more of your storage accounts has a high transaction rate per GB of block blob data stored. Use premium performance block blob storage instead of standard performance storage for your workloads that require fast storage response times and/or high transaction rates and potentially save on storage costs.","Block blob storage performance boost with the lowest Azure transaction prices.","You can use Premium Blobs on high transaction blobs to boost performance.","https://aka.ms/usePremiumBlob" +"5b8ddf04-be28-44ec-ab2c-a63a34d1de13","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","AppServiceReservedCapacity","Buy reserved instance","Active","12.1","Consider App Service reserved instance to save over your on-demand costs","We analyzed your App Service usage pattern over selected Term, look-back period, and recommend reserved instance purchase that maximizes your savings. With reserved instance, you can prepurchase hourly usage for the App Service plan and save over your Pay-as-you-go costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions based on usage pattern over selected Term, look-back period.","savings","You can buy Azure AppService reserved instance to save money over pay-as-you-go costs.","https://aka.ms/rirecommendations" +"10aedd06-621e-4b4f-a45c-5256573e0191","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","AzureVMwareSolutionReservedCapacity","Buy reserved instance","Active","5.1","Consider Azure VMware Solution reserved instance to save over your on-demand costs","We analyzed your Azure VMware Solution usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy Azure VMware Solution reserved instance to save money over pay-as-you-go costs.","https://aka.ms/rirecommendations" +"1b8c5187-32a6-4a2f-8ca1-b0b7d6ce9e86","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","AzureDataExplorerReservedCapacity","Buy reserved instance","Active","5.1","Consider Azure Data Explorer reserved instance to save over your on-demand costs","We analyzed your Azure Data Explorer usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy Azure Data Explorer reserved instance and save money over on-demand costs.","https://aka.ms/rirecommendations" +"0d524e8d-4cfd-4db5-9f91-8b4bb5235a8e","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","DataFactorybReservedCapacity","Buy reserved instance","Active","5.1","Consider Data Factory reserved instance to save over your on-demand costs","We analyzed your Data Factory usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy Data Factory reserved instance and save money over on-demand costs.","https://aka.ms/rirecommendations" +"3f6c5689-6a05-4896-a6e0-c6f8a22a44c2","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","AzureDedicatedHostReservedCapacity","Buy reserved instance","Active","5.1","Consider Azure Dedicated Host reserved instance to save over your on-demand costs","We analyzed your Azure Dedicated Host usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy Azure Dedicated Host reserved instance and save money over on-demand costs.","https://aka.ms/rirecommendations" +"407b6ad6-8e0b-40e7-9384-643520cae0ed","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","AzureFilesReservedCapacity","Buy reserved instance","Active","5.1","Consider Azure Files reserved instance to save over your on-demand costs","We analyzed your Azure Files usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy Azure Files reserved instance and save money over on-demand costs.","https://aka.ms/rirecommendations" +"0eb54047-acd9-4f26-8ffb-8cec713782d6","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","AzureManagedDiskReservedCapacity","Buy reserved instance","Active","5.1","Consider Azure Managed Disk reserved instance to save over your on-demand costs","We analyzed your Azure Managed Disk usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy Azure Managed disk reserved instance and save money over on-demand costs.","https://aka.ms/rirecommendations" +"0169a2e1-c7bf-4c37-90b8-0714811c82d3","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","BlobReservedCapacity","Buy reserved instance","Active","5.1","Consider Blob storage reserved instance to save on Blob v2 and Datalake storage Gen2 costs","We analyzed your Azure Blob and Datalake storage usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Blob storage reserved instance applies only to data stored on Azure Blob (GPv2) and Azure Data Lake Storage (Gen 2). Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy Blob storage Gen 2 reserved instance and save money over on-demand costs.","https://aka.ms/rirecommendations" +"a205074f-8049-48b3-903f-556f5e530ae3","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","CosmosDBReservedCapacity","Buy reserved instance","Active","9.1","Consider Cosmos DB reserved instance to save over your pay-as-you-go costs","We analyzed your Cosmos DB usage pattern over selected Term, look-back period and calculate reserved instance purchase that maximizes your savings. With reserved instance, you can prepurchase Cosmos DB hourly usage and save over your pay-as-you-go costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and usage pattern over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings even more.","savings","You can buy Cosmos DB reserved instance to save money over pay-as-you-go costs.","https://aka.ms/rirecommendations" +"171f87ad-4ead-42fc-8f32-a3b18d451837","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","MariaDBSQLReservedCapacity","Buy reserved instance","Active","7.1","Consider Database for MariaDB reserved instance to save over your pay-as-you-go costs","We analyzed you Azure Database for MariaDB usage pattern over selected Term, look-back period, and recommend reserved instance purchase that maximizes your savings. With reserved instance, you can prepurchase MariaDB hourly usage and save over your compute costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy Database for MariaDB reserved instance to save money over pay-as-you-go costs.","https://aka.ms/rirecommendations" +"a8fd63ce-4600-43eb-af33-a6d5481f5930","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","MySQLReservedCapacity","Buy reserved instance","Active","9.1","Consider Database for MySQL reserved instance to save over your pay-as-you-go costs","We analyzed you MySQL Database usage pattern over selected Term, look-back period, and recommend reserved instance purchase that maximizes your savings. With reserved instance, you can prepurchase MySQL hourly usage and save over your compute costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy MySQL Database reserved instance to save money over pay-as-you-go costs.","https://aka.ms/rirecommendations" +"32755df6-aa2f-48d7-9ab7-92b8a80352ea","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","NetAppStorageReservedCapacity","Buy reserved instance","Active","5.1","Consider NetApp Storage reserved instance to save over your on-demand costs","We analyzed your NetApp Storage usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy NetApp Storage reserved instance and save money over on-demand costs.","https://aka.ms/rirecommendations" +"dadc1876-61e3-42fc-a70e-e863bbc460b6","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","OpenAIServiceProvisionedThroughputReservedCapacity","Buy reservations","Active","1","Consider OpenAI Service Provisioned Throughput reservations to save over pay-as-you-go costs","OpenAI Service Provisioned Throughput purchases are recommended based on usage over the selected term and look-back period. Purchase a reservation to save over pay-as-you-go costs for the chosen term. It automatically applies to matching resources. Shared scope recommendations are available in reservation purchase experience.","savings","You can buy OpenAI Service Provisioned Throughput reservationss to save money over pay-as-you-go costs.","https://aka.ms/rirecommendations" +"06ad499a-0952-48d3-b061-ec81c9cabb8b","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","PostgreSQLReservedCapacity","Buy reserved instance","Active","5.1","Consider Database for PostgreSQL reserved instance to save over your pay-as-you-go costs","We analyzed your Database for PostgreSQL usage pattern over selected Term, look-back period, and recommend reserved instance purchase that maximizes your savings. With reserved instance, you can prepurchase PostgresSQL Database hourly usage and save over your on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy Database for PostgreSQL reserved instance to save money over pay-as-you-go costs.","https://aka.ms/rirecommendations" +"3327646a-c325-417f-a3e3-36ae7119da69","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","RedHatReservedCapacity","Buy reserved instance","Active","5.1","Consider Red Hat reserved instance to save over your on-demand costs","We analyzed your Red Hat usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy Red Hat reserved instance and save money over on-demand costs.","https://aka.ms/rirecommendations" +"148cdd60-97e8-426b-a7b9-141b7cb4bc2f","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","RedHatOsaReservedCapacity","Buy reserved instance","Active","5.1","Consider RedHat Osa reserved instance to save over your on-demand costs","We analyzed your RedHat Osa usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy RedHat Osa reserved instance and save money over on-demand costs.","https://aka.ms/rirecommendations" +"8ee30d6b-2c73-452a-b4ad-e4386cd6f7d0","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","RedisCacheReservedCapacity","Buy reserved instance","Active","6.1","Consider Cache for Redis reserved instance to save over your pay-as-you-go costs","We analyzed you Cache for Redis usage pattern over selected Term, look-back period, and calculated reserved instance purchase that maximizes your savings. With reserved instance, you can prepurchase Cache for Redis hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy Cache for Redis reserved instance and save money over on-demand costs.","https://aka.ms/rirecommendations" +"84b1a508-fc21-49da-979e-96894f1665df","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","ReservedInstance","Buy reserved instances","Active","10.3","Consider virtual machine reserved instance to save over your on-demand costs","Reserved instances can provide a significant discount over on-demand prices. With reserved instances, you can prepurchase the base costs for your virtual machines. Discounts are automatically applied to new or existing VMs that have the same size and region as your reserved instance. We analyzed your usage over selected Term, look-back period and recommend money-saving reserved instances.","savings","You can buy virtual machine reserved instances to save money over on-demand costs.","https://aka.ms/rirecommendations" +"6dcd6657-7a07-404a-b462-db76946f6a97","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","SapHanaReservedCapacity","Buy reserved instance","Active","5.1","Consider SapHana reserved instance to save over your on-demand costs","We analyzed your SapHana usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy SapHana reserved instance and save money over on-demand costs.","https://aka.ms/rirecommendations" +"89515250-1243-43d1-b4e7-f9437cedffd8","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","SavingsPlan","Add a plan","Active","4","Purchasing a savings plan for compute could unlock lower prices","We analyzed your compute usage over the last 30 days and recommend adding a savings plan to increase your savings. The savings plan unlocks lower prices on select compute services when you commit to spend a fixed hourly amount for 1 or 3 years. As you use select compute services globally, your usage is covered by the plan at reduced prices. During the times when your usage is above your hourly commitment, you’ll simply be billed at your regular pay-as-you-go prices. With savings automatically applying across compute usage globally, you’ll continue saving even as your usage needs change over time. Savings plan are more suited for dynamic workloads while accommodating for planned or unplanned changes while reservations are more suited for stable, predictable workloads with no planned changes. Saving estimates are calculated for individual subscriptions and the usage pattern observed over last 30 days. Shared scope savings plans are available in purchase experience and can further increase savings.","savings","You can add a savings plan and save money over on-demand costs.","https://aka.ms/savingsplan-compute" +"680a5388-28aa-44e8-88af-32e3598dc869","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","SQLDWReservedCapacity","Buy reserved instance","Active","10.1","Consider Azure Synapse Analytics (formerly SQL DW) reserved instance to save over your pay-as-you-go costs","We analyze you Azure Synapse Analytics usage pattern over selected Term, look-back period, and recommend reserved instance purchase that maximizes your savings. With reserved instance, you can prepurchase Synapse Analytics hourly usage and save over your on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy Synapse Analytics reserved instance to save money over pay-as-you-go costs.","https://aka.ms/rirecommendations" +"885cd4f5-dfa0-4d68-bbfd-00f89fc2b69c","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","SQLReservedCapacity","Buy reserved instance","Active","12.1","Consider SQL PaaS DB reserved instance to save over your pay-as-you-go costs","We analyzed your SQL PaaS usage pattern over selected Term, look-back period, and recommend reserved instance purchase that maximizes your savings. With reserved instance, you can prepurchase hourly usage for your SQL PaaS deployments and save over your SQL PaaS compute costs. SQL license is charged separately and is not discounted by the reservation. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy SQL PaaS reserved instance to save money over pay-as-you-go costs.","https://aka.ms/rirecommendations" +"db621e98-4a20-4942-b174-c455dc71dbae","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","SuseLinuxReservedCapacity","Buy reserved instance","Active","6.1","Consider SuseLinux reserved instance to save over your on-demand costs","We analyzed your SuseLinux usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy SuseLinux reserved instance and save money over on-demand costs.","https://aka.ms/rirecommendations" +"f0382960-6906-4b0d-add3-ed12690bff31","Cost",,"High","ReservedInstances","microsoft.subscriptions/subscriptions","VMwareCloudSimpleReservedCapacity","Buy reserved instance","Active","5.1","Consider VMware Cloud Simple reserved instance","We analyzed your VMware Cloud Simple usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.","savings","You can buy VMware Cloud Simple reserved instance and save money over on-demand costs.","https://aka.ms/rirecommendations" +"703fbf6c-ab3a-47d2-aa26-9092d06a6054","Performance",,"Medium","Resource Move","microsoft.subscriptions/subscriptions","UpgradeResourceMoverSDK","Update Azure Resource Mover SDK","Disabled","1.1","Update Azure Resource Mover SDK Version","We have identified that you are using an older version of SDK. The latest version of SDK contains new features such as dependency validation improvements, ability to delete source resources, and portal improvements, in addition to several fixes proactively identified though our QA process.","Latest Azure Resource Mover SDK contains the most recent feature functionality",,"https://docs.microsoft.com/azure/resource-mover/" +"97b38421-f88c-4db0-b397-b2d81eff6630","High Availability","Scalability","Medium","Azure Search","microsoft.search/searchservices","BasicServiceStorageQuota90percent","Create a Standard search service (2GB)","Active","8","Create a Standard search service (2GB)","When you exceed your storage quota, indexing operations stop working. You're close to exceeding your storage quota of 2GB. If you need more storage, create a Standard search service or add extra partitions.","capability to handle more data",,"https://aka.ms/azs/search-limits-quotas-capacity" +"8d31f25f-31a9-4267-b817-20ee44f88069","High Availability","Scalability","Medium","Azure Search","microsoft.search/searchservices","FreeServiceStorageQuota90percent","Create a Standard search service (50MB)","Active","9","Create a Standard search service (50MB)","When you exceed your storage quota, indexing operations stop working. You're close to exceeding your storage quota of 50MB. To maintain operations, create a Basic or Standard search service.","capability to handle more data",,"https://aka.ms/azs/search-limits-quotas-capacity" +"b3efb46f-6d30-4201-98de-6492c1f8f10d","High Availability","Scalability","Medium","Azure Search","microsoft.search/searchservices","StandardServiceStorageQuota90percent","Avoid exceeding your available storage quota by adding more partitions","Active","8","Avoid exceeding your available storage quota by adding more partitions","When you exceed your storage quota, you can still query, but indexing operations stop working. You're close to exceeding your available storage quota. If you need more storage, add extra partitions.","Able to index additional data",,"https://aka.ms/azs/search-limits-quotas-capacity" +"b83241d3-47ba-4603-8d5a-a1b3331e74f4","Cost",,"Medium","Azure SQL Database","microsoft.sql/servers/databases","SQLRightSizing","Right Size SQL DB","Active","2","Right-size underutilized SQL Databases","We've analyzed the DTU consumption of your SQL Database over the past 14 days and identified SQL Databases with low usage. You can save money by right-sizing to the recommended SKU based on the 95th percentile of your every day workload.","Optimize Azure spend",,"https://aka.ms/sqldbrec" +"ef14bcc2-41a5-41f6-bca8-10764cfbdee0","Performance",,"High","Azure Synapse Analytics","microsoft.sql/sqldatawarehouses","CreateTableStatisticsSqlDW","Create table statistics","Active","3.1","Create statistics on table columns","We have detected that you are missing table statistics which may be impacting query performance. The query optimizer uses statistics to estimate the cardinality or number of rows in the query result which enables the query optimizer to create a high quality query plan.","Increase query performance",,"https://aka.ms/learnmorestatistics" +"9d7196d1-2d7c-4316-820f-7374a4ddf250","Performance",,"High","Azure Synapse Analytics","microsoft.sql/sqldatawarehouses","DataSkewSqlDW","Remove data skew","Active","3.1","Remove data skew to increase query performance","We have detected distribution data skew greater than 15%. This can cause costly performance bottlenecks.","Increase query performance",,"https://aka.ms/learnmoredataskew" +"dd93fbbf-e5ef-4c7c-886e-2bfef0958f45","Performance",,"High","Azure Synapse Analytics","microsoft.sql/sqldatawarehouses","FileSplittingGuidance","Split files that are staged for loading","Active","1","Split staged files in the storage account to increase load performance","We have detected that you can increase load throughput by splitting your compressed files that are staged in your storage account. A good rule of thumb is to split compressed files into 60 or more to maximize the parallelism of your load. ","Increase load performance","You can improve load performance by splitting files that are staged for loading.","https://aka.ms/learnmorefilesplit" +"e0ba1234-61da-46e3-a66d-fa0752b9df7d","Performance",,"High","Azure Synapse Analytics","microsoft.sql/sqldatawarehouses","LoadBatchSizeGuidance","Increase batch size when loading ","Active","1","Increase batch size when loading to maximize load throughput, data compression, and query performance","We have detected that you can increase load performance and throughput by increasing the batch size when loading into your database. You should consider using the COPY statement. If you are unable to use the COPY statement, consider increasing the batch size when using loading utilities such as the SQLBulkCopy API or BCP - a good rule of thumb is a batch size between 100K to 1M rows.","Increase load throughput, data compression, and query performance","You can improve load throughput, data compression, and query performance by increasing your batch size.","https://aka.ms/learnmoreincreasebatchsize" +"14b28bdb-b83d-4f55-a516-44d4152f1f2b","Performance",,"High","Azure Synapse Analytics","microsoft.sql/sqldatawarehouses","SqlDwIncreaseCacheCapacity","Increase Cache Capacity","Active","1","Scale up to optimize cache utilization with SQL Data Warehouse","We have detected that you had high cache used percentage with a low hit percentage. This indicates high cache eviction which can impact the performance of your workload.","Increase query performance","You can improve your SQL Data Warehouse query performance by scaling up to optimize cache utilization.","https://aka.ms/learnmoreadaptivecache" +"33e515fe-354c-4016-a0f7-c4d6585aea61","Performance",,"High","Azure Synapse Analytics","microsoft.sql/sqldatawarehouses","SqlDwReduceTempdbContention","Reduce Tempdb Contention","Active","1","Scale up or update resource class to reduce tempdb contention with SQL Data Warehouse","We have detected that you had high tempdb utilization which can impact the performance of your workload.","Increase query performance","You can improve your SQL Data Warehouse query performance by scaling up or updating your resource class to reduce tempdb contention.","https://aka.ms/learnmoretempdb" +"293984cf-b551-461f-b22d-9659ebd09a4f","Performance",,"High","Azure Synapse Analytics","microsoft.sql/sqldatawarehouses","SqlDwReplicateTable","Replicate Table","Active","1","Convert tables to replicated tables with SQL Data Warehouse","We have detected that you may benefit from using replicated tables. When using replicated tables, this will avoid costly data movement operations and significantly increase the performance of your workload.","Increase query performance","You can improve your SQL Data Warehouse query performance by converting tables to replicated tables.","https://aka.ms/learnmorereplicatedtables" +"314a2614-24d3-496c-b9d6-e6cd3df4b6c2","Performance",,"High","Azure Synapse Analytics","microsoft.sql/sqldatawarehouses","ColocateStorageAccount","Co-locate the storage account and the SQL pool within the same region","Active","1","Co-locate the storage account within the same region to minimize latency when loading","We have detected that you are loading from a region that is different from your SQL pool. You should consider loading from a storage account that is within the same region as your SQL pool to minimize latency when loading data.","Minimize latency and increase load performance","You can minimize latency and increase load performance by co-locating your storage account with your SQL pool","https://aka.ms/learnmorestoragecolocation" +"01dea77b-3ca4-4583-9b09-88f5a8fd5857","Performance",,"High","Azure Synapse Analytics","microsoft.sql/sqldatawarehouses","UpdateTableStatisticsSqlDW","Update table statistics","Active","3.1","Update statistics on table columns","We have detected that you do not have up-to-date table statistics which may be impacting query performance. The query optimizer uses up-to-date statistics to estimate the cardinality or number of rows in the query result which enables the query optimizer to create a high quality query plan.","Increase query performance",,"https://aka.ms/learnmorestatistics" +"48eda464-1485-4dcf-a674-d0905df5054a","Cost",,"Medium","Storage","microsoft.compute/disks","DeleteOrDowngradeUnattachedDisks","You have disks that are not attached to a VM. Please evaluate if you still need the disk.","Active","18.1","You have disks that are not attached to a VM. Please evaluate if you still need the disk","We have observed that you have disks that are not attached to a VM. Please evaluate if you still need the disk. If you decide to delete the disk, recovery is not possible. We recommend that you create a snapshot before deletion or ensure the data in the disk is no longer required.","Cost saving.","Delete unattached disks.","https://aka.ms/unattacheddisks" +"dd65e838-4473-4fdb-b124-e09798e35f36","Performance",,"Medium","Storage","microsoft.storage/storageaccounts","EnableLargeFileShares","Enable the large file share feature on storage account to avoid throttling","Disabled","1.1","Enable the large file share feature on storage account to avoid throttling.","Standard file shares are limited to 1000 IOPS per share. By enabling the large file share feature you can get 10x more IOPS. There is no charge to enable large file shares. Enabling large files shares is an irreversible action. Large file shares enabled account can’t be converted to re-redundant accounts.","Eliminate throttling and improve the performance of your file shares.","By enabling the large file share feature you can get 10x more IOPS. There is no charge to enable large file shares.","https://docs.microsoft.com/azure/storage/files/storage-files-how-to-create-large-file-share#enable-large-files-shares-on-an-existing-account" +"d9823f54-3eaa-485b-a3b0-b9559c8e831f","Performance",,"Medium","Storage","microsoft.storage/storageaccounts","EnableSnapshots","No Snapshots Detected","Active","1.1","No Snapshots Detected","We have observed that there are no snapshots of your file shares. This means you are not protected from accidental file deletion or file corruption scenarios. Please enable snapshots to protect your data. To enable snapshots you can use Azure Portal or Azure Backup or 3rd party solutions","Schedule snapshots of your file shares to protect yourself from accidental file deletion or data corruption like ransomware.","","https://learn.microsoft.com/en-us/azure/storage/files/storage-snapshots-files" +"386452d3-8df0-4174-94cb-fee063b3084f","Cost",,"Medium","Storage","microsoft.storage/storageaccounts","XstoreLargeClassicLog","Reduce retention policy of classic storage logs","Active","1","Revisit retention policy for classic log data in storage accounts","Large classic log data is detected on your storage accounts. You are billed on capacity of data stored in storage accounts including classic logs. You are recommended to check the retention policy of classic logs and update with necessary period to retain less log data. This would reduce unnecessary classic log data and save your billing cost from less capacity.","Save cost from unneeded log data",," https://docs.microsoft.com/azure/storage/common/manage-storage-analytics-logs#modify-retention-policy" +"ad488f61-5ada-4c72-8296-56ea29955552","Performance",,"Medium","Storage","microsoft.storage/storageaccounts","MigrateToPremiumStorage","Migrate from Standard Storage to Premium Storage","Disabled","1.1","Migrate your data from Standard Storage account to Premium Storage account","We noticed that there is a high volume of transactions on your storage account. We recommend you to migrate to Premium Storage (SSD based) to boost your performance on Page Blobs/Unmanaged Disks.","Improve your performance with lower latency and provisioned performance",,"https://aka.ms/aa_premiumstg_migrate_learnmore" +"6747b02b-b6ac-4c2e-aeca-c2aa0438f58d","Performance",,"High","Storage","microsoft.compute/virtualmachines","MixedDiskTypeToSSDPublic","Use SSD Disks for your production workloads","Active","1.1","Use SSD Disks for your production workloads","We noticed that you are using SSD disks while also using Standard HDD disks on the same VM. Standard HDD managed disks are generally recommended for dev-test and backup; we recommend you use Premium SSDs or Standard SSDs for production. Premium SSDs deliver high-performance and low-latency disk support for virtual machines with IO-intensive workloads. Standard SSDs provide consistent and lower latency. Upgrade your disk configuration today for improved latency, reliability, and availability. Upgrading requires a VM reboot, which will take three to five minutes.","Improve latency, reliability, and availability","","https://docs.microsoft.com/azure/virtual-machines/windows/disks-types#disk-comparison" +"c81a0349-18c0-4bd2-81c7-475adde922d2","Cost",,"Medium","Storage","microsoft.storage/storageaccounts","MoveToPremiumStorage","Consider evaluating premium storage from a cost perspective","Active","1.1","Based on your high transactions/TB ratio, there's a possibility that premium storage might be more cost effective in addition to being performant for your scenario. More details on pricing for premium and standard accounts can be found here","The customer can lower the bill if the transactions/TB ratio is high. Exact number would depend on transaction mix and region but anywhere >30 or 35 TPB/TB may be good candidates to at least evaluate a move to premium storage.","Based on your high transactions/TB ratio, there is a possibility that premium storage might be more cost effective in addition to being performant for your scenario.","","https://aka.ms/azureblobstoragepricing" +"a0ad4f8c-f904-4b11-955d-e0044473c5fa","Operational Excellence",,"High","Storage","microsoft.storage/storageaccounts","StorageAccountScaleTarget","Prevent hitting subscription limit for maximum storage accounts","Active","2","Prevent hitting subscription limit for maximum storage accounts","A region can support a maximum of 250 storage accounts per subscription. You have either already reached or are about to reach that limit. If you reach that limit, you will be unable to create any more storage accounts in that subscription/region combination. Please evaluate the recommended action below to avoid hitting the limit.","Ensure you do not reach the limit that can prevent you from creating additional storage accounts",,"https://aka.ms/subscalelimit" +"b353f187-4cb4-4b2b-b502-472f45f32fd6","Performance",,"Medium","Storage","microsoft.storage/storageaccounts","StorageCallPutBlob","Optimize Block Blob Operations","Active","1","Use ""Put Blob"" for blobs smaller than 256 MB","When writing a block blob that is 256 MB or less (64 MB for requests using REST versions before 2016-05-31), you can upload it in its entirety with a single write operation using ""Put Blob"". Based on your aggregated metrics, we believe your storage account's write operations can be optimized.","Increase performance and reduce operation costs.",,"http://aka.ms/understandblockblobs" +"1ef6e4c5-2caa-4528-a6e4-0db08a4d2872","Cost",,"High","Storage","microsoft.storage/storageaccounts","StorageGPv1ToGPv2","Upgrade Storage Account Kind to GPv2","Disabled","1","Upgrade your Storage Account to General-purpose v2","General-purpose v2 (GPv2) accounts enables all the latest features at the lowest per gigabyte prices while retaining support for all APIs and features supported in General-purpose v1 (GPv1) and Blob storage accounts.","Take advantage of Storage's latest features and pricing model",,"https://aka.ms/storageaccounts" +"00c14add-2aef-4bb4-a3bd-5759096d4417","Performance",,"Medium","Storage","microsoft.compute/disks","MDHDDtoPremiumForPerformance","Convert Standard HDD to Premium SSD for better performance","Active","1.2","Convert Managed Disks from Standard HDD to Premium SSD for performance","We have noticed your Standard HDD disk is approaching performance targets. Azure premium SSDs deliver high-performance and low-latency disk support for virtual machines with IO-intensive workloads. Give your disk performance a boost by upgrading your Standard HDD disk to Premium SSD disk. Upgrading requires a VM reboot, which will take three to five minutes.","Give your disk performance a boost using Premium SSD disks.","Upgrade your Standard HDD disks to Premium SSD disks by following our instructions for the Azure portal, PowerShell, or CLI.","https://docs.microsoft.com/azure/virtual-machines/windows/disks-types#premium-ssd" +"d42d751d-682d-48f0-bc24-bb15b61ac4b8","High Availability","Scalability","High","Storage","microsoft.storage/storageaccounts","StoragePremiumBlobQuotaLimit","Migrate Premium Disks from Unmanaged to Managed","Active","6","Use Managed Disks for storage accounts reaching capacity limit","When Premium SSD unmanaged disks in storage accounts are about to reach their Premium Storage capacity limit, failures might occur. To avoid failures when this limit is reached, migrate to Managed Disks that don't have an account capacity limit. This migration can be done through the portal in less than 5 minutes.","Avoid scale issues when account reaches capacity limit",,"https://aka.ms/premium_blob_quota" +"42dbf883-9e4b-4f84-9da4-232b87c4b5e9","High Availability","Business Continuity","Medium","Storage","microsoft.storage/storageaccounts","StorageSoftDelete","Enable Soft Delete","Active","6","Enable Soft Delete to protect your blob data","Soft Delete puts deleted data into a ""soft"" deleted state instead of permanently deleted. When data is overwritten, a soft deleted snapshot is generated to save the state of the overwritten data. You can configure the amount of time soft deleted data is recoverable before it permanently expires.","Save and recover your data when blobs or blob snapshots are accidentally overwritten or deleted",,"https://aka.ms/softdelete" +"8433e84a-8f5c-4b6c-9052-9b98757348ea","Performance",,"Medium","Storage","microsoft.storage/storageaccounts","StandardSSDForNonPremVM","Upgrade to Standard SSD Disks for consistent and improved performance","Active","2.1","Upgrade to Standard SSD Disks for consistent and improved performance","Because you are running IaaS virtual machine workloads on Standard HDD managed disks, we wanted to let you know that a Standard SSD disk option is now available for all Azure VM types. Standard SSD disks are a cost-effective storage option optimized for enterprise workloads that need consistent performance. Upgrade your disk configuration today for improved latency, reliability, and availability. Upgrading requires a VM reboot, which will take three to five minutes.","Improve disk latency, reliability, and availability using Standard SSD disks.","Upgrade to Standard SSD Disks for consistent and improved performance by following our instructions for the Azure portal, PowerShell, or CLI.","https://docs.microsoft.com/azure/virtual-machines/windows/disks-types#standard-ssd" +"70065997-d4d4-4671-baeb-39a2ac66e8ec","Performance",,"Medium","Storage","microsoft.storage/storageaccounts","StorageUseLargeBlockSizesForPutBlock","Optimize Block Blob Operations","Disabled","1","Use larger block sizes for large block blob uploads","When writing a block blob that is larger than 256 MB, using larger block sizes reduces the number of write operations required to upload the blob when calling ""Put Block"". Block blobs support up to 100 MB blocks for the REST API versions 2016-05-31 and later, and 4 MB for older versions. We suggest using at least 4 MB blocks when uploading large objects with the ""Put Block"" operation. Based on your aggregated metrics, we believe your storage account's write operations can be optimized.","Increase performance and reduce operation costs",,"https://aka.ms/understandblockblobs" +"33557a7c-6dd6-4b46-9579-fc5273f07458","Performance",,"Medium","Storage","microsoft.storage/storageaccounts","UMDHDDtoPremiumForPerformance","Convert Unmanaged Disks from Standard HDD to Premium SSD for performance","Active","1.1","Convert Unmanaged Disks from Standard HDD to Premium SSD for performance","We have noticed your Unmanaged HDD Disk is approaching performance targets. Azure premium SSDs deliver high-performance and low-latency disk support for virtual machines with IO-intensive workloads. Give your disk performance a boost by upgrading your Standard HDD disk to Premium SSD disk. Upgrading requires a VM reboot, which will take three to five minutes.","Give your disk performance a boost using Premium SSD disks.","Upgrade your Unmanaged HDD disks to Premium SSD disks by following our instructions for the Azure portal, PowerShell, or CLI.","https://docs.microsoft.com/azure/virtual-machines/windows/disks-types#premium-ssd" +"3c374434-42e7-44db-8b0b-5b8ed970114b","Operational Excellence",,"High","Storage","microsoft.storage/storageaccounts","UpdateStorageJavaSDK","Update to newer releases of Azure Storage Java v12 SDK","Active","5","Update to newer releases of the Storage Java v12 SDK for better reliability.","We noticed that one or more of your applications use an older version of the Azure Storage Java v12 SDK to write data to Azure Storage. Unfortunately, the version of the SDK being used has a critical issue that uploads incorrect data during retries (for example, in case of HTTP 500 errors), resulting in an invalid object being written. The issue is fixed in newer releases of the Java v12 SDK.","The issue is fixed in newer releases of the Java v12 SDK.","","https://docs.microsoft.com/azure/developer/java/sdk/?view=azure-java-stable" +"3f000a35-4cf7-44ef-8127-2f7ed7909125","High Availability","Other","Medium","ExpressRoute","microsoft.subscriptions/subscriptions","ExpressRouteCircuitO365","Create additional ExpressRoute circuits","Disabled","5","Create additional ExpressRoute Circuits in another location for redundancy","Customers using Microsoft Peering for Office 365 services should have at least two ExpressRoute Circuits in different locations to avoid a single point of failure. Create an additional ExpressRoute circuit to have a redundant connection in case of any failure.","Avoid a single point of failure","You can avoid a single point of failure by creating an additional ExpressRoute circuit at a different location.","https://aka.ms/o365ERAdvisor" +"c46ab673-2ddf-4a2c-927f-022616418bb0","Operational Excellence",,"Low","Microsoft Support","microsoft.subscriptions/subscriptions","ResourceHealthAlert","Create an Azure Resource Health alert","Disabled","4","Create an Azure Resource Health alert","Resource Health alerts keeps you informed about the current and historical health status of your Azure resources. Azure Resource Health alerts can notify you in near real-time when these resources have a change in their health status.","Get notified of the health of your Azure resources","You can create a Resource Health alert to get notified of the health status of your Azure resources.","https://docs.microsoft.com/azure/service-health/resource-health-alert-arm-template-guide" +"c6ac1f03-bd58-4421-9522-23cffb64d8e1","Operational Excellence",,"Low","Microsoft Support","microsoft.subscriptions/subscriptions","ServiceHealthAlert","Create an Azure service health alert","Disabled","3.1","Create an Azure service health alert","Service health alerts help you stay notified when Azure service issues affect you. Create a service health alert for the regions and services that you care about.","Get notified when Azure service issues affect you","You can create a service health alert to get notified when an Azure service issue affects you.","https://aka.ms/aa_servicehealthalert_action" +"8189a205-7f30-4f97-90ab-230519248722","Operational Excellence",,"High","Microsoft Support","microsoft.subscriptions/subscriptions","SupportPlan","Upgrade your support plan","Disabled","3.1","Upgrade to a support plan that includes technical support","We recommend upgrading your support plan to include technical support. Explore the range of Azure support options and choose the plan that best fits, whether you're a developer just starting your cloud journey or a large organization deploying business-critical, strategic applications.","Ensure business continuity by having access to Azure cloud experts","You can upgrade your support plan to include technical support.","https://aka.ms/azuresupport" +"afdf4c1a-e46b-4817-a5d6-4b9909f58e2a","Cost",,"Low","Azure Synapse Analytics","microsoft.synapse/workspaces","EnableSynapseSparkComputeAutoPauseGuidance","Consider enabling automatic pause feature on spark compute","Active","3.1","Consider enabling automatic pause feature on spark compute","Automatic pause releases and shuts down unused compute resources after a set idle period of inactivity.","Automatic pause releases and shuts down unused compute resources after a set idle period of inactivity","Automatic pause releases and shuts down unused compute resources after a set idle period of inactivity.","https://aka.ms/EnableSynapseSparkComputeAutoPauseGuidance" +"00b1ef72-4d0f-4452-a6a8-1df5397172d6","Cost",,"Low","Azure Synapse Analytics","microsoft.synapse/workspaces","EnableSynapseSparkComputeAutoScaleGuidance","Consider enabling autoscale feature on spark compute","Active","3.1","Consider enabling autoscale feature on spark compute","Apache Spark for Azure Synapse Analytics pool's Autoscale feature automatically scales the number of nodes in a cluster instance up and down. During the creation of a new Apache Spark for Azure Synapse Analytics pool, a minimum and maximum number of nodes can be set when Autoscale is selected. Autoscale then monitors the resource requirements of the load and scales the number of nodes up or down. There's no extra charge for this feature.","The Autoscale feature monitors resource requirements and automatically scales the number of nodes up and down to meet the compute and memory requirements, thereby optimizing costs from unused resources.","Enabling autoscale comes at 0 cost and will reduce job failures.","https://aka.ms/EnableSynapseSparkComputeAutoScaleGuidance" +"a14a77e7-1187-4714-9042-7c6056b30017","Performance",,"High","Azure Synapse Analytics","microsoft.synapse/workspaces","SynapseLoadBatchSizeGuidance","Increase batch size when loading ","Disabled","6","Increase batch size when loading to maximize load throughput, data compression, and query performance","We have detected that you can increase load performance and throughput by increasing the batch size when loading into your database. You should consider using the COPY statement. If you are unable to use the COPY statement, consider increasing the batch size when using loading utilities such as the SQLBulkCopy API or BCP - a good rule of thumb is a batch size between 100K to 1M rows.","Increase load throughput, data compression, and query performance","You can improve load throughput, data compression, and query performance by increasing your batch size.","https://aka.ms/learnmoreincreasebatchsize" +"7c83695a-3fa9-4668-9080-85151f5ab7be","Performance",,"Medium","Azure Synapse Analytics","microsoft.synapse/workspaces","UpgradeSynapseManagementClientSDK","Update SynapseManagementClient","Active","6","Update SynapseManagementClient SDK Version","New SynapseManagementClient is using .NET SDK 4.0 or above.","Latest SynapseManagementClient Libraries contain fixes for known issues and additional improvements.","","https://aka.ms/UpgradeSynapseManagementClientSDK" +"c8bbcb72-b778-48b4-882c-d8ce271995e5","Performance",,"Medium","Text Analytics","microsoft.cognitiveservices/accounts","UpgradeToLatestAPI","Upgrade to the latest Cognitive Service Text Analytics API version","Active","3","Upgrade to the latest Cognitive Service Text Analytics API version","Please upgrade to the latest API version to get the best results in terms of model quality, performance and service availability. Also there are new features are available as new endpoints starting from V3.0 such as PII recognition, Entity recognition and entity linking available as separate endpoints. In terms of changes in preview endpoints we have Opinion Mining in SA endpoint, redacted text property in PII endpoint","Better service availability and performance","","https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-how-to-call-api" +"1b94aa41-a51e-4cad-98fb-3a44447d5997","Performance",,"Medium","Text Analytics","microsoft.cognitiveservices/accounts","UpgradeToLatestSDK","Upgrade to the latest SDK version for Text Analytics","Active","3","Upgrade to the latest Cognitive Service Text Analytics SDK version","Please upgrade to the latest SDK version to get the best results in terms of model quality, performance and service availability. Also there are new features are available as new endpoints starting from V3.0 such as PII recognition, Entity recognition and entity linking available as separate endpoints. In terms of changes in preview endpoints we have Opinion Mining in SA endpoint, redacted text property in PII endpoint","Better service availability and performance","","https://docs.microsoft.com/azure/cognitive-services/text-analytics/quickstarts/text-analytics-sdk?tabs=version-3-1&pivots=programming-language-csharp" +"843606b2-e019-495b-bf81-3cb4107aab6a","High Availability","Other","High","Azure App Service","microsoft.web/kubeenvironments","AppServiceContainerAppsResourceProviderMigration","Azure Container Apps: Namespace migration from Microsoft.Web to Microsoft.App","Disabled","6","Azure Container Apps: Namespace migration from Microsoft.Web to Microsoft.App","During March 2022, Azure Container Apps resources will be gradually migrated from the Microsoft.Web namespace to Microsoft.App. This will affect some management operations. Availability of your Container Apps resources will not be impacted.","Keep your apps healthy and highly available",,"https://aka.ms/microsoftappmigration" +"1294987d-c97d-41d0-8fd8-cb6eab52d87b","High Availability","Scalability","High","Azure App Service","microsoft.web/sites","AppServiceCPUExhaustion","High CPU","Active","6","Scale out your App Service plan to avoid CPU exhaustion","High CPU utilization can lead to runtime issues with applications. Your application exceeded 90% CPU over the last couple of days. To reduce CPU usage and avoid runtime issues, scale out the application.","Keep your app healthy",,"https://aka.ms/antbc-cpu" +"a85f5f1c-c01f-4926-84ec-700b7624af8c","High Availability","Other","High","Azure App Service","microsoft.web/sites","AppServiceServiceHealthIssues","Service Health Issue","Active","5","Check your app's service health issues","We have a recommendation related to your app's service health. Please open the Azure Portal, go to the app, click the Diagnose and Solve to see more details.","Keep your app healthy",,"https://docs.microsoft.com/azure/app-service/app-service-best-practices" +"b30897cc-2c2e-4677-a2a1-107ae982ff49","High Availability","Disaster Recovery","High","Azure App Service","microsoft.web/sites","AppServiceFixBackupDatabaseSettings","Fix backup database settings","Active","7","Fix the backup database settings of your App Service resource","When an application has an invalid database configuration, its backups fail. For details, see your application's backup history on your app management page.","Ensure business continuity",,"https://aka.ms/antbc" +"80efd6cb-dcee-491b-83a4-7956e9e058d5","High Availability","Disaster Recovery","High","Azure App Service","microsoft.web/sites","AppServiceFixBackupStorageSettings","Fix backup storage settings","Active","7","Fix the backup storage settings of your App Service resource","When an application has invalid storage settings, its backups fail. For details, see your application's backup history on your app management page.","Ensure business continuity",,"https://aka.ms/antbc" +"66d3137a-c4da-4c8a-b6b8-e03f5dfba66e","High Availability","Scalability","High","Azure App Service","microsoft.web/sites","AppServiceMemoryExhaustion","High memory","Active","6","Scale up your App Service plan SKU to avoid memory problems","The App Service Plan containing your application exceeded 85% memory allocation. High memory consumption can lead to runtime issues your applications. Find the problem application and scale it up to a higher plan with more memory resources.","Keep your app healthy",,"https://aka.ms/antbc-memory" +"9ebff5d5-10c1-4fed-8c58-1954e27d3bfa","Performance",,"High","Azure App Service","microsoft.web/sites","AppServiceMoveToPremiumV2","Try PremiumV2 SKU","Active","1.1","Move your App Service Plan to PremiumV2 for better performance","Your app served more than 1000 requests per day for the past 3 days. Your app may benefit from the higher performance infrastructure available with the Premium V2 App Service tier. The Premium V2 tier features Dv2-series VMs with faster processors, SSD storage, and doubled memory-to-core ratio when compared to the previous instances. Learn more about upgrading to Premium V2 from our documentation.","Obtain better performance with lower cost",,"https://aka.ms/ant-premiumv2" +"45cfc38d-3ffd-4088-bb15-e4d0e1e160fe","High Availability","Scalability","Medium","Azure App Service","microsoft.web/serverfarms","AppServiceNumberOfInstances","Consider scaling out your App Service Plan to optimize user experience and availability","Active","5","Scale out your App Service plan","Consider scaling out your App Service Plan to at least two instances to avoid cold start delays and service interruptions during routine maintenance.","Optimize user experience and availability",,"https://aka.ms/appsvcnuminstances" +"07f9a07d-9030-465c-89dc-b1f712334b83","Performance",,"High","Azure App Service","microsoft.web/sites","AppServiceOutboundConnections","Many outbound connections","Active","1.1","Check outbound connections from your App Service resource","Your app has opened too many TCP/IP socket connections. Exceeding ephemeral TCP/IP port connection limits can cause unexpected connectivity issues for your apps.","Better performance and lower cost",,"https://aka.ms/antbc-socket" +"3e35f804-52cb-4ebf-84d5-d15b3ab85dfc","High Availability","Other","High","Azure App Service","microsoft.web/sites","AppServiceProactiveCrashMonitoring","Worker process crashed due to Unhandled Exception","Active","7","Fix application code, a worker process crashed due to an unhandled exception","A worker process in your application crashed due to an unhandled exception. To identify the root cause, collect memory dumps and call stack information at the time of the crash.","Keep your app healthy and highly available",,"https://aka.ms/appsvcproactivecrashmonitoring" +"78c5ab69-858a-43ca-a5ac-4ca6f9cdc30d","High Availability","Scalability","High","Azure App Service","microsoft.web/sites","AppServiceRemoveQuota","Exceeded quota limit","Active","5","Upgrade your App Service to a Standard plan to avoid request rejects","When an application is part of a shared App Service plan and meets its quota multiple times, incoming requests might be rejected. Your web application can’t accept incoming requests after meeting a quota. To remove the quota, upgrade to a Standard plan.","Keep your app healthy",,"https://aka.ms/ant-asp" +"59a83512-d885-4f09-8e4f-c796c71c686e","High Availability","Other","High","Azure App Service","microsoft.web/sites","AppServiceStandardOrHigher","Site Slots","Active","7","Move your App Service resource to Standard or higher and use deployment slots","When an application is deployed multiple times in a week, problems might occur. You deployed your application multiple times last week. To help you reduce deployment impact to your production web application, move your App Service resource to the Standard (or higher) plan, and use deployment slots.","Keep your app healthy while updating",,"https://aka.ms/ant-staging" +"dc3edeee-f0ab-44ae-b612-605a0a739612","High Availability","Scalability","High","Azure App Service","microsoft.web/staticsites","StaticWebAppsUpgradeToStandardSKU","Consider upgrading the hosting plan of the Static Web App(s) in this subscription to Standard SKU.","Active","7","Consider upgrading the hosting plan of the Static Web App(s) in this subscription to Standard SKU.","The combined bandwidth used by all the Free SKU Static Web Apps in this subscription is exceeding the monthly limit of 100GB. Consider upgrading these applications to Standard SKU to avoid throttling.","Higher availability for the apps by avoiding throttling.",,"https://azure.microsoft.com/pricing/details/app-service/static/" +"0dc165fd-69bf-468a-aa04-a69377b6feb0","High Availability","Other","High","Azure App Service","microsoft.web/sites","AppServiceUseDeploymentSlots","Site Slots","Active","7","Use deployment slots for your App Service resource","When an application is deployed multiple times in a week, problems might occur. You deployed your application multiple times over the last week. To help you manage changes and help reduce deployment impact to your production web application, use deployment slots.","Keep your app healthy while updating",,"https://aka.ms/ant-staging" +"c8202443-6550-4fc8-9416-5f81089b77d0","Performance",,"Medium","Azure Monitor for SAP Solutions","microsoft.workloads/monitors","UpdateToLatestAMSApiVersion","Upgrade to the latest AMS API version","Active","2","Update to the latest AMS API Version","We have identified calls to a AMS API version which is not recommended. We recommend switching to the latest AMS API version to ensure uninterrupted access to AMS, latest features, and performance improvements.","Latest AMS API contain fixes for known issues and additional improvements.","Upgrade to the latest AMS API version","https://aka.ms/AMSAdvisor" +"eabfd1a1-6092-471b-8cff-22dd044e5535","Performance",,"Medium","Azure Monitor for SAP Solutions","microsoft.workloads/monitors","UpgradeToLatestAMSSdkVersion","Upgrade to the latest Workloads SDK version for AMS","Active","2","Upgrade to the latest Workloads SDK version","Please upgrade to the latest Workloads SDK version to get the best results in terms of model quality, performance and service availability.","Latest Workloads SDK contain fixes for known issues and additional improvements.","","https://aka.ms/AMSAdvisor" +"2cc17306-822e-45b1-8d7f-5b0d2f2cccdb","Performance",,"High","Windows Virtual Desktop","microsoft.desktopvirtualization/hostpools","ChangeMaxSessionLimitForDepthFirstHostPool","Change max session limit for depth first load balanced host pool","Active","1","Change the max session limit for your depth first load balanced host pool to improve VM performance ","Depth first load balancing uses the max session limit to determine the maximum number of users that can have concurrent sessions on a single session host. If the max session limit is too high, all user sessions will be directed to the same session host and this may cause performance and reliability issues. Therefore, when setting a host pool to have depth first load balancing, you should also set an appropriate max session limit according to the configuration of your deployment and capacity of your VMs. To fix this, open your host pool's properties and change the value next to the ""Max session limit"" setting.","Ensure session host functional stability, reliability, and performance when using Windows Virtual Desktop service","Change the max session limit for your depth first load balanced host pool to improve VM performance.","https://docs.microsoft.com/azure/virtual-desktop/configure-host-pool-load-balancing" +"87269ca9-dda6-448e-97ac-c5888b2a2d61","Operational Excellence",,"Medium","Windows Virtual Desktop","microsoft.desktopvirtualization/hostpools","ProductionEnvHostPools","Deploy Host Pool to production (non-validation) environment","Disabled","2.1","Not enough production environments enabled","We have determined that too many of your host pools have Validation Environment enabled. In order for Validation Environments to best serve their purpose, you should have at least one, but never more than half of your host pools in Validation Environment. By having a healthy balance between your host pools with Validation Environment enabled and those with it disabled, you will best be able to utilize the benefits of the multistage deployments that Windows Virtual Desktop offers with certain updates. To fix this issue, open your host pool's properties and select ""No"" next to the ""Validation Environment"" setting.","Ensure functional stability and business continuity using Windows Virtual Desktop service","Use Host Pool deployed to production (non-validation) environment to ensure business functionality continuation with increased stability","https://docs.microsoft.com/azure/virtual-desktop/create-host-pools-powershell" +"d89829c9-dadf-4ddc-87d6-fd746debd5d3","Performance",,"Medium","Windows Virtual Desktop","microsoft.desktopvirtualization/hostpools","RegionProximityHostPools","Deploy VMs to different region","Active","2","Improve user experience and connectivity by deploying VMs closer to user’s location.","We have determined that your VMs are located in a region different or far from where your users are connecting from, using Windows Virtual Desktop (WVD). This may lead to prolonged connection response times and will impact overall user experience on WVD. When creating VMs for your host pools, you should attempt to use a region closer to the user. Having close proximity ensures continuing satisfaction with the WVD service and a better overall quality of experience.","Improves satisfaction with network round-trip time of the WVD service deployments.","Use VMs from a region where users are located.","https://docs.microsoft.com/azure/virtual-desktop/connection-latency" +"53e0a3cb-3569-474a-8d7b-7fd06a8ec227","High Availability","Other","Medium","Windows Virtual Desktop","microsoft.compute/virtualmachines","SessionHostNeedsAssistanceForUrlCheck","Provide access to mandatory URLs missing for your Azure Virtual Desktop environment","Active","8","Provide access to mandatory URLs missing for your Azure Virtual Desktop environment","For a session host to deploy and register to Windows Virtual Desktop (WVD) properly, you need a set of URLs in the 'allowed list' in case your VM runs in a restricted environment. For specific URLs missing from your allowed list, search your application event log for event 3702.","Ensure successful deployment and session host functionality when using Windows Virtual Desktop service","Unblock all URLs from the Safe URL list to ensure a successful deployment of your VMs.","https://docs.microsoft.com/azure/virtual-desktop/safe-url-list" +"ba1f4576-9ace-4fa9-b0d6-311ad9f2f233","Operational Excellence",,"Medium","Windows Virtual Desktop","microsoft.desktopvirtualization/hostpools","ValidationEnvHostPools","Deploy Host Pool to validation environment","Disabled","2.1","No validation environment enabled","We have determined that you do not have a validation environment enabled in current subscription. When creating your host pools, you have selected ""No"" for ""Validation environment"" in the properties tab. Having at least one host pool with a validation environment enabled ensures the business continuity through Windows Virtual Desktop service deployments with early detection of potential issues.","Ensure business continuity through WVD service deployments","Use Host Pool deployed to Validation Environment to ensure deployment resilience and business functionality continuation","https://docs.microsoft.com/azure/virtual-desktop/create-validation-host-pool" diff --git a/src/powershell/Private/Get-OpenDataRecommendationType.ps1 b/src/powershell/Private/Get-OpenDataRecommendationType.ps1 new file mode 100644 index 000000000..2d55e8992 --- /dev/null +++ b/src/powershell/Private/Get-OpenDataRecommendationType.ps1 @@ -0,0 +1,362 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +function Get-OpenDataRecommendationType +{ + param() + return [PSCustomObject]@( + [PSCustomObject]@{ Id = '3a3c1a2a-8597-4d3a-981a-0a24a0ee9de4'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Virtual Machines'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'AccelNetConfiguration'; Message = 'Enable Accelerated Networking to improve network performance and latency'; State = 'Active'; Version = 1; Description = 'Enable Accelerated Networking to improve network performance and latency'; LongDescription = 'We have detected that Accelerated Networking is not enabled on VM resources in your existing deployment that may be capable of supporting this feature. If your VM OS image supports Accelerated Networking as detailed in the documentation, make sure to enable this free feature on these VMs to maximize the performance and latency of your networking workloads in cloud'; Benefits = 'Improves performance throughput while reducing latency and jitter'; Tip = 'Enable Accelerated Networking to improve network performance and latency.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms'; } + ,[PSCustomObject]@{ Id = 'a06456ed-afb7-4d16-86fd-0054e25268ed'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Virtual Machines'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'AccelNetDisengaged'; Message = 'Enable Accelerated Networking to improve network performance and latency'; State = 'Active'; Version = 2.1; Description = 'Accelerated Networking may require stopping and starting the VM'; LongDescription = 'We have detected that Accelerated Networking is not engaged on a VM resources in your existing deployment even though the feature has been requested. In rare cases like this, it may be necessary to stop and start your VM, at your convenience, to re-engage AccelNet.'; Benefits = 'Improves performance throughput while reducing latency and jitter'; Tip = 'Accelerated Networking needs VM Stop then Start to improve network performance and latency.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms'; } + ,[PSCustomObject]@{ Id = '9c0c3708-17f6-4108-9aff-f0e052c3cd41'; Category = 'Operational Excellence'; Control = ''; Impact = 'Low'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'AzureApplicationService'; Message = 'Eliminate replica staging environments and ship new versions and features with zero downtime using deployment slots'; State = 'Active'; Version = 1.0; Description = 'Set up staging environments in Azure App Service'; LongDescription = 'Deploying an app to a slot first and swapping it into production makes sure that all instances of the slot are warmed up before being swapped into production. This eliminates downtime when you deploy your app. The traffic redirection is seamless, no requests are dropped because of swap operations.'; Benefits = 'Validate changes in a staging slot, then swap to production.'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/app-service/deploy-staging-slots'; } + ,[PSCustomObject]@{ Id = '1d3b5a51-62d4-4b77-96f6-40ed0a3aa21f'; Category = 'Operational Excellence'; Control = ''; Impact = 'Low'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.web/sites'; Key = 'AzureAppService-StagingEnv'; Message = 'Eliminate replica staging environments and ship new versions and features with zero downtime using deployment slots'; State = 'Active'; Version = 1.0; Description = 'Set up staging environments in Azure App Service'; LongDescription = 'Deploying an app to a slot first and swapping it into production makes sure that all instances of the slot are warmed up before being swapped into production. This eliminates downtime when you deploy your app. The traffic redirection is seamless, no requests are dropped because of swap operations.'; Benefits = 'Validate changes in a staging slot, then swap to production.'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/app-service/deploy-staging-slots'; } + ,[PSCustomObject]@{ Id = '3629448e-9b3e-4c5d-96ec-4760bbfde5ab'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Microsoft Azure Attestation'; ResourceType = 'microsoft.attestation/attestationproviders'; Key = 'UpgradeAttestationAPI'; Message = 'Update Attestation API'; State = 'Active'; Version = 2; Description = 'Update Attestation API Version'; LongDescription = 'We have identified API calls from outdated Attestation API for resources under this subscription. We recommend switching to the latest Attestation API versions. You need to update your existing code to use the latest API version. This ensures you receive the latest features and performance improvements.'; Benefits = 'Latest Attestation API contain fixes for known issues and additional improvements.'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/rest/api/attestation'; } + ,[PSCustomObject]@{ Id = '7fc8d697-5101-4dd2-abf5-32deac4b9cae'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Microsoft Automanage'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'UpdateToLatestApi'; Message = 'Update Automanage API'; State = 'Active'; Version = 5; Description = 'Update Automanage to the latest API Version'; LongDescription = 'We have identified sdk calls from outdated API for resources under this subscription. We recommend switching to the latest sdk versions. This ensures you receive the latest features and performance improvements.'; Benefits = 'Latest Automanage API contain fixes for known issues and additional improvements.'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/automanage/reference-sdk'; } + ,[PSCustomObject]@{ Id = '03290f58-8985-479f-8a38-ac7d803cff62'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Microsoft Automanage'; ResourceType = 'microsoft.hybridcompute/machines'; Key = 'UpdateToLatestApiHci'; Message = 'Update Automanage API'; State = 'Active'; Version = 5; Description = 'Update Automanage to the latest API Version'; LongDescription = 'We have identified sdk calls from outdated API for resources under this subscription. We recommend switching to the latest sdk versions. This ensures you receive the latest features and performance improvements.'; Benefits = 'Latest Automanage API contain fixes for known issues and additional improvements.'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/automanage/reference-sdk'; } + ,[PSCustomObject]@{ Id = 'eeb4ed3e-4e9b-40b4-84fb-5514d0be0eda'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure VMware Solution'; ResourceType = 'microsoft.avs/privateclouds'; Key = 'vSANCapacity'; Message = 'Your vSAN utilization is high and out of SLA compliance'; State = 'Active'; Version = 1.1; Description = 'vSAN capacity utilization has crossed critical threshold'; LongDescription = 'Your vSAN capacity utilization has reached 75%. The cluster utilization is required to remain below the 75% critical threshold for SLA compliance. Please add new nodes to VSphere cluster to increase capacity or delete VMs to reduce consumption or adjust VM workloads'; Benefits = 'Maintain the health and performance of your vSAN operations'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/azure-vmware/concepts-private-clouds-clusters'; } + ,[PSCustomObject]@{ Id = 'dce06269-d180-402f-8c2a-744fa26a0adf'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure CLI Tools - Azure CLI, PowerShell and Terraform'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'UpgradeLatestAzureCLIVersion'; Message = 'Upgrade to the latest Azure CLI version'; State = 'Disabled'; Version = 2.2; Description = 'Upgrade Azure CLI to the latest version'; LongDescription = 'We have detected that one or more machines associated with your Azure subscription are using an outdated version of Azure CLI. To ensure the best possible experience, we recommend upgrading all machines to the latest version. Please wisely postpone or dismiss based on your business judgment.'; Benefits = 'Latest version will fix known security issues and feature bugs'; Tip = 'Upgrade to the latest Azure CLI version'; LearnMoreLink = 'https://learn.microsoft.com/cli/azure/'; } + ,[PSCustomObject]@{ Id = 'bce95beb-3389-4e64-8863-d196cc2f69dc'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Data Explorer'; ResourceType = 'microsoft.kusto/clusters'; Key = 'SkuChangeForAzureDataExplorer'; Message = 'Change to a more cost effective and better performing SKU'; State = 'Active'; Version = 2.3; Description = 'Change Data Explorer clusters to a more cost effective and better performing SKU'; LongDescription = 'You have resources operating under a nonoptimal SKU. We recommend migrating to a more cost effective and better performing SKU. This SKU should reduce your costs and improve overall performance. We have calculated the required instance count that meets both the CPU and cache of your cluster.'; Benefits = 'Optimize cost'; Tip = ''; LearnMoreLink = 'https://aka.ms/clusterChooseSku'; } + ,[PSCustomObject]@{ Id = '4e13bb59-a859-45b5-ab5a-19363a34084e'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Data Explorer'; ResourceType = 'microsoft.kusto/clusters'; Key = 'Right-size for cost'; Message = 'Consider scaling resource to the recommended configuration'; State = 'Disabled'; Version = 5; Description = 'Right-size Data Explorer resources for optimal cost'; LongDescription = 'One or more of these were detected: Low data capacity, CPU utilization, or memory utilization. The recommended action to improve the performance is to scale down and/or scale in the resource to the recommended configuration shown.'; Benefits = 'Optimize cost'; Tip = ''; LearnMoreLink = 'https://aka.ms/adxskusize'; } + ,[PSCustomObject]@{ Id = '2397042e-4064-41ca-a50e-4e845051bb0b'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Data Explorer'; ResourceType = 'microsoft.kusto/clusters'; Key = 'EnableOptimizedAutoscaleAzureDataExplorer'; Message = 'Enable Optimized Autoscale for Data Explorer resources.'; State = 'Active'; Version = 5.2; Description = 'Enable Optimized Autoscale for Data Explorer resources'; LongDescription = 'Looks like your resource could have automatically scaled to reduce costs (based on your actual usage during the last week, cache utilization, ingestion utilization, CPU, and streaming ingests utilization). To optimize costs and performance, we recommend enabling Optimized Autoscale. You are encouraged to choose the recommended minimum and maximum instance count that we have provided.'; Benefits = 'Optimize cost'; Tip = ''; LearnMoreLink = 'https://aka.ms/adxoptimizedautoscale'; } + ,[PSCustomObject]@{ Id = 'd9c2f871-904e-4907-8572-0a33b0651f01'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Data Explorer'; ResourceType = 'microsoft.kusto/clusters'; Key = 'ADX stopped resource'; Message = 'Consider deleting the resource'; State = 'Active'; Version = 5.1; Description = 'Unused stopped Data Explorer resources'; LongDescription = 'This recommendation surfaces all stopped Data Explorer resources that have been stopped for at least 60 days. Consider deleting the resources.'; Benefits = 'Optimize cost'; Tip = ''; LearnMoreLink = 'https://aka.ms/adxunusedstoppedcluster'; } + ,[PSCustomObject]@{ Id = 'fa2649e9-e1a5-4d07-9b26-51c080d9a9ba'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'Azure Data Explorer'; ResourceType = 'microsoft.kusto/clusters'; Key = 'ClusterFailedToInstallOrResumeDueVirtualNetwork'; Message = 'Resolve virtual network issues'; State = 'Active'; Version = 9.2; Description = 'Resolve virtual network issues'; LongDescription = 'Service failed to install or resume due to virtual network (VNet) issues. To resolve this issue, follow the steps in the troubleshooting guide. '; Benefits = 'Improve reliability, availability, performance, and new feature capabilities'; Tip = ''; LearnMoreLink = 'https://learn.microsoft.com/azure/data-explorer/vnet-deploy-troubleshoot'; } + ,[PSCustomObject]@{ Id = 'f011adf6-475a-48c9-bf26-8db051cb6964'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Data Explorer'; ResourceType = 'microsoft.kusto/clusters'; Key = 'UpdateCachePoliciesForAdxTables'; Message = 'Query time range is too wide - Consider setting your cache period (policy) to the recommended value'; State = 'Disabled'; Version = 5.5; Description = 'Review table cache policies for Data Explorer tables'; LongDescription = 'This recommendation surfaces Data Explorer tables with a high number of queries that look back beyond the configured cache period (policy). (You''ll see the top 10 tables by query percentage that access out-of-cache data). The recommended action to improve the performance: Limit queries on this table to the minimal necessary time range (within the defined policy). Alternatively, if data from the entire time range is required, increase the cache period to the recommended value.'; Benefits = 'Optimize performance'; Tip = ''; LearnMoreLink = 'https://aka.ms/adxcachepolicy'; } + ,[PSCustomObject]@{ Id = 'f2bcadd1-713b-4acc-9810-4170a5d01dea'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'Azure Data Explorer'; ResourceType = 'microsoft.kusto/clusters'; Key = 'SubnetIsMissingDelegationForKusto'; Message = 'Add subnet delegation for ''Microsoft.Kusto/clusters'''; State = 'Active'; Version = 12.2; Description = 'Add subnet delegation for ''Microsoft.Kusto/clusters'''; LongDescription = 'If a subnet isn''t delegated, the associated Azure service won''t be able to operate within it. Your subnet doesn''t have the required delegation. Delegate your subnet for ''Microsoft.Kusto/clusters''.'; Benefits = 'Improve reliability, availability, performance, and new feature capabilities'; Tip = ''; LearnMoreLink = 'https://learn.microsoft.com/azure/virtual-network/subnet-delegation-overview'; } + ,[PSCustomObject]@{ Id = 'a17ff303-56eb-4382-ac2c-ac7e317945fc'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Data Explorer (Kusto)'; ResourceType = 'microsoft.kusto/clusters'; Key = 'PerformanceEnableOptimizedAutoscaleAzureDataExplorer'; Message = 'Enable Optimized Autoscale for Data Explorer resources.'; State = 'Active'; Version = 3.1; Description = 'Enable Optimized Autoscale for Data Explorer resources'; LongDescription = 'Looks like your resource could have automatically scaled to improve performance (based on your actual usage during the last week, cache utilization, ingestion utilization, CPU, and streaming ingests utilization). To optimize costs and performance, we recommend enabling Optimized Autoscale.'; Benefits = 'Optimize performance'; Tip = ''; LearnMoreLink = 'https://aka.ms/adxoptimizedautoscale'; } + ,[PSCustomObject]@{ Id = 'da4d47d5-b48b-4308-93bc-29d954424e76'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Data Explorer'; ResourceType = 'microsoft.kusto/clusters'; Key = 'Right-size ADX resource'; Message = 'Consider scaling Data Explorer resources to the recommended configuration'; State = 'Disabled'; Version = 5; Description = 'Right-size Data Explorer resources for optimal performance.'; LongDescription = 'This recommendation surfaces all Data Explorer resources which exceed the recommended data capacity (80%). The recommended action to improve the performance is to scale to the recommended configuration shown.'; Benefits = 'Optimize performance'; Tip = ''; LearnMoreLink = 'https://aka.ms/adxskuperformance'; } + ,[PSCustomObject]@{ Id = '354D7BBB-A243-4BE1-A8B9-43DBFC05C44A'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Data Explorer'; ResourceType = 'microsoft.kusto/clusters'; Key = 'StopUnusedClusters'; Message = 'Consider stopping the resource'; State = 'Active'; Version = 4; Description = 'Unused running Data Explorer resources'; LongDescription = 'This recommendation surfaces all running Data Explorer resources with no user activity. Consider stopping the resources.'; Benefits = 'Optimize Azure spend'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/data-explorer/azure-advisor#azure-data-explorer-unused-cluster'; } + ,[PSCustomObject]@{ Id = '900b17ec-0125-458a-a065-6c213e57c342'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Data Explorer'; ResourceType = 'microsoft.kusto/clusters'; Key = 'RunCleanupCommandForAzureDataExplorer'; Message = 'Run the cleanup command to detect and delete unused storage in Data Explorer resources'; State = 'Active'; Version = 2.8; Description = 'Cleanup unused storage in Data Explorer resources'; LongDescription = 'Over time, internal extents merge operations can accumulate redundant and unused storage artifacts that remain beyond the data retention period. While this unreferenced data doesn''t negatively impact the performance, it can lead to more storage use and larger costs than necessary. This recommendation surfaces Data Explorer resources that have unused storage artifacts. The recommended action is to run the cleanup command to detect and delete unused storage artifacts and reduce cost. Note that data recoverability will be reset to the cleanup time and will not be available on data that was created before running the cleanup.'; Benefits = 'Optimize cost'; Tip = ''; LearnMoreLink = 'https://aka.ms/adxcleanextentcontainers'; } + ,[PSCustomObject]@{ Id = '947a627a-532d-44f8-8e23-4f365a80a2ba'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Data Explorer'; ResourceType = 'microsoft.kusto/clusters'; Key = 'ReduceCacheForAzureDataExplorerTables'; Message = 'Reduce the cache in the cache policy'; State = 'Active'; Version = 7.4; Description = 'Reduce Data Explorer table cache policy to optimize costs'; LongDescription = 'Based on your actual usage during the last month, update the cache policy to reduce the hot cache for the table. With autoscale enabled, the cluster can potentially scale in and thus reduce costs. Our goal is that more than 95% of the queries read data from the hot cache (*) The analysis is based only on user queries that scanned data.'; Benefits = 'Reduce cost'; Tip = ''; LearnMoreLink = 'https://aka.ms/adxcachepolicy'; } + ,[PSCustomObject]@{ Id = '9a3ea211-a282-4ab6-a63b-81024975b796'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Data Explorer'; ResourceType = 'microsoft.kusto/clusters'; Key = 'ReduceCacheForAzureDataExplorerTablesOperational Excellence'; Message = 'Reduce the cache in the cache policy'; State = 'Active'; Version = 3.1; Description = 'Reduce the cache policy on your Data Explorer tables'; LongDescription = 'Based on your actual usage during the last month, update the cache policy to reduce the hot cache for the table. The number of instances in your cluster is determined by the CPU and ingestion load, not by the amount of data held in the hot cache and may change based on your usage. Based on current usage, changing the cache isn''t enough to reduce the number of instances, we recommend further optimizations,such as changing the SKU, reducing the CPU load, and enabling autoscale to scale in efficiently. '; Benefits = 'Cache reduction'; Tip = ''; LearnMoreLink = 'https://aka.ms/adxcachepolicy'; } + ,[PSCustomObject]@{ Id = '389653ce-d564-4b95-aac4-ca30e1602536'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Data Explorer'; ResourceType = 'microsoft.kusto/clusters'; Key = 'IncreaseCacheForAzureDataExplorerTablesToImprovePerformance'; Message = 'Increase the cache in the cache policy'; State = 'Active'; Version = 3.3; Description = 'Increase the cache in the cache policy'; LongDescription = 'Based on your actual usage during the last month, update the cache policy to increase the hot cache for the table. Note that the retention period must always be larger than the cache period. If, after increasing the cache, the retention period is lower than the cache period, please update the retention policy.(*) The analysis is based only on user queries that scanned data. '; Benefits = 'Optimize performance'; Tip = ''; LearnMoreLink = 'https://aka.ms/adxcachepolicy'; } + ,[PSCustomObject]@{ Id = 'dace9b52-e456-4384-a6ee-82b8d815953c'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure CLI Tools - Azure CLI, PowerShell and Terraform'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'UpgradeLatestAzurePSVersion'; Message = 'Upgrade to the latest Azure PowerShell version'; State = 'Disabled'; Version = 2.2; Description = 'Upgrade Azure PowerShell to the latest version'; LongDescription = 'We have detected that one or more machines associated with your Azure subscription are using an outdated version of Azure PowerShell. To ensure the best possible experience, we recommend upgrading all machines to the latest version. Please wisely postpone or dismiss based on your business judgment.'; Benefits = 'Latest version will fix known security issues and feature bugs'; Tip = 'Upgrade to the latest Azure PowerShell version'; LearnMoreLink = 'https://learn.microsoft.com/powershell/azure/'; } + ,[PSCustomObject]@{ Id = '7c3484ae-c299-46d0-912d-d77aaeb1feb7'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Spring Cloud'; ResourceType = 'microsoft.appplatform/spring'; Key = 'UpgradeAzureSpringCloudAPI'; Message = 'Update Azure Spring Cloud API'; State = 'Active'; Version = 2; Description = 'Update Azure Spring Cloud API Version'; LongDescription = 'We have identified API calls from outdated Azure Spring Cloud API for resources under this subscription. We recommend switching to the latest Spring Cloud API version. You need to update your existing code to use the latest API version. Also, you need to upgrade your Azure SDK and Azure CLI to the latest version. This ensures you receive the latest features and performance improvements.'; Benefits = 'Latest Azure Spring Cloud API contains latest fixes, performance improvements, and new feature capabilities.'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/spring-cloud'; } + ,[PSCustomObject]@{ Id = 'a0b3b756-caef-4f1c-9546-576e9f4cc7da'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Spring Cloud'; ResourceType = 'microsoft.appplatform/spring'; Key = 'SpringCloudUpgradeOutdatedSDK'; Message = 'Upgrade your outdated Azure Spring Cloud SDK to the latest version'; State = 'Active'; Version = 3; Description = 'Update your outdated Azure Spring Cloud SDK to the latest version'; LongDescription = 'We have identified API calls from an outdated Azure Spring Cloud SDK. We recommend upgrading to the latest version for the latest fixes, performance improvements, and new feature capabilities.'; Benefits = 'Improve reliability, performance, and new feature capabilites.'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/spring-cloud'; } + ,[PSCustomObject]@{ Id = 'a37462ed-d4d7-4c42-bf88-f16a60e2f8b6'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'Batch'; ResourceType = 'microsoft.batch/batchaccounts'; Key = 'EolImage'; Message = 'Batch pools using image with an imminent expiration date'; State = 'Active'; Version = 3; Description = 'Recreate your pool with a new image'; LongDescription = 'Your pool is using an image with an imminent expiration date. Please recreate the pool with a new image to avoid potential interruptions. A list of newer images is available via the ListSupportedImages API.'; Benefits = 'Avoid potential interruptions'; Tip = 'Use the ListSupportedImages API to find a newer image for your pools. Periodically refresh your view of end-of-life dates pertinent to your pools.'; LearnMoreLink = 'https://aka.ms/batch_expiring_image_learn_more'; } + ,[PSCustomObject]@{ Id = '962f2d6d-b2c7-4c48-9e61-2a857051815d'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Batch'; ResourceType = 'microsoft.batch/batchaccounts'; Key = 'OldPool'; Message = 'Old node agents on Batch pools'; State = 'Active'; Version = 7.2; Description = 'Recreate your pool to get the latest node agent features and fixes'; LongDescription = 'Your pool has an old node agent. Consider recreating your pool to get the latest node agent updates and bug fixes.'; Benefits = 'Improved functionality and stability'; Tip = 'Consider recreating old pools to get the latest node agent, which includes the latest updates and bug fixes. Alternatively, scale the pool down to 0 nodes and then resize back up.'; LearnMoreLink = 'https://aka.ms/batch_oldpool_learnmore'; } + ,[PSCustomObject]@{ Id = 'a49b0685-56d6-468d-b879-7e021a2395e3'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'Batch'; ResourceType = 'microsoft.batch/batchaccounts'; Key = 'RecreatePool'; Message = 'Deprecated internal component on Batch pools'; State = 'Active'; Version = 2; Description = 'Delete and recreate your pool to remove a deprecated internal component'; LongDescription = 'Your pool is using a deprecated internal component. Please delete and recreate your pool for improved stability and performance.'; Benefits = 'Improved stability and performance'; Tip = 'Please delete and recreate your pool for improved stability and performance.'; LearnMoreLink = 'https://aka.ms/batch_deprecatedcomponent_learnmore'; } + ,[PSCustomObject]@{ Id = '48ae14cb-10de-4bd9-a005-5c25f498649b'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'Batch'; ResourceType = 'microsoft.batch/batchaccounts'; Key = 'RemoveA8_A11Pools'; Message = 'Pools using a VM size that will be retired soon'; State = 'Active'; Version = 3; Description = 'Delete and recreate your pool using a VM size that will soon be retired'; LongDescription = 'Your pool is using A8-A11 VMs, which are set to be retired in March 2021. Please delete your pool and recreate it with a different VM size.'; Benefits = 'Avoid potential interruptions'; Tip = 'Delete your pool and recreate it with a different VM size to avoid potential interruptions when the VM size is retired.'; LearnMoreLink = 'https://aka.ms/batch_a8_a11_retirement_learnmore'; } + ,[PSCustomObject]@{ Id = 'bbc3f0f1-85b7-4bcb-b474-0e02571eb5fa'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'Batch'; ResourceType = 'microsoft.batch/batchaccounts'; Key = 'UpgradeAPI'; Message = 'API versions scheduled for deprecation'; State = 'Active'; Version = 4; Description = 'Upgrade to the latest API version to ensure your Batch account remains operational.'; LongDescription = 'In the past 14 days, you have invoked a Batch management or service API version that is scheduled for deprecation. Upgrade to the latest API version to ensure your Batch account remains operational.'; Benefits = 'Improved functionality and stability'; Tip = 'Upgrade to the latest API version to ensure your Batch account remains operational.'; LearnMoreLink = 'https://aka.ms/batch_deprecatedapi_learnmore'; } + ,[PSCustomObject]@{ Id = 'a5ab10c5-424a-4818-9fba-ddca1eee531a'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'RedisCacheConnectedClients'; Message = 'Improve your Cache and application performance when running with many connected clients'; State = 'Active'; Version = 1; Description = 'Improve your Cache and application performance when running with many connected clients'; LongDescription = 'Cache instances perform best when not running under high server load which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce the server load or scale to a different size or sku with more capacity.'; Benefits = 'Ensure optimal performance and high availability through best practices'; Tip = 'You can improve your Cache and application performance when running with many connected clients by scaling to a different size or sku'; LearnMoreLink = 'https://aka.ms/redis/recommendations/connections'; } + ,[PSCustomObject]@{ Id = 'e34f1fd6-7d4b-4030-9c1a-0b413675cb40'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'RedisCacheConnectedClientsHigh'; Message = 'Improve your Cache and application performance when running with many connected clients'; State = 'Active'; Version = 1; Description = 'Improve your Cache and application performance when running with many connected clients'; LongDescription = 'Cache instances perform best when not running under high server load which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce the server load or scale to a different size or sku with more capacity.'; Benefits = 'Ensure optimal performance and high availability through best practices'; Tip = 'You can improve your Cache and application performance when running with many connected clients by scaling to a different size or sku'; LearnMoreLink = 'https://aka.ms/redis/recommendations/connections'; } + ,[PSCustomObject]@{ Id = 'f160c11d-9aab-4d41-979f-d119dec02392'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'ConsiderUsingRedisEnterprise'; Message = 'Consider upgrading to Azure Cache for Redis Enterprise'; State = 'Active'; Version = 1; Description = 'You may benefit from using an Enterprise tier cache instance'; LongDescription = 'This instance of Azure Cache for Redis is using one or more advanced features from the list - more than 6 shards, geo-replication, zone-redundancy or persistence. Consider switching to an Enterprise tier cache to get the most out of your Redis experience. Enterprise tier caches offer higher availability, better performance and more powerful features like active geo-replication.'; Benefits = 'Better performance, higher availability, and additional features.'; Tip = 'Consider upgrading to Azure Cache for Redis Enterprise.'; LearnMoreLink = 'https://aka.ms/redisenterpriseupgrade'; } + ,[PSCustomObject]@{ Id = '7c380315-6ad9-4fb2-8930-a8aeb1d6241b'; Category = 'High Availability'; Control = 'Other'; Impact = 'Medium'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'RedisCacheMemoryFragmentation'; Message = 'Increase fragmentation memory reservation'; State = 'Active'; Version = 6; Description = 'Increase fragmentation memory reservation'; LongDescription = 'Fragmentation and memory pressure can cause availability incidents. To help in reduce cache failures when running under high memory pressure, increase reservation of memory for fragmentation through the maxfragmentationmemory-reserved setting available in the Advanced Settings options.'; Benefits = 'Avoid availability incidents when your cache has high memory fragmentation'; Tip = 'You can avoid availability incidents by increasing fragmentation memory reservation'; LearnMoreLink = 'http://aka.ms/redis/recommendations/memory-policies'; } + ,[PSCustomObject]@{ Id = 'a67201dd-6df0-4838-8258-5abf26adc8f6'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'RedisCacheNetworkBandwidth'; Message = 'Improve your Cache and application performance when running with high network bandwidth'; State = 'Active'; Version = 1; Description = 'Improve your Cache and application performance when running with high network bandwidth'; LongDescription = 'Cache instances perform best when not running under high network bandwidth which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce network bandwidth or scale to a different size or sku with more capacity.'; Benefits = 'Ensure optimal performance and high availability through best practices'; Tip = 'You can improve your Cache and application performance with high network bandwith by scaling to a different size or sku'; LearnMoreLink = 'https://aka.ms/redis/recommendations/bandwidth'; } + ,[PSCustomObject]@{ Id = 'a616baa6-74dd-45ac-a2a3-ab278d63f2d7'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'RedisCacheNetworkBandwidthHigh'; Message = 'Improve your Cache and application performance when running with high network bandwidth'; State = 'Active'; Version = 1; Description = 'Improve your Cache and application performance when running with high network bandwidth'; LongDescription = 'Cache instances perform best when not running under high network bandwidth which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce network bandwidth or scale to a different size or sku with more capacity.'; Benefits = 'Ensure optimal performance and high availability through best practices'; Tip = 'You can improve your Cache and application performance with high network bandwith by scaling to a different size or sku'; LearnMoreLink = 'https://aka.ms/redis/recommendations/bandwidth'; } + ,[PSCustomObject]@{ Id = 'e387838a-4fbc-47d5-9a3d-9d1aaa218345'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'Persistence'; Message = 'Enable Persistence'; State = 'Active'; Version = 1; Description = 'Redis persistence allows you to persist data stored in a cache so you can reload data from an event that caused data loss.'; LongDescription = 'Redis persistence allows you to persist data stored in Redis. You can also take snapshots and back up the data. If there''s a hardware failure, the persisted data is automatically loaded in your cache instance. Data loss is possible if a failure occurs where Cache nodes are down.'; Benefits = 'Avoid data loss due to hardware failure or Cache node failure'; Tip = 'Enable Persistence to avoid data loss in case of hardware or node failure.'; LearnMoreLink = 'https://aka.ms/redis/persistence'; } + ,[PSCustomObject]@{ Id = '204cc04b-0e75-46f9-9a43-9bcb39955236'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'MigrateFromCloudService'; Message = 'Migrate from Cloud Service'; State = 'Active'; Version = 1; Description = 'Cloud service caches are being retired in August 2024, migrate before then to avoid any problems'; LongDescription = 'This instance of Azure Cache for Redis has a dependency on Cloud Services (classic) which is being retired in August 2024. Please follow the instructions found in the learn more link to migrate to an instance without this dependency. If you need to upgrade your cache to Redis 6 please note that upgrading a cache with a dependency on cloud services is not supported. You should migrate your cache instance to Virtual Machine Scale Set before upgrading. For more information, see https://learn.microsoft.com/azure/azure-cache-for-redis/cache-faq for details on cloud services hosted caches. Note: If you have completed your migration away from Cloud Services, please allow up to 24 hours for this recommendation to be removed'; Benefits = 'Avoid service interruptions by migrating before cloud services are retired.'; Tip = 'Migrate from Cloud Service before the end of support.'; LearnMoreLink = 'https://docs.microsoft.com/azure/azure-cache-for-redis/cache-faq#caches-with-a-dependency-on-cloud-services-%28classic%29'; } + ,[PSCustomObject]@{ Id = 'a25fccfd-854d-4c1a-9fae-aa0597a45e27'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'RedisCacheServerLoad'; Message = 'Improve your Cache and application performance when running with high server load'; State = 'Active'; Version = 1; Description = 'Improve your Cache and application performance when running with high server load'; LongDescription = 'Cache instances perform best when not running under high server load which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce the server load or scale to a different size or sku with more capacity.'; Benefits = 'Ensure optimal performance and high availability through best practices'; Tip = 'You can improve your Cache and application performance with high server load by scaling to a different size or sku'; LearnMoreLink = 'https://aka.ms/redis/recommendations/cpu'; } + ,[PSCustomObject]@{ Id = 'dcd94184-c5fb-4e80-ac1e-7f11930b4f77'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'RedisCacheServerLoadHigh'; Message = 'Improve your Cache and application performance when running with high server load'; State = 'Active'; Version = 1; Description = 'Improve your Cache and application performance when running with high server load'; LongDescription = 'Cache instances perform best when not running under high server load which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce the server load or scale to a different size or sku with more capacity.'; Benefits = 'Ensure optimal performance and high availability through best practices'; Tip = 'You can improve your Cache and application performance with high server load by scaling to a different size or sku'; LearnMoreLink = 'https://aka.ms/redis/recommendations/cpu'; } + ,[PSCustomObject]@{ Id = '77204a4e-03ed-4db5-b059-3c3a26145b43'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'PersistenceSoftEnable'; Message = 'Check to see if Soft Delete is enabled'; State = 'Active'; Version = 2; Description = 'Using persistence with soft delete enabled can increase storage costs.'; LongDescription = 'Check to see if your storage account has soft delete enabled before using the data persistence feature. Using data persistence with soft delete causes very high storage costs. For more information, see https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-premium-persistence#how-do-i-check-if-soft-delete-is-enabled-on-my-storage-account'; Benefits = 'Avoid high storage costs due to soft delete'; Tip = 'Check to see if Soft Delete is enabled to reduce high storage costs.'; LearnMoreLink = 'https://aka.ms/redis/persistence'; } + ,[PSCustomObject]@{ Id = 'faf7de8d-ccb9-4364-aad1-4852e489b2f3'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'TLSVersion'; Message = 'Support for TLS versions 1.0 and 1.1 is retiring on October 31, 2024.'; State = 'Active'; Version = 1.1; Description = 'Support for TLS versions 1.0 and 1.1 is retiring on October 31, 2024.'; LongDescription = 'Support for TLS 1.0/1.1 is retiring on October 31, 2024. Please configure your cache to use TLS 1.2 only and your application should using TLS 1.2 or later. See https://aka.ms/TLSVersions for more information.'; Benefits = 'Keep your cache secure.'; Tip = 'Use TLS 1.2 to keep your cache secure.'; LearnMoreLink = 'https://aka.ms/TLSVersions'; } + ,[PSCustomObject]@{ Id = '2f57b58b-1677-4c31-8a37-be79838d14ca'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'UnresponsiveClient'; Message = 'Improve cache throughput by scaling app host machine.'; State = 'Active'; Version = 1; Description = 'Cache instances perform best when the host machines where client application runs is able to keep up with responses from the cache.'; LongDescription = 'Cache instances perform best when the host machines where client application runs is able to keep up with responses from the cache. If client host machine is running hot on memory, CPU or network bandwidth, the cache responses will not reach your application fast enough and could result in higher latency.'; Benefits = 'You can improve your cache throughput and latency.'; Tip = 'Consider scaling up the host machine where your client application runs.'; LearnMoreLink = 'https://docs.microsoft.com/azure/azure-cache-for-redis/cache-troubleshoot-client'; } + ,[PSCustomObject]@{ Id = '16d0cf25-463d-4a20-8f18-d8d71edf92e3'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'RedisCacheUsedMemory'; Message = 'Improve your Cache and application performance when running with high memory pressure'; State = 'Active'; Version = 1; Description = 'Improve your Cache and application performance when running with high memory pressure'; LongDescription = 'Cache instances perform best when not running under high memory pressure which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce used memory or scale to a different size or sku with more capacity.'; Benefits = 'Ensure optimal performance and high availability through best practices'; Tip = 'You can improve your Cache and application performance with high memory pressure by scaling to a different size or sku'; LearnMoreLink = 'https://aka.ms/redis/recommendations/memory'; } + ,[PSCustomObject]@{ Id = '64dce138-80d7-48ad-934b-025a425386a7'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'RedisCacheUsedMemoryHigh'; Message = 'Improve your Cache and application performance when running with high memory pressure'; State = 'Active'; Version = 1; Description = 'Improve your Cache and application performance when running with high memory pressure'; LongDescription = 'Cache instances perform best when not running under high memory pressure which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce used memory or scale to a different size or sku with more capacity.'; Benefits = 'Ensure optimal performance and high availability through best practices'; Tip = 'You can improve your Cache and application performance with high memory pressure by scaling to a different size or sku'; LearnMoreLink = 'https://aka.ms/redis/recommendations/memory'; } + ,[PSCustomObject]@{ Id = 'b1184137-cf30-4a62-87bd-5e287b911a46'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'RedisCacheUsedMemoryRSS'; Message = 'Improve your Cache and application performance when running with high memory pressure'; State = 'Active'; Version = 1; Description = 'Improve your Cache and application performance when memory rss usage is high.'; LongDescription = 'Cache instances perform best when not running under high memory pressure which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce used memory or scale to a different size or sku with more capacity.'; Benefits = 'Ensure optimal performance and high availability through best practices'; Tip = 'You can improve your Cache and application performance with high memory pressure by scaling to a different size or sku'; LearnMoreLink = 'https://aka.ms/redis/recommendations/memory'; } + ,[PSCustomObject]@{ Id = '2adfe155-4639-4d83-9814-15ce7454fa25'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'RedisCacheUsedMemoryRSSHigh'; Message = 'Improve your Cache and application performance when running with high memory pressure'; State = 'Active'; Version = 1; Description = 'Improve your Cache and application performance when memory rss usage is high.'; LongDescription = 'Cache instances perform best when not running under high memory pressure which may cause them to become unresponsive, experience data loss, or become unavailable. Apply best practices to reduce used memory or scale to a different size or sku with more capacity.'; Benefits = 'Ensure optimal performance and high availability through best practices'; Tip = 'You can improve your Cache and application performance with high memory pressure by scaling to a different size or sku'; LearnMoreLink = 'https://aka.ms/redis/recommendations/memory'; } + ,[PSCustomObject]@{ Id = 'dc33091b-a748-4418-b4b0-d3d97466efe4'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Redis Cache'; ResourceType = 'microsoft.cache/redis'; Key = 'PrivateLink'; Message = 'Avoid affecting cache functionality by using private link.'; State = 'Active'; Version = 1; Description = 'Injecting a cache into a virtual network (VNet) imposes complex requirements on your network configuration. This is a common source of incidents affecting customer applications'; LongDescription = 'Injecting a cache into a virtual network (VNet) imposes complex requirements on your network configuration. It''s difficult to configure the network accurately and avoid affecting cache functionality. It''s easy to break the cache accidentally while making configuration changes for other network resources. This is a common source of incidents affecting customer applications'; Benefits = 'Avoid affecting cache functionality.'; Tip = 'Use private link to avoid affecting cache functionality'; LearnMoreLink = 'https://aka.ms/VnetToPrivateLink'; } + ,[PSCustomObject]@{ Id = 'abb1f687-2d58-4197-8f5b-8882f05c04b8'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'Virtual Machines'; ResourceType = 'microsoft.capacity/reservationorders/reservations'; Key = 'ReservedInstancePurchaseNew'; Message = 'Renew your reserved instances'; State = 'Active'; Version = 3; Description = 'Configure automatic renewal for your expiring reservation'; LongDescription = 'Reserved instances listed below are expiring soon or recently expired. Your resources will continue to operate normally, however, you will be billed at the on-demand rates going forward. To optimize your costs, configure automatic renewal for these reservations or purchase a replacement manually.'; Benefits = 'Continue to receive discounted rates for your resources'; Tip = 'Configure auto-renewal for your expiring reservations to continue receiving discounted rates.'; LearnMoreLink = 'https://aka.ms/reservedinstances'; } + ,[PSCustomObject]@{ Id = 'ceecfd41-89b3-4c64-afe6-984c9cc03126'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'Azure Front Door X'; ResourceType = 'microsoft.cdn/profiles'; Key = 'EdgioCdnManagedSecretExpiringOrExpired'; Message = 'Azure CDN From Edgio, Managed Certificate Renewal Unsuccessful. Additional Validation Required.'; State = 'Active'; Version = 7.1; Description = 'Azure CDN From Edgio, Managed Certificate Renewal Unsuccessful. Additional Validation Required.'; LongDescription = 'Azure CDN from Edgio employs CNAME delegation to renew certificates with DigiCert for managed certificate renewals. It is essential that Custom Domains resolve to an azureedge.net endpoint for the automatic renewal process with DigiCert to be successful. Please ensure your Custom Domain''s CNAME and CAA records are configured correctly. Should you require further assistance, please submit a support case to Azure to re-attempt the renewal request.'; Benefits = 'Ensure service availability.'; Tip = ''; LearnMoreLink = ''; } + ,[PSCustomObject]@{ Id = '4e1c2077-7c73-4ace-b4aa-f11b36c28290'; Category = 'High Availability'; Control = 'Business Continuity'; Impact = 'High'; ServiceName = 'Azure Front Door X'; ResourceType = 'microsoft.cdn/profiles'; Key = 'RenewExpiredBYOC'; Message = 'Renew the expired Azure Front Door customer certificate to avoid service disruption'; State = 'Active'; Version = 10; Description = 'Renew the expired Azure Front Door customer certificate to avoid service disruption'; LongDescription = 'When customer certificates for Azure Front Door Standard and Premium profiles expire, you might have service disruptions. To avoid service disruption, renew the certificate before it expires.'; Benefits = 'Ensure service availability.'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/frontdoor/standard-premium/how-to-configure-https-custom-domain#use-your-own-certificate'; } + ,[PSCustomObject]@{ Id = 'be29e4bc-2609-49ca-bb76-5df17bb71bc3'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'Azure Front Door X'; ResourceType = 'microsoft.cdn/profiles'; Key = 'RenewExpiringBYOC'; Message = 'Renew the expiring Azure Front Door customer certificate to avoid service disruption'; State = 'Disabled'; Version = 9; Description = 'Renew the expiring Azure Front Door customer certificate to avoid service disruption'; LongDescription = 'Some of the customer certificates for Azure Front Door Standard and Premium profiles are expiring. Please renew the certificate in time to avoid service disruption.'; Benefits = 'Ensure service availability.'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/frontdoor/standard-premium/how-to-configure-https-custom-domain?WT.mc_id=Portal-Microsoft_Azure_Expert#certificate-renewal-and-changing-certificate-types'; } + ,[PSCustomObject]@{ Id = 'bfe85fd2-ee53-4c35-8781-7790da2107e1'; Category = 'High Availability'; Control = 'Business Continuity'; Impact = 'High'; ServiceName = 'Azure Front Door X'; ResourceType = 'microsoft.cdn/profiles'; Key = 'RevalidateDomainOwnership'; Message = 'Re-validate domain ownership for the Azure Front Door managed certificate renewal'; State = 'Active'; Version = 5.8; Description = 'Re-validate domain ownership for the Azure Front Door managed certificate renewal'; LongDescription = 'Azure Front Door (AFD) can''t automatically renew the managed certificate because the domain isn''t CNAME mapped to AFD endpoint. For the managed certificate to be automatically renewed, revalidate domain ownership.'; Benefits = ''; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/frontdoor/standard-premium/how-to-add-custom-domain#domain-validation-state'; } + ,[PSCustomObject]@{ Id = '2c057605-4707-4d3e-bbb0-a7fe9b6a626b'; Category = 'High Availability'; Control = 'Other'; Impact = 'Medium'; ServiceName = 'Azure Front Door X'; ResourceType = 'microsoft.cdn/profiles'; Key = 'SwitchVersionBYOC'; Message = 'Switch Secret version to ''Latest'' for the Azure Front Door customer certificate'; State = 'Active'; Version = 7.1; Description = 'Switch Secret version to ''Latest'' for the Azure Front Door customer certificate'; LongDescription = 'Configure the Azure Front Door (AFD) customer certificate secret to ''Latest'' for the AFD to refer to the latest secret version in Azure Key Vault, allowing the secret can be automatically rotated.'; Benefits = '?Latest'' version can be automatically rotated.'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/frontdoor/standard-premium/how-to-configure-https-custom-domain#certificate-renewal-and-changing-certificate-types'; } + ,[PSCustomObject]@{ Id = 'e607041e-3194-42ad-9994-b6ea5ec12f5e'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Front Door X'; ResourceType = 'microsoft.cdn/profiles'; Key = 'UpgradeCDNToLatestSDKLanguage'; Message = 'Upgrade Azure Front Door Standard and Premium SDK version'; State = 'Active'; Version = 4.7; Description = 'Upgrade SDK version recommendation'; LongDescription = 'The latest version of Azure Front Door Standard and Premium Client Library or SDK contains fixes to issues reported by customers and proactively identified through our QA process. The latest version also carries reliability and performance optimization in addition to new features that can improve your overall experience using Azure Front Door Standard and Premium.'; Benefits = 'Improve reliability, performance, and new feature capabilites.'; Tip = ''; LearnMoreLink = 'https://aka.ms/afd/tiercomparison'; } + ,[PSCustomObject]@{ Id = '9411bc9f-d181-497c-b519-4154ae04fb00'; Category = 'High Availability'; Control = 'Business Continuity'; Impact = 'High'; ServiceName = 'Azure Front Door X'; ResourceType = 'microsoft.cdn/profiles'; Key = 'ValidateDomainOwnership'; Message = 'Validate domain ownership by adding DNS TXT record to DNS provider'; State = 'Active'; Version = 8.1; Description = 'Validate domain ownership by adding DNS TXT record to DNS provider'; LongDescription = 'Validate domain ownership by adding the DNS TXT record to your DNS provider. Validating domain ownership through TXT records enhances security and ensures proper control over your domain.'; Benefits = 'Ensure service availability.'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/frontdoor/standard-premium/how-to-add-custom-domain#domain-validation-state'; } + ,[PSCustomObject]@{ Id = 'd472fb24-d23c-480f-896f-b3095d5bd868'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'Virtual Machines'; ResourceType = 'microsoft.classiccompute/virtualmachines'; Key = 'LowUsageVmClassic'; Message = 'Shut down or resize your virtual machine'; State = 'Disabled'; Version = 3; Description = 'Right-size or shutdown underutilized virtual machines'; LongDescription = 'We''ve analyzed the usage patterns of your virtual machine over the past 7 days, and identified virtual machines with low usage. While certain scenarios can result in low utilization by design, you can often save money by managing the size and number of virtual machines.'; Benefits = 'savings per year'; Tip = 'You can optimize underutilized virtual machines to reduce your monthly Azure spend.'; LearnMoreLink = 'https://aka.ms/aa_lowusagerec_learnmore'; } + ,[PSCustomObject]@{ Id = 'c6da5a5f-149d-4550-82c9-ec3921a586f3'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Communication Services'; ResourceType = 'microsoft.communication/communicationservices'; Key = 'UpgradeCallingSdk'; Message = 'Use recommended version of Calling SDK'; State = 'Active'; Version = 2; Description = 'Use recommended version of Calling SDK'; LongDescription = 'Azure Communication Services Calling SDK can be used to enable voice, video, screen-sharing, and other real-time communication. Update to the recommended version of Calling SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.'; Benefits = 'Newer versions of Calling SDK contain latest fixes and new features'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/communication-services/concepts/voice-video-calling/calling-sdk-features'; } + ,[PSCustomObject]@{ Id = 'c9f07cd1-54a4-4bc9-bdb6-87d97e4b99fe'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure Communication Services'; ResourceType = 'microsoft.communication/communicationservices'; Key = 'UpgradeCallingSdkHighPriority'; Message = 'Use recommended version of Calling SDK (High Priority)'; State = 'Active'; Version = 2; Description = 'Use recommended version of Calling SDK (High Priority)'; LongDescription = 'Azure Communication Services Calling SDK can be used to enable voice, video, screen-sharing, and other real-time communication. Update to the recommended version of Calling SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.'; Benefits = 'Newer versions of Calling SDK contain latest fixes and new features'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/communication-services/concepts/voice-video-calling/calling-sdk-features'; } + ,[PSCustomObject]@{ Id = '28da6c5a-8e1f-47eb-beb3-62fd50cbb593'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Communication Services'; ResourceType = 'microsoft.communication/communicationservices'; Key = 'UpgradeChatSdk'; Message = 'Use recommended version of Chat SDK'; State = 'Active'; Version = 2; Description = 'Use recommended version of Chat SDK'; LongDescription = 'Azure Communication Services Chat SDK can be used to add rich, real-time chat to your applications. Update to the recommended version of Chat SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.'; Benefits = 'Newer versions of Chat SDK contain latest fixes and new features'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/communication-services/concepts/chat/sdk-features'; } + ,[PSCustomObject]@{ Id = 'a383aac0-2eed-4dac-8050-3675fdc8eded'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Communication Services'; ResourceType = 'microsoft.communication/communicationservices'; Key = 'UpgradeIdentitySdk'; Message = 'Use recommended version of Identity SDK'; State = 'Active'; Version = 2; Description = 'Use recommended version of Identity SDK'; LongDescription = 'Azure Communication Services Identity SDK can be used to manage identities, users, and access tokens. Update to the recommended version of Identity SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.'; Benefits = 'Newer versions of Identity SDK contain latest fixes and new features'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/communication-services/concepts/sdk-options'; } + ,[PSCustomObject]@{ Id = '5e8e752c-3851-461c-9bc4-407bbf3ebd94'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Communication Services'; ResourceType = 'microsoft.communication/communicationservices'; Key = 'UpgradePhoneNumbersSdk'; Message = 'Use recommended version of Phone Numbers SDK'; State = 'Active'; Version = 2; Description = 'Use recommended version of Phone Numbers SDK'; LongDescription = 'Azure Communication Services Phone Numbers SDK can be used to acquire and manage phone numbers. Update to the recommended version of Phone Numbers SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.'; Benefits = 'Newer versions of Phone Numbers SDK contain latest fixes and new features'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/communication-services/concepts/sdk-options'; } + ,[PSCustomObject]@{ Id = 'f323a06f-b141-49f5-adbd-81899c67ced2'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Communication Services'; ResourceType = 'microsoft.communication/communicationservices'; Key = 'UpgradeResourceManagerSdk'; Message = 'Use recommended version of Resource Manager SDK'; State = 'Disabled'; Version = 2; Description = 'Use recommended version of Resource Manager SDK'; LongDescription = 'Resource Manager SDK can be used to provision and manage Azure Communication Services resources. Update to the recommended version of Resource Manager SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.'; Benefits = 'Newer versions of Resource Manager SDK contain latest fixes and new features'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/communication-services/quickstarts/create-communication-resource?tabs=windows&pivots=platform-net'; } + ,[PSCustomObject]@{ Id = 'abcb78e5-6f21-4f64-badd-c147f457fb0a'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Communication Services'; ResourceType = 'microsoft.communication/communicationservices'; Key = 'UpgradeRoomsSdk'; Message = 'Use recommended version of Rooms SDK'; State = 'Active'; Version = 1.1; Description = 'Use recommended version of Rooms SDK'; LongDescription = 'Azure Communication Services Rooms SDK can be used to control who can join a call, when they can meet, and how they can collaborate. Update to the recommended version of Rooms SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.'; Benefits = 'New versions of Rooms SDK contain latest fixes and features'; Tip = ''; LearnMoreLink = 'https://learn.microsoft.com/azure/communication-services/concepts/rooms/room-concept'; } + ,[PSCustomObject]@{ Id = '30bcc7b0-bcab-4b60-a530-53ccbb64663f'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Communication Services'; ResourceType = 'microsoft.communication/communicationservices'; Key = 'UpgradeServerCallingSdk'; Message = 'Use recommended version of Call Automation SDK'; State = 'Active'; Version = 3; Description = 'Use recommended version of Call Automation SDK'; LongDescription = 'Azure Communication Services Call Automation SDK can be used to make and manage calls, play audio, and configure recording. Update to the recommended version of Call Automation SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.'; Benefits = 'Newer versions of Call Automation SDK contain latest fixes and new features'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/communication-services/concepts/voice-video-calling/call-automation-apis'; } + ,[PSCustomObject]@{ Id = 'bf23065c-8829-4fa1-8152-09d4066e11a3'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Communication Services'; ResourceType = 'microsoft.communication/communicationservices'; Key = 'UpgradeSmsSdk'; Message = 'Use recommended version of SMS SDK'; State = 'Active'; Version = 2; Description = 'Use recommended version of SMS SDK'; LongDescription = 'Azure Communication Services SMS SDK can be used to send and receive SMS messages. Update to the recommended version of SMS SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.'; Benefits = 'Newer versions of SMS SDK contain latest fixes and new features'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/communication-services/concepts/telephony-sms/sdk-features'; } + ,[PSCustomObject]@{ Id = 'd5aa8a47-54a0-43ed-b4b4-eed22fd1a92c'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Communication Services'; ResourceType = 'microsoft.communication/communicationservices'; Key = 'UpgradeTurnSdk'; Message = 'Use recommended version of Network Traversal SDK'; State = 'Disabled'; Version = 2.1; Description = 'Use recommended version of Network Traversal SDK'; LongDescription = 'Azure Communication Services Network Traversal SDK can be used to access TURN servers for low-level data transport. Update to the recommended version of Network Traversal SDK to ensure the latest fixes and features. A non-recommended version was detected in the last 48-60 hours.'; Benefits = 'Newer versions of Network Traversal SDK contain latest fixes and new features'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/communication-services/concepts/sdk-options'; } + ,[PSCustomObject]@{ Id = '459f28d1-3669-43a7-8981-2dcbfa862608'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'SAP on Azure'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'UpdateToLatestWaasApiVersionAtSub'; Message = 'Upgrade to the latest Workloads API version'; State = 'Active'; Version = 2; Description = 'Upgrade Workloads API to the latest version (Azure Center for SAP solutions API)'; LongDescription = 'We have identified calls to an outdated Workloads API version for resources under this resource group. We recommend switching to the latest Workloads API version to ensure uninterrupted access to latest features and performance improvements in Azure Center for SAP solutions. If there are multiple Virtual Instances for SAP solutions (VIS) shown in the recommendation, please ensure you update the API version for all VIS resources.'; Benefits = 'Latest Workloads API contain fixes for known issues and additional improvements'; Tip = 'Upgrade to the latest Workloads API version'; LearnMoreLink = 'https://go.microsoft.com/fwlink/?linkid=2228001'; } + ,[PSCustomObject]@{ Id = 'f5a05237-91e2-4ecf-8394-f020c33665a1'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'SAP on Azure'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'UpgradeToLatestWaasSdkVersionAtSub'; Message = 'Upgrade to the latest Workloads SDK version for Azure Center for SAP solutions'; State = 'Active'; Version = 2; Description = 'Upgrade Workloads SDK to the latest version (Azure Center for SAP solutions SDK)'; LongDescription = 'We have identified calls to an outdated Workloads SDK version from resources in this Resource Group. Please upgrade to the latest Workloads SDK version to get the latest features and the best results in terms of model quality, performance and service availability for Azure Center for SAP solutions. If there are multiple Virtual Instances for SAP solutions (VIS) shown in the recommendation, please ensure you update the SDK version for all VIS resources.'; Benefits = 'Latest Workloads SDK contains fixes for known issues and additional improvements.'; Tip = ''; LearnMoreLink = 'https://go.microsoft.com/fwlink/?linkid=2228000'; } + ,[PSCustomObject]@{ Id = '93214083-e48e-420e-881f-89d02265f831'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Migrate'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'UpdateToLatestSapMigrateDiscoveryApiVersionAtSub'; Message = 'Upgrade to the latest SAP Migrate Discovery API version'; State = 'Active'; Version = 2; Description = 'Upgrade SAP Migrate Discovery API to the latest version'; LongDescription = 'An outdated version of the SAP Migrate Discovery API has been detected for resources within the SAP Discovery Site under your subscription. To ensure access to the latest features and performance enhancements, we recommend upgrading to the most recent version of the API.'; Benefits = 'Latest API contain fixes for known issues and additional improvements'; Tip = 'Upgrade to the latest SAP Migrate Discovery API version'; LearnMoreLink = 'https://go.microsoft.com/fwlink/?linkid=2263529'; } + ,[PSCustomObject]@{ Id = '1ee8eace-1e7e-4d73-8547-1f687c72979b'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Migrate'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'UpgradeToLatestSapMigrateDiscoverySdkVersionAtSub'; Message = 'Upgrade to the latest SAP Migrate Discovery SDK version'; State = 'Active'; Version = 2; Description = 'Upgrade SAP Migrate Discovery SDK to the latest version'; LongDescription = 'An outdated version of the SAP Migrate Discovery SDK has been detected for resources within the SAP Discovery Site under your subscription. To ensure access to the latest features and performance enhancements, we recommend upgrading to the most recent version of the SDK.'; Benefits = 'Latest SAP Migrate Discovery SDK contains fixes for known issues and additional improvements.'; Tip = ''; LearnMoreLink = 'https://go.microsoft.com/fwlink/?linkid=2263529'; } + ,[PSCustomObject]@{ Id = '02cfb5ef-a0c1-4633-9854-031fbda09946'; Category = 'High Availability'; Control = 'High Availability'; Impact = 'High'; ServiceName = 'Storage'; ResourceType = 'microsoft.compute/availabilitysets'; Key = 'ManagedDisksAvSet'; Message = 'Use Managed Disks'; State = 'Active'; Version = 8; Description = 'Improve data reliability by using Managed Disks'; LongDescription = 'Virtual machines in an Availability Set with disks that share either storage accounts or storage scale units are not resilient to single storage scale unit failures during outages. Migrate to Azure Managed Disks to ensure that the disks of different VMs in the Availability Set are sufficiently isolated to avoid a single point of failure.'; Benefits = 'Ensure business continuity through data resilience'; Tip = 'You can use Managed Disks to ensure data resilience.'; LearnMoreLink = 'https://aka.ms/aa_avset_manageddisk_learnmore'; } + ,[PSCustomObject]@{ Id = '702b474d-698f-4029-9f9d-4782c626923e'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'Storage'; ResourceType = 'microsoft.compute/snapshots'; Key = 'ManagedDiskSnapshot'; Message = 'Use Standard snapshots for Managed Disks'; State = 'Active'; Version = 1.2; Description = 'Use Standard Storage to store Managed Disks snapshots'; LongDescription = 'To save 60% of cost, we recommend storing your snapshots in Standard Storage, regardless of the storage type of the parent disk. This option is the default for Managed Disks snapshots. Migrate your snapshot from Premium to Standard Storage. Refer to Managed Disks pricing details.'; Benefits = '60% reduction in the snapshot cost for Managed Disks'; Tip = ''; LearnMoreLink = 'https://aka.ms/aa_manageddisksnapshot_learnmore'; } + ,[PSCustomObject]@{ Id = 'ed651749-cd37-4fd5-9897-01b416926745'; Category = 'High Availability'; Control = 'Disaster Recovery'; Impact = 'Medium'; ServiceName = 'Site Recovery'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'ASRUnprotectedVMs'; Message = 'Enable virtual machine replication'; State = 'Active'; Version = 7; Description = 'Enable virtual machine replication to protect your applications from regional outage'; LongDescription = 'Virtual machines are resilient to regional outages when replication to another region is enabled. To reduce adverse business impact during an Azure region outage, we recommend enabling replication of all business-critical virtual machines.'; Benefits = 'Ensure business continuity in case of any Azure region outage'; Tip = ''; LearnMoreLink = 'https://aka.ms/azure-site-recovery-dr-azure-vms'; } + ,[PSCustomObject]@{ Id = 'bcfeb92b-fe93-4cea-adc6-e747055518e9'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'Site Recovery'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'ASRUpdateOutboundConnectivityProtocolToServiceTags'; Message = 'Update your outbound connectivity protocol to Service Tags for Azure Site Recovery'; State = 'Active'; Version = 9; Description = 'Update your outbound connectivity protocol to Service Tags for Azure Site Recovery'; LongDescription = 'IP address-based allowlisting is a vulnerable way to control outbound connectivity for firewalls, Service Tags are a good alternative. We highly recommend the use of Service Tags, to allow connectivity to Azure Site Recovery services for the machines.'; Benefits = 'Ensures better security, stability and resiliency than hard coded IP Addresses'; Tip = ''; LearnMoreLink = 'https://aka.ms/azure-site-recovery-using-service-tags'; } + ,[PSCustomObject]@{ Id = '7cdecd2c-a8b0-41cf-b0a4-528bd4d85f5a'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Storage'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'AzureStorageVmUltraDisk'; Message = 'Learn more about Ultra disk'; State = 'Active'; Version = 4; Description = 'Take advantage of Ultra Disk low latency for your log disks and improve your database workload performance.'; LongDescription = 'Ultra disk is available in the same region as your database workload. Ultra disk offers high throughput, high IOPS, and consistent low latency disk storage for your database workloads: For Oracle DBs, you can now use either 4k or 512E sector sizes with Ultra disk depending on your Oracle DB version. For SQL server, leveraging Ultra disk for your log disk might offer more performance for your database. See instructions here for migrating your log disk to Ultra disk.'; Benefits = 'Boost the performance of your database on IaaS VMs by using Ultra disk as log disk.'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-machines/disks-enable-ultra-ssd?tabs=azure-portal'; } + ,[PSCustomObject]@{ Id = '9b0d1cf7-8a3a-4c8b-8f9f-1c3e70e399d6'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Storage'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'MatchProdVMProdDisks'; Message = 'Match production Virtual Machines with Production Disk for consistent performance and better latency'; State = 'Active'; Version = 1.2; Description = 'Match production Virtual Machines with Production Disk for consistent performance and better latency'; LongDescription = 'Production virtual machines need production disks if you want to get the best performance. We see that you are running a production level virtual machine, however, you are using a low performing disk with standard HDD. Upgrading your disks that are attached to your production disks, either Standard SSD or Premium SSD, will benefit you with a more consistent experience and improvements in latency.'; Benefits = 'More consistent performance, better latency'; Tip = 'Match Production Virtual Machine with Production Disks.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-machines/windows/disks-types#disk-comparison'; } + ,[PSCustomObject]@{ Id = '58d6648d-32e8-4346-827c-4f288dd8ca24'; Category = 'High Availability'; Control = 'High Availability'; Impact = 'Medium'; ServiceName = 'Storage'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'MigrateStandardStorageAccountToPremium'; Message = 'Migrate Standard disks to Premium disks'; State = 'Disabled'; Version = 8; Description = 'Upgrade the standard disks attached to your premium-capable VM to premium disks'; LongDescription = 'Using Standard SSD disks with premium VMs may lead to suboptimal performance and latency issues. We recommend that you consider upgrading the standard disks to premium disks. For any Single Instance Virtual Machine using premium storage for all Operating System Disks and Data Disks, we guarantee Virtual Machine Connectivity of at least 99.9%. When choosing to upgrade, there are two factors to consider. The first factor is that upgrading requires a VM reboot and that takes 3-5 minutes to complete. The second is if the VMs in the list are mission-critical production VMs, evaluate the improved availability against the cost of premium disks.'; Benefits = 'Improved availability with single VM SLA available only when all disks are premium'; Tip = ''; LearnMoreLink = 'https://aka.ms/aa_storagestandardtopremium_learnmore'; } + ,[PSCustomObject]@{ Id = '02c15f98-aedb-481b-884b-af5847b2bf3d'; Category = 'High Availability'; Control = 'Other'; Impact = 'Medium'; ServiceName = 'Virtual Machines'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'SIVM'; Message = 'Use availability sets'; State = 'Disabled'; Version = 6; Description = 'Use availability sets for improved fault tolerance'; LongDescription = 'Group two or more virtual machines in an availability set to ensure at least one virtual machine is available during an outage.'; Benefits = 'Ensure business continuity through virtual machine resilience'; Tip = ''; LearnMoreLink = 'https://aka.ms/aa_sivmrec_learnmore'; } + ,[PSCustomObject]@{ Id = '158f0a07-0a66-4a25-9e37-c43c49c8dd64'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Virtual Machines'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'ComputeStaleSDKRecommendation'; Message = 'Update your current Compute Management SDK version to the most recent version'; State = 'Disabled'; Version = 5; Description = 'Update your current Compute Management SDK version to the most recent version.'; LongDescription = 'We have identified API calls from outdated Compute Management SDKs for resources under this subscription. We recommend switching to the latest Compute Management SDK versions. You need to update your existing code or scripts to use the latest SDK version. This ensures you receive the latest security and performance improvements.'; Benefits = 'Improved security, performance, data resiliency, and support for new features.'; Tip = 'Regularly update your Compute Management SDK versions to prevent security issues and access new features.'; LearnMoreLink = 'https://aka.ms/azureSDKReadMe'; } + ,[PSCustomObject]@{ Id = '57ecb3cd-f2b4-4cad-8b3a-232cca527a0b'; Category = 'High Availability'; Control = 'High Availability'; Impact = 'High'; ServiceName = 'Storage'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'UpgradeVMToManagedDisksWithoutAdditionalCost'; Message = 'Upgrade VM to Managed Disks at no additional cost'; State = 'Active'; Version = 6; Description = 'Upgrade VM from Premium Unmanaged Disks to Managed Disks at no additional cost'; LongDescription = 'Azure Managed Disks provide higher resiliency, simplified service management, higher scale target and more choices among several disk types. Your VM is using premium unmanaged disks that can be migrated to managed disks at no additional cost through the portal in less than 5 minutes.'; Benefits = 'Leverage higher resiliency and other benefits of Managed Disks'; Tip = ''; LearnMoreLink = 'https://aka.ms/md_overview'; } + ,[PSCustomObject]@{ Id = 'af0be9f8-e590-48d0-9e19-380d8819b8dc'; Category = 'High Availability'; Control = 'Other'; Impact = 'Medium'; ServiceName = 'Backup'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'VmNoBackup'; Message = 'Enable Virtual Machine Backup'; State = 'Disabled'; Version = 7.1; Description = 'Enable virtual machine backup to protect your data from corruption and accidental deletion'; LongDescription = 'Configure virtual machine backup to protect your mission critical data against accidental deletion or corruption.'; Benefits = 'Improved data resilience and performance'; Tip = 'You can enable virtual machine backup to protect your data from corruption or accidental deletion.'; LearnMoreLink = 'https://aka.ms/aa_vmbackup_learnmore'; } + ,[PSCustomObject]@{ Id = '11f04d70-5bb3-4065-b717-1f11b2e050a8'; Category = 'High Availability'; Control = 'Service Upgrade and Retirement'; Impact = 'High'; ServiceName = 'Compute_Images'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'VMRunningDeprecatedImage'; Message = 'Upgrade your VM to alternative image version'; State = 'Active'; Version = 16; Description = 'Upgrade your deprecated Virtual Machine image to a newer image'; LongDescription = 'Virtual Machines (VMs) in your subscription are running on images scheduled for deprecation. Once the image is deprecated, new VMs can''t be created from the deprecated image. To prevent disruption to your workloads, upgrade to a newer image. (VMRunningDeprecatedImage)'; Benefits = 'Minimize any potential disruptions to your VM workloads'; Tip = ''; LearnMoreLink = 'https://aka.ms/DeprecatedImagesFAQ'; } + ,[PSCustomObject]@{ Id = '937d85a4-11b2-4e13-a6b5-9e15e3d74d7b'; Category = 'High Availability'; Control = 'Service Upgrade and Retirement'; Impact = 'High'; ServiceName = 'Compute_Images'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'VMRunningDeprecatedOfferLevelImage'; Message = 'Upgrade to a newer offer of Virtual Machine image'; State = 'Active'; Version = 9; Description = 'Upgrade to a newer offer of Virtual Machine image'; LongDescription = 'Virtual Machines (VMs) in your subscription are running on images scheduled for deprecation. Once the image is deprecated, new VMs can''t be created from the deprecated image. To prevent disruption to your workloads, upgrade to a newer image. (VMRunningDeprecatedOfferLevelImage)'; Benefits = 'Minimize any potential disruptions to your VM workloads'; Tip = ''; LearnMoreLink = 'https://aka.ms/DeprecatedImagesFAQ'; } + ,[PSCustomObject]@{ Id = '681acf17-11c3-4bdd-8f71-da563c79094c'; Category = 'High Availability'; Control = 'Service Upgrade and Retirement'; Impact = 'High'; ServiceName = 'Compute_Images'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'VMRunningDeprecatedPlanLevelImage'; Message = 'Upgrade to a newer SKU of Virtual Machine image'; State = 'Active'; Version = 10; Description = 'Upgrade to a newer SKU of Virtual Machine image'; LongDescription = 'Virtual Machines (VMs) in your subscription are running on images scheduled for deprecation. Once the image is deprecated, new VMs can''t be created from the deprecated image. To prevent disruption to your workloads, upgrade to a newer image.'; Benefits = 'Minimize any potential disruptions to your VM workloads'; Tip = ''; LearnMoreLink = 'https://aka.ms/DeprecatedImagesFAQ'; } + ,[PSCustomObject]@{ Id = '3b739bd1-c193-4bb6-a953-1362ee3b03b2'; Category = 'High Availability'; Control = 'Service Upgrade and Retirement'; Impact = 'High'; ServiceName = 'Compute_Images'; ResourceType = 'microsoft.compute/virtualmachinescalesets'; Key = 'VMScaleSetRunningDeprecatedImage'; Message = 'Upgrade your VMSS to alternative image version'; State = 'Active'; Version = 10; Description = 'Upgrade your VMSS to alternative image version'; LongDescription = 'VMSS in your subscription are running on images that have been scheduled for deprecation. Once the image is deprecated, your VMSS workloads would no longer scale out. Upgrade to newer version of the image to prevent disruption to your workload.'; Benefits = 'Minimize any potential disruptions to your VMSS workloads'; Tip = ''; LearnMoreLink = 'https://aka.ms/DeprecatedImagesFAQ'; } + ,[PSCustomObject]@{ Id = '3d18d7cd-bdec-4c68-9160-16a677d0f86a'; Category = 'High Availability'; Control = 'Service Upgrade and Retirement'; Impact = 'High'; ServiceName = 'Compute_Images'; ResourceType = 'microsoft.compute/virtualmachinescalesets'; Key = 'VMScaleSetRunningDeprecatedOfferImage'; Message = 'Upgrade your VMSS to alternative image Offer'; State = 'Active'; Version = 10; Description = 'Upgrade your VMSS to alternative image offer'; LongDescription = 'VMSS in your subscription are running on images that have been scheduled for deprecation. Once the image is deprecated, your VMSS workloads would no longer scale out. To prevent disruption to your workload, upgrade to newer offer of the image.'; Benefits = 'Minimize any potential disruptions to your VMSS workloads'; Tip = ''; LearnMoreLink = 'https://aka.ms/DeprecatedImagesFAQ'; } + ,[PSCustomObject]@{ Id = '44abb62e-7789-4f2f-8001-fa9624cb3eb3'; Category = 'High Availability'; Control = 'Service Upgrade and Retirement'; Impact = 'High'; ServiceName = 'Compute_Images'; ResourceType = 'microsoft.compute/virtualmachinescalesets'; Key = 'VMScaleSetRunningDeprecatedPlanImage'; Message = 'Upgrade your VMSS to alternative image SKU'; State = 'Active'; Version = 10; Description = 'Upgrade your VMSS to alternative image SKU'; LongDescription = 'VMSS in your subscription are running on images that have been scheduled for deprecation. Once the image is deprecated, your VMSS workloads would no longer scale out. To prevent disruption to your workload, upgrade to newer SKU of the image.'; Benefits = 'Minimize any potential disruptions to your VMSS workloads'; Tip = ''; LearnMoreLink = 'https://aka.ms/DeprecatedImagesFAQ'; } + ,[PSCustomObject]@{ Id = 'A0C6DF20-B77A-4215-A877-A8EE03CEB156'; Category = 'Operational Excellence'; Control = ''; Impact = 'Low'; ServiceName = 'Azure Container Apps'; ResourceType = 'microsoft.app/containerapps'; Key = 'UseLatestApiVersion'; Message = 'The api version you use for Microsoft.App is deprecated, please use latest api version'; State = 'Active'; Version = 1; Description = 'The api version you use for Microsoft.App is deprecated, please use latest api version'; LongDescription = 'The api version you use for Microsoft.App is deprecated, please use latest api version'; Benefits = 'More stable api experience'; Tip = ''; LearnMoreLink = 'http://aka.ms/containerappsapiversion'; } + ,[PSCustomObject]@{ Id = 'c692e862-953b-49fe-9c51-e5d2792c1cc1'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'Azure Container Apps'; ResourceType = 'microsoft.app/managedenvironments'; Key = 'CreateNewContainerAppsEnvironment'; Message = 'Re-create your your Container Apps environment to avoid DNS issues'; State = 'Active'; Version = 6; Description = 'Re-create your your Container Apps environment to avoid DNS issues'; LongDescription = 'There''s a potential networking issue with your Container Apps environments that might cause DNS issues. We recommend that you create a new Container Apps environment, re-create your Container Apps in the new environment, and delete the old Container Apps environment.'; Benefits = 'Avoid DNS failures in your Container Apps Environment.'; Tip = ''; LearnMoreLink = 'https://aka.ms/createcontainerapp'; } + ,[PSCustomObject]@{ Id = 'b9ce2d2e-554b-4391-8ebc-91c570602b04'; Category = 'High Availability'; Control = 'Other'; Impact = 'Medium'; ServiceName = 'Azure Container Apps'; ResourceType = 'microsoft.app/containerapps'; Key = 'ContainerAppCustomDomainCertificateNearExpiration'; Message = 'Renew custom domain certificate'; State = 'Active'; Version = 6; Description = 'Renew custom domain certificate'; LongDescription = 'The custom domain certificate you uploaded is near expiration. To prevent possible service downtime, renew your certificate and upload the new certificate for your container apps.'; Benefits = 'Your service wont fail because of expired certificate.'; Tip = ''; LearnMoreLink = 'https://aka.ms/containerappcustomdomaincert'; } + ,[PSCustomObject]@{ Id = 'fa6c0880-da2e-42fd-9cb3-e1267ec5b5c2'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'Azure Container Apps'; ResourceType = 'microsoft.app/containerapps'; Key = 'ContainerAppManagedCertificateAutoRenewalFailure'; Message = 'Managed certificate failed to renew.'; State = 'Active'; Version = 6; Description = 'An issue has been detected that is preventing the renewal of your Managed Certificate.'; LongDescription = 'We detected the managed certificate used by the Container App has failed to auto renew. Please follow the documentation link to make sure that the DNS settings of your custom domain are correct.'; Benefits = 'Avoid downtime due to an expired certificate.'; Tip = ''; LearnMoreLink = 'https://aka.ms/containerapps/managed-certificates'; } + ,[PSCustomObject]@{ Id = '9be5f344-6fa5-4abc-a1f2-61ae6192a075'; Category = 'High Availability'; Control = 'High Availability'; Impact = 'Medium'; ServiceName = 'Azure Container Apps'; ResourceType = 'microsoft.app/containerapps'; Key = 'ContainerAppMinimalReplicaCountTooLow'; Message = 'Increase the minimal replica count for your containerized application'; State = 'Active'; Version = 6; Description = 'Increase the minimal replica count for your containerized application'; LongDescription = 'The minimal replica count set for your Azure Container App containerized application might be too low, which can cause resilience, scalability, and load balancing issues. For better availability, consider increasing the minimal replica count.'; Benefits = 'Better availability for your container app.'; Tip = ''; LearnMoreLink = 'https://aka.ms/containerappscalingrules'; } + ,[PSCustomObject]@{ Id = 'f6e3ad9c-5d58-48ba-b06b-ebffba60dd18'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Data Factory'; ResourceType = 'microsoft.datafactory/factories/pipelines'; Key = 'ADFFailingPipelines'; Message = 'Delete failing ADF pipelines'; State = 'Active'; Version = 2.2; Description = 'Delete failing ADF pipelines'; LongDescription = 'Repeatedly failing pipelines have been detected in your Azure Data Factory resource. Know that you''re being billed for them even though they are not serving you while failing. Review them to resolve issues or delete failing pipelines that are no longer needed to save on costs.'; Benefits = 'Reduce billing costs by addressing issues with or deleting your failing Data Factory pipelines'; Tip = ''; LearnMoreLink = 'https://aka.ms/aa_advisor_adfpipeline'; } + ,[PSCustomObject]@{ Id = 'eb4f67d2-2440-4d58-bec7-6de73cc5ba75'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Data Factory'; ResourceType = 'microsoft.datafactory/factories/triggers'; Key = 'ADFThrottledTriggers'; Message = 'Review your throttled Data Factory Triggers'; State = 'Active'; Version = 1; Description = 'Review your throttled Data Factory Triggers'; LongDescription = 'A high volume of throttling has been detected in an event-based trigger that runs in your Data Factory resource. This is causing your pipeline runs to drop from the run queue. Review the trigger definition to resolve issues and increase performance.'; Benefits = 'Ensure better performance by reviewing and editing your event-based trigger definition'; Tip = ''; LearnMoreLink = 'https://aka.ms/adf-create-event-trigger'; } + ,[PSCustomObject]@{ Id = 'a77dd319-ffb5-4f88-bdf2-e98e59afc79f'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformariadb/servers'; Key = 'OrcasMariaDBAuditLog'; Message = 'Increase the reliability of MariaDB audit logs.'; State = 'Active'; Version = 1; Description = 'Increase the reliability of audit logs'; LongDescription = 'Our internal telemetry shows that the server''s audit logs may have been lost over the past day. This can occur when your server is experiencing a CPU heavy workload or a server generates a large number of audit logs over a short period of time. We recommend only logging the necessary events required for your audit purposes using the following server parameters: audit_log_events, audit_log_exclude_users, audit_log_include_users. If the CPU usage on your server is high due to your workload, we recommend increasing the server''s vCores to improve performance.'; Benefits = 'Improve the reliability of audit logs for monitoring and troubleshooting.'; Tip = 'You can improve the reliability of MariaDB audit logs by only logging events you need.'; LearnMoreLink = 'https://aka.ms/mariadb-audit-logs'; } + ,[PSCustomObject]@{ Id = '860d2d5d-7934-4ccb-a34a-577adf3022a6'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformariadb/servers'; Key = 'OrcasMariaDbConcurrentConnection'; Message = 'Scale the MariaDB server to higher SKU'; State = 'Active'; Version = 1; Description = 'Scale the MariaDB server to higher SKU'; LongDescription = 'Our internal telemetry shows that the server may be unable to support the connection requests because of the maximum supported connections for the given SKU. This may result in a large number of failed connections requests which adversly affect the the performance. To improve performance, we recommend to move to higher memory SKU by increasing vCore or switching to Memory-Optimized SKUs.'; Benefits = 'Improve query performance by allowing more concurrent connections'; Tip = 'You can improve the query performance of your MariaDB database by scaling your server to a higher SKU.'; LearnMoreLink = 'https://aka.ms/mariadbconnectionlimits'; } + ,[PSCustomObject]@{ Id = 'a5f888e3-8cf4-4491-b2ba-b120e14eb7ce'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformariadb/servers'; Key = 'OrcasMariaDbCpuOverlaod'; Message = 'Increase the MariaDB server vCores'; State = 'Active'; Version = 1; Description = 'Increase the MariaDB server vCores'; LongDescription = 'Our internal telemetry shows that the CPU has been running under high utilization for an extended period of time over the last 7 days. High CPU utilization may lead to slow query performance. To improve performance, we recommend moving to a larger compute size.'; Benefits = 'Improve query performance by reducing CPU pressure'; Tip = 'You can improve the query performance of your MariaDB database by increasing the server vCores.'; LearnMoreLink = 'https://aka.ms/mariadbpricing'; } + ,[PSCustomObject]@{ Id = 'a092afdb-6f20-4b42-8d8f-423ac8d71a3f'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformariadb/servers'; Key = 'OrcasMariaDbMemoryCache'; Message = 'Move your MariaDB server to Memory Optimzed SKU'; State = 'Active'; Version = 1; Description = 'Move your MariaDB server to Memory Optimzed SKU'; LongDescription = 'Our internal telemetry shows that there is high churn in the buffer pool for this server which can result in slower query performance and increased IOPS. To improve performance, please review your workload queries to identify opportunities to minimize memory consumed. If no such opportunity found, then we recommend moving to higher SKU with more memory or increase storage size to get more IOPS.'; Benefits = 'Improve query performance by caching more data in memory'; Tip = 'You can improve the query performance of your MariaDB database by moving your server to a Memory Optimized SKU.'; LearnMoreLink = 'https://aka.ms/mariadbpricing'; } + ,[PSCustomObject]@{ Id = '2af11142-942e-45c1-8ce8-d9d2df25aae9'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformariadb/servers'; Key = 'OrcasMariaDbCpuRightSize'; Message = 'Right-size underutilized MariaDB server'; State = 'Active'; Version = 1.1; Description = 'Right-size underutilized MariaDB servers'; LongDescription = 'Our internal telemetry shows that the MariaDB database server resources have been underutilized for an extended period of time over the last 7 days. Low resource utilization results in unwanted expenditure which can be fixed without significant performance impact. To reduce your costs and efficiently manage your resources, we recommend reducing the compute size (vCores) by half.'; Benefits = 'Reduce cost by right-sizing the MariaDB server'; Tip = 'You can improve the overall resource spend for your Azure Database for MariaDB by scaling down the compute resources by half.'; LearnMoreLink = 'https://aka.ms/mariadbpricing'; } + ,[PSCustomObject]@{ Id = 'dc791c8d-a74e-4b3e-b7f1-40793399ecd6'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformariadb/servers'; Key = 'OrcasMariaDbStorageLimit'; Message = 'Increase the Server Storage limit'; State = 'Active'; Version = 1; Description = 'Scale the storage limit for MariaDB server'; LongDescription = 'Our internal telemetry shows that the server may be constrained because it is approaching limits for the currently provisioned storage values. This may result in degraded performance or in the server being moved to read-only mode. To ensure continued performance, we recommend increasing the provisioned storage amount or turning ON the "Auto-Growth" feature for automatic storage increases'; Benefits = 'Improve query performance by allocating larger storage for the server'; Tip = ''; LearnMoreLink = 'https://aka.ms/mariadbstoragelimits'; } + ,[PSCustomObject]@{ Id = 'fba7355d-0f26-4015-9b14-17bdc584081a'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/flexibleservers'; Key = 'OrcasMeruMySqlComputeSeriesUpgradeEv5'; Message = 'Upgrade to Ev5 compute series'; State = 'Active'; Version = 2; Description = 'Boost your workload performance by 30% with the new Ev5 compute hardware'; LongDescription = 'With the new Ev5 compute hardware, you can boost workload performance by 30% with higher concurrency and better throughput. Navigate to the Compute+Storage blade on the Azure Portal and switch to Ev5 compute at no additional cost. Ev5 compute provides best performance among other VM series in terms of QPS and latency.'; Benefits = 'With the new Ev5 compute hardware, you can boost workload performance by 30% with higher concurrency and better throughput.'; Tip = 'With the new Ev5 compute hardware, you can boost workload performance by 30% with higher concurrency and better throughput.'; LearnMoreLink = 'https://techcommunity.microsoft.com/t5/azure-database-for-mysql-blog/boost-azure-mysql-business-critical-flexible-server-performance/ba-p/3603698'; } + ,[PSCustomObject]@{ Id = '5f043aef-0ac4-4dd6-941b-7f4697ebad47'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/flexibleservers'; Key = 'OrcasMeruMysqlConnectionUpsell'; Message = 'Increase connection limit by adding vCores or switching to a higher SKU.'; State = 'Active'; Version = 1.2; Description = 'Scale the MySQL Flexible Server to a higher SKU'; LongDescription = 'Our telemetry indicates that your Flexible Server is exceeding the connection limits associated with your current SKU. A large number of failed connection requests may adversely affect server performance. To improve performance, we recommend increasing the number of vCores or switching to a higher SKU.'; Benefits = 'Improve Flexible Server performance by enabling more concurrent connections.'; Tip = 'You can raise the connection limit of your MySQL Flexible Server by increasing vCores or switching to a higher SKU.'; LearnMoreLink = 'https://aka.ms/azure_mysql_flexible_server_storage'; } + ,[PSCustomObject]@{ Id = '96181a8c-f81b-45c0-83d2-5c4cf62843c4'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/flexibleservers'; Key = 'OrcasMeruMysqlCpuUpcell'; Message = 'Increase your Flexible Server''s CPU vCore.'; State = 'Active'; Version = 1; Description = 'Increase the MySQL Flexible Server vCores.'; LongDescription = 'Our internal telemetry shows that the CPU has been running under high utilization for an extended period of time over the last 7 days. High CPU utilization may lead to slow query performance. To improve performance, we recommend moving to a larger compute size.'; Benefits = 'Improve query performance by reducing CPU pressure'; Tip = 'You can improve the query performance of your MySQL database by increasing the Flexible Server vCores.'; LearnMoreLink = 'https://aka.ms/azure_mysql_flexible_server_pricing'; } + ,[PSCustomObject]@{ Id = '89b7919e-60cc-42a3-adb7-2be468f6ecb9'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/flexibleservers'; Key = 'OrcasMeruMysqlMemoryUpsell'; Message = 'Move your MySQL server to Memory Optimized SKU'; State = 'Active'; Version = 1; Description = 'Move your MySQL server to Memory Optimized SKU'; LongDescription = 'Our internal telemetry shows that there is high memory usage for this server which can result in slower query performance and increased IOPS. To improve performance, please review your workload queries to identify opportunities to minimize memory consumed. If no such opportunity found, then we recommend moving to higher SKU with more memory or increase storage size to get more IOPS.'; Benefits = 'Improve query performance by caching more data in memory'; Tip = 'You can improve the query performance of your MySQL database by moving your server to a Memory Optimized SKU.'; LearnMoreLink = 'https://aka.ms/azure_mysql_flexible_server_storage'; } + ,[PSCustomObject]@{ Id = 'f9604823-849a-4fe0-b9be-bc937d6b4618'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/flexibleservers'; Key = 'OrcasMeruMysqlReadReplicaUpsell'; Message = 'Add a MySQL Read Replica'; State = 'Active'; Version = 1.1; Description = 'Add a MySQL Read Replica server'; LongDescription = 'Our internal telemetry shows that you may have a read intensive workload running, which results in resource contention for this server. This may lead to slow query performance for the server. To improve performance, we recommend you add a read replica, and offload some of your read workloads to the replica.'; Benefits = 'Improve query performance by scaling out reads'; Tip = 'You can improve the query performance of your MySQL database my adding a Read Replica server.'; LearnMoreLink = 'https://aka.ms/flexible-server-mysql-read-replicas'; } + ,[PSCustomObject]@{ Id = '6abfe73d-9b26-414c-9e94-62f1db8d653b'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/flexibleservers'; Key = 'OrcasMeruMySqlStorageUpsell'; Message = 'Increase the storage limit for MySQL Flexible Server'; State = 'Active'; Version = 2.5; Description = 'Increase the storage limit for MySQL Flexible Server'; LongDescription = 'Our internal telemetry shows that the server may be constrained because it is approaching limits for the currently provisioned storage values. This may result in degraded performance or in the server being moved to read-only mode. To ensure continued performance, we recommend increasing the provisioned storage amount.'; Benefits = 'Improve server performance by increasing the storage limit'; Tip = 'You can improve your MySQL Flexible Server performance by increasing the storage limit.'; LearnMoreLink = 'https://aka.ms/azure_mysql_flexible_server_storage'; } + ,[PSCustomObject]@{ Id = 'feae9d98-0d24-48eb-ac98-0cedeefd5b9a'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/flexibleservers'; Key = 'OrcasMeruMySqlTlsDeprecation'; Message = 'Deprecating Client communication over TLSv1.0 and TLSv1.1'; State = 'Active'; Version = 1.4; Description = 'Your Azure Database for MySQL - Flexible Server is vulnerable using weak, deprecated TLSv1 or TLSv1.1 protocols'; LongDescription = 'To support modern security standards, MySQL community edition discontinued the support for communication over Transport Layer Security (TLS) 1.0 and 1.1 protocols. Microsoft will also stop supporting connection over TLSv1 and TLSv1.1 to Azure Database for MySQL - Flexible server soon to comply with the modern security standards . We recommend you upgrade your client driver to support TLSv1.2.'; Benefits = 'Secured & Strong TLS protocol for communication'; Tip = 'You can get secured & strong TLS protocol for communication by deprecating the TLSv1.0 and TLSv1.1.'; LearnMoreLink = 'https://aka.ms/encrypted_connection_deprecated_protocols'; } + ,[PSCustomObject]@{ Id = 'f44c8e21-9f13-4b8e-a839-7141dd5645bb'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/flexibleservers'; Key = 'OrcasMeruMysqlTmpTable'; Message = 'Improve performance by optimizing MySQL temporary-table sizing.'; State = 'Active'; Version = 1; Description = 'Improve performance by optimizing MySQL temporary-table sizing.'; LongDescription = 'Our internal telemetry indicates that your MySQL server may be incurring unncessary I/O overhead due to low temporary-table parameter settings. This may result in unnecessary disk-based transactions and reduced performance. We recommend that you increase the ''tmp_table_size'' and ''max_heap_table_size'' parameter values to reduce the number of disk-based transactions.'; Benefits = 'Improve MySQL workload performance by reducing I/O overhead associated with disk-based transactions'; Tip = 'You can adjust your MySQL temporary-table sizing to improve database performance.'; LearnMoreLink = 'https://dev.mysql.com/doc/refman/8.0/en/internal-temporary-tables.html#internal-temporary-tables-engines'; } + ,[PSCustomObject]@{ Id = '997839f4-48e4-49e4-9b15-628a7757765c'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/servers'; Key = 'OrcasMySQLAuditLog'; Message = 'Increase the reliability of MySQL audit logs.'; State = 'Active'; Version = 1; Description = 'Increase the reliability of audit logs'; LongDescription = 'Our internal telemetry shows that the server''s audit logs may have been lost over the past day. This can occur when your server is experiencing a CPU heavy workload or a server generates a large number of audit logs over a short period of time. We recommend only logging the necessary events required for your audit purposes using the following server parameters: audit_log_events, audit_log_exclude_users, audit_log_include_users. If the CPU usage on your server is high due to your workload, we recommend increasing the server''s vCores to improve performance.'; Benefits = 'Improve the reliability of audit logs for monitoring and troubleshooting.'; Tip = 'You can improve the reliability of MySQL audit logs by only logging events you need.'; LearnMoreLink = 'https://aka.ms/mysql-audit-logs'; } + ,[PSCustomObject]@{ Id = '944611b9-0357-4272-a9ac-a97a65932599'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/servers'; Key = 'OrcasMySQLConcurrentConnection'; Message = 'Scale the MySQL server to higher SKU'; State = 'Active'; Version = 1; Description = 'Scale the MySQL server to higher SKU'; LongDescription = 'Our internal telemetry shows that the server may be unable to support the connection requests because of the maximum supported connections for the given SKU. This may result in a large number of failed connections requests which adversly affect the the performance. To improve performance, we recommend to move to higher memory SKU by increasing vCore or switching to Memory-Optimized SKUs.'; Benefits = 'Improve query performance by allowing more concurrent connections'; Tip = 'You can improve the query performance of your MySQL database by scaling your server to a higher SKU.'; LearnMoreLink = 'https://aka.ms/mysqlconnectionlimits'; } + ,[PSCustomObject]@{ Id = 'f62ef41c-2cdb-4f4e-9dc9-a391c579b0fb'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/servers'; Key = 'OrcasMySQLConnectionPooling'; Message = 'Improve MySQL connection management'; State = 'Active'; Version = 1; Description = 'Improve MySQL connection management'; LongDescription = 'Our internal telemetry indicates that your application connecting to MySQL server may not be managing connections efficiently. This may result in unnecessary resource consumption and overall higher application latency. To improve connection management, we recommend that you reduce the number of short-lived connections and eliminate unnecessary idle connections. This can be done by configuring a server side connection-pooler, such as ProxySQL.'; Benefits = 'Improve performance by reducing overhead associated with short-lived and idle database connections'; Tip = 'You can manage your MySQL database connections more efficiently by configuring a connection pooler, such as ProxySQL.'; LearnMoreLink = 'https://aka.ms/azure_mysql_connection_pooling'; } + ,[PSCustomObject]@{ Id = '2cbca084-4e80-4720-a7fe-dc8c3074e8ca'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/servers'; Key = 'OrcasMySQLConnectionRedirection'; Message = 'Improve MySQL connection latency'; State = 'Active'; Version = 1; Description = 'Improve MySQL connection latency'; LongDescription = 'Our internal telemetry indicates that your application connecting to MySQL server may not be managing connections efficiently. This may result in higher application latency. To improve connection latency, we recommend that you enable connection redirection. This can be done by enabling the connection redirection feature of the PHP driver.'; Benefits = 'Reduce network latency between client applications'; Tip = 'You can manage your MySQL database connections more efficiently by enabling connection redirection.'; LearnMoreLink = 'https://aka.ms/azure_mysql_connection_redirection'; } + ,[PSCustomObject]@{ Id = '0fb3f293-899e-458a-81cc-ad263dd89629'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/servers'; Key = 'OrcasMySQLCpuOverload'; Message = 'Increase the MySQL server vCores'; State = 'Active'; Version = 1; Description = 'Increase the MySQL server vCores'; LongDescription = 'Our internal telemetry shows that the CPU has been running under high utilization for an extended period of time over the last 7 days. High CPU utilization may lead to slow query performance. To improve performance, we recommend moving to a larger compute size.'; Benefits = 'Improve query performance by reducing CPU pressure'; Tip = 'You can improve the query performance of your MySQL database by increasing the server vCores.'; LearnMoreLink = 'https://aka.ms/mysqlpricing'; } + ,[PSCustomObject]@{ Id = '74aa92b7-9c42-4640-9b1b-8ab645c86a00'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/servers'; Key = 'OrcasMySQLMemoryCache'; Message = 'Move your MySQL server to Memory Optimized SKU'; State = 'Active'; Version = 1; Description = 'Move your MySQL server to Memory Optimized SKU'; LongDescription = 'Our internal telemetry shows that there is high churn in the buffer pool for this server which can result in slower query performance and increased IOPS. To improve performance, please review your workload queries to identify opportunities to minimize memory consumed. If no such opportunity found, then we recommend moving to higher SKU with more memory or increase storage size to get more IOPS.'; Benefits = 'Improve query performance by caching more data in memory'; Tip = 'You can improve the query performance of your MySQL database by moving your server to a Memory Optimized SKU.'; LearnMoreLink = 'https://aka.ms/mysqlpricing'; } + ,[PSCustomObject]@{ Id = '1efe9592-f5ae-4167-97d7-63e973821fca'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/servers'; Key = 'OrcasMySQLReadReplica'; Message = 'Add a MySQL Read Replica'; State = 'Active'; Version = 1; Description = 'Add a MySQL Read Replica server'; LongDescription = 'Our internal telemetry shows that you may have a read intensive workload running, which results in resource contention for this server. This may lead to slow query performance for the server. To improve performance, we recommend you add a read replica, and offload some of your read workloads to the replica.'; Benefits = 'Improve query performance by scaling out reads'; Tip = 'You can improve the query performance of your MySQL database my adding a Read Replica server.'; LearnMoreLink = 'https://aka.ms/mysqlreadreplica'; } + ,[PSCustomObject]@{ Id = '7e76e54f-7978-4d48-9ab9-a4da5b7c69a3'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/servers'; Key = 'OrcasMySQLCpuRightSize'; Message = 'Right-size underutilized MySQL server'; State = 'Active'; Version = 2.1; Description = 'Right-size underutilized MySQL servers'; LongDescription = 'Our internal telemetry shows that the MySQL database server resources have been underutilized for an extended period of time over the last 7 days. Low resource utilization results in unwanted expenditure which can be fixed without significant performance impact. To reduce your costs and efficiently manage your resources, we recommend reducing the compute size (vCores) by half.'; Benefits = 'Reduce cost by right-sizing the MySQL server'; Tip = 'You can improve the overall resource spend for your Azure Database for MySQL by scaling down the compute resources by half.'; LearnMoreLink = 'https://aka.ms/mysqlpricing'; } + ,[PSCustomObject]@{ Id = 'c0576597-4910-48b5-9828-5b3a99190b82'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/servers'; Key = 'OrcasMySQLStorageLimit'; Message = 'Increase the Server Storage limit'; State = 'Active'; Version = 1; Description = 'Scale the storage limit for MySQL server'; LongDescription = 'Our internal telemetry shows that the server may be constrained because it is approaching limits for the currently provisioned storage values. This may result in degraded performance or in the server being moved to read-only mode. To ensure continued performance, we recommend increasing the provisioned storage amount or turning ON the "Auto-Growth" feature for automatic storage increases'; Benefits = 'Improve query performance by allocating larger storage for the server'; Tip = ''; LearnMoreLink = 'https://aka.ms/mysqlstoragelimits'; } + ,[PSCustomObject]@{ Id = '99811474-2a6c-4d40-ac91-ae76c76e3258'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbformysql/servers'; Key = 'OrcasMySqlTmpTables'; Message = 'Improve performance by optimizing MySQL temporary-table sizing'; State = 'Active'; Version = 1; Description = 'Improve performance by optimizing MySQL temporary-table sizing'; LongDescription = 'Our internal telemetry indicates that your MySQL server may be incurring unnecessary I/O overhead due to low temporary-table parameter settings. This may result in unnecessary disk-based transactions and reduced performance. We recommend that you increase the ''tmp_table_size'' and ''max_heap_table_size'' parameter values to reduce the number of disk-based transactions.'; Benefits = 'Improve MySQL workload performance by reducing I/O overhead associated with disk-based transactions'; Tip = 'You can adjust your MySQL temporary-table sizing to improve database performance.'; LearnMoreLink = 'https://aka.ms/azure_mysql_tmp_table'; } + ,[PSCustomObject]@{ Id = 'b26edab6-a8dc-4903-b29f-d3b7fb9e0f9c'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure Database for PostgreSQL - Hyperscale (Citus)'; ResourceType = 'microsoft.dbforpostgresql/servergroupsv2'; Key = 'MarlinStorageLimitRecommendation'; Message = 'Increase the storage limit for Hyperscale (Citus) Server Group'; State = 'Active'; Version = 1; Description = 'Increase the storage limit for Hyperscale (Citus) server group'; LongDescription = 'Our internal telemetry shows that one or more nodes in the server group may be constrained because they are approaching limits for the currently provisioned storage values. This may result in degraded performance or in the server being moved to read-only mode. To ensure continued performance, we recommend increasing the provisioned disk space.'; Benefits = 'Improve server performance by increasing the storage and continue to use server in read-write mode.'; Tip = 'Increase the storage limit for Hyperscale (Citus) Server Group'; LearnMoreLink = 'https://docs.microsoft.com/azure/postgresql/howto-hyperscale-scale-grow#increase-storage-on-nodes'; } + ,[PSCustomObject]@{ Id = 'c3c74c9e-e241-496c-be3f-57a2797aa91f'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = ' Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servergroups'; Key = 'OrcasPostgreSqlCitusDistributeData'; Message = 'Distribute data in server group to distribute workload among nodes'; State = 'Active'; Version = 1; Description = 'Distribute data in server group to distribute workload among nodes'; LongDescription = 'It looks like the data has not been distributed in this server group but stays on the coordinator. For full Hyperscale (Citus) benefits distribute data on worker nodes in this server group.'; Benefits = 'Improve query performance by utilizing resource of each node in the server group'; Tip = ''; LearnMoreLink = 'https://go.microsoft.com/fwlink/?linkid=2135201'; } + ,[PSCustomObject]@{ Id = '426292db-b3e8-46f6-ad3e-d46753943afb'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servergroups'; Key = 'OrcasPostgreSqlCitusRebalanceData'; Message = 'Rebalance data in Hyperscale (Citus) server group to distribute workload among worker nodes more evenly'; State = 'Active'; Version = 1; Description = 'Rebalance data in Hyperscale (Citus) server group to distribute workload among worker nodes more evenly'; LongDescription = 'It looks like the data is not well balanced between worker nodes in this Hyperscale (Citus) server group. In order to use each worker node of the Hyperscale (Citus) server group effectively rebalance data in this server group.'; Benefits = 'Get the most of Hyperscale (Citus) by utilizing resources of each node more evenly'; Tip = ''; LearnMoreLink = 'https://go.microsoft.com/fwlink/?linkid=2148869'; } + ,[PSCustomObject]@{ Id = '4b0be860-1d79-4360-861a-5382fdb0532c'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlCitusStorageLimitHyperscaleCitus'; Message = 'Increase the storage limit for Hyperscale (Citus) Server Group'; State = 'Active'; Version = 1; Description = 'Increase the storage limit for Hyperscale (Citus) server group'; LongDescription = 'Our internal telemetry shows that one or more nodes in the server group may be constrained because they are approaching limits for the currently provisioned storage values. This may result in degraded performance or in the server being moved to read-only mode. To ensure continued performance, we recommend increasing the provisioned disk space.'; Benefits = 'Improve server performance by increasing the storage and continue to use server in read-write mode.'; Tip = 'Increase the storage limit for Hyperscale (Citus) Server Group'; LearnMoreLink = 'https://docs.microsoft.com/azure/postgresql/howto-hyperscale-scale-grow#increase-storage-on-nodes'; } + ,[PSCustomObject]@{ Id = '6008fcbf-6eb7-48b3-b528-2ec5bae4f94e'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/flexibleservers'; Key = 'OrcasMeruMeruLogDuration'; Message = 'Set log_duration to OFF'; State = 'Disabled'; Version = 2; Description = 'Optimize log_duration settings for PostgreSQL on Azure Database'; LongDescription = 'Our internal telemetry indicates that you have log_duration enabled, for better performance, set it to OFF'; Benefits = 'Improve server performance by changing log_duration to OFF'; Tip = 'You can improve your PostgreSQL performance by setting log_duration to OFF'; LearnMoreLink = 'https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-logging'; } + ,[PSCustomObject]@{ Id = '523847ec-6157-4e9f-b3ae-01079123a420'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/flexibleservers'; Key = 'OrcasMeruMeruLogErrorVerbosity'; Message = 'Set log_error_verbosity to DEFAULT'; State = 'Disabled'; Version = 2; Description = 'Optimize log_error_verbosity settings for PostgreSQL on Azure Database'; LongDescription = 'Our internal telemetry indicates that you have log_error_verbosity enabled, for better performance, set it to DEFAULT'; Benefits = 'Improve server performance by changing log_error_verbosity to DEFAULT'; Tip = 'You can improve your PostgreSQL performance by setting log_error_verbosity to DEFAULT'; LearnMoreLink = 'https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-logging'; } + ,[PSCustomObject]@{ Id = '0f5b008d-ab30-4cb6-954f-b66a66d11d37'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/flexibleservers'; Key = 'OrcasMeruMeruLogMinDuration'; Message = 'Set log_min_duration to -1'; State = 'Disabled'; Version = 2; Description = 'Optimize log_min_duration settings for PostgreSQL on Azure Database'; LongDescription = 'Our internal telemetry indicates that you have log_min_duration enabled, for better performance, set it to -1'; Benefits = 'Improve server performance by changing log_min_duration to -1'; Tip = 'You can improve your PostgreSQL performance by setting log_min_duration to -1'; LearnMoreLink = 'https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-logging'; } + ,[PSCustomObject]@{ Id = 'c3b02a4b-331f-4223-8d5c-20d2d7e439df'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/flexibleservers'; Key = 'OrcasMeruMeruLogStatement'; Message = 'Set log_statement to NONE'; State = 'Disabled'; Version = 2; Description = 'Optimize log_statement settings for PostgreSQL on Azure Database'; LongDescription = 'Our internal telemetry indicates that you have log_statement enabled, for better performance, set it to NONE'; Benefits = 'Improve server performance by changing log_statement to NONE'; Tip = 'You can improve your PostgreSQL performance by setting log_statement to NONE'; LearnMoreLink = 'https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-logging'; } + ,[PSCustomObject]@{ Id = '7c1948cd-2cd7-4343-9c26-be576842e378'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/flexibleservers'; Key = 'OrcasMeruMeruQueryCaptureMode'; Message = 'Set pg_qs.query_capture_mode to NONE'; State = 'Disabled'; Version = 2; Description = 'Optimize pg_qs.query_capture_mode settings for PostgreSQL on Azure Database'; LongDescription = 'Our internal telemetry indicates that you have pg_qs.query_capture_mode enabled, for better performance, set it to NONE'; Benefits = 'Improve server performance by changing pg_qs.query_capture_mode to NONE'; Tip = 'You can improve your PostgreSQL performance by setting pg_qs.query_capture_mode to NONE'; LearnMoreLink = 'https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-query-store-best-practices'; } + ,[PSCustomObject]@{ Id = '21160291-a460-4534-9f17-80f038b166f8'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/flexibleservers'; Key = 'OrcasMeruMeruWorkMem'; Message = 'Increase server parameter: work_mem'; State = 'Disabled'; Version = 2; Description = 'Increase the work_mem to avoid excessive disk spilling from sort and hash'; LongDescription = 'Our internal telemetry shows that the configuration work_mem is too small for your PostgreSQL server which is resulting in disk spilling and degraded query performance. To improve this, we recommend to increase the work_mem limit for the server which will help to reduce the scenarios when the sort or hash happens on disk, thereby improving the overall query performance.'; Benefits = 'Improve query performance by allocating more work_mem for the sort or hash operations thus avoiding unnecessary disk read and write.'; Tip = 'You can improve your PostgreSQL performance by increasing server parameter: work_mem'; LearnMoreLink = 'https://aka.ms/runtimeconfiguration'; } + ,[PSCustomObject]@{ Id = 'd229f650-eed6-46df-9fe3-977af82e377f'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/flexibleservers'; Key = 'OrcasMeruOrcasPostgreSQLConnectionPooling'; Message = 'Set pgbouncer.enabled to TRUE'; State = 'Disabled'; Version = 2; Description = 'Optimize PostgreSQL performance by enabling PGBouncer'; LongDescription = 'Our Internal telemetry indiceates that you can improve PostgreSQL performance by enabling PGBouncer'; Benefits = 'Improve server performance by changing pgbouncer.enabled to TRUE'; Tip = 'Improve PostgreSQL performance by enabling PGBouncer'; LearnMoreLink = 'https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-pgbouncer'; } + ,[PSCustomObject]@{ Id = '2b099658-9ec3-4582-af92-e09e90a516da'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/flexibleservers'; Key = 'OrcasMeruIntelligentTuning'; Message = 'Set Intelligent tuning to ON'; State = 'Disabled'; Version = 2; Description = 'Improve PostgreSQL - Flexible Server performance by enabling Intelligent tuning'; LongDescription = 'Our internal telemetry suggests that you can improve storage performance by enabling Intelligent tuning'; Benefits = 'Improve PostgreSQL - Flexible Server performance by enabling Intelligent tuning'; Tip = 'You can improve your PostgreSQL - Flexible Server performance by enabling Intelligent tuning'; LearnMoreLink = 'https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-intelligent-tuning'; } + ,[PSCustomObject]@{ Id = '33f26810-57d0-4612-85ff-a83ee9be884a'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/flexibleservers'; Key = 'OrcasPostgreSqlFlexibleServerLogicalReplicationSlots'; Message = 'Remove inactive logical replication slots'; State = 'Active'; Version = 9; Description = 'Remove inactive logical replication slots (important)'; LongDescription = 'Inactive logical replication slots can result in degraded server performance and unavailability due to write ahead log (WAL) file retention and buildup of snapshot files. Your Azure Database for PostgreSQL flexible server might have inactive logical replication slots. THIS NEEDS IMMEDIATE ATTENTION. Either delete the inactive replication slots, or start consuming the changes from these slots, so that the slots'' Log Sequence Number (LSN) advances and is close to the current LSN of the server.'; Benefits = 'Improve PostgreSQL availability by removing inactive logical replication slots'; Tip = 'You can improve your PostgreSQL availability by removing inactive logical replication slots.'; LearnMoreLink = 'https://aka.ms/azure_postgresql_flexible_server_logical_decoding'; } + ,[PSCustomObject]@{ Id = '30331dd3-8462-481d-974c-fb5797f323a8'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasMeruMemoryUpsell'; Message = 'Move your PostgreSQL Flexible Server to Memory Optimized SKU'; State = 'Disabled'; Version = 2; Description = 'Move your PostgreSQL Flexible Server to Memory Optimized SKU'; LongDescription = 'Our internal telemetry shows that there is high churn in the buffer pool for this server which can result in slower query performance and increased IOPS. To improve performance, please review your workload queries to identify opportunities to minimize memory consumed. If no such opportunity found, then we recommend moving to higher SKU with more memory or increase storage size to get more IOPS.'; Benefits = 'Improve query performance by caching more data in memory'; Tip = 'You can improve the query performance of your PostgreSQL database by moving your Flexible Server to a Memory Optimized SKU.'; LearnMoreLink = 'https://aka.ms/azure_postgresql_flexible_server_pricing'; } + ,[PSCustomObject]@{ Id = '2f77028c-f3a0-467c-9dd3-4d29d56ad460'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure Database for PostgreSQL - Flexible Server'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlFlexibleServerStorageLimit'; Message = 'Increase the PostgreSQL Flexible Server storage limit'; State = 'Disabled'; Version = 3; Description = 'Increase the storage limit for PostgreSQL Flexible Server'; LongDescription = 'Our internal telemetry shows that the server may be constrained because it is approaching limits for the currently provisioned storage values. This may result in degraded performance or in the server being moved to read-only mode. To ensure continued performance, we recommend increasing the provisioned storage amount.'; Benefits = 'Improve server performance by increasing the storage limit'; Tip = 'You can improve your PostgreSQL Flexible Server performance by increasing the storage limit.'; LearnMoreLink = 'https://aka.ms/azure_postgresql_flexible_server_limits'; } + ,[PSCustomObject]@{ Id = 'f5abcb36-180d-45f7-9a88-f5939823e528'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/flexibleservers'; Key = 'OrcasPostgreSqlMeruMigration'; Message = 'Consider the upgrade to FSPG'; State = 'Disabled'; Version = 2; Description = 'Migrate your database from SSPG to FSPG'; LongDescription = 'Please consider our new offering Azure Database for PostgreSQL Flexible Server that provides richer capabilities such as zone resilient HA, predictable performance, maximum control, custom maintenance window, cost optimization controls and simplified developer experience. Learn more.'; Benefits = 'Please consider our new offering Azure Database for PostgreSQL Flexible Server that provides richer capabilities such as zone resilient HA, predictable performance, maximum control, custom maintenance window, cost optimization controls and simplified developer experience. Learn more.'; Tip = 'Please consider our new offering Azure Database for PostgreSQL Flexible Server that provides richer capabilities such as zone resilient HA, predictable performance, maximum control, custom maintenance window, cost optimization controls and simplified developer experience. Learn more.'; LearnMoreLink = 'https://aka.ms/sspg-upgrade'; } + ,[PSCustomObject]@{ Id = 'bd109fe8-a2cf-415a-adcb-5e9f9fc1d3c0'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlConcurrentConnection'; Message = 'Scale the PostgreSQL server to higher SKU'; State = 'Disabled'; Version = 2; Description = 'Scale the PostgreSQL server to higher SKU'; LongDescription = 'Our internal telemetry shows that the server may be unable to support the connection requests because of the maximum supported connections for the given SKU. This may result in a large number of failed connections requests which adversly affect the the performance. To improve performance, we recommend to move to higher memory SKU by increasing vCore or switching to Memory-Optimized SKUs.'; Benefits = 'Improve query performance by allowing more concurrent connections'; Tip = 'You can improve the query performance of your PostgreSQL database by scaling your server to a higher SKU.'; LearnMoreLink = 'https://aka.ms/postgresqlconnectionlimits'; } + ,[PSCustomObject]@{ Id = '84978654-5304-4b2a-81f6-022d18a8b676'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlConnectionPooling'; Message = 'Improve PostgreSQL connection management'; State = 'Disabled'; Version = 2; Description = 'Improve PostgreSQL connection management'; LongDescription = 'Our internal telemetry indicates that your PostgreSQL server may not be managing connections efficiently. This may result in unnecessary resource consumption and overall higher application latency. To improve connection management, we recommend that you reduce the number of short-lived connections and eliminate unnecessary idle connections. This can be done by configuring a server side connection-pooler, such as PgBouncer.'; Benefits = 'Improve performance by reducing overhead associated with short-lived and idle database connections'; Tip = 'You can manage your PostgreSQL database connections more efficiently by configuring a connection pooler, such as PgBouncer.'; LearnMoreLink = 'https://aka.ms/azure_postgresql_connection_pooling'; } + ,[PSCustomObject]@{ Id = '38500a53-575d-44b7-8f29-6cd534137438'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlCpuOverload'; Message = 'Increase the PostgreSQL server vCores'; State = 'Disabled'; Version = 2; Description = 'Increase the PostgreSQL server vCores'; LongDescription = 'Our internal telemetry shows that the CPU has been running under high utilization for an extended period of time over the last 7 days. High CPU utilization may lead to slow query performance. To improve performance, we recommend moving to a larger compute size.'; Benefits = 'Improve query performance by reducing CPU pressure'; Tip = 'You can improve the query performance of your PostgreSQL database by increasing the server vCores.'; LearnMoreLink = 'https://aka.ms/postgresqlpricing'; } + ,[PSCustomObject]@{ Id = '993cf5a8-a5c6-4dd6-ac68-fd8c5681d93e'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlLogDuration'; Message = 'Set LogDuration to OFF'; State = 'Disabled'; Version = 2; Description = 'Optimize logging settings by setting LogDuration to OFF'; LongDescription = 'Optimize logging settings by setting LogDuration to OFF'; Benefits = 'Improve server performance I/O'; Tip = 'You can improve your PostgreSQL performance by setting LogDuration to OFF'; LearnMoreLink = 'N/A'; } + ,[PSCustomObject]@{ Id = '661dd0c2-5d39-4cfb-ba57-59808643e36d'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlLogErrorVerbosity'; Message = 'Adjust server parameter: log_error_verbosity'; State = 'Disabled'; Version = 2; Description = 'Improve PostgreSQL log performance'; LongDescription = 'Our internal telemetry indicates that your PostgreSQL server has been configured to output VERBOSE error logs. This can be useful for troubleshooting your database, but it can also result in reduced database performance. To improve performance, we recommend that you change the log_error_verbosity parameter to the DEFAULT setting.'; Benefits = 'Improve database performance by changing the log_error_verbosity parameter to the DEFAULT setting'; Tip = 'You can improve your PostgreSQL database performance by changing your log_error_verbosity setting.'; LearnMoreLink = 'https://aka.ms/azure_postgresql_log_settings'; } + ,[PSCustomObject]@{ Id = '624b0218-0a0e-4b48-a961-33dbafdebb47'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlLoggingCollector'; Message = 'Set LoggingCollector to OFF'; State = 'Disabled'; Version = 2; Description = 'Optimize logging settings by setting LoggingCollector to OFF'; LongDescription = 'Optimize logging settings by setting LoggingCollector to OFF'; Benefits = 'Improve server performance I/O'; Tip = 'You can improve your PostgreSQL performance by setting LoggingCollector to OFF'; LearnMoreLink = 'N/A'; } + ,[PSCustomObject]@{ Id = '6f33a917-418c-4608-b34f-4ff0e7be8637'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlLogicalReplicationSlots'; Message = 'Remove inactive logical replication slots'; State = 'Active'; Version = 9; Description = 'Remove inactive logical replication slots'; LongDescription = 'When an Orcas PostgreSQL flexible server has inactive logical replication slots, degraded server performance and unavailability due to write ahead log (WAL) file retention and buildup of snapshot files might occur. THIS NEEDS IMMEDIATE ATTENTION. Either delete the inactive replication slots, or start consuming the changes from these slots, so that the slots'' Log Sequence Number (LSN) advances and is close to the current LSN of the server.'; Benefits = 'Improve PostgreSQL availability by removing inactive logical replication slots'; Tip = 'You can improve your PostgreSQL availability by removing inactive logical replication slots.'; LearnMoreLink = 'https://aka.ms/azure_postgresql_logical_decoding'; } + ,[PSCustomObject]@{ Id = '04e5099a-9064-4e52-8f3b-322c54dc4cf9'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlLogMinDuration'; Message = 'Set LoggingCollector to -1'; State = 'Disabled'; Version = 2; Description = 'Optimize logging settings by setting LoggingCollector to -1'; LongDescription = 'Optimize logging settings by setting LoggingCollector to -1'; Benefits = 'Improve server performance I/O'; Tip = 'You can improve your PostgreSQL performance by setting LoggingCollector to -1'; LearnMoreLink = 'N/A'; } + ,[PSCustomObject]@{ Id = 'c1f5f212-7dda-4fb2-aa42-8178bfc8f189'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlLogStatement'; Message = 'Set LogStatement to NONE'; State = 'Disabled'; Version = 2; Description = 'Optimize logging settings by setting LogStatement to NONE'; LongDescription = 'Optimize logging settings by setting LogStatement to NONE'; Benefits = 'Improve server performance I/O'; Tip = 'You can improve your PostgreSQL performance by setting LogStatement to NONE'; LearnMoreLink = 'N/A'; } + ,[PSCustomObject]@{ Id = '47b11ec4-7950-43a1-b6b5-f051f812bd34'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlMemoryCache'; Message = 'Move your PostgreSQL server to Memory Optimized SKU'; State = 'Disabled'; Version = 2; Description = 'Move your PostgreSQL server to Memory Optimized SKU'; LongDescription = 'Our internal telemetry shows that there is high churn in the buffer pool for this server which can result in slower query performance and increased IOPS. To improve performance, please review your workload queries to identify opportunities to minimize memory consumed. If no such opportunity found, then we recommend moving to higher SKU with more memory or increase storage size to get more IOPS.'; Benefits = 'Improve query performance by caching more data in memory'; Tip = 'You can improve the query performance of your PostgreSQL database by moving your server to a Memory Optimized SKU.'; LearnMoreLink = 'https://aka.ms/postgresqlpricing'; } + ,[PSCustomObject]@{ Id = 'feba5625-68c8-4b53-90b4-8a9de4f71e9e'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlQueryCaptureMode'; Message = 'Set pg_qs.query_capture_mode to NONE when not troubleshooting'; State = 'Disabled'; Version = 3; Description = 'Optimize query store on an Azure Database for PostgreSQL when not troubleshooting'; LongDescription = 'Our internal telemetry indicates that your PostgreSQL database has been configured to track query performance using the pg_qs.query_capture_mode parameter. While troubleshooting, we suggest setting the pg_qs.query_capture_mode parameter to TOP or ALL. When not troubleshooting, we recommend that you set the pg_qs.query_capture_mode parameter to NONE.'; Benefits = 'Optimize PostgreSQL performance by changing the pg_qs.query_capture_mode parameter to NONE when not troubleshooting'; Tip = 'You can optimize your PostgreSQL performance by changing your pg_qs.query_capture_mode setting to NONE when not troubleshooting.'; LearnMoreLink = 'https://aka.ms/azure_postgresql_query_store'; } + ,[PSCustomObject]@{ Id = '8fd46c9b-5ba1-4133-8a5d-dfc61e1195b1'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlReadReplica'; Message = 'Add PostgreSQL Read Replica'; State = 'Disabled'; Version = 2; Description = 'Add a PostgreSQL Read Replica server'; LongDescription = 'Our internal telemetry shows that you may have a read intensive workload running, which results in resource contention for this server. This may lead to slow query performance for the server. To improve performance, we recommend you add a read replica, and offload some of your read workloads to the replica.'; Benefits = 'Improve query performance by scaling out reads'; Tip = 'You can improve the query performance of your PostgreSQL database my adding a Read Replica server.'; LearnMoreLink = 'https://aka.ms/postgresqlreadreplica'; } + ,[PSCustomObject]@{ Id = 'a8604ddc-7087-4752-b0b3-8fed1a5a37a6'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlReplaceParameter'; Message = 'Set ReplaceParameter to OFF'; State = 'Disabled'; Version = 2; Description = 'Optimize logging settings by setting ReplaceParameter to OFF'; LongDescription = 'Optimize logging settings by setting ReplaceParameter to OFF'; Benefits = 'Improve server performance I/O'; Tip = 'You can improve your PostgreSQL performance by setting ReplaceParameter to OFF'; LearnMoreLink = 'N/A'; } + ,[PSCustomObject]@{ Id = '38f4a461-1543-4089-854c-90e7edf37707'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlCpuRightSize'; Message = 'Right-size underutilized PostgreSQL server'; State = 'Disabled'; Version = 3.1; Description = 'Right-size underutilized PostgreSQL servers'; LongDescription = 'Our internal telemetry shows that the PostgreSQL database server resources have been underutilized for an extended period of time over the last 7 days. Low resource utilization results in unwanted expenditure which can be fixed without significant performance impact. To reduce your costs and efficiently manage your resources, we recommend reducing the compute size (vCores) by half.'; Benefits = 'Reduce cost by right-sizing the PostgreSQL server'; Tip = 'You can improve the overall resource spend for your Azure Database for PostgreSQL by scaling down the compute resources by half.'; LearnMoreLink = 'https://aka.ms/postgresqlpricing'; } + ,[PSCustomObject]@{ Id = 'b8d89adf-9b67-4c44-8a08-5f40f5a5f1ab'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlStatStatementsTrack'; Message = 'Set pg_stat_statements.track to NONE'; State = 'Disabled'; Version = 2; Description = 'Optimize query statistics collection on an Azure Database for PostgreSQL'; LongDescription = 'Our internal telemetry indicates that your PostgreSQL server has been configured to track query statistics using the pg_stat_statements module. While useful for troubleshooting, it can also result in reduced server performance. To improve performance, we recommend that you change the pg_stat_statements.track parameter to NONE.'; Benefits = 'Improve server performance by changing the pg_stat_statements.track parameter to NONE'; Tip = 'You can improve your PostgreSQL server performance by changing your pg_stat_statements.track setting to NONE.'; LearnMoreLink = 'https://aka.ms/azure_postgresql_optimize_query_stats'; } + ,[PSCustomObject]@{ Id = 'ae2b8ab9-f6b9-4531-ba04-44f00880dc18'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlStorageLimit'; Message = 'Increase the Server Storage limit'; State = 'Disabled'; Version = 2; Description = 'Scale the storage limit for PostgreSQL server'; LongDescription = 'Our internal telemetry shows that the server may be constrained because it is approaching limits for the currently provisioned storage values. This may result in degraded performance or in the server being moved to read-only mode. To ensure continued performance, we recommend increasing the provisioned storage amount or turning ON the "Auto-Growth" feature for automatic storage increases'; Benefits = 'Improve query performance by allocating larger storage for the server'; Tip = ''; LearnMoreLink = 'https://aka.ms/postgresqlstoragelimits'; } + ,[PSCustomObject]@{ Id = 'e2fa79e2-b3e0-11e9-a2a3-2a2ae2dbcce4'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Open Source RDBMS (Orcas)'; ResourceType = 'microsoft.dbforpostgresql/servers'; Key = 'OrcasPostgreSqlWorkMem'; Message = 'Increase server parameter: work_mem'; State = 'Disabled'; Version = 2; Description = 'Increase the work_mem to avoid excessive disk spilling from sort and hash'; LongDescription = 'Our internal telemetry shows that the configuration work_mem is too small for your PostgreSQL server which is resulting in disk spilling and degraded query performance. To improve this, we recommend to increase the work_mem limit for the server which will help to reduce the scenarios when the sort or hash happens on disk, thereby improving the overall query performance.'; Benefits = 'Improve query performance by allocating more work_mem for the sort or hash operations thus avoiding unnecessary disk read and write.'; Tip = ''; LearnMoreLink = 'https://aka.ms/runtimeconfiguration'; } + ,[PSCustomObject]@{ Id = 'dd8bef5d-5a56-4239-b25b-a25f283e12f5'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Health AI Deidentification Service'; ResourceType = 'microsoft.healthdataaiservices/deidservices'; Key = 'UpgradeDeIDAPIVersion'; Message = 'Upgrade to the latest Azure Health De-Identification API Version'; State = 'Active'; Version = 1; Description = 'Upgrade to latest API Version for Azure Health De-Identification'; LongDescription = 'Upgrading to the latest API Version for Azure Health De-Identification ensures maximal performance. If using the Health De-Identification SDK, upgrade to the most recent package version. Alternatively, you can use the Azure Portal to create/manage Health De-Identification resources.'; Benefits = 'Improved reliability and performance'; Tip = 'Keep your API version up-to-date for the best performance and reliability'; LearnMoreLink = 'https://learn.microsoft.com/en-us/azure/healthcare-apis/deidentification/'; } + ,[PSCustomObject]@{ Id = 'ed25ee86-c6b4-4485-a129-3c0ec1b523da'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Health AI Deidentification Service'; ResourceType = 'microsoft.healthdataaiservices/deidservices'; Key = 'UpgradeDeIDDataPlaneAPIVersion'; Message = 'Use latest Azure Health De-Identification data plane API version'; State = 'Active'; Version = 1; Description = 'Use newest API version for Azure Health De-Identification'; LongDescription = 'Use the newest API version for Azure Health De-Identification. For the Health De-Identification SDK, upgrade to the newest package version. Verify all API requests include the api-version query parameter.'; Benefits = 'Newest API version offers enhanced throughput and security.'; Tip = 'Ensure your API version is up-to-date for the best performance and reliability'; LearnMoreLink = 'https://learn.microsoft.com/azure/healthcare-apis/deidentification'; } + ,[PSCustomObject]@{ Id = '061dcd4a-2090-4ec0-b4e0-ec9eaae5cf80'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBAttachments'; Message = 'Migrate Azure Cosmos DB attachments to Azure Blob Storage'; State = 'Active'; Version = 2; Description = 'Migrate Azure Cosmos DB attachments to Azure Blob Storage'; LongDescription = 'We noticed that your Azure Cosmos collection is using the legacy attachments feature. We recommend migrating attachments to Azure Blob Storage to improve the resiliency and scalability of your blob data.'; Benefits = 'Improve attachment blob resiliency and scalability'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/attachments#migrating-attachments-to-azure-blob-storage'; } + ,[PSCustomObject]@{ Id = 'cdf51428-a41b-4735-ba23-39f3b7cde20c'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBAutoscaleRecommendations'; Message = 'Enable autoscale on your Azure Cosmos DB database or container'; State = 'Active'; Version = 1.1; Description = 'Enable autoscale on your Azure Cosmos DB database or container'; LongDescription = 'Based on your usage in the past 7 days, you can save by enabling autoscale. For each hour, we compared the RU/s provisioned to the actual utilization of the RU/s (what autoscale would have scaled to) and calculated the cost savings across the time period. Autoscale helps optimize your cost by scaling down RU/s when not in use.'; Benefits = 'Optimize Azure spend'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/provision-throughput-autoscale'; } + ,[PSCustomObject]@{ Id = '683b5e32-48aa-4b46-a822-4e22a20ee244'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBDefaultIndexingWithManyPaths'; Message = 'Optimize your Azure Cosmos DB indexing policy to only index what''s needed'; State = 'Active'; Version = 1; Description = 'Optimize your Azure Cosmos DB indexing policy to only index what''s needed'; LongDescription = 'Your Azure Cosmos DB containers are using the default indexing policy, which indexes every property in your documents. Because you''re storing large documents, a high number of properties get indexed, resulting in high Request Unit consumption and poor write latency. To optimize write performance, we recommend overriding the default indexing policy to only index the properties used in your queries.'; Benefits = 'Improve the write throughput of your container'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/index-policy'; } + ,[PSCustomObject]@{ Id = '5e4e9f04-9201-4fd9-8af6-a9539d13d8ec'; Category = 'High Availability'; Control = 'Scalability '; Impact = 'High'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBFixedCollections'; Message = 'Configure Azure Cosmos DB containers with a partition key'; State = 'Active'; Version = 8; Description = 'Configure Azure Cosmos DB containers with a partition key'; LongDescription = 'When Azure Cosmos DB nonpartitioned collections reach their provisioned storage quota, you lose the ability to add data. Your Cosmos DB nonpartitioned collections are approaching their provisioned storage quota. Migrate these collections to new collections with a partition key definition so they can automatically be scaled out by the service.'; Benefits = 'Scale your containers seamlessly with increase in storage or request rates without running into any limits'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/partitioning-overview#choose-partitionkey'; } + ,[PSCustomObject]@{ Id = '4a993d7c-9d83-4d85-b5a9-7cce0b136378'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBFreeTierOverage'; Message = 'Review the configuration of your Azure Cosmos DB free tier account'; State = 'Active'; Version = 3.2; Description = 'Review the configuration of your Azure Cosmos DB free tier account'; LongDescription = 'Your Azure Cosmos DB free tier account is currently containing resources with a total provisioned throughput exceeding 1000 Request Units per second (RU/s). Because Azure Cosmos DB''s free tier only covers the first 1000 RU/s of throughput provisioned across your account, any throughput beyond 1000 RU/s are billed at the regular pricing. As a result, we anticipate that you are charged for the throughput currently provisioned on your Azure Cosmos DB account.'; Benefits = 'Confirm your expected Azure Cosmos DB costs'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/understand-your-bill#azure-free-tier'; } + ,[PSCustomObject]@{ Id = '75c8c891-46d2-41fa-a81c-84e870a139a9'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBGatewayMode'; Message = 'Configure your Azure Cosmos DB applications to use Direct connectivity in the SDK'; State = 'Active'; Version = 3.1; Description = 'Configure your Azure Cosmos DB applications to use Direct connectivity in the SDK'; LongDescription = 'We noticed that your Azure Cosmos DB applications are using Gateway mode via the Cosmos DB .NET or Java SDKs. We recommend switching to Direct connectivity for lower latency and higher scalability.'; Benefits = 'Improved latency and high availability for your applications'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/performance-tips#networking'; } + ,[PSCustomObject]@{ Id = '3a7c4990-18e7-4581-b62d-c745260e7c5b'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBHierarchicalPartitionKey'; Message = 'Use hierarchical partition keys for optimal data distribution'; State = 'Active'; Version = 1; Description = 'Use hierarchical partition keys for optimal data distribution'; LongDescription = 'This account has a custom setting that allows the logical partition size in a container to exceed the limit of 20 GB. This setting was applied by the Azure Cosmos DB team as a temporary measure to give you time to re-architect your application with a different partition key. It is not recommended as a long-term solution, as SLA guarantees are not honored when the limit is increased. You can now use hierarchical partition keys (preview) to re-architect your application. The feature allows you to exceed the 20 GB limit by setting up to three partition keys, ideal for multi-tenant scenarios or workloads that use synthetic keys.'; Benefits = 'Optimize data distribution and performance'; Tip = ''; LearnMoreLink = 'https://devblogs.microsoft.com/cosmosdb/hierarchical-partition-keys-private-preview/'; } + ,[PSCustomObject]@{ Id = 'bdb595a4-e148-41f9-98e8-68ec92d1932e'; Category = 'High Availability'; Control = 'Scalability '; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBHighMetadataOperations'; Message = 'Use static Cosmos DB client instances in your code and cache the names of databases and collections'; State = 'Active'; Version = 6; Description = 'Use static Cosmos DB client instances in your code and cache the names of databases and collections'; LongDescription = 'A high number of metadata operations on an account can result in rate limiting. Metadata operations have a system-reserved request unit (RU) limit. Avoid rate limiting from metadata operations by using static Cosmos DB client instances in your code and caching the names of databases and collections.'; Benefits = 'Optimize your RU usage and avoid rate limiting'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/performance-tips'; } + ,[PSCustomObject]@{ Id = 'a4255ba5-b07e-45ae-99ca-25e6c2079e3c'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBIdleContainers'; Message = 'Decrease provisioned throughput or delete your idle Azure Cosmos DB containers'; State = 'Active'; Version = 3; Description = 'Consider taking action on your idle Azure Cosmos DB containers'; LongDescription = 'We haven''t detected any activity over the past 30 days on one or more of your Azure Cosmos DB containers. Consider lowering their throughput, or deleting them if you don''t plan on using them.'; Benefits = 'Optimize Azure spend'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/how-to-provision-container-throughput'; } + ,[PSCustomObject]@{ Id = '44a0a07f-23a2-49df-b8dc-a1b14c7c6a9d'; Category = 'High Availability'; Control = 'Other'; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBKeyVaultWrap'; Message = 'Your Cosmos DB account is unable to access its linked Azure Key Vault hosting your encryption key'; State = 'Active'; Version = 6; Description = 'Check linked Azure Key Vault hosting your encryption key'; LongDescription = 'When an Azure Cosmos DB account can''t access its linked Azure Key Vault hosting the encyrption key, data access and security issues might happen. Your Azure Key Vault''s configuration is preventing your Cosmos DB account from contacting the key vault to access your managed encryption keys. If you recently performed a key rotation, ensure that the previous key, or key version, remains enabled and available until Cosmos DB completes the rotation. The previous key or key version can be disabled after 24 hours, or after the Azure Key Vault audit logs don''t show any activity from Azure Cosmos DB on that key or key version.'; Benefits = 'Update your configurations to continue using customer-managed keys and access your data'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/how-to-setup-cmk'; } + ,[PSCustomObject]@{ Id = '213974c8-ed9c-459f-9398-7cdaa3c28856'; Category = 'High Availability'; Control = 'Other'; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBLazyIndexing'; Message = 'Consider Consistent indexing mode on Azure Cosmos DB containers'; State = 'Active'; Version = 7; Description = 'Configure consistent indexing mode on Azure Cosmos DB containers'; LongDescription = 'Azure Cosmos containers configured with the Lazy indexing mode update asynchronously, which improves write performance, but can impact query freshness. Your container is configured with the Lazy indexing mode. If query freshness is critical, use Consistent Indexing Mode for immediate index updates.'; Benefits = 'Improve query result consistency and reliability'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/how-to-manage-indexing-policy'; } + ,[PSCustomObject]@{ Id = 'bc9e5110-a220-4ab9-8bc9-53f92d3eef70'; Category = 'High Availability'; Control = 'Service Upgrade and Retirement'; Impact = 'High'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBMaxGlobalLSNReachedV2'; Message = 'Upgrade to 2.6.14 version of the Async Java SDK v2 to avoid a critical issue or upgrade to Java SDK v4 as Async Java SDK v2 is being deprecated'; State = 'Active'; Version = 6; Description = 'Hotfix - Upgrade to 2.6.14 version of the Async Java SDK v2 or to Java SDK v4'; LongDescription = 'There''s a critical bug in version 2.6.13 (and lower) of the Azure Cosmos DB Async Java SDK v2 causing errors when a Global logical sequence number (LSN) greater than the Max Integer value is reached. The error happens transparently to you by the service after a large volume of transactions occur in the lifetime of an Azure Cosmos DB container. Note: While this is a critical hotfix for the Async Java SDK v2, we still highly recommend you migrate to the [Java SDK v4](https://docs.microsoft.com/azure/cosmos-db/sql/sql-api-sdk-java-v4).'; Benefits = 'If action isn''t taken, all create, read, update, and delete operations may begin to fail with NumberFormatException'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/sql/sql-api-sdk-async-java'; } + ,[PSCustomObject]@{ Id = '38942ae5-3154-4e0b-98d9-23aa061c334b'; Category = 'High Availability'; Control = 'Service Upgrade and Retirement'; Impact = 'High'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBMaxGlobalLSNReachedV4'; Message = 'Upgrade to the current recommended version of the Java SDK v4 to avoid a critical issue'; State = 'Active'; Version = 6; Description = 'Critical issue - Upgrade to the current recommended version of the Java SDK v4'; LongDescription = 'There''s a critical bug in version 4.15 and lower of the Azure Cosmos DB Java SDK v4 causing errors when a Global logical sequence number (LSN) greater than the Max Integer value is reached. This happens transparently to you by the service after a large volume of transactions occur in the lifetime of an Azure Cosmos DB container. Avoid this problem by upgrading to the current recommended version of the Java SDK v4'; Benefits = 'If action isn''t taken, all create, read, update, and delete operations may begin to fail with NumberFormatException'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/sql/sql-api-sdk-java-v4'; } + ,[PSCustomObject]@{ Id = '52fef986-5897-4359-8b92-0f22749f0d73'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBMigrateToContinuousBackup'; Message = 'Improve resiliency by migrating your Azure Cosmos DB accounts to continuous backup'; State = 'Active'; Version = 1.1; Description = 'Improve resiliency by migrating your Azure Cosmos DB accounts to continuous backup'; LongDescription = 'Your Azure Cosmos DB accounts are configured with periodic backup. Continuous backup with point-in-time restore is now available on these accounts. With continuous backup, you can restore your data to any point in time within the past 30 days. Continuous backup may also be more cost-effective as a single copy of your data is retained.'; Benefits = 'Improve the resiliency of your Azure Cosmos DB workloads'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/continuous-backup-restore-introduction'; } + ,[PSCustomObject]@{ Id = '6aa7a0df-192f-4dfa-bd61-f43db4843e7d'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBMigrateToManualThroughputFromAutoscale'; Message = 'Configure manual throughput instead of autoscale on your Azure Cosmos DB database or container'; State = 'Active'; Version = 2.1; Description = 'Configure manual throughput instead of autoscale on your Azure Cosmos DB database or container'; LongDescription = 'Based on your usage in the past 7 days, you can save by using manual throughput instead of autoscale. Manual throughput is more cost-effective when average utilization of your maximum throughput (RU/s) is greater than 66% or less than or equal to 10%.'; Benefits = 'Optimize Azure spend'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/how-to-choose-offer'; } + ,[PSCustomObject]@{ Id = 'ceb9372d-60f6-4564-8033-a8b1ead4fa76'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBMongoMigrationUpgrade'; Message = 'Migrate your Azure Cosmos DB API for MongoDB account to v4.2 to save on query/storage costs and utilize new features'; State = 'Active'; Version = 2.1; Description = 'Migrate your Azure Cosmos DB API for MongoDB account to v4.2 to save on query/storage costs and utilize new features'; LongDescription = 'Migrate your database account to a new database account to take advantage of Azure Cosmos DB''s API for MongoDB v4.2. Upgrading to v4.20 can reduce your storage costs by up to 55% and your query costs by up to 45% by leveraging a new storage format. Numerous other features such as multi-document transactions are also included in v4.2. When upgrading, you must also migrate the data in your existing account to a new account created using version 4.2. Azure Data Factory or Studio 3T can assist you in migrating your data.'; Benefits = 'Improved reliability, query/storage efficiency, performance, and new feature capabilities'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/mongodb/feature-support-42'; } + ,[PSCustomObject]@{ Id = '123039b5-0fda-4744-9a17-d6b5d5d122b2'; Category = 'High Availability'; Control = 'Service Upgrade and Retirement'; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBMongoNudge36AwayFrom32'; Message = 'Use the new 3.6+ endpoint to connect to your upgraded Azure Cosmos DB''s API for MongoDB account'; State = 'Active'; Version = 6; Description = 'Use the new 3.6+ endpoint to connect to your upgraded Azure Cosmos DB''s API for MongoDB account'; LongDescription = 'Some of your applications are connecting to your upgraded Azure Cosmos DB''s API for MongoDB account using the legacy 3.2 endpoint - [accountname].documents.azure.com. Use the new endpoint - [accountname].mongo.cosmos.azure.com (or its equivalent in sovereign, government, or restricted clouds).'; Benefits = 'Take advantage of the latest features in version 3.6+ of Azure Cosmos DB''s API for MongoDB'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/mongodb-feature-support-40'; } + ,[PSCustomObject]@{ Id = '0da795d9-26d2-4f02-a019-0ec383363c88'; Category = 'High Availability'; Control = 'Other'; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBMongoSelfServeUpgrade'; Message = 'Upgrade your Azure Cosmos DB API for MongoDB account to v4.2 to save on query/storage costs and utilize new features'; State = 'Active'; Version = 7; Description = 'Upgrade your Azure Cosmos DB API for MongoDB account to v4.2 to save on query/storage costs and utilize new features'; LongDescription = 'Your Azure Cosmos DB API for MongoDB account is eligible to upgrade to version 4.2. Upgrading to v4.2 can reduce your storage costs by up to 55% and your query costs by up to 45% by leveraging a new storage format. Numerous additional features such as multi-document transactions are also included in v4.2.'; Benefits = 'Improved reliability, query/storage efficiency, performance, and new feature capabilities'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/mongodb-version-upgrade'; } + ,[PSCustomObject]@{ Id = 'ec6fe20c-08d6-43da-ac18-84ac83756a88'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBMongoServerSideRetries'; Message = 'Enable Server Side Retry (SSR) on your Azure Cosmos DB''s API for MongoDB account'; State = 'Active'; Version = 6; Description = 'Enable Server Side Retry (SSR) on your Azure Cosmos DB''s API for MongoDB account'; LongDescription = 'When an account is throwing a TooManyRequests error with the 16500 error code, enabling Server Side Retry (SSR) can help mitigate the issue.'; Benefits = 'Prevent throttling and improve your query reliability and performance'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/prevent-rate-limiting-errors'; } + ,[PSCustomObject]@{ Id = '8b993855-1b3f-4392-8860-6ed4f5afd8a7'; Category = 'Cost'; Control = ''; Impact = 'Low'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBOptimizeRU'; Message = 'Optimize RU provisioning for Azure Cosmos DB'; State = 'Active'; Version = 2; Description = 'Provision the optimal amount of Request Units for Azure Cosmos DB'; LongDescription = 'This recommendation analyzes usage data in the past 3 weeks and recommends the optimal amount of Request Units to provision for an Azure Cosmos DB. The recommendation is based on the maximum Request Units used in every 5-minute interval and any throttling reports in the 3-week period.'; Benefits = 'Optimize Azure spend'; Tip = ''; LearnMoreLink = 'https://aka.ms/aa_cosmosdb_ru_learnmore'; } + ,[PSCustomObject]@{ Id = '0f04b7d8-55cd-4cac-b324-d7ed9b11fab0'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBOrderByHighRUCharge'; Message = 'Add composite indexes to your Azure Cosmos DB container'; State = 'Disabled'; Version = 2; Description = 'Add composite indexes to your Azure Cosmos DB container'; LongDescription = 'Your Azure Cosmos DB containers are running ORDER BY queries incurring high Request Unit (RU) charges. It is recommended to add composite indexes to your containers'' indexing policy to improve the RU consumption and decrease the latency of these queries.'; Benefits = 'Run ORDER BY queries more efficiently'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/index-policy#composite-indexes'; } + ,[PSCustomObject]@{ Id = 'bf161e78-ce57-4198-82e8-a34522045518'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBPartitionMerge'; Message = 'Enable partition merge to configure an optimal database partition layout'; State = 'Active'; Version = 3.2; Description = 'Enable partition merge to configure an optimal database partition layout'; LongDescription = 'Your account has collections that could benefit from enabling partition merge. Minimizing the number of partitions will reduce rate limiting and resolve storage fragmentation problems. Containers are likely to benefit from this if the RU/s per physical partition is < 3000 RUs and storage is < 20 GB.'; Benefits = 'Improve performance and lower the chance of rate-limiting'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/merge?tabs=azure-powershell'; } + ,[PSCustomObject]@{ Id = 'bf161e78-ce57-4198-82e8-a34522045518'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBPartitionMerge'; Message = 'Enable partition merge to configure an optimal database partition layout'; State = 'Active'; Version = 3.3; Description = 'Enable partition merge to configure an optimal database partition layout'; LongDescription = 'Your account has collections that could benefit from enabling partition merge. Minimizing the number of partitions will reduce rate limiting and resolve storage fragmentation problems. Containers are likely to benefit from this if the RU/s per physical partition is < 3000 RUs and storage is < 20 GB.'; Benefits = 'Improve performance and lower the chance of rate-limiting'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/merge?tabs=azure-powershell'; } + ,[PSCustomObject]@{ Id = 'e27c5181-5005-4dc3-a449-89b726a3bf54'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBQueryPageSize'; Message = 'Configure your Azure Cosmos DB query page size (MaxItemCount) to -1'; State = 'Active'; Version = 2.1; Description = 'Configure your Azure Cosmos DB query page size (MaxItemCount) to -1'; LongDescription = 'You are using the query page size of 100 for queries for your Azure Cosmos container. We recommend using a page size of -1 for faster scans.'; Benefits = 'End to end query latency will be improved significantly'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/sql-api-query-metrics#max-item-count'; } + ,[PSCustomObject]@{ Id = 'b57f7a29-dcc8-43de-86fa-18d3f9d3764d'; Category = 'High Availability'; Control = 'Business Continuity'; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBSingleRegionProdAccounts'; Message = 'Add a second region to your production workloads on Azure Cosmos DB'; State = 'Active'; Version = 6; Description = 'Add a second region to your production workloads on Azure Cosmos DB'; LongDescription = 'Production workloads on Azure Cosmos DB run in a single region might have availability issues, this appears to be the case with some of your Cosmos DB accounts. Increase their availability by configuring them to span at least two Azure regions. NOTE: Additional regions incur additional costs.'; Benefits = 'Improve the availability of your production workloads'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/high-availability'; } + ,[PSCustomObject]@{ Id = '893a1342-e1f6-49ec-97dc-c5c4471438c2'; Category = 'Cost'; Control = ''; Impact = 'Low'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBOptimizeUnusedContainer'; Message = 'Optimize Unused Containers for Azure Cosmos DB'; State = 'Disabled'; Version = 1.1; Description = 'Consider taking action on your unused containers'; LongDescription = 'This recommendation shows if Azure Cosmos DB containers and/or geo-replications are unused by looking at their usage data for the past 30 days. It is recommended to reduce the provisioned throughput to the configuration minimum if the stored data is still needed, or delete the container if it is no longer needed. If you have geo-replication enabled, ensure that you''re using all the regions chosen.'; Benefits = 'Optimize Azure spend'; Tip = ''; LearnMoreLink = 'https://aka.ms/cosmosdb/usage-cost'; } + ,[PSCustomObject]@{ Id = '51a4e6bd-5a95-4a41-8309-40f5640fdb8b'; Category = 'High Availability'; Control = 'Other'; Impact = 'Medium'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBUpgradeOldSDK'; Message = 'Upgrade your old Azure Cosmos DB SDK to the latest version'; State = 'Active'; Version = 11; Description = 'Upgrade old Azure Cosmos DB SDK to the latest version'; LongDescription = 'An Azure Cosmos DB account using an old version of the SDK lacks the latest fixes and improvements. Your Azure Cosmos DB account is using an old version of the SDK. For the latest fixes, performance improvements, and new feature capabilities, upgrade to the latest version.'; Benefits = 'Improved reliability, performance, and new feature capabilities'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/'; } + ,[PSCustomObject]@{ Id = '60a55165-9ccd-4536-81f6-e8dc6246d3d2'; Category = 'High Availability'; Control = 'Service Upgrade and Retirement'; Impact = 'High'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBUpgradeOutdatedSDK'; Message = 'Upgrade your deprecated Azure Cosmos DB SDK to a supported version'; State = 'Active'; Version = 10; Description = 'Upgrade outdated Azure Cosmos DB SDK to the latest version'; LongDescription = 'An Azure Cosmos DB account using an old version of the SDK lacks the latest fixes and improvements. Your Azure Cosmos DB account is using an outdated version of the SDK. We recommend upgrading to the latest version for the latest fixes, performance improvements, and new feature capabilities.'; Benefits = 'Improved reliability, performance, and new feature capabilities'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/'; } + ,[PSCustomObject]@{ Id = 'bf161e78-ce57-4198-82e8-a34522045518'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'Azure Cosmos DB'; ResourceType = 'microsoft.documentdb/databaseaccounts'; Key = 'CosmosDBPartitionMerge'; Message = 'Enable partition merge to configure an optimal database partition layout'; State = 'Active'; Version = 4.7; Description = 'Enable partition merge to configure an optimal database partition layout'; LongDescription = 'Your account has collections that could benefit from enabling partition merge. Minimizing the number of partitions will reduce rate limiting and resolve storage fragmentation problems. Containers are likely to benefit from this if the RU/s per physical partition is < 3000 RUs and storage is < 20 GB.'; Benefits = 'Improve performance and lower the chance of rate-limiting'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cosmos-db/merge?tabs=azure-powershell'; } + ,[PSCustomObject]@{ Id = 'dc045941-8e65-437b-992b-1f0acd28bb6e'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Virtual Machines'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'EphemeralOsDisk'; Message = 'Use Ephemeral OS Disk'; State = 'Active'; Version = 4.1; Description = 'Use Virtual Machines with Ephemeral OS Disk enabled to save cost and get better performance'; LongDescription = 'With Ephemeral OS Disk, Customers get these benefits: Save on storage cost for OS disk. Get lower read/write latency to OS disk. Faster VM Reimage operation by resetting OS (and Temporary disk) to its original state. It is more preferable to use Ephemeral OS Disk for short-lived IaaS VMs or VMs with stateless workloads.'; Benefits = 'Reduced storage cost, lower read/write latency, faster reimage operation for OS disk. More preferable for short-lived IaaS VMs or VMs with stateless workloads'; Tip = 'Ephemeral OS disk incurs no storage cost for OS disk and provides lower read/write latency to the OS disk. It also provides faster VM reimage operation to wipe the contents on OS disk and reset the VM to its original state. This significantly reduces the idle time involved with multiple VM create/delete operations.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-machines/windows/ephemeral-os-disks'; } + ,[PSCustomObject]@{ Id = 'fec68ad4-95b5-4dca-9e20-afa10b3e5401'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'AzureExpressRoute'; Message = 'Experience more predictable, consistent latency with a private connection to Azure'; State = 'Active'; Version = 1.0; Description = 'Experience more predictable, consistent latency with a private connection to Azure'; LongDescription = 'Improve the performance, privacy, and reliability of your business-critical apps by extending your on-premises networks to Azure with Azure ExpressRoute. Establish private ExpressRoute connections directly from your WAN, through a cloud exchange facility, or through POP and IPVPN connections.'; Benefits = 'Fast, private, bandwidth up to 100 Gbps, plus cost benefits'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/expressroute/expressroute-howto-circuit-portal-resource-manager'; } + ,[PSCustomObject]@{ Id = '835e829e-9af6-4758-80d2-98df565d1524'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Kubernetes Service'; ResourceType = 'microsoft.containerservice/fleets'; Key = 'UpdateToLatestFleetApi'; Message = 'Update Fleet API'; State = 'Active'; Version = 2; Description = 'Update Fleet API to the latest Version'; LongDescription = 'We have identified sdk calls from outdated Fleet API for resources under this subscription. We recommend switching to the latest sdk versions. This ensures you receive the latest features and performance improvements.'; Benefits = 'Latest Fleet API contain fixes for known issues and additional improvements.'; Tip = ''; LearnMoreLink = ''; } + ,[PSCustomObject]@{ Id = 'a5e8a0f8-2c84-407a-b3d8-f371d684363b'; Category = 'High Availability'; Control = 'Service Upgrade and Retirement'; Impact = 'Medium'; ServiceName = 'Azure Fluid Relay Service'; ResourceType = 'microsoft.fluidrelay/fluidrelayservers'; Key = 'UpgradeClientLibrary'; Message = 'Upgrade your Azure Fluid Relay client library'; State = 'Active'; Version = 14; Description = 'Azure Fluid Relay client library should be upgraded'; LongDescription = 'If the Azure Fluid Relay service is invoked with an old client library, it might cause appplication problems. To ensure your application remains operational, upgrade your Azure Fluid Relay client library to the latest version. Upgrading provides the most up-to-date functionality, and enhancements in performance and stability.'; Benefits = 'Improved reliability'; Tip = ''; LearnMoreLink = 'https://learn.microsoft.com/en-us/azure/azure-fluid-relay/concepts/version-compatibility'; } + ,[PSCustomObject]@{ Id = '8109a740-abe9-453e-91fc-c25598de73d0'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'HDInsight'; ResourceType = 'microsoft.hdinsight/clusters'; Key = 'AccWriteCandidate'; Message = 'Consider upgrading to Accelerated Writes to improve performance of your HBase cluster'; State = 'Active'; Version = 2; Description = 'Consider using Accelerated Writes feature in your HBase cluster to improve cluster performance.'; LongDescription = 'You are seeing this advisor recommendation because HDInsight team''s system log shows that in the past 7 days, your cluster has encountered the following scenarios:\n 1. High WAL sync time latency\n 2. High write request count (at least 3 one hour windows of over 1000 avg_write_requests/second/node)\n\nThese conditions are indicators that your cluster is suffering from high write latencies. This could be due to heavy workload performed on your cluster.\nTo improve the performance of your cluster, you may want to consider utilizing the Accelerated Writes feature provided by Azure HDInsight HBase. The Accelerated Writes feature for HDInsight Apache HBase clusters attaches premium SSD-managed disks to every RegionServer (worker node) instead of using cloud storage. As a result, provides low write-latency and better resiliency for your applications.\nTo read more on this feature, please visit link: '; Benefits = 'Lower write-latency and better resiliency for your applications.'; Tip = 'Consider upgrading to Accelerated Writes to improve performance of your HBase cluster'; LearnMoreLink = 'https://docs.microsoft.com/azure/hdinsight/hbase/apache-hbase-accelerated-writes'; } + ,[PSCustomObject]@{ Id = 'e459ed06-6204-4c85-9f75-9b046b68578a'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'HDInsight'; ResourceType = 'microsoft.hdinsight/clusters'; Key = 'CompactionQueueCandidate'; Message = 'Increasing compaction threads count'; State = 'Active'; Version = 3; Description = 'Consider increasing your compaction threads for compactions to complete faster'; LongDescription = 'The compaction queue in your region servers are more than 2000 suggesting that more data requires compaction. Slower compactions can impact read performance as the number of files to read are more. More files without compaction can also impact the heap usage related to how files interact with Azure file system.'; Benefits = 'Faster compactions would ensure faster reads and less heap usage.'; Tip = 'Increase compaction thread count to improve read performance'; LearnMoreLink = 'https://docs.microsoft.com/azure/hdinsight/hbase/apache-hbase-advisor'; } + ,[PSCustomObject]@{ Id = '469b5242-26ee-4a4c-ba65-97479166bcf1'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'HDInsight'; ResourceType = 'microsoft.hdinsight/clusters'; Key = 'FlushQueueCandidate'; Message = 'Tuning the flushes'; State = 'Active'; Version = 3; Description = 'Consider increasing the flusher threads'; LongDescription = 'The flush queue size in your region servers are more than 100 or there are updates getting blocked frequently. Tuning of the flush handler is recommended.'; Benefits = 'Faster flushes would clear the writes from being blocked.'; Tip = 'Increase flush handler count to improve write performance'; LearnMoreLink = 'https://docs.microsoft.com/azure/hdinsight/hbase/apache-hbase-advisor'; } + ,[PSCustomObject]@{ Id = 'cd31b398-afa9-40fb-875b-18737857198c'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'HDInsight'; ResourceType = 'microsoft.hdinsight/clusters'; Key = 'GCSCertRotation'; Message = 'Enable critical updates to be applied to your HDInsight clusters'; State = 'Disabled'; Version = 7; Description = 'Enable critical updates to be applied to your HDInsight clusters'; LongDescription = 'HDInsight service is applying an important certificate related update to your cluster. However, one or more policies in your subscription are preventing HDInsight service from creating or modifying network resources (Load balancer, Network Interface and Public IP address) associated with your clusters and applying this update. Please take actions to allow HDInsight service to create or modify network resources (Load balancer, Network interface and Public IP address) associated with your clusters before Jan 13, 2021 05:00 PM UTC. The HDInsight team will be performing updates between Jan 13, 2021 05:00 PM UTC and Jan 16, 2021 05:00 PM UTC. Failure to apply this update may result in your clusters becoming unhealthy and unusable. '; Benefits = 'Ensure cluster health and stability'; Tip = 'Enable critical updates to be applied to your HDInsight clusters'; LearnMoreLink = 'https://docs.microsoft.com/azure/hdinsight/hdinsight-hadoop-provision-linux-clusters'; } + ,[PSCustomObject]@{ Id = 'd3a6303c-ac8f-4a9c-aad9-939b440d17ba'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'HDInsight'; ResourceType = 'microsoft.hdinsight/clusters'; Key = 'GCSCertRotationR3DropRecreate'; Message = 'Drop and recreate your HDInsight clusters to apply critical updates'; State = 'Disabled'; Version = 6; Description = 'Drop and recreate your HDInsight clusters to apply critical updates'; LongDescription = 'The HDInsight service has attempted to apply a critical certificate update on all your running clusters. However, due to some custom configuration changes, we are unable to apply the certificate updates on some of your clusters. Please drop and recreate your cluster before Jan 25th, 2021 to prevent the cluster from becoming unhealthy and unusable. '; Benefits = 'Ensure cluster health and stability'; Tip = 'Drop and recreate your HDInsight clusters to apply critical updates'; LearnMoreLink = 'https://docs.microsoft.com/azure/hdinsight/hdinsight-hadoop-provision-linux-clusters'; } + ,[PSCustomObject]@{ Id = 'dddd213b-87b9-439e-a607-a9ecd94e0ae1'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'HDInsight'; ResourceType = 'microsoft.hdinsight/clusters'; Key = 'GCSCertRotationR3PlanPatch'; Message = 'Apply critical updates to your HDInsight clusters'; State = 'Disabled'; Version = 5.1; Description = 'Apply critical updates to your HDInsight clusters'; LongDescription = 'The HDInsight service has attempted to apply a critical certificate update on all your running clusters. However, one or more policies in your subscription are preventing HDInsight service from creating or modifying network resources (Load balancer, Network Interface and Public IP address) associated with your clusters and applying this update. Please remove or update your policy assignment to allow HDInsight service to create or modify network resources (Load balancer, Network interface and Public IP address) associated with your clusters before Jan 21, 2021 05:00 PM UTC. The HDInsight team will be performing updates between Jan 21, 2021 05:00 PM UTC and Jan 23, 2021 05:00 PM UTC. To verify the policy update, you can try to create network resources (Load balancer, Network interface and Public IP address) in the same resource group and Subnet where your cluster is in. Failure to apply this update may result in your clusters becoming unhealthy and unusable. You can also drop and recreate your cluster before Jan 25th, 2021 to prevent the cluster from becoming unhealthy and unusable. The HDInsight service will send another notification if we failed to apply the update to your clusters.'; Benefits = 'Ensure cluster health and stability'; Tip = 'Apply critical updates to your HDInsight clusters'; LearnMoreLink = 'https://docs.microsoft.com/azure/hdinsight/hdinsight-hadoop-provision-linux-clusters'; } + ,[PSCustomObject]@{ Id = '69740e3e-5b96-4b0e-b9b8-4d7573e3611c'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'HDInsight'; ResourceType = 'microsoft.hdinsight/clusters'; Key = 'GCSCertRotationRound2'; Message = 'Apply critical updates by dropping and recreating your HDInsight clusters (certificate rotation round 2)'; State = 'Active'; Version = 6; Description = 'Apply critical updates by dropping and recreating your HDInsight clusters (certificate rotation round 2)'; LongDescription = 'The HDInsight service attempted to apply a critical certificate update on your running clusters. However, due to some custom configuration changes, we''re unable to apply the updates on all clusters. To prevent those clusters from becoming unhealthy and unusable, drop and recreate your clusters.'; Benefits = 'Ensure cluster health and stability'; Tip = 'Apply critical updates by dropping and recreating your HDInsight clusters (certificate rotation round 2)'; LearnMoreLink = 'https://docs.microsoft.com/azure/hdinsight/hdinsight-hadoop-provision-linux-clusters'; } + ,[PSCustomObject]@{ Id = '80c1538d-5962-4b54-8018-1bed379e4029'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'HDInsight'; ResourceType = 'microsoft.hdinsight/clusters'; Key = 'HBaseMemstoreReadPercentage'; Message = 'HBase Query advisor for tuning memstore reads'; State = 'Active'; Version = 2; Description = 'Reads happen on most recent data'; LongDescription = 'More than 75% of your read requests are landing on the memstore. That indicates that the reads are primarily on recent data. This suggests that even if a flush happens on the memstore, the recent file needs to be accessed and that file needs to be in the cache.'; Benefits = 'If the reads are on the most recent data, the suggested config changes will help you do the reads from the memory as much as possible, therefore helping with faster read performance.'; Tip = 'HBase reads tuning'; LearnMoreLink = 'https://docs.microsoft.com/azure/hdinsight/hbase/apache-hbase-advisor'; } + ,[PSCustomObject]@{ Id = '36dff9ef-afde-40f5-b742-79a0bafcf6c2'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'HDInsight'; ResourceType = 'microsoft.hdinsight/clusters'; Key = 'KafkaVersionRetirement'; Message = 'Deprecation of Kafka 1.1 in HDInsight 4.0 Kafka cluster'; State = 'Disabled'; Version = 8; Description = 'Deprecation of Kafka 1.1 in HDInsight 4.0 Kafka cluster'; LongDescription = 'Starting July 1, 2020, customers will not be able to create new Kafka clusters with Kafka 1.1 on HDInsight 4.0. Existing clusters will run as is without support from Microsoft. Consider moving to Kafka 2.1 on HDInsight 4.0 by June 30 2020 to avoid potential system/support interruption.'; Benefits = 'Avoid potential system/support interruption'; Tip = 'Deprecation of Kafka 1.1 in HDInsight 4.0 Kafka cluster'; LearnMoreLink = 'https://aka.ms/hdiretirekafka'; } + ,[PSCustomObject]@{ Id = '353bcb88-3747-4a7a-8b1c-374117db5668'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'HDInsight'; ResourceType = 'microsoft.hdinsight/clusters'; Key = 'PreventVMReboot'; Message = 'Prevent HDInsight cluster VMs from rebooting periodically'; State = 'Disabled'; Version = 6; Description = 'Prevent HDInsight cluster VMs from rebooting periodically.'; LongDescription = 'Starting from mid November 2020, you may have noticed HDInsight cluster VMs getting rebooted on a regular basis. This could be caused by: 1. Clamav is enabled on your cluster and it could consume large amount of memory. Under certain conditions this could trigger node reboot. 2. Microsoft is updating Azure services in a phased manner to use TLS certificates from a different set of Certificate Authorities (CAs). When a new CA certificate is available, HDInsight detects and adds the certificate to the JDK trust store and schedules a reboot in a staggered manner. HDInsight is deploying fixes and applying patch for all running clusters for both issues. To apply the fix immediately and avoid unexpected VMs rebooting, you can run below script actions on all cluster nodes as a persistent script action. HDInsight will post another notice after the fix and patching complete. See recommended actions below to download required scripts.'; Benefits = 'Avoid unexpected VMs rebooting.'; Tip = 'Prevent HDInsight cluster VMs from rebooting periodically'; LearnMoreLink = 'https://docs.microsoft.com/azure/security/fundamentals/tls-certificate-changes'; } + ,[PSCustomObject]@{ Id = '076f2cce-a86e-4175-adba-4a7456839a47'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'HDInsight'; ResourceType = 'microsoft.hdinsight/clusters'; Key = 'RegionCountCandidate'; Message = 'Region count tuning.'; State = 'Active'; Version = 3; Description = 'Check your region counts as you have blocking updates.'; LongDescription = 'Region counts needs to be adjusted to avoid updates getting blocked. It might require a scale up of the cluster by adding new nodes.'; Benefits = 'Brings more parallelism and ensures writes are more uniform.'; Tip = 'Tune the cluster based on the number of regions'; LearnMoreLink = 'https://docs.microsoft.com/azure/hdinsight/hbase/apache-hbase-advisor'; } + ,[PSCustomObject]@{ Id = '3b6f9784-2bf9-4348-a1e6-4554504f213d'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'HDInsight'; ResourceType = 'microsoft.hdinsight/clusters'; Key = 'ScanQueryTuningcandidate'; Message = 'Revisit your scan queries'; State = 'Active'; Version = 2; Description = 'More than 75% of your queries are full scan queries.'; LongDescription = 'More than 75% of the scan queries on your cluster are doing a full region/table scan. Modify your scan queries to avoid full region or table scans.'; Benefits = 'Faster scan performance'; Tip = 'Set start and stop rows to scans'; LearnMoreLink = 'https://docs.microsoft.com/azure/hdinsight/hbase/apache-hbase-advisor'; } + ,[PSCustomObject]@{ Id = '20dfc768-7850-4176-9707-b9bb52afb95a'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'HDInsight'; ResourceType = 'microsoft.hdinsight/clusters'; Key = 'SparkVersionRetirement'; Message = 'Deprecation of Older Spark Versions in HDInsight Spark cluster'; State = 'Disabled'; Version = 8; Description = 'Deprecation of Older Spark Versions in HDInsight Spark cluster'; LongDescription = 'Starting July 1, 2020, customers will not be able to create new Spark clusters with Spark 2.1 and 2.2 on HDInsight 3.6, and Spark 2.3 on HDInsight 4.0. Existing clusters will run as is without support from Microsoft. '; Benefits = 'Avoid potential system/support interruption.'; Tip = 'Deprecation of Older Spark Versions in HDInsight Spark cluster'; LearnMoreLink = 'https://aka.ms/hdiretirespark'; } + ,[PSCustomObject]@{ Id = '11741e31-c2ca-4739-92de-04ff7eca697c'; Category = 'High Availability'; Control = 'Service Upgrade and Retirement'; Impact = 'High'; ServiceName = 'HDInsight'; ResourceType = 'microsoft.hdinsight/clusters'; Key = 'VMDeprecation'; Message = 'Action required: Migrate your A8?A11 HDInsight cluster before 1 March 2021'; State = 'Disabled'; Version = 6; Description = 'Action required: Migrate your A8?A11 HDInsight cluster before 1 March 2021'; LongDescription = 'You''re receiving this notice because you have one or more active A8, A9, A10 or A11 HDInsight cluster. The A8-A11 virtual machines (VMs) will be retired in all regions on 1 March 2021. After that date, all clusters using A8-A11 will be deallocated. Migrate your affected clusters to another HDInsight supported VM (https://azure.microsoft.com/pricing/details/hdinsight/) before that date. For more details, see ''Learn More'' link or contact us at askhdinsight@microsoft.com'; Benefits = 'Avoid cluster getting deallocated.'; Tip = 'Action required: Migrate your A8?A11 HDInsight cluster before 1 March 2021'; LearnMoreLink = 'https://azure.microsoft.com/updates/a8-a11-azure-virtual-machine-sizes-will-be-retired-on-march-1-2021/'; } + ,[PSCustomObject]@{ Id = '06c03895-e210-4153-a4a0-a5e5c8e8eb83'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Virtual Machines'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'UpgradeSizeHighVMUtilV0'; Message = 'Upgrade the size of your most active virtual machines to prevent resource exhaustion and improve performance'; State = 'Active'; Version = 0; Description = 'Upgrade the size of your most active virtual machines to prevent resource exhaustion and improve performance'; LongDescription = 'We analyzed data for the past 7 days and identified virtual machines (VMs) with high utilization across different metrics (i.e., CPU, Memory, and VM IO). Those VMs may experience performance issues since they are nearing/at their SKU''s limits. Consider upgrading their SKU to improve performance.'; Benefits = 'Improve the performance and reliability of your VMs'; Tip = 'You can improve the performance and reliability of your highly utilized virtual machines'; LearnMoreLink = 'https://aka.ms/aa_resizehighusagevmrec_learnmore'; } + ,[PSCustomObject]@{ Id = '9d5717d2-4708-4e3f-bdda-93b3e6f1715b'; Category = 'High Availability'; Control = 'Other'; Impact = 'Medium'; ServiceName = 'Azure Arc enabled Servers'; ResourceType = 'microsoft.hybridcompute/machines'; Key = 'ArcServerAgentVersion'; Message = 'Upgrade the Azure Connected Machine agent'; State = 'Active'; Version = 8; Description = 'Upgrade to the latest version of the Azure Connected Machine agent'; LongDescription = 'The Azure Connected Machine agent is updated regularly with bug fixes, stability enhancements, and new functionality. For the best Azure Arc experience, upgrade your agent to the latest version.'; Benefits = 'Improved stability and new functionality'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/azure-arc/servers/manage-agent'; } + ,[PSCustomObject]@{ Id = '03e77a09-fc67-4bb6-86ed-42bda42fb9ad'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Monitor'; ResourceType = 'microsoft.insights/scheduledqueryrules'; Key = 'ScheduledQueryRulesRp'; Message = 'Log alert rule was disabled'; State = 'Active'; Version = 3; Description = 'Log alert rule was disabled'; LongDescription = 'The alert rule was disabled by Azure Monitor as it was causing service issues. To enable the alert rule, contact support.'; Benefits = 'Ensure continued monitoring and alerting for your resources'; Tip = ''; LearnMoreLink = 'https://aka.ms/aa_logalerts_queryrepair'; } + ,[PSCustomObject]@{ Id = '2b5eac39-9f50-4d8d-bc9b-1e1e07c5c37e'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Monitor'; ResourceType = 'microsoft.insights/scheduledqueryrules'; Key = 'ScheduledQueryRulesLogAlert'; Message = 'Repair log alert rule'; State = 'Active'; Version = 3; Description = 'Repair your log alert rule'; LongDescription = 'We have detected that one or more of your alert rules have invalid queries specified in their condition section. Log alert rules are created in Azure Monitor and are used to run analytics queries at specified intervals. The results of the query determine if an alert needs to be triggered. Analytics queries may become invalid overtime due to changes in referenced resources, tables, or commands. We recommend that you correct the query in the alert rule to prevent it from getting auto-disabled and ensure monitoring coverage of your resources in Azure.'; Benefits = 'Ensure continued monitoring and alerting for your resources'; Tip = ''; LearnMoreLink = 'https://aka.ms/aa_logalerts_queryrepair'; } + ,[PSCustomObject]@{ Id = '51b1fad8-4838-426f-9871-107bc089677b'; Category = 'High Availability'; Control = 'Service Upgrade and Retirement'; Impact = 'Medium'; ServiceName = 'Iot Hub'; ResourceType = 'microsoft.devices/iothubs'; Key = 'UpgradeEdgeSdk'; Message = 'Upgrade Microsoft Edge device runtime to a supported version for IoT Hub'; State = 'Active'; Version = 7; Description = 'Upgrade Microsoft Edge device runtime to a supported version for IoT Hub'; LongDescription = 'When Edge devices use outdated versions, performance degradation might occur. We recommend you upgrade to the latest supported version of the Azure IoT Edge runtime.'; Benefits = 'Ensure business continuity with latest supported version for your Edge devices'; Tip = ''; LearnMoreLink = 'https://aka.ms/IOTEdgeSDKCheck'; } + ,[PSCustomObject]@{ Id = 'd448c687-b808-4143-bbdc-02c35478198a'; Category = 'High Availability'; Control = 'Service Upgrade and Retirement'; Impact = 'Medium'; ServiceName = 'Iot Hub'; ResourceType = 'microsoft.devices/iothubs'; Key = 'UpgradeDeviceClientSdk'; Message = 'Upgrade Device Client SDK for IotHub'; State = 'Active'; Version = 7.6; Description = 'Upgrade device client SDK to a supported version for IotHub'; LongDescription = 'When devices use an outdated SDK, performance degradation can occur. Some or all of your devices are using an outdated SDK. We recommend you upgrade to a supported SDK version.'; Benefits = 'Ensure business continuity with supported SDK for your devices'; Tip = ''; LearnMoreLink = 'https://aka.ms/iothubsdk'; } + ,[PSCustomObject]@{ Id = '9017e82f-b7ac-4a06-8b9b-5858cb3d5113'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'KeyVault'; ResourceType = 'microsoft.keyvault/vaults'; Key = 'UpgradeKeyVaultSDK'; Message = 'Update Key Vault Library'; State = 'Active'; Version = 1; Description = 'Update Key Vault SDK Version'; LongDescription = 'New Key Vault Client Libraries are split to keys, secrets, and certificates SDKs, which are integrated with recommended Azure Identity library to provide seamless authentication to Key Vault across all languages and environments. It also contains several performance fixes to issues reported by customers and proactively identified through our QA process.

**PLEASE DISMISS:**
If Key Vault is integrated with Azure Storage, Disk or other Azure services which can use old Key Vault SDK and when all your current custom applications are using .NET SDK 4.0 or above.'; Benefits = 'Latest Key Vault Client Libraries contain fixes for known issues and additional improvements.'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/key-vault/general/client-libraries'; } + ,[PSCustomObject]@{ Id = '47e36ece-24bb-4d3e-8172-af28c9df172d'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Key Vault'; ResourceType = 'microsoft.keyvault/managedhsms'; Key = 'UpgradeKeyVaultMHSMSDK'; Message = 'Update Key Vault Library'; State = 'Active'; Version = 2; Description = 'Update Key Vault SDK Version'; LongDescription = 'New Key Vault Client Libraries are split to keys, secrets, and certificates SDKs, which are integrated with recommended Azure Identity library to provide seamless authentication to Key Vault across all languages and environments. It also contains several performance fixes to issues reported by customers and proactively identified through our QA process. Important: Please be aware that you can only remediate recommendation for custom applications you have access to. Recommendations can be shown due to integration with other Azure services like Storage, Disk encryption, which are in process to update to new version of our SDK. If you use .NET 4.0 in all your applications please dismiss'; Benefits = 'Latest Key Vault Client Libraries contain fixes for known issues and additional improvements.'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/key-vault/general/client-libraries'; } + ,[PSCustomObject]@{ Id = '3dbfbe10-4a27-4d10-9369-256e99f83a9c'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Language Service'; ResourceType = 'microsoft.cognitiveservices/accounts'; Key = 'UpgradeToLatestAPILanguage'; Message = 'Upgrade to the latest API version of Azure Cognitive Service for Language'; State = 'Active'; Version = 4; Description = 'Upgrade to the latest API version of Azure Cognitive Service for Language'; LongDescription = 'Please upgrade to the latest API version to get the best results in terms of model quality, performance and service availability.'; Benefits = 'Better service availability and performance'; Tip = ''; LearnMoreLink = 'https://aka.ms/language-api'; } + ,[PSCustomObject]@{ Id = '3f319edd-fdce-4ab5-8f6d-c63dc4cea73b'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Language'; ResourceType = 'microsoft.cognitiveservices/accounts'; Key = 'UpgradeToLatestSDKLanguage'; Message = 'Upgrade to the latest SDK version for Language'; State = 'Active'; Version = 4; Description = 'Upgrade to the latest Cognitive Service Language SDK version'; LongDescription = 'Please upgrade to the latest SDK version to get the best results in terms of model quality, performance and service availability.'; Benefits = 'Better service availability and performance'; Tip = ''; LearnMoreLink = 'https://aka.ms/language-api'; } + ,[PSCustomObject]@{ Id = '94aea435-ef39-493f-a547-8408092c22a7'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'Virtual Machine Scale Sets'; ResourceType = 'microsoft.compute/virtualmachinescalesets'; Key = 'LowUsageVmss'; Message = 'Shut down or resize your virtual machine scale sets'; State = 'Active'; Version = 9.9; Description = 'Right-size or shutdown underutilized virtual machine scale sets'; LongDescription = 'We''ve analyzed the usage patterns of your virtual machine scale sets over the past 7 days and identified virtual machine scale sets with low usage. While certain scenarios can result in low utilization by design, you can often save money by managing the size and number of virtual machine scale sets.'; Benefits = 'savings'; Tip = 'You can optimize underutilized virtual machine scale sets to reduce your monthly Azure spend.'; LearnMoreLink = 'https://aka.ms/aa_lowusagerec_vmss_learnmore'; } + ,[PSCustomObject]@{ Id = 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'Virtual Machines'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'LowUsageVmV2'; Message = 'Shut down or resize your virtual machine'; State = 'Active'; Version = 8.4; Description = 'Right-size or shutdown underutilized virtual machines'; LongDescription = 'We''ve analyzed the usage patterns of your virtual machine and identified virtual machines with low usage. While certain scenarios can result in low utilization by design, you can often save money by managing the size and number of virtual machines.'; Benefits = 'savings'; Tip = 'You can optimize underutilized virtual machines to reduce your monthly Azure spend.'; LearnMoreLink = 'https://aka.ms/aa_lowusagerec_learnmore'; } + ,[PSCustomObject]@{ Id = '36c3633b-daac-4e01-af95-11b8c2f4fe20'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Storage'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'ManagedDisksStorageAccount'; Message = 'Use Managed Disks'; State = 'Active'; Version = 2; Description = 'Use Managed disks to prevent disk I/O throttling'; LongDescription = 'Your virtual machine disks belong to a storage account that has reached its scalability target, and is susceptible to I/O throttling. To protect your virtual machine from performance degradation and to simplify storage management, use Managed Disks.'; Benefits = 'Improved data resilience and performance'; Tip = 'You can use Managed Disks to prevent disk throttling and improve virtual machine performance.'; LearnMoreLink = 'https://aka.ms/aa_avset_manageddisk_learnmore'; } + ,[PSCustomObject]@{ Id = '1e6ead2a-8ebc-4381-8c99-e2937ae32700'; Category = 'Operational Excellence'; Control = ''; Impact = 'Low'; ServiceName = 'Azure Lighthouse'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'OnboardCSPSubscriptionsToLighthouse'; Message = 'Use Azure Lighthouse to simply and securely manage customer subscriptions at scale'; State = 'Active'; Version = 1; Description = 'Use Azure Lighthouse to simply and securely manage customer subscriptions at scale'; LongDescription = 'Using Azure Lighthouse improves security and reduces unnecessary access to your customer tenants by enabling more granular permissions for your users. It also allows for greater scalability, as your users can work across multiple customer subscriptions using a single login in your tenant.'; Benefits = 'Scalable, secure, and simplified management experience'; Tip = 'You can use Azure Lighthouse to manage your customers with granular access to customer resources.'; LearnMoreLink = 'https://docs.microsoft.com/azure/lighthouse/concepts/cloud-solution-provider'; } + ,[PSCustomObject]@{ Id = 'b7c9fd99-a979-40b4-ab48-b1dfab6bb41a'; Category = 'High Availability'; Control = 'Scalability '; Impact = 'Medium'; ServiceName = 'Media Services'; ResourceType = 'microsoft.media/mediaservices'; Key = 'AccountQuotaLimit'; Message = 'Increase Media Services quotas or limits'; State = 'Active'; Version = 7; Description = 'Increase Media Services quotas or limits'; LongDescription = 'When a media account hits its quota limits, disruption of service might occur. To avoid any disruption of service, review current usage of assets, content key policies, and stream policies and increase quota limits for the entities that are close to hitting the limit. You can request quota limits be increased by opening a ticket and adding relevant details. TIP: Don''t create additional Azure Media accounts in an attempt to obtain higher limits.'; Benefits = 'Avoid any disruption to service due to customer exceeding quota limits.'; Tip = ''; LearnMoreLink = 'https://aka.ms/ams-quota-recommendation/'; } + ,[PSCustomObject]@{ Id = 'e47b63ff-82bb-4350-a806-706085980c27'; Category = 'Cost'; Control = ''; Impact = 'Low'; ServiceName = 'CloudES_AzureAdvisor'; ResourceType = 'microsoft.network/trafficmanagerprofiles'; Key = 'AdvisorMockRecommendationType'; Message = 'Mock Recommendation for Advisor'; State = 'Active'; Version = 1.1; Description = 'Mock recommendation type for Advisor'; LongDescription = 'Mock recommendation type'; Benefits = 'Mock Recommendation'; Tip = ''; LearnMoreLink = 'https://aka.ms/advisordocs'; } + ,[PSCustomObject]@{ Id = '3e873dd9-3ad8-4553-aba5-19fc4d4077fc'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'CloudES_AzureAdvisor'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'FETestARGRecommendation'; Message = 'ARG sample recommendations - For FE testing'; State = 'Disabled'; Version = 7; Description = 'FE - ARG sample recommendations'; LongDescription = 'This is a sample ARG recommendation - FE.'; Benefits = 'FE ARG recommendation - Sample'; Tip = ''; LearnMoreLink = ''; } + ,[PSCustomObject]@{ Id = '6af349c1-a2a5-4021-999a-4b8503c50aa2'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'CloudES_AzureAdvisor'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'KustoMockRecommendationType'; Message = 'KustoMockRecommendationType'; State = 'Active'; Version = 4.2; Description = 'Mock recommendation type for Kusto-based ingestion'; LongDescription = 'Mock recommendation type for Kusto-based ingestion.'; Benefits = 'KustoMockRecommendationType'; Tip = ''; LearnMoreLink = 'https://aka.ms/advisordocs'; } + ,[PSCustomObject]@{ Id = '059423fc-3cbb-4983-abc8-2e1c74fda214'; Category = 'Cost'; Control = ''; Impact = 'Low'; ServiceName = 'CloudES_AzureAdvisor'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'SubscriptionMockRecommendationType'; Message = 'Mock recommendation type for subscription-level recommendations #1'; State = 'Active'; Version = 3.2; Description = 'Mock recommendation type for subscription-level recommendations #1'; LongDescription = 'Mock recommendation type for subscription-level recommendations.'; Benefits = 'SubscriptionMockRecommendationType'; Tip = ''; LearnMoreLink = 'https://aka.ms/advisordocs'; } + ,[PSCustomObject]@{ Id = '6a2b1e70-bd4c-4163-86de-5243d7ac05ee'; Category = 'High Availability'; Control = 'Business Continuity'; Impact = 'Medium'; ServiceName = 'Application Gateway'; ResourceType = 'microsoft.network/applicationgateways'; Key = 'AppGateway'; Message = 'Upgrade gateway size or add more instances'; State = 'Active'; Version = 7; Description = 'Upgrade your SKU or add more instances'; LongDescription = 'Deploying two or more medium or large sized instances ensures business continuity (fault tolerance) during outages caused by planned or unplanned maintenance.'; Benefits = 'Ensure business continuity through application gateway resilience'; Tip = ''; LearnMoreLink = 'https://aka.ms/aa_gatewayrec_learnmore'; } + ,[PSCustomObject]@{ Id = '52a9d0a7-efe1-4512-9716-394abd4e0ab1'; Category = 'High Availability'; Control = 'Other'; Impact = 'Medium'; ServiceName = 'Application Gateway'; ResourceType = 'microsoft.network/applicationgateways'; Key = 'AppGatewayHostOverride'; Message = 'Do not override hostname to ensure website integrity'; State = 'Active'; Version = 12; Description = 'Avoid hostname override to ensure site integrity'; LongDescription = 'Avoid overriding the hostname when configuring Application Gateway. Having a domain on the frontend of Application Gateway different than the one used to access the backend, can lead to broken cookies or redirect URLs. Make sure the backend is able to deal with the domain difference, or update the Application Gateway configuration so the hostname doesn''t need to be overwritten towards the backend. When used with App Service, attach a custom domain name to the Web App and avoid use of the *.azurewebsites.net host name towards the backend. Note that a different frontend domain isn''t a problem in all situations, and certain categories of backends like REST APIs, are less sensitive in general.'; Benefits = 'Ensure site integrity and avoid broken cookies or redirect urls through a resilient Application Gateway configuration.'; Tip = ''; LearnMoreLink = 'https://aka.ms/appgw-advisor-usecustomdomain'; } + ,[PSCustomObject]@{ Id = '2ee9f31e-df58-4893-b3e7-66c0cd74183a'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Hot Application Gateway'; ResourceType = 'microsoft.network/applicationgateways'; Key = 'HotAppGateway'; Message = 'Properly scale your Application Gateway'; State = 'Active'; Version = 4; Description = 'Make sure you have enough instances in your Application Gateway to support your traffic'; LongDescription = 'Your Application Gateway has been running on high utilization recently and under heavy load, you may experience traffic loss or increase in latency. It is important that you scale your Application Gateway according to your traffic and with a bit of a buffer so that you are prepared for any traffic surges or spikes and minimizing the impact that it may have in your QoS. Application Gateway v1 SKU (Standard/WAF) supports manual scaling and v2 SKU (Standard_v2/WAF_v2) support manual and autoscaling. In case of manual scaling, increase your instance count and if autoscaling is enabled, make sure your maximum instance count is set to a higher value so Application Gateway can scale out as the traffic increases'; Benefits = 'Ensure availability of your sites'; Tip = 'Properly scale your Application Gateway'; LearnMoreLink = 'https://aka.ms/hotappgw'; } + ,[PSCustomObject]@{ Id = '17ebccd8-1405-405c-8695-1981d115ffdc'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure Bastion'; ResourceType = 'microsoft.network/bastionhosts'; Key = 'RecreateBastionResource'; Message = 'Delete and recreate your Azure Bastion resource before February 19, 2021'; State = 'Active'; Version = 2; Description = 'Delete and recreate your Azure Bastion resource before February 19, 2021'; LongDescription = 'We are unable to update your Azure Bastion resource due to its current configuration. Please delete and recreate your resource before February 19, 2021 to receive the updates. If you do not delete and recreate your resource by this date, it will automatically be deleted and recreated for you.'; Benefits = 'Receive necessary updates for your Azure Bastion resource.'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/bastion/tutorial-create-host-portal'; } + ,[PSCustomObject]@{ Id = 'da6630fb-4286-4996-92a3-a43f5f26dd34'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'ExpressRoute'; ResourceType = 'microsoft.network/expressroutecircuits'; Key = 'ExpressRouteCircuit'; Message = 'Delete ExpressRoute circuit in Not Provisioned state'; State = 'Disabled'; Version = 3; Description = 'Delete ExpressRoute circuits in the provider status of Not Provisioned'; LongDescription = 'We noticed that your ExpressRoute circuit is in the provider status of Not Provisioned for more than one month. This circuit is currently billed hourly to your subscription. We recommend that you delete the circuit if you aren''t planning to provision the circuit with your connectivity provider.'; Benefits = 'Cost savings'; Tip = ''; LearnMoreLink = 'https://aka.ms/expressroute'; } + ,[PSCustomObject]@{ Id = '643be269-d022-4185-b945-66837496a879'; Category = 'High Availability'; Control = 'Business Continuity'; Impact = 'Medium'; ServiceName = 'ExpressRoute'; ResourceType = 'microsoft.network/expressroutecircuits'; Key = 'UseGlobalReachForDR'; Message = 'Use Global Reach for disaster recovery'; State = 'Disabled'; Version = 7; Description = 'Use ExpressRoute Global Reach to improve your design for disaster recovery'; LongDescription = 'Unconnected ExpressRoute circuits peered in at least two different locations can cause traffic problems. To allow traffic to continue flowing between your on-premises network and Azure environments if one circuit loses connectivity, connect the circuits to each other using ExpressRoute Global Reach. You can establish Global Reach connections between circuits in different peering locations within the same metro or across metros.'; Benefits = 'Implement a disaster recovery design and maintain connectivity between your on-premises networks and Azure in the event of a failure'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/expressroute/about-upgrade-circuit-bandwidth'; } + ,[PSCustomObject]@{ Id = '17454550-1543-4068-bdaf-f3ed7cdd3d86'; Category = 'High Availability'; Control = 'Monitoring and Alerting'; Impact = 'Medium'; ServiceName = 'ExpressRoute'; ResourceType = 'microsoft.network/expressroutecircuits'; Key = 'ExpressRouteGatewayE2EMonitoring'; Message = 'Implement ExpressRoute Monitor on Network Performance Monitor for end-to-end monitoring of your ExpressRoute circuit'; State = 'Active'; Version = 6; Description = 'Implement ExpressRoute Monitor on Network Performance Monitor'; LongDescription = 'When ExpressRoute circuit isn''t monitored by ExpressRoute Monitor on Network Performance, you miss notifications of loss, latency, and performance of on-premises to Azure resources, and Azure to on-premises resources. For end-to-end monitoring, implement ExpressRoute Monitor on Network Performance.'; Benefits = 'Improve time-to-detect and time-to-mitigate issues in your network and provide insights on your network path via ExpressRoute'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/expressroute/how-to-npm'; } + ,[PSCustomObject]@{ Id = 'f606607c-ee34-445e-997e-49d7cb563fe0'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'ExpressRoute'; ResourceType = 'microsoft.network/expressroutecircuits'; Key = 'UpgradeERCircuitBandwidth'; Message = 'Upgrade your ExpressRoute circuit bandwidth'; State = 'Active'; Version = 1; Description = 'Upgrade your ExpressRoute circuit bandwidth to accommodate your bandwidth needs'; LongDescription = 'You have been using over 90% of your procured circuit bandwidth recently. If you exceed your allocated bandwidth, you will experience an increase in dropped packets sent over ExpressRoute. Upgrade your circuit bandwidth to maintain performance if your bandwidth needs remain this high.'; Benefits = 'Prevent packet drops caused by bandwidth oversubscription'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/expressroute/about-upgrade-circuit-bandwidth'; } + ,[PSCustomObject]@{ Id = '70f87e66-9b2d-4bfa-ae38-1d7d74837689'; Category = 'High Availability'; Control = 'Business Continuity'; Impact = 'Medium'; ServiceName = 'ExpressRoute'; ResourceType = 'microsoft.network/virtualnetworkgateways'; Key = 'ExpressRouteGatewayRedundancy'; Message = 'Implement multiple ExpressRoute circuits in your Virtual Network for cross premises resiliency'; State = 'Active'; Version = 6; Description = 'Implement multiple ExpressRoute circuits in your Virtual Network for cross premises resiliency'; LongDescription = 'When an ExpressRoute gateway only has one ExpressRoute circuit associated to it, resiliency issues might occur. To ensure peering location redundancy and resiliency, connect one or more additional circuits to your gateway.'; Benefits = 'Improve resiliency in case of ExpressRoute peering location failure'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute'; } + ,[PSCustomObject]@{ Id = 'b020ff96-37bf-4a64-8bd5-2bfb3fdf3f87'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Traffic Manager'; ResourceType = 'microsoft.network/trafficmanagerprofiles'; Key = 'FastFailOverTTL'; Message = 'Configure Time to Live'; State = 'Active'; Version = 2; Description = 'Configure DNS Time to Live to 20 seconds'; LongDescription = 'Time to Live (TTL) affects how recent of a response a client will get when it makes a request to Azure Traffic Manager. Reducing the TTL value means that the client will be routed to a functioning endpoint faster in the case of a failover. Configure your TTL to 20 seconds to route traffic to a health endpoint as quickly as possible.'; Benefits = 'Improve availability by failing over to healthy endpoints'; Tip = ''; LearnMoreLink = 'https://aka.ms/Ngfw4r'; } + ,[PSCustomObject]@{ Id = '6cd70072-c45c-4716-bf7b-b35c18e46e72'; Category = 'High Availability'; Control = 'Business Continuity'; Impact = 'Medium'; ServiceName = 'Traffic Manager'; ResourceType = 'microsoft.network/trafficmanagerprofiles'; Key = 'GeneralProfile'; Message = 'Add Endpoint'; State = 'Active'; Version = 8; Description = 'Add at least one more endpoint to the profile, preferably in another Azure region'; LongDescription = 'Profiles need more than one endpoint to ensure availability if one of the endpoints fails. We also recommend that endpoints be in different regions.'; Benefits = 'Improve resiliency by allowing failover'; Tip = ''; LearnMoreLink = 'https://aka.ms/AA1o0x4'; } + ,[PSCustomObject]@{ Id = '0bbe0a49-3c63-49d3-ab4a-aa24198f03f7'; Category = 'High Availability'; Control = 'Business Continuity'; Impact = 'High'; ServiceName = 'Traffic Manager'; ResourceType = 'microsoft.network/trafficmanagerprofiles'; Key = 'GeographicProfile'; Message = 'Add Endpoint'; State = 'Active'; Version = 6; Description = 'Add an endpoint configured to "All (World)"'; LongDescription = 'For geographic routing, traffic is routed to endpoints in defined regions. When a region fails, there is no pre-defined failover. Having an endpoint where the Regional Grouping is configured to "All (World)" for geographic profiles avoids traffic black holing and guarantees service availablity.'; Benefits = 'Improve resiliency by avoiding traffic black holes'; Tip = ''; LearnMoreLink = 'https://aka.ms/Rf7vc5'; } + ,[PSCustomObject]@{ Id = 'd374a732-e69b-41dc-bbc2-a7234e2270be'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Traffic Manager'; ResourceType = 'microsoft.network/trafficmanagerprofiles'; Key = 'ProfileTTL'; Message = 'Configure Time to Live'; State = 'Active'; Version = 4; Description = 'Configure DNS Time to Live to 60 seconds'; LongDescription = 'Time to Live (TTL) affects how recent of a response a client will get when it makes a request to Azure Traffic Manager. Reducing the TTL value means that the client will be routed to a functioning endpoint faster in the case of a failover. Configure your TTL to 60 seconds to route traffic to a health endpoint as quickly as possible.'; Benefits = 'Improve availability by failing over to healthy endpoints faster'; Tip = ''; LearnMoreLink = 'https://aka.ms/Um3xr5'; } + ,[PSCustomObject]@{ Id = '0db76759-6d22-4262-93f0-2f989ba2b58e'; Category = 'High Availability'; Control = 'Business Continuity'; Impact = 'Medium'; ServiceName = 'Traffic Manager'; ResourceType = 'microsoft.network/trafficmanagerprofiles'; Key = 'ProximityProfile'; Message = 'Add or Move Endpoint'; State = 'Active'; Version = 5; Description = 'Add or move one endpoint to another Azure region'; LongDescription = 'All endpoints associated to this proximity profile are in the same region. Users from other regions may experience long latency when attempting to connect. Adding or moving an endpoint to another region will improve overall performance for proximity routing and provide better availability if all endpoints in one region fail.'; Benefits = 'Improve resiliency by allowing failover to another region'; Tip = ''; LearnMoreLink = 'https://aka.ms/Ldkkdb'; } + ,[PSCustomObject]@{ Id = '43a3c88f-5bef-46c8-8e17-932159b3287d'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'NVA Engineering'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'AristaNVAAccelNet'; Message = 'Accelerated Networking Recommendation for Arista Networks vEOS Router'; State = 'Disabled'; Version = 1; Description = 'Arista Networks vEOS Router may experience high CPU utilization, reduced throughput and high latency.'; LongDescription = 'We have identified that your Virtual Machine might be running a version of Arista Networks vEOS Router Image that is running older drivers for Accelerated Networking, which may cause the product to revert to using the standard, synthetic network interface which does not use Accelerated Networking. It is recommended that you upgrade to a newer version of the image that addresses this issue and enable Accelerated Networking. Please contact Arista Networks for further instructions on how to upgrade your Network Virtual Appliance Image.'; Benefits = 'You will not experience an unexpected degradation in network performance.'; Tip = 'Upgrade Arista Networks vEOS Router image version to eliminate any unexpected degradation in network performance.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms'; } + ,[PSCustomObject]@{ Id = '1f39d16f-68b9-472b-a82d-cf7b5bed0430'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'NVA Engineering'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'AristaVeosANUpgradeRecommendation'; Message = 'Upgrade your Network Virtual Appliance Version to enable Accelerated Networking on all platforms.'; State = 'Disabled'; Version = 1; Description = 'Update to the latest version of your Arista VEOS product for Accelerated Networking support.'; LongDescription = 'We have identified that your Virtual Machine might be running a version of software image that is running older drivers for Accelerated Networking (AN). It has a synthetic network interface which, either, is not AN capable or is not compatible with all Azure hardware. It is recommended that you upgrade to the latest version of the image that addresses this issue and enable Accelerated Networking. Please contact your vendor for further instructions on how to upgrade your Network Virtual Appliance Image.'; Benefits = 'Faster network throughput with lower latency.'; Tip = 'Upgrade your Network Virtual Appliance image version to eliminate any unexpected degradation in network performance.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms'; } + ,[PSCustomObject]@{ Id = '270c5ab3-31d0-461f-bf8d-55d739552d31'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'NVA Engineering'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'BarracudaNVAAccelNet'; Message = 'Accelerated Networking Recommendation for Barracuda Networks NextGen Firewall'; State = 'Disabled'; Version = 1; Description = 'Barracuda Networks NextGen Firewall may experience high CPU utilization, reduced throughput and high latency.'; LongDescription = 'We have identified that your Virtual Machine might be running a version of Barracuda Networks NextGen Firewall Image that is running older drivers for Accelerated Networking, which may cause the product to revert to using the standard, synthetic network interface which does not use Accelerated Networking. It is recommended that you upgrade to a newer version of the image that addresses this issue and enable Accelerated Networking. Please contact Barracuda Networks for further instructions on how to upgrade your Network Virtual Appliance Image.'; Benefits = 'You will not experience an unexpected degradation in network performance.'; Tip = 'Upgrade Barracuda Networks NextGen Firewall image version to eliminate any unexpected degradation in network performance.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms'; } + ,[PSCustomObject]@{ Id = 'f892f705-a708-47b0-9de2-95a958c479c2'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'NVA Engineering'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'BarracudaNgANUpgradeRecommendation'; Message = 'Upgrade your Network Virtual Appliance Version to enable Accelerated Networking on all platforms.'; State = 'Disabled'; Version = 1; Description = 'Update to the latest version of your Barracuda NG Firewall product for Accelerated Networking support.'; LongDescription = 'We have identified that your Virtual Machine might be running a version of software image that is running older drivers for Accelerated Networking (AN). It has a synthetic network interface which, either, is not AN capable or is not compatible with all Azure hardware. It is recommended that you upgrade to the latest version of the image that addresses this issue and enable Accelerated Networking. Please contact your vendor for further instructions on how to upgrade your Network Virtual Appliance Image.'; Benefits = 'Faster network throughput with lower latency.'; Tip = 'Upgrade your Network Virtual Appliance image version to eliminate any unexpected degradation in network performance.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms'; } + ,[PSCustomObject]@{ Id = 'd6b4832b-5ad3-454c-ac5f-1543bd1462dc'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'NVA Engineering'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'CheckPointCGANUpgradeRecommendation'; Message = 'Upgrade your Network Virtual Appliance Version to enable Accelerated Networking on all platforms.'; State = 'Disabled'; Version = 2.2; Description = 'Update to the latest version of your Check Point product for Accelerated Networking support.'; LongDescription = 'We have identified that your Virtual Machine (VM) might be running a version of software image that is running older drivers for Accelerated Networking (AN). Your VM has a synthetic network interface that is either not AN capable or is not compatible with all Azure hardware. We recommend that you upgrade to the latest version of the image that addresses this issue and enable Accelerated Networking. Please contact your vendor for further instructions on how to upgrade your Network Virtual Appliance Image.'; Benefits = 'Faster network throughput with lower latency.'; Tip = 'Upgrade your Network Virtual Appliance image version to eliminate any unexpected degradation in network performance.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms'; } + ,[PSCustomObject]@{ Id = '6230537d-113a-42ec-9357-c08d01602787'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'NVA Engineering'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'CheckPointPlatformServicingKnownIssueA'; Message = 'Known Issue with Check Point Network Virtual Appliance image version'; State = 'Disabled'; Version = 5; Description = 'Check Point Virtual Machine may lose Network Connectivity.'; LongDescription = 'We have identified that your Virtual Machine might be running a version of Check Point image that has been known to lose network connectivity in the event of a platform servicing operation. It is recommended that you upgrade to a newer version of the image that addresses this issue. Please contact Check Point for further instructions on how to upgrade your image.'; Benefits = 'Ensure business continuity through better network connectivity.'; Tip = 'Upgrade Network Virtual Appliance image to ensure business continuity.'; LearnMoreLink = 'https://supportcenter.checkpoint.com/supportcenter/portal?eventSubmit_doGoviewsolutiondetails=&solutionid=sk151752&partition=Advanced&product=CloudGuard'; } + ,[PSCustomObject]@{ Id = '33b66f53-738a-4200-8672-63c47a15144e'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'NVA Engineering'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'Cisco1000vANUpgradeRecommendation'; Message = 'Upgrade your Network Virtual Appliance Version to enable Accelerated Networking on all platforms.'; State = 'Disabled'; Version = 1; Description = 'Update to the latest version of your Cisco Cloud Services Router 1000V product for Accelerated Networking support.'; LongDescription = 'We have identified that your Virtual Machine might be running a version of software image that is running older drivers for Accelerated Networking (AN). It has a synthetic network interface which, either, is not AN capable or is not compatible with all Azure hardware. It is recommended that you upgrade to the latest version of the image that addresses this issue and enable Accelerated Networking. Please contact your vendor for further instructions on how to upgrade your Network Virtual Appliance Image.'; Benefits = 'Faster network throughput with lower latency.'; Tip = 'Upgrade your Network Virtual Appliance image version to eliminate any unexpected degradation in network performance.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms'; } + ,[PSCustomObject]@{ Id = '7747ce74-9209-4fe4-8dd8-6cd74ac1c9ba'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'NVA Engineering'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'CiscoCSRNVAAccelNet'; Message = 'Accelerated Networking Recommendation for Cisco Cloud Services Router 1000V'; State = 'Disabled'; Version = 1; Description = 'Cisco Cloud Services Router 1000V may experience high CPU utilization, reduced throughput and high latency.'; LongDescription = 'We have identified that your Virtual Machine might be running a version of Cisco Cloud Services Router 1000V Image that is running older drivers for Accelerated Networking, which may cause the product to revert to using the standard, synthetic network interface which does not use Accelerated Networking. It is recommended that you upgrade to a newer version of the image that addresses this issue and enable Accelerated Networking. Please contact Cisco for further instructions on how to upgrade your Network Virtual Appliance Image.'; Benefits = 'You will not experience an unexpected degradation in network performance.'; Tip = 'Upgrade Cisco Cloud Services Router 1000V image version to eliminate any unexpected degradation in network performance.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms'; } + ,[PSCustomObject]@{ Id = '48432aa1-f081-4de9-9e7e-e2e6a7d354bb'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'NVA Engineering'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'F5BigIpANUpgradeRecommendation'; Message = 'Upgrade your Network Virtual Appliance Version to enable Accelerated Networking on all platforms.'; State = 'Disabled'; Version = 1; Description = 'Update to the latest version of your F5 BigIp product for Accelerated Networking support.'; LongDescription = 'We have identified that your Virtual Machine might be running a version of software image that is running older drivers for Accelerated Networking (AN). It has a synthetic network interface which, either, is not AN capable or is not compatible with all Azure hardware. It is recommended that you upgrade to the latest version of the image that addresses this issue and enable Accelerated Networking. Please contact your vendor for further instructions on how to upgrade your Network Virtual Appliance Image.'; Benefits = 'Faster network throughput with lower latency.'; Tip = 'Upgrade your Network Virtual Appliance image version to eliminate any unexpected degradation in network performance.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms'; } + ,[PSCustomObject]@{ Id = 'a71bfb94-b9e8-473e-b0a5-9fafc92cdb05'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'NVA Engineering'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'GetF5vulnK03009991'; Message = 'NVA Image no longer suppported and not available in Market Place'; State = 'Disabled'; Version = 1; Description = 'The iControl REST interface has an unauthenticated remote command execution vulnerability.'; LongDescription = 'This vulnerability allows for unauthenticated attackers with network access to the iControl REST interface, through the BIG-IP management interface and self IP addresses, to execute arbitrary system commands, create or delete files, and disable services. This vulnerability can only be exploited through the control plane and cannot be exploited through the data plane. Exploitation can lead to complete system compromise. The BIG-IP system in Appliance mode is also vulnerable'; Benefits = 'Avoid security incidents and unauthorized access to VM.'; Tip = 'Please review the information in the link '; LearnMoreLink = 'https://support.f5.com/csp/article/K03009991'; } + ,[PSCustomObject]@{ Id = '148fec38-cb1b-46ad-84b9-41233d07d4d9'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'NVA Engineering'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'GetVmListANDisabled'; Message = 'NVA Accellerated Networking enabled but not working'; State = 'Disabled'; Version = 1; Description = 'NVA Accelerated Networking enabled but potentially not working.'; LongDescription = 'Desired state for Accelerated Networking is set to ?true'' for one or more interfaces on this VM, but actual state for accelerated networking is not enabled.'; Benefits = 'Accelerated Networking offers improvements in network performance and reduced latency.'; Tip = 'Please review the information in the link'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli'; } + ,[PSCustomObject]@{ Id = 'c571b9b2-fe79-4785-8083-30b7b57a4f3d'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'NVA Engineering'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'NetAppNVAAccelNet'; Message = 'Accelerated Networking Recommendation for NetApp Cloud Volumes ONTAP'; State = 'Disabled'; Version = 1; Description = 'NetApp Cloud Volumes ONTAP may experience high CPU utilization, reduced throughput and high latency.'; LongDescription = 'We have identified that your Virtual Machine might be running a version of NetApp Cloud Volumes ONTAP Image that is running older drivers for Accelerated Networking, which may cause the product to revert to using the standard, synthetic network interface which does not use Accelerated Networking. It is recommended that you upgrade to a newer version of the image that addresses this issue and enable Accelerated Networking. Please contact NetApp for further instructions on how to upgrade your Network Virtual Appliance Image.'; Benefits = 'You will not experience an unexpected degradation in network performance.'; Tip = 'Upgrade NetApp Cloud Volumes ONTAP image version to eliminate any unexpected degradation in network performance.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms'; } + ,[PSCustomObject]@{ Id = '4dce8273-2f9d-4c20-91ab-9485b03b7d10'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'NVA Engineering'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'NetAppANUpgradeRecommendation'; Message = 'Upgrade your Network Virtual Appliance Version to enable Accelerated Networking on all platforms.'; State = 'Disabled'; Version = 1; Description = 'Update to the latest version of your NetApp product for Accelerated Networking support.'; LongDescription = 'We have identified that your Virtual Machine might be running a version of software image that is running older drivers for Accelerated Networking (AN). It has a synthetic network interface which, either, is not AN capable or is not compatible with all Azure hardware. It is recommended that you upgrade to the latest version of the image that addresses this issue and enable Accelerated Networking. Please contact your vendor for further instructions on how to upgrade your Network Virtual Appliance Image.'; Benefits = 'Faster network throughput with lower latency.'; Tip = 'Upgrade your Network Virtual Appliance image version to eliminate any unexpected degradation in network performance.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms'; } + ,[PSCustomObject]@{ Id = '010692cc-0668-43fa-b7dc-6766efb22e59'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'NVA'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'NVAHighCPU'; Message = 'NVA with high CPU'; State = 'Disabled'; Version = 1; Description = 'Consider increasing the size of your NVA to address persistent high CPU'; LongDescription = 'When NVAs run at high CPU, packets can get dropped resulting in connection failures or high latency due to network retransmits. Your NVA is running at high CPU, so you should consider increasing the VM size as allowed by the NVA vendor''s licensing requirements.'; Benefits = 'Reduce the odds of packet drops'; Tip = ''; LearnMoreLink = 'https://aka.ms/NVAHighCPU'; } + ,[PSCustomObject]@{ Id = 'f266acba-699d-4900-ae93-1bb488fd69df'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'NVA Engineering'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'NvaMaxFlowLimit'; Message = 'NVA VM Instance Maximum Flow Limit'; State = 'Disabled'; Version = 1.1; Description = 'NVA may see traffic loss due to hitting the maximum number of flows.'; LongDescription = 'Packet loss has been observed for this Virtual Machine due to hitting or exceeding the maximum number of flows for a VM instance of this size on Azure'; Benefits = 'You will see increased performance'; Tip = 'Scale to use more VMs or increase the VM size to more than 8 cores'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-network/virtual-machine-network-throughput'; } + ,[PSCustomObject]@{ Id = 'e9a96e96-c68f-4604-b9ff-6b57ffb693da'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'NVA Engineering'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'PaloAltoNVAAccelNet'; Message = 'Accelerated Networking Recommendation for Palo Alto Networks VM-Series Firewall'; State = 'Disabled'; Version = 1; Description = 'Palo Alto Networks VM-Series Firewall may experience high CPU utilization, reduced throughput and high latency.'; LongDescription = 'We have identified that your Virtual Machine might be running a version of Palo Alto Networks VM-Series Firewall Image that is running older drivers for Accelerated Networking, which may cause the product to revert to using the standard, synthetic network interface which does not use Accelerated Networking. It is recommended that you upgrade to a newer version of the image that addresses this issue and enable Accelerated Networking. Please contact Palo Alto Networks for further instructions on how to upgrade your Network Virtual Appliance Image.'; Benefits = 'You will not experience an unexpected degradation in network performance.'; Tip = 'Upgrade Palo Alto Networks VM-Series Firewall image version to eliminate any unexpected degradation in network performance.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms'; } + ,[PSCustomObject]@{ Id = '1964f651-15e7-4519-bd86-9a7c5335bfe4'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'NVA Engineering'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'PaloAltoFWANUpgradeRecommendation'; Message = 'Upgrade your Network Virtual Appliance Version to enable Accelerated Networking on all platforms.'; State = 'Disabled'; Version = 1; Description = 'Update to the latest version of your Palo Alto Firewall product for Accelerated Networking support.'; LongDescription = 'We have identified that your Virtual Machine might be running a version of software image that is running older drivers for Accelerated Networking (AN). It has a synthetic network interface which, either, is not AN capable or is not compatible with all Azure hardware. It is recommended that you upgrade to the latest version of the image that addresses this issue and enable Accelerated Networking. Please contact your vendor for further instructions on how to upgrade your Network Virtual Appliance Image.'; Benefits = 'Faster network throughput with lower latency.'; Tip = 'Upgrade your Network Virtual Appliance image version to eliminate any unexpected degradation in network performance.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli#enable-accelerated-networking-on-existing-vms'; } + ,[PSCustomObject]@{ Id = 'f3be5a9b-2583-4a1c-b774-2481c00ccb04'; Category = 'High Availability'; Control = 'Other'; Impact = 'Medium'; ServiceName = 'VPN Gateway'; ResourceType = 'microsoft.network/virtualnetworkgateways'; Key = 'ActiveActiveGatewaySingleTunnel'; Message = 'Configure redundant tunnel'; State = 'Disabled'; Version = 5; Description = 'Configure redundant tunnel for your active-active VPN gateway'; LongDescription = 'In active-active configuration, each Azure gateway instance has a unique public IP address, and each establishes an IPsec/IKE S2S VPN tunnel to your on-premises VPN device specified in your local network gateway and connection. Note that both VPN tunnels are actually part of the same connection. You need to configure your on-premises VPN device to accept or establish two S2S VPN tunnels to those two Azure VPN gateway public IP addresses.'; Benefits = 'Improve availability and aggregate throughput'; Tip = 'You can configure redundant tunnels for your active-active vpn gateway to improve availability.'; LearnMoreLink = 'https://aka.ms/aa_activeactive_singletun_learnmore'; } + ,[PSCustomObject]@{ Id = 'e070c4bf-afaf-413e-bc00-e476b89c5f3d'; Category = 'High Availability'; Control = 'High Availability'; Impact = 'Medium'; ServiceName = 'VPN Gateway'; ResourceType = 'microsoft.network/virtualnetworkgateways'; Key = 'BasicVPNGateway'; Message = 'Move to production gateway SKUs from Basic gateways'; State = 'Active'; Version = 6; Description = 'Move to production gateway SKUs from Basic gateways'; LongDescription = 'The Basic VPN SKU is for development or testing scenarios. If you''re using the VPN gateway for production, move to a production SKU, which offers higher numbers of tunnels, Border Gateway Protocol (BGP), active-active configuration, custom IPsec/IKE policy, and increased stability and availability.'; Benefits = 'Additional available features and higher stability and availability'; Tip = ''; LearnMoreLink = 'https://aka.ms/aa_basicvpngateway_learnmore'; } + ,[PSCustomObject]@{ Id = '129d8c1e-a4d2-4bac-86ce-c7c2b2e37feb'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'VPN Gateway'; ResourceType = 'microsoft.network/virtualnetworkgateways'; Key = 'IdleVNetGateway'; Message = 'Delete or reconfigure idle virtual network gateways'; State = 'Active'; Version = 1.1; Description = 'Repurpose or delete idle virtual network gateways'; LongDescription = 'We noticed that your virtual network gateway has been idle for over 90 days. This gateway is being billed hourly. You may want to reconfigure this gateway, or delete it if you don''t intend to use it anymore.'; Benefits = 'savings'; Tip = 'You can delete or repurpose idle virtual network gateways to reduce your Azure spend.'; LearnMoreLink = 'https://aka.ms/aa_idlevpngateway_learnmore'; } + ,[PSCustomObject]@{ Id = 'f78c8e26-9c40-4a74-a091-f76aecb49099'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'VPN Gateway'; ResourceType = 'microsoft.network/virtualnetworkgateways'; Key = 'HighP2SConnectionsVNetGateway'; Message = 'P2S Gateway with High Connection Count'; State = 'Active'; Version = 1; Description = 'Consider increasing the size of your VNet Gateway SKU to address high P2S use'; LongDescription = 'Each gateway SKU can only support a specified count of concurrent P2S connections. Your connection count is close to your gateway limit, so additional connection attempts may fail.'; Benefits = 'Increasing the size of your gateway will allow you to support more concurrent P2S users'; Tip = ''; LearnMoreLink = 'https://aka.ms/HighP2SConnectionsVNetGateway'; } + ,[PSCustomObject]@{ Id = 'c249dc0e-9a17-423e-838a-d72719e8c5dd'; Category = 'High Availability'; Control = 'Business Continuity'; Impact = 'Medium'; ServiceName = 'VPN Gateway'; ResourceType = 'microsoft.network/virtualnetworkgateways'; Key = 'VNetGatewayActiveActive'; Message = 'Enable Active-Active gateways for redundancy'; State = 'Active'; Version = 6; Description = 'Enable Active-Active gateways for redundancy'; LongDescription = 'In active-active configuration, both instances of the VPN gateway establish site-to-site (S2S) VPN tunnels to your on-premise VPN device. When a planned maintenance or unplanned event happens to one gateway instance, traffic is automatically switched over to the other active IPsec tunnel.'; Benefits = 'Ensure business continuity through connection resilience'; Tip = 'Enable Active-Active configuration for your VPN gateways for redundancy.'; LearnMoreLink = 'https://aka.ms/aa_vpnha_learnmore'; } + ,[PSCustomObject]@{ Id = '2e41fe84-7173-4fe9-b257-61aa4679c3fe'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'VPN Gateway'; ResourceType = 'microsoft.network/virtualnetworkgateways'; Key = 'HighCPUVNetGateway'; Message = 'VPN Gateway with High CPU'; State = 'Active'; Version = 1; Description = 'Consider increasing the size of your VNet Gateway SKU to address consistently high CPU use'; LongDescription = 'Under high traffic load, the VPN gateway may drop packets due to high CPU. You should consider upgrading your VPN Gateway SKU since your VPN has consistently been running at .'; Benefits = 'Increasing the size of your VPN gateway will ensure that connections aren''t dropped due to high CPU'; Tip = ''; LearnMoreLink = 'https://aka.ms/HighCPUP2SVNetGateway'; } + ,[PSCustomObject]@{ Id = '7c27d589-c7ed-47e1-8fe9-fe12ea81634a'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'Network Watcher'; ResourceType = 'microsoft.network/networksecuritygroups'; Key = 'NSGFlowLogsenableTA'; Message = 'Enable Traffic Analytics for NSG'; State = 'Active'; Version = 2; Description = 'Enable Traffic Analytics to view insights into traffic patterns across Azure resources'; LongDescription = 'Traffic Analytics is a cloud-based solution that provides visibility into user and application activity in Azure. Traffic analytics analyzes Network Watcher network security group (NSG) flow logs to provide insights into traffic flow. With traffic analytics, you can view top talkers across Azure and non Azure deployments, investigate open ports, protocols and malicious flows in your environment and optimize your network deployment for performance. You can process flow logs at 10 mins and 60 mins processing intervals, giving you faster analytics on your traffic.'; Benefits = 'Identify top talkers, traffic hotspots, resource utilisation and security based on traffic patterns in NSG'; Tip = '* Use 10 mins processing interval for faster insights. * You can select Flog Logs version 2 to see bytes and packets per flow'; LearnMoreLink = 'https://aka.ms/aa_enableta_learnmore'; } + ,[PSCustomObject]@{ Id = '6f087e7e-afdf-4a3d-a1de-41d70404b9cb'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'CloudNet_NetworkWatcher'; ResourceType = 'microsoft.network/networkwatchers/flowlogs'; Key = 'UpgradeNSGToVnetFlowLog'; Message = 'Upgrade NSG flow logs to VNet flow logs'; State = 'Active'; Version = 9; Description = 'Upgrade NSG flow logs to VNet flow logs'; LongDescription = 'Virtual Network flow log allows you to record IP traffic flowing in a virtual network. It provides several benefits over Network Security Group flow log like simplified enablement, enhanced coverage, accuracy, performance and observability of Virtual Network Manager rules and encryption status.'; Benefits = 'Improved coverage and additional functionality'; Tip = ''; LearnMoreLink = 'https://aka.ms/vnetflowlogspreviewdocs'; } + ,[PSCustomObject]@{ Id = 'a15a8fbc-22ac-41af-9039-2c9c4a7128e0'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'Azure Advisor'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'AddMonitorProdVM'; Message = ' Add Azure Monitor to your virtual machine (VM) labeled as production'; State = 'Disabled'; Version = 4.1; Description = 'Add Azure Monitor to your virtual machine (VM) labeled as production'; LongDescription = 'Azure Monitor for VMs monitors your Azure virtual machines (VM) and virtual machine scale sets at scale. It analyzes the performance and health of your Windows and Linux VMs, and it monitors their processes and dependencies on other resources and external processes. It includes support for monitoring performance and application dependencies for VMs that are hosted on-premises or in another cloud provider.'; Benefits = ' Azure Monitor analyzes performance, health, and processes on your Windows and Linux VMs'; Tip = 'Azure Monitor analyzes performance, health, and processes on your Windows and Linux VMs'; LearnMoreLink = 'https://docs.microsoft.com/azure/azure-monitor/insights/vminsights-overview'; } + ,[PSCustomObject]@{ Id = 'bbd39b95-99d9-4b7e-b66b-8813081307c1'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Advisor'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'AddTagPolicy'; Message = 'Assign the ''Add or replace a tag on resources'' policy'; State = 'Disabled'; Version = 2.1; Description = 'Enforce ''Add or replace a tag on resources'' using Azure Policy'; LongDescription = 'Azure Policy is a service in Azure that you use to create, assign, and manage policies. These policies enforce different rules and effects over your resources. This policy adds or replaces the specified tag and value when any resource is created or updated. Existing resources can be remediated by triggering a remediation task. Does not modify tags on resource groups.'; Benefits = 'This specific policy allows for resources to be tagged or for tags to be replaced.'; Tip = 'Azure Policy allows IT admins to define, assign, and, manage standards for resources in their environment.'; LearnMoreLink = 'https://docs.microsoft.com/azure/governance/policy/overview'; } + ,[PSCustomObject]@{ Id = '6d395b56-af36-4f01-a814-f8ba08e49c24'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Advisor'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'AllowedLocationsPolicy'; Message = 'Assign the ''Allowed locations'' policy'; State = 'Disabled'; Version = 2.1; Description = 'Enforce ''Allowed locations'' using Azure Policy'; LongDescription = 'Azure Policy is a service in Azure that you use to create, assign, and manage policies. These policies enforce different rules and effects over your resources. This policy enables you to restrict the locations your organization can specify when deploying resources. Use to enforce your geo-compliance requirements.'; Benefits = 'This specific policy restricts the available locations where your organization can deploy new resources.'; Tip = 'Azure Policy allows IT admins to define, assign, and, manage standards for resources in their environment.'; LearnMoreLink = 'https://docs.microsoft.com/azure/governance/policy/overview'; } + ,[PSCustomObject]@{ Id = '56089005-f16c-4b41-ba0d-2eb3549292d5'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Advisor'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'AllowedVirtualMachineSkuPolicy'; Message = 'Assign the ''Allowed virtual machine SKUs'' policy'; State = 'Disabled'; Version = 2.1; Description = 'Enforce ''Allowed virtual machine SKUs'' using Azure Policy'; LongDescription = 'Azure Policy is a service in Azure that you use to create, assign, and manage policies. These policies enforce different rules and effects over your resources. This policy enables you to specify a set of virtual machine SKUs that your organization can deploy.'; Benefits = 'This specific policy restricts the virtual machine SKUs that your organization can deploy.'; Tip = 'Azure Policy allows IT admins to define, assign, and, manage standards for resources in their environment.'; LearnMoreLink = 'https://docs.microsoft.com/azure/governance/policy/overview'; } + ,[PSCustomObject]@{ Id = '142bcb82-aa8d-44e8-98d4-2b39125f2324'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'Azure Advisor'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'AuditForManagedDisksPolicy'; Message = 'Enforce ''Audit VMs that do not use managed disks'' using Azure Policy'; State = 'Disabled'; Version = 2.1; Description = 'Enforce ''Audit VMs that do not use managed disks'' using Azure Policy'; LongDescription = 'Azure Policy is a service in Azure that you use to create, assign, and manage policies. These policies enforce different rules and effects over your resources. This policy audits VMs that do not use managed disks.'; Benefits = 'This specific policy audits VMs that do not use managed disks.'; Tip = 'Azure Policy allows IT admins to define, assign, and, manage standards for resources in their environment.'; LearnMoreLink = 'https://docs.microsoft.com/azure/governance/policy/overview'; } + ,[PSCustomObject]@{ Id = 'b2c74ac7-061e-4164-b272-ecb0940f5965'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Advisor'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'InheritTagPolicy'; Message = 'Assign the ''Inherit a tag from the resource group'' policy'; State = 'Disabled'; Version = 2.1; Description = 'Enforce ''Inherit a tag from the resource group'' using Azure Policy'; LongDescription = 'Azure Policy is a service in Azure that you use to create, assign, and manage policies. These policies enforce different rules and effects over your resources. This policy adds or replaces the specified tag and value from the parent resource group when any resource is created or updated. Existing resources can be remediated by triggering a remediation task.'; Benefits = 'This specific policy allows for resources to inherit tags from the parent resource group.'; Tip = 'Azure Policy allows IT admins to define, assign, and, manage standards for resources in their environment.'; LearnMoreLink = 'https://docs.microsoft.com/azure/governance/policy/overview'; } + ,[PSCustomObject]@{ Id = 'c6b94711-f1f5-4e7e-9c89-c17ed4190969'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Storage'; ResourceType = 'microsoft.storage/storageaccounts'; Key = 'PremiumBlobStorageAccount'; Message = 'Use premium performance block blob storage'; State = 'Active'; Version = 1.1; Description = 'Use premium performance block blob storage'; LongDescription = 'One or more of your storage accounts has a high transaction rate per GB of block blob data stored. Use premium performance block blob storage instead of standard performance storage for your workloads that require fast storage response times and/or high transaction rates and potentially save on storage costs.'; Benefits = 'Block blob storage performance boost with the lowest Azure transaction prices.'; Tip = 'You can use Premium Blobs on high transaction blobs to boost performance.'; LearnMoreLink = 'https://aka.ms/usePremiumBlob'; } + ,[PSCustomObject]@{ Id = '5b8ddf04-be28-44ec-ab2c-a63a34d1de13'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'AppServiceReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 12.1; Description = 'Consider App Service reserved instance to save over your on-demand costs'; LongDescription = 'We analyzed your App Service usage pattern over selected Term, look-back period, and recommend reserved instance purchase that maximizes your savings. With reserved instance, you can prepurchase hourly usage for the App Service plan and save over your Pay-as-you-go costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions based on usage pattern over selected Term, look-back period.'; Benefits = 'savings'; Tip = 'You can buy Azure AppService reserved instance to save money over pay-as-you-go costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '10aedd06-621e-4b4f-a45c-5256573e0191'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'AzureVMwareSolutionReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 5.1; Description = 'Consider Azure VMware Solution reserved instance to save over your on-demand costs'; LongDescription = 'We analyzed your Azure VMware Solution usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy Azure VMware Solution reserved instance to save money over pay-as-you-go costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '1b8c5187-32a6-4a2f-8ca1-b0b7d6ce9e86'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'AzureDataExplorerReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 5.1; Description = 'Consider Azure Data Explorer reserved instance to save over your on-demand costs'; LongDescription = 'We analyzed your Azure Data Explorer usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy Azure Data Explorer reserved instance and save money over on-demand costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '0d524e8d-4cfd-4db5-9f91-8b4bb5235a8e'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'DataFactorybReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 5.1; Description = 'Consider Data Factory reserved instance to save over your on-demand costs'; LongDescription = 'We analyzed your Data Factory usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy Data Factory reserved instance and save money over on-demand costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '3f6c5689-6a05-4896-a6e0-c6f8a22a44c2'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'AzureDedicatedHostReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 5.1; Description = 'Consider Azure Dedicated Host reserved instance to save over your on-demand costs'; LongDescription = 'We analyzed your Azure Dedicated Host usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy Azure Dedicated Host reserved instance and save money over on-demand costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '407b6ad6-8e0b-40e7-9384-643520cae0ed'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'AzureFilesReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 5.1; Description = 'Consider Azure Files reserved instance to save over your on-demand costs'; LongDescription = 'We analyzed your Azure Files usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy Azure Files reserved instance and save money over on-demand costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '0eb54047-acd9-4f26-8ffb-8cec713782d6'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'AzureManagedDiskReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 5.1; Description = 'Consider Azure Managed Disk reserved instance to save over your on-demand costs'; LongDescription = 'We analyzed your Azure Managed Disk usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy Azure Managed disk reserved instance and save money over on-demand costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '0169a2e1-c7bf-4c37-90b8-0714811c82d3'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'BlobReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 5.1; Description = 'Consider Blob storage reserved instance to save on Blob v2 and Datalake storage Gen2 costs'; LongDescription = 'We analyzed your Azure Blob and Datalake storage usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Blob storage reserved instance applies only to data stored on Azure Blob (GPv2) and Azure Data Lake Storage (Gen 2). Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy Blob storage Gen 2 reserved instance and save money over on-demand costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = 'a205074f-8049-48b3-903f-556f5e530ae3'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'CosmosDBReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 9.1; Description = 'Consider Cosmos DB reserved instance to save over your pay-as-you-go costs'; LongDescription = 'We analyzed your Cosmos DB usage pattern over selected Term, look-back period and calculate reserved instance purchase that maximizes your savings. With reserved instance, you can prepurchase Cosmos DB hourly usage and save over your pay-as-you-go costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and usage pattern over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings even more.'; Benefits = 'savings'; Tip = 'You can buy Cosmos DB reserved instance to save money over pay-as-you-go costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '171f87ad-4ead-42fc-8f32-a3b18d451837'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'MariaDBSQLReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 7.1; Description = 'Consider Database for MariaDB reserved instance to save over your pay-as-you-go costs'; LongDescription = 'We analyzed you Azure Database for MariaDB usage pattern over selected Term, look-back period, and recommend reserved instance purchase that maximizes your savings. With reserved instance, you can prepurchase MariaDB hourly usage and save over your compute costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy Database for MariaDB reserved instance to save money over pay-as-you-go costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = 'a8fd63ce-4600-43eb-af33-a6d5481f5930'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'MySQLReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 9.1; Description = 'Consider Database for MySQL reserved instance to save over your pay-as-you-go costs'; LongDescription = 'We analyzed you MySQL Database usage pattern over selected Term, look-back period, and recommend reserved instance purchase that maximizes your savings. With reserved instance, you can prepurchase MySQL hourly usage and save over your compute costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy MySQL Database reserved instance to save money over pay-as-you-go costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '32755df6-aa2f-48d7-9ab7-92b8a80352ea'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'NetAppStorageReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 5.1; Description = 'Consider NetApp Storage reserved instance to save over your on-demand costs'; LongDescription = 'We analyzed your NetApp Storage usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy NetApp Storage reserved instance and save money over on-demand costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = 'dadc1876-61e3-42fc-a70e-e863bbc460b6'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'OpenAIServiceProvisionedThroughputReservedCapacity'; Message = 'Buy reservations'; State = 'Active'; Version = 1; Description = 'Consider OpenAI Service Provisioned Throughput reservations to save over pay-as-you-go costs'; LongDescription = 'OpenAI Service Provisioned Throughput purchases are recommended based on usage over the selected term and look-back period. Purchase a reservation to save over pay-as-you-go costs for the chosen term. It automatically applies to matching resources. Shared scope recommendations are available in reservation purchase experience.'; Benefits = 'savings'; Tip = 'You can buy OpenAI Service Provisioned Throughput reservationss to save money over pay-as-you-go costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '06ad499a-0952-48d3-b061-ec81c9cabb8b'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'PostgreSQLReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 5.1; Description = 'Consider Database for PostgreSQL reserved instance to save over your pay-as-you-go costs'; LongDescription = 'We analyzed your Database for PostgreSQL usage pattern over selected Term, look-back period, and recommend reserved instance purchase that maximizes your savings. With reserved instance, you can prepurchase PostgresSQL Database hourly usage and save over your on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy Database for PostgreSQL reserved instance to save money over pay-as-you-go costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '3327646a-c325-417f-a3e3-36ae7119da69'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'RedHatReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 5.1; Description = 'Consider Red Hat reserved instance to save over your on-demand costs'; LongDescription = 'We analyzed your Red Hat usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy Red Hat reserved instance and save money over on-demand costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '148cdd60-97e8-426b-a7b9-141b7cb4bc2f'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'RedHatOsaReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 5.1; Description = 'Consider RedHat Osa reserved instance to save over your on-demand costs'; LongDescription = 'We analyzed your RedHat Osa usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy RedHat Osa reserved instance and save money over on-demand costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '8ee30d6b-2c73-452a-b4ad-e4386cd6f7d0'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'RedisCacheReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 6.1; Description = 'Consider Cache for Redis reserved instance to save over your pay-as-you-go costs'; LongDescription = 'We analyzed you Cache for Redis usage pattern over selected Term, look-back period, and calculated reserved instance purchase that maximizes your savings. With reserved instance, you can prepurchase Cache for Redis hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy Cache for Redis reserved instance and save money over on-demand costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '84b1a508-fc21-49da-979e-96894f1665df'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'ReservedInstance'; Message = 'Buy reserved instances'; State = 'Active'; Version = 10.3; Description = 'Consider virtual machine reserved instance to save over your on-demand costs'; LongDescription = 'Reserved instances can provide a significant discount over on-demand prices. With reserved instances, you can prepurchase the base costs for your virtual machines. Discounts are automatically applied to new or existing VMs that have the same size and region as your reserved instance. We analyzed your usage over selected Term, look-back period and recommend money-saving reserved instances.'; Benefits = 'savings'; Tip = 'You can buy virtual machine reserved instances to save money over on-demand costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '6dcd6657-7a07-404a-b462-db76946f6a97'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'SapHanaReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 5.1; Description = 'Consider SapHana reserved instance to save over your on-demand costs'; LongDescription = 'We analyzed your SapHana usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy SapHana reserved instance and save money over on-demand costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '89515250-1243-43d1-b4e7-f9437cedffd8'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'SavingsPlan'; Message = 'Add a plan'; State = 'Active'; Version = 4; Description = 'Purchasing a savings plan for compute could unlock lower prices'; LongDescription = 'We analyzed your compute usage over the last 30 days and recommend adding a savings plan to increase your savings. The savings plan unlocks lower prices on select compute services when you commit to spend a fixed hourly amount for 1 or 3 years. As you use select compute services globally, your usage is covered by the plan at reduced prices. During the times when your usage is above your hourly commitment, you''ll simply be billed at your regular pay-as-you-go prices. With savings automatically applying across compute usage globally, you''ll continue saving even as your usage needs change over time. Savings plan are more suited for dynamic workloads while accommodating for planned or unplanned changes while reservations are more suited for stable, predictable workloads with no planned changes. Saving estimates are calculated for individual subscriptions and the usage pattern observed over last 30 days. Shared scope savings plans are available in purchase experience and can further increase savings.'; Benefits = 'savings'; Tip = 'You can add a savings plan and save money over on-demand costs.'; LearnMoreLink = 'https://aka.ms/savingsplan-compute'; } + ,[PSCustomObject]@{ Id = '680a5388-28aa-44e8-88af-32e3598dc869'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'SQLDWReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 10.1; Description = 'Consider Azure Synapse Analytics (formerly SQL DW) reserved instance to save over your pay-as-you-go costs'; LongDescription = 'We analyze you Azure Synapse Analytics usage pattern over selected Term, look-back period, and recommend reserved instance purchase that maximizes your savings. With reserved instance, you can prepurchase Synapse Analytics hourly usage and save over your on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy Synapse Analytics reserved instance to save money over pay-as-you-go costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '885cd4f5-dfa0-4d68-bbfd-00f89fc2b69c'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'SQLReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 12.1; Description = 'Consider SQL PaaS DB reserved instance to save over your pay-as-you-go costs'; LongDescription = 'We analyzed your SQL PaaS usage pattern over selected Term, look-back period, and recommend reserved instance purchase that maximizes your savings. With reserved instance, you can prepurchase hourly usage for your SQL PaaS deployments and save over your SQL PaaS compute costs. SQL license is charged separately and is not discounted by the reservation. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy SQL PaaS reserved instance to save money over pay-as-you-go costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = 'db621e98-4a20-4942-b174-c455dc71dbae'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'SuseLinuxReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 6.1; Description = 'Consider SuseLinux reserved instance to save over your on-demand costs'; LongDescription = 'We analyzed your SuseLinux usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy SuseLinux reserved instance and save money over on-demand costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = 'f0382960-6906-4b0d-add3-ed12690bff31'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'ReservedInstances'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'VMwareCloudSimpleReservedCapacity'; Message = 'Buy reserved instance'; State = 'Active'; Version = 5.1; Description = 'Consider VMware Cloud Simple reserved instance'; LongDescription = 'We analyzed your VMware Cloud Simple usage over selected Term, look-back period, and calculated reserved instance purchase that would maximize your savings. With reserved instance, you can prepurchase hourly usage and save over your current on-demand costs. Reserved instance is a billing benefit and is automatically applied to new or existing deployments. Saving estimates are calculated for individual subscriptions and the usage pattern observed over selected Term, look-back period. Shared scope recommendations are available in reservation purchase experience and can increase savings further.'; Benefits = 'savings'; Tip = 'You can buy VMware Cloud Simple reserved instance and save money over on-demand costs.'; LearnMoreLink = 'https://aka.ms/rirecommendations'; } + ,[PSCustomObject]@{ Id = '703fbf6c-ab3a-47d2-aa26-9092d06a6054'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Resource Move'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'UpgradeResourceMoverSDK'; Message = 'Update Azure Resource Mover SDK'; State = 'Disabled'; Version = 1.1; Description = 'Update Azure Resource Mover SDK Version'; LongDescription = 'We have identified that you are using an older version of SDK. The latest version of SDK contains new features such as dependency validation improvements, ability to delete source resources, and portal improvements, in addition to several fixes proactively identified though our QA process.'; Benefits = 'Latest Azure Resource Mover SDK contains the most recent feature functionality'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/resource-mover/'; } + ,[PSCustomObject]@{ Id = '97b38421-f88c-4db0-b397-b2d81eff6630'; Category = 'High Availability'; Control = 'Scalability'; Impact = 'Medium'; ServiceName = 'Azure Search'; ResourceType = 'microsoft.search/searchservices'; Key = 'BasicServiceStorageQuota90percent'; Message = 'Create a Standard search service (2GB)'; State = 'Active'; Version = 8; Description = 'Create a Standard search service (2GB)'; LongDescription = 'When you exceed your storage quota, indexing operations stop working. You''re close to exceeding your storage quota of 2GB. If you need more storage, create a Standard search service or add extra partitions.'; Benefits = 'capability to handle more data'; Tip = ''; LearnMoreLink = 'https://aka.ms/azs/search-limits-quotas-capacity'; } + ,[PSCustomObject]@{ Id = '8d31f25f-31a9-4267-b817-20ee44f88069'; Category = 'High Availability'; Control = 'Scalability'; Impact = 'Medium'; ServiceName = 'Azure Search'; ResourceType = 'microsoft.search/searchservices'; Key = 'FreeServiceStorageQuota90percent'; Message = 'Create a Standard search service (50MB)'; State = 'Active'; Version = 9; Description = 'Create a Standard search service (50MB)'; LongDescription = 'When you exceed your storage quota, indexing operations stop working. You''re close to exceeding your storage quota of 50MB. To maintain operations, create a Basic or Standard search service.'; Benefits = 'capability to handle more data'; Tip = ''; LearnMoreLink = 'https://aka.ms/azs/search-limits-quotas-capacity'; } + ,[PSCustomObject]@{ Id = 'b3efb46f-6d30-4201-98de-6492c1f8f10d'; Category = 'High Availability'; Control = 'Scalability'; Impact = 'Medium'; ServiceName = 'Azure Search'; ResourceType = 'microsoft.search/searchservices'; Key = 'StandardServiceStorageQuota90percent'; Message = 'Avoid exceeding your available storage quota by adding more partitions'; State = 'Active'; Version = 8; Description = 'Avoid exceeding your available storage quota by adding more partitions'; LongDescription = 'When you exceed your storage quota, you can still query, but indexing operations stop working. You''re close to exceeding your available storage quota. If you need more storage, add extra partitions.'; Benefits = 'Able to index additional data'; Tip = ''; LearnMoreLink = 'https://aka.ms/azs/search-limits-quotas-capacity'; } + ,[PSCustomObject]@{ Id = 'b83241d3-47ba-4603-8d5a-a1b3331e74f4'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure SQL Database'; ResourceType = 'microsoft.sql/servers/databases'; Key = 'SQLRightSizing'; Message = 'Right Size SQL DB'; State = 'Active'; Version = 2; Description = 'Right-size underutilized SQL Databases'; LongDescription = 'We''ve analyzed the DTU consumption of your SQL Database over the past 14 days and identified SQL Databases with low usage. You can save money by right-sizing to the recommended SKU based on the 95th percentile of your every day workload.'; Benefits = 'Optimize Azure spend'; Tip = ''; LearnMoreLink = 'https://aka.ms/sqldbrec'; } + ,[PSCustomObject]@{ Id = 'ef14bcc2-41a5-41f6-bca8-10764cfbdee0'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure Synapse Analytics'; ResourceType = 'microsoft.sql/sqldatawarehouses'; Key = 'CreateTableStatisticsSqlDW'; Message = 'Create table statistics'; State = 'Active'; Version = 3.1; Description = 'Create statistics on table columns'; LongDescription = 'We have detected that you are missing table statistics which may be impacting query performance. The query optimizer uses statistics to estimate the cardinality or number of rows in the query result which enables the query optimizer to create a high quality query plan.'; Benefits = 'Increase query performance'; Tip = ''; LearnMoreLink = 'https://aka.ms/learnmorestatistics'; } + ,[PSCustomObject]@{ Id = '9d7196d1-2d7c-4316-820f-7374a4ddf250'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure Synapse Analytics'; ResourceType = 'microsoft.sql/sqldatawarehouses'; Key = 'DataSkewSqlDW'; Message = 'Remove data skew'; State = 'Active'; Version = 3.1; Description = 'Remove data skew to increase query performance'; LongDescription = 'We have detected distribution data skew greater than 15%. This can cause costly performance bottlenecks.'; Benefits = 'Increase query performance'; Tip = ''; LearnMoreLink = 'https://aka.ms/learnmoredataskew'; } + ,[PSCustomObject]@{ Id = 'dd93fbbf-e5ef-4c7c-886e-2bfef0958f45'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure Synapse Analytics'; ResourceType = 'microsoft.sql/sqldatawarehouses'; Key = 'FileSplittingGuidance'; Message = 'Split files that are staged for loading'; State = 'Active'; Version = 1; Description = 'Split staged files in the storage account to increase load performance'; LongDescription = 'We have detected that you can increase load throughput by splitting your compressed files that are staged in your storage account. A good rule of thumb is to split compressed files into 60 or more to maximize the parallelism of your load. '; Benefits = 'Increase load performance'; Tip = 'You can improve load performance by splitting files that are staged for loading.'; LearnMoreLink = 'https://aka.ms/learnmorefilesplit'; } + ,[PSCustomObject]@{ Id = 'e0ba1234-61da-46e3-a66d-fa0752b9df7d'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure Synapse Analytics'; ResourceType = 'microsoft.sql/sqldatawarehouses'; Key = 'LoadBatchSizeGuidance'; Message = 'Increase batch size when loading '; State = 'Active'; Version = 1; Description = 'Increase batch size when loading to maximize load throughput, data compression, and query performance'; LongDescription = 'We have detected that you can increase load performance and throughput by increasing the batch size when loading into your database. You should consider using the COPY statement. If you are unable to use the COPY statement, consider increasing the batch size when using loading utilities such as the SQLBulkCopy API or BCP - a good rule of thumb is a batch size between 100K to 1M rows.'; Benefits = 'Increase load throughput, data compression, and query performance'; Tip = 'You can improve load throughput, data compression, and query performance by increasing your batch size.'; LearnMoreLink = 'https://aka.ms/learnmoreincreasebatchsize'; } + ,[PSCustomObject]@{ Id = '14b28bdb-b83d-4f55-a516-44d4152f1f2b'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure Synapse Analytics'; ResourceType = 'microsoft.sql/sqldatawarehouses'; Key = 'SqlDwIncreaseCacheCapacity'; Message = 'Increase Cache Capacity'; State = 'Active'; Version = 1; Description = 'Scale up to optimize cache utilization with SQL Data Warehouse'; LongDescription = 'We have detected that you had high cache used percentage with a low hit percentage. This indicates high cache eviction which can impact the performance of your workload.'; Benefits = 'Increase query performance'; Tip = 'You can improve your SQL Data Warehouse query performance by scaling up to optimize cache utilization.'; LearnMoreLink = 'https://aka.ms/learnmoreadaptivecache'; } + ,[PSCustomObject]@{ Id = '33e515fe-354c-4016-a0f7-c4d6585aea61'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure Synapse Analytics'; ResourceType = 'microsoft.sql/sqldatawarehouses'; Key = 'SqlDwReduceTempdbContention'; Message = 'Reduce Tempdb Contention'; State = 'Active'; Version = 1; Description = 'Scale up or update resource class to reduce tempdb contention with SQL Data Warehouse'; LongDescription = 'We have detected that you had high tempdb utilization which can impact the performance of your workload.'; Benefits = 'Increase query performance'; Tip = 'You can improve your SQL Data Warehouse query performance by scaling up or updating your resource class to reduce tempdb contention.'; LearnMoreLink = 'https://aka.ms/learnmoretempdb'; } + ,[PSCustomObject]@{ Id = '293984cf-b551-461f-b22d-9659ebd09a4f'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure Synapse Analytics'; ResourceType = 'microsoft.sql/sqldatawarehouses'; Key = 'SqlDwReplicateTable'; Message = 'Replicate Table'; State = 'Active'; Version = 1; Description = 'Convert tables to replicated tables with SQL Data Warehouse'; LongDescription = 'We have detected that you may benefit from using replicated tables. When using replicated tables, this will avoid costly data movement operations and significantly increase the performance of your workload.'; Benefits = 'Increase query performance'; Tip = 'You can improve your SQL Data Warehouse query performance by converting tables to replicated tables.'; LearnMoreLink = 'https://aka.ms/learnmorereplicatedtables'; } + ,[PSCustomObject]@{ Id = '314a2614-24d3-496c-b9d6-e6cd3df4b6c2'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure Synapse Analytics'; ResourceType = 'microsoft.sql/sqldatawarehouses'; Key = 'ColocateStorageAccount'; Message = 'Co-locate the storage account and the SQL pool within the same region'; State = 'Active'; Version = 1; Description = 'Co-locate the storage account within the same region to minimize latency when loading'; LongDescription = 'We have detected that you are loading from a region that is different from your SQL pool. You should consider loading from a storage account that is within the same region as your SQL pool to minimize latency when loading data.'; Benefits = 'Minimize latency and increase load performance'; Tip = 'You can minimize latency and increase load performance by co-locating your storage account with your SQL pool'; LearnMoreLink = 'https://aka.ms/learnmorestoragecolocation'; } + ,[PSCustomObject]@{ Id = '01dea77b-3ca4-4583-9b09-88f5a8fd5857'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure Synapse Analytics'; ResourceType = 'microsoft.sql/sqldatawarehouses'; Key = 'UpdateTableStatisticsSqlDW'; Message = 'Update table statistics'; State = 'Active'; Version = 3.1; Description = 'Update statistics on table columns'; LongDescription = 'We have detected that you do not have up-to-date table statistics which may be impacting query performance. The query optimizer uses up-to-date statistics to estimate the cardinality or number of rows in the query result which enables the query optimizer to create a high quality query plan.'; Benefits = 'Increase query performance'; Tip = ''; LearnMoreLink = 'https://aka.ms/learnmorestatistics'; } + ,[PSCustomObject]@{ Id = '48eda464-1485-4dcf-a674-d0905df5054a'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Storage'; ResourceType = 'microsoft.compute/disks'; Key = 'DeleteOrDowngradeUnattachedDisks'; Message = 'You have disks that are not attached to a VM. Please evaluate if you still need the disk.'; State = 'Active'; Version = 18.1; Description = 'You have disks that are not attached to a VM. Please evaluate if you still need the disk'; LongDescription = 'We have observed that you have disks that are not attached to a VM. Please evaluate if you still need the disk. If you decide to delete the disk, recovery is not possible. We recommend that you create a snapshot before deletion or ensure the data in the disk is no longer required.'; Benefits = 'Cost saving.'; Tip = 'Delete unattached disks.'; LearnMoreLink = 'https://aka.ms/unattacheddisks'; } + ,[PSCustomObject]@{ Id = 'dd65e838-4473-4fdb-b124-e09798e35f36'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Storage'; ResourceType = 'microsoft.storage/storageaccounts'; Key = 'EnableLargeFileShares'; Message = 'Enable the large file share feature on storage account to avoid throttling'; State = 'Disabled'; Version = 1.1; Description = 'Enable the large file share feature on storage account to avoid throttling.'; LongDescription = 'Standard file shares are limited to 1000 IOPS per share. By enabling the large file share feature you can get 10x more IOPS. There is no charge to enable large file shares. Enabling large files shares is an irreversible action. Large file shares enabled account can''t be converted to re-redundant accounts.'; Benefits = 'Eliminate throttling and improve the performance of your file shares.'; Tip = 'By enabling the large file share feature you can get 10x more IOPS. There is no charge to enable large file shares.'; LearnMoreLink = 'https://docs.microsoft.com/azure/storage/files/storage-files-how-to-create-large-file-share#enable-large-files-shares-on-an-existing-account'; } + ,[PSCustomObject]@{ Id = 'd9823f54-3eaa-485b-a3b0-b9559c8e831f'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Storage'; ResourceType = 'microsoft.storage/storageaccounts'; Key = 'EnableSnapshots'; Message = 'No Snapshots Detected'; State = 'Active'; Version = 1.1; Description = 'No Snapshots Detected'; LongDescription = 'We have observed that there are no snapshots of your file shares. This means you are not protected from accidental file deletion or file corruption scenarios. Please enable snapshots to protect your data. To enable snapshots you can use Azure Portal or Azure Backup or 3rd party solutions'; Benefits = 'Schedule snapshots of your file shares to protect yourself from accidental file deletion or data corruption like ransomware.'; Tip = ''; LearnMoreLink = 'https://learn.microsoft.com/en-us/azure/storage/files/storage-snapshots-files'; } + ,[PSCustomObject]@{ Id = '386452d3-8df0-4174-94cb-fee063b3084f'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Storage'; ResourceType = 'microsoft.storage/storageaccounts'; Key = 'XstoreLargeClassicLog'; Message = 'Reduce retention policy of classic storage logs'; State = 'Active'; Version = 1; Description = 'Revisit retention policy for classic log data in storage accounts'; LongDescription = 'Large classic log data is detected on your storage accounts. You are billed on capacity of data stored in storage accounts including classic logs. You are recommended to check the retention policy of classic logs and update with necessary period to retain less log data. This would reduce unnecessary classic log data and save your billing cost from less capacity.'; Benefits = 'Save cost from unneeded log data'; Tip = ''; LearnMoreLink = ' https://docs.microsoft.com/azure/storage/common/manage-storage-analytics-logs#modify-retention-policy'; } + ,[PSCustomObject]@{ Id = 'ad488f61-5ada-4c72-8296-56ea29955552'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Storage'; ResourceType = 'microsoft.storage/storageaccounts'; Key = 'MigrateToPremiumStorage'; Message = 'Migrate from Standard Storage to Premium Storage'; State = 'Disabled'; Version = 1.1; Description = 'Migrate your data from Standard Storage account to Premium Storage account'; LongDescription = 'We noticed that there is a high volume of transactions on your storage account. We recommend you to migrate to Premium Storage (SSD based) to boost your performance on Page Blobs/Unmanaged Disks.'; Benefits = 'Improve your performance with lower latency and provisioned performance'; Tip = ''; LearnMoreLink = 'https://aka.ms/aa_premiumstg_migrate_learnmore'; } + ,[PSCustomObject]@{ Id = '6747b02b-b6ac-4c2e-aeca-c2aa0438f58d'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Storage'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'MixedDiskTypeToSSDPublic'; Message = 'Use SSD Disks for your production workloads'; State = 'Active'; Version = 1.1; Description = 'Use SSD Disks for your production workloads'; LongDescription = 'We noticed that you are using SSD disks while also using Standard HDD disks on the same VM. Standard HDD managed disks are generally recommended for dev-test and backup; we recommend you use Premium SSDs or Standard SSDs for production. Premium SSDs deliver high-performance and low-latency disk support for virtual machines with IO-intensive workloads. Standard SSDs provide consistent and lower latency. Upgrade your disk configuration today for improved latency, reliability, and availability. Upgrading requires a VM reboot, which will take three to five minutes.'; Benefits = 'Improve latency, reliability, and availability'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-machines/windows/disks-types#disk-comparison'; } + ,[PSCustomObject]@{ Id = 'c81a0349-18c0-4bd2-81c7-475adde922d2'; Category = 'Cost'; Control = ''; Impact = 'Medium'; ServiceName = 'Storage'; ResourceType = 'microsoft.storage/storageaccounts'; Key = 'MoveToPremiumStorage'; Message = 'Consider evaluating premium storage from a cost perspective'; State = 'Active'; Version = 1.1; Description = 'Based on your high transactions/TB ratio, there''s a possibility that premium storage might be more cost effective in addition to being performant for your scenario. More details on pricing for premium and standard accounts can be found here'; LongDescription = 'The customer can lower the bill if the transactions/TB ratio is high. Exact number would depend on transaction mix and region but anywhere >30 or 35 TPB/TB may be good candidates to at least evaluate a move to premium storage.'; Benefits = 'Based on your high transactions/TB ratio, there is a possibility that premium storage might be more cost effective in addition to being performant for your scenario.'; Tip = ''; LearnMoreLink = 'https://aka.ms/azureblobstoragepricing'; } + ,[PSCustomObject]@{ Id = 'a0ad4f8c-f904-4b11-955d-e0044473c5fa'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'Storage'; ResourceType = 'microsoft.storage/storageaccounts'; Key = 'StorageAccountScaleTarget'; Message = 'Prevent hitting subscription limit for maximum storage accounts'; State = 'Active'; Version = 2; Description = 'Prevent hitting subscription limit for maximum storage accounts'; LongDescription = 'A region can support a maximum of 250 storage accounts per subscription. You have either already reached or are about to reach that limit. If you reach that limit, you will be unable to create any more storage accounts in that subscription/region combination. Please evaluate the recommended action below to avoid hitting the limit.'; Benefits = 'Ensure you do not reach the limit that can prevent you from creating additional storage accounts'; Tip = ''; LearnMoreLink = 'https://aka.ms/subscalelimit'; } + ,[PSCustomObject]@{ Id = 'b353f187-4cb4-4b2b-b502-472f45f32fd6'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Storage'; ResourceType = 'microsoft.storage/storageaccounts'; Key = 'StorageCallPutBlob'; Message = 'Optimize Block Blob Operations'; State = 'Active'; Version = 1; Description = 'Use "Put Blob" for blobs smaller than 256 MB'; LongDescription = 'When writing a block blob that is 256 MB or less (64 MB for requests using REST versions before 2016-05-31), you can upload it in its entirety with a single write operation using "Put Blob". Based on your aggregated metrics, we believe your storage account''s write operations can be optimized.'; Benefits = 'Increase performance and reduce operation costs.'; Tip = ''; LearnMoreLink = 'http://aka.ms/understandblockblobs'; } + ,[PSCustomObject]@{ Id = '1ef6e4c5-2caa-4528-a6e4-0db08a4d2872'; Category = 'Cost'; Control = ''; Impact = 'High'; ServiceName = 'Storage'; ResourceType = 'microsoft.storage/storageaccounts'; Key = 'StorageGPv1ToGPv2'; Message = 'Upgrade Storage Account Kind to GPv2'; State = 'Disabled'; Version = 1; Description = 'Upgrade your Storage Account to General-purpose v2'; LongDescription = 'General-purpose v2 (GPv2) accounts enables all the latest features at the lowest per gigabyte prices while retaining support for all APIs and features supported in General-purpose v1 (GPv1) and Blob storage accounts.'; Benefits = 'Take advantage of Storage''s latest features and pricing model'; Tip = ''; LearnMoreLink = 'https://aka.ms/storageaccounts'; } + ,[PSCustomObject]@{ Id = '00c14add-2aef-4bb4-a3bd-5759096d4417'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Storage'; ResourceType = 'microsoft.compute/disks'; Key = 'MDHDDtoPremiumForPerformance'; Message = 'Convert Standard HDD to Premium SSD for better performance'; State = 'Active'; Version = 1.2; Description = 'Convert Managed Disks from Standard HDD to Premium SSD for performance'; LongDescription = 'We have noticed your Standard HDD disk is approaching performance targets. Azure premium SSDs deliver high-performance and low-latency disk support for virtual machines with IO-intensive workloads. Give your disk performance a boost by upgrading your Standard HDD disk to Premium SSD disk. Upgrading requires a VM reboot, which will take three to five minutes.'; Benefits = 'Give your disk performance a boost using Premium SSD disks.'; Tip = 'Upgrade your Standard HDD disks to Premium SSD disks by following our instructions for the Azure portal, PowerShell, or CLI.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-machines/windows/disks-types#premium-ssd'; } + ,[PSCustomObject]@{ Id = 'd42d751d-682d-48f0-bc24-bb15b61ac4b8'; Category = 'High Availability'; Control = 'Scalability'; Impact = 'High'; ServiceName = 'Storage'; ResourceType = 'microsoft.storage/storageaccounts'; Key = 'StoragePremiumBlobQuotaLimit'; Message = 'Migrate Premium Disks from Unmanaged to Managed'; State = 'Active'; Version = 6; Description = 'Use Managed Disks for storage accounts reaching capacity limit'; LongDescription = 'When Premium SSD unmanaged disks in storage accounts are about to reach their Premium Storage capacity limit, failures might occur. To avoid failures when this limit is reached, migrate to Managed Disks that don''t have an account capacity limit. This migration can be done through the portal in less than 5 minutes.'; Benefits = 'Avoid scale issues when account reaches capacity limit'; Tip = ''; LearnMoreLink = 'https://aka.ms/premium_blob_quota'; } + ,[PSCustomObject]@{ Id = '42dbf883-9e4b-4f84-9da4-232b87c4b5e9'; Category = 'High Availability'; Control = 'Business Continuity'; Impact = 'Medium'; ServiceName = 'Storage'; ResourceType = 'microsoft.storage/storageaccounts'; Key = 'StorageSoftDelete'; Message = 'Enable Soft Delete'; State = 'Active'; Version = 6; Description = 'Enable Soft Delete to protect your blob data'; LongDescription = 'Soft Delete puts deleted data into a "soft" deleted state instead of permanently deleted. When data is overwritten, a soft deleted snapshot is generated to save the state of the overwritten data. You can configure the amount of time soft deleted data is recoverable before it permanently expires.'; Benefits = 'Save and recover your data when blobs or blob snapshots are accidentally overwritten or deleted'; Tip = ''; LearnMoreLink = 'https://aka.ms/softdelete'; } + ,[PSCustomObject]@{ Id = '8433e84a-8f5c-4b6c-9052-9b98757348ea'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Storage'; ResourceType = 'microsoft.storage/storageaccounts'; Key = 'StandardSSDForNonPremVM'; Message = 'Upgrade to Standard SSD Disks for consistent and improved performance'; State = 'Active'; Version = 2.1; Description = 'Upgrade to Standard SSD Disks for consistent and improved performance'; LongDescription = 'Because you are running IaaS virtual machine workloads on Standard HDD managed disks, we wanted to let you know that a Standard SSD disk option is now available for all Azure VM types. Standard SSD disks are a cost-effective storage option optimized for enterprise workloads that need consistent performance. Upgrade your disk configuration today for improved latency, reliability, and availability. Upgrading requires a VM reboot, which will take three to five minutes.'; Benefits = 'Improve disk latency, reliability, and availability using Standard SSD disks.'; Tip = 'Upgrade to Standard SSD Disks for consistent and improved performance by following our instructions for the Azure portal, PowerShell, or CLI.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-machines/windows/disks-types#standard-ssd'; } + ,[PSCustomObject]@{ Id = '70065997-d4d4-4671-baeb-39a2ac66e8ec'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Storage'; ResourceType = 'microsoft.storage/storageaccounts'; Key = 'StorageUseLargeBlockSizesForPutBlock'; Message = 'Optimize Block Blob Operations'; State = 'Disabled'; Version = 1; Description = 'Use larger block sizes for large block blob uploads'; LongDescription = 'When writing a block blob that is larger than 256 MB, using larger block sizes reduces the number of write operations required to upload the blob when calling "Put Block". Block blobs support up to 100 MB blocks for the REST API versions 2016-05-31 and later, and 4 MB for older versions. We suggest using at least 4 MB blocks when uploading large objects with the "Put Block" operation. Based on your aggregated metrics, we believe your storage account''s write operations can be optimized.'; Benefits = 'Increase performance and reduce operation costs'; Tip = ''; LearnMoreLink = 'https://aka.ms/understandblockblobs'; } + ,[PSCustomObject]@{ Id = '33557a7c-6dd6-4b46-9579-fc5273f07458'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Storage'; ResourceType = 'microsoft.storage/storageaccounts'; Key = 'UMDHDDtoPremiumForPerformance'; Message = 'Convert Unmanaged Disks from Standard HDD to Premium SSD for performance'; State = 'Active'; Version = 1.1; Description = 'Convert Unmanaged Disks from Standard HDD to Premium SSD for performance'; LongDescription = 'We have noticed your Unmanaged HDD Disk is approaching performance targets. Azure premium SSDs deliver high-performance and low-latency disk support for virtual machines with IO-intensive workloads. Give your disk performance a boost by upgrading your Standard HDD disk to Premium SSD disk. Upgrading requires a VM reboot, which will take three to five minutes.'; Benefits = 'Give your disk performance a boost using Premium SSD disks.'; Tip = 'Upgrade your Unmanaged HDD disks to Premium SSD disks by following our instructions for the Azure portal, PowerShell, or CLI.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-machines/windows/disks-types#premium-ssd'; } + ,[PSCustomObject]@{ Id = '3c374434-42e7-44db-8b0b-5b8ed970114b'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'Storage'; ResourceType = 'microsoft.storage/storageaccounts'; Key = 'UpdateStorageJavaSDK'; Message = 'Update to newer releases of Azure Storage Java v12 SDK'; State = 'Active'; Version = 5; Description = 'Update to newer releases of the Storage Java v12 SDK for better reliability.'; LongDescription = 'We noticed that one or more of your applications use an older version of the Azure Storage Java v12 SDK to write data to Azure Storage. Unfortunately, the version of the SDK being used has a critical issue that uploads incorrect data during retries (for example, in case of HTTP 500 errors), resulting in an invalid object being written. The issue is fixed in newer releases of the Java v12 SDK.'; Benefits = 'The issue is fixed in newer releases of the Java v12 SDK.'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/developer/java/sdk/?view=azure-java-stable'; } + ,[PSCustomObject]@{ Id = '3f000a35-4cf7-44ef-8127-2f7ed7909125'; Category = 'High Availability'; Control = 'Other'; Impact = 'Medium'; ServiceName = 'ExpressRoute'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'ExpressRouteCircuitO365'; Message = 'Create additional ExpressRoute circuits'; State = 'Disabled'; Version = 5; Description = 'Create additional ExpressRoute Circuits in another location for redundancy'; LongDescription = 'Customers using Microsoft Peering for Office 365 services should have at least two ExpressRoute Circuits in different locations to avoid a single point of failure. Create an additional ExpressRoute circuit to have a redundant connection in case of any failure.'; Benefits = 'Avoid a single point of failure'; Tip = 'You can avoid a single point of failure by creating an additional ExpressRoute circuit at a different location.'; LearnMoreLink = 'https://aka.ms/o365ERAdvisor'; } + ,[PSCustomObject]@{ Id = 'c46ab673-2ddf-4a2c-927f-022616418bb0'; Category = 'Operational Excellence'; Control = ''; Impact = 'Low'; ServiceName = 'Microsoft Support'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'ResourceHealthAlert'; Message = 'Create an Azure Resource Health alert'; State = 'Disabled'; Version = 4; Description = 'Create an Azure Resource Health alert'; LongDescription = 'Resource Health alerts keeps you informed about the current and historical health status of your Azure resources. Azure Resource Health alerts can notify you in near real-time when these resources have a change in their health status.'; Benefits = 'Get notified of the health of your Azure resources'; Tip = 'You can create a Resource Health alert to get notified of the health status of your Azure resources.'; LearnMoreLink = 'https://docs.microsoft.com/azure/service-health/resource-health-alert-arm-template-guide'; } + ,[PSCustomObject]@{ Id = 'c6ac1f03-bd58-4421-9522-23cffb64d8e1'; Category = 'Operational Excellence'; Control = ''; Impact = 'Low'; ServiceName = 'Microsoft Support'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'ServiceHealthAlert'; Message = 'Create an Azure service health alert'; State = 'Disabled'; Version = 3.1; Description = 'Create an Azure service health alert'; LongDescription = 'Service health alerts help you stay notified when Azure service issues affect you. Create a service health alert for the regions and services that you care about.'; Benefits = 'Get notified when Azure service issues affect you'; Tip = 'You can create a service health alert to get notified when an Azure service issue affects you.'; LearnMoreLink = 'https://aka.ms/aa_servicehealthalert_action'; } + ,[PSCustomObject]@{ Id = '8189a205-7f30-4f97-90ab-230519248722'; Category = 'Operational Excellence'; Control = ''; Impact = 'High'; ServiceName = 'Microsoft Support'; ResourceType = 'microsoft.subscriptions/subscriptions'; Key = 'SupportPlan'; Message = 'Upgrade your support plan'; State = 'Disabled'; Version = 3.1; Description = 'Upgrade to a support plan that includes technical support'; LongDescription = 'We recommend upgrading your support plan to include technical support. Explore the range of Azure support options and choose the plan that best fits, whether you''re a developer just starting your cloud journey or a large organization deploying business-critical, strategic applications.'; Benefits = 'Ensure business continuity by having access to Azure cloud experts'; Tip = 'You can upgrade your support plan to include technical support.'; LearnMoreLink = 'https://aka.ms/azuresupport'; } + ,[PSCustomObject]@{ Id = 'afdf4c1a-e46b-4817-a5d6-4b9909f58e2a'; Category = 'Cost'; Control = ''; Impact = 'Low'; ServiceName = 'Azure Synapse Analytics'; ResourceType = 'microsoft.synapse/workspaces'; Key = 'EnableSynapseSparkComputeAutoPauseGuidance'; Message = 'Consider enabling automatic pause feature on spark compute'; State = 'Active'; Version = 3.1; Description = 'Consider enabling automatic pause feature on spark compute'; LongDescription = 'Automatic pause releases and shuts down unused compute resources after a set idle period of inactivity.'; Benefits = 'Automatic pause releases and shuts down unused compute resources after a set idle period of inactivity'; Tip = 'Automatic pause releases and shuts down unused compute resources after a set idle period of inactivity.'; LearnMoreLink = 'https://aka.ms/EnableSynapseSparkComputeAutoPauseGuidance'; } + ,[PSCustomObject]@{ Id = '00b1ef72-4d0f-4452-a6a8-1df5397172d6'; Category = 'Cost'; Control = ''; Impact = 'Low'; ServiceName = 'Azure Synapse Analytics'; ResourceType = 'microsoft.synapse/workspaces'; Key = 'EnableSynapseSparkComputeAutoScaleGuidance'; Message = 'Consider enabling autoscale feature on spark compute'; State = 'Active'; Version = 3.1; Description = 'Consider enabling autoscale feature on spark compute'; LongDescription = 'Apache Spark for Azure Synapse Analytics pool''s Autoscale feature automatically scales the number of nodes in a cluster instance up and down. During the creation of a new Apache Spark for Azure Synapse Analytics pool, a minimum and maximum number of nodes can be set when Autoscale is selected. Autoscale then monitors the resource requirements of the load and scales the number of nodes up or down. There''s no extra charge for this feature.'; Benefits = 'The Autoscale feature monitors resource requirements and automatically scales the number of nodes up and down to meet the compute and memory requirements, thereby optimizing costs from unused resources.'; Tip = 'Enabling autoscale comes at 0 cost and will reduce job failures.'; LearnMoreLink = 'https://aka.ms/EnableSynapseSparkComputeAutoScaleGuidance'; } + ,[PSCustomObject]@{ Id = 'a14a77e7-1187-4714-9042-7c6056b30017'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure Synapse Analytics'; ResourceType = 'microsoft.synapse/workspaces'; Key = 'SynapseLoadBatchSizeGuidance'; Message = 'Increase batch size when loading '; State = 'Disabled'; Version = 6; Description = 'Increase batch size when loading to maximize load throughput, data compression, and query performance'; LongDescription = 'We have detected that you can increase load performance and throughput by increasing the batch size when loading into your database. You should consider using the COPY statement. If you are unable to use the COPY statement, consider increasing the batch size when using loading utilities such as the SQLBulkCopy API or BCP - a good rule of thumb is a batch size between 100K to 1M rows.'; Benefits = 'Increase load throughput, data compression, and query performance'; Tip = 'You can improve load throughput, data compression, and query performance by increasing your batch size.'; LearnMoreLink = 'https://aka.ms/learnmoreincreasebatchsize'; } + ,[PSCustomObject]@{ Id = '7c83695a-3fa9-4668-9080-85151f5ab7be'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Synapse Analytics'; ResourceType = 'microsoft.synapse/workspaces'; Key = 'UpgradeSynapseManagementClientSDK'; Message = 'Update SynapseManagementClient'; State = 'Active'; Version = 6; Description = 'Update SynapseManagementClient SDK Version'; LongDescription = 'New SynapseManagementClient is using .NET SDK 4.0 or above.'; Benefits = 'Latest SynapseManagementClient Libraries contain fixes for known issues and additional improvements.'; Tip = ''; LearnMoreLink = 'https://aka.ms/UpgradeSynapseManagementClientSDK'; } + ,[PSCustomObject]@{ Id = 'c8bbcb72-b778-48b4-882c-d8ce271995e5'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Text Analytics'; ResourceType = 'microsoft.cognitiveservices/accounts'; Key = 'UpgradeToLatestAPI'; Message = 'Upgrade to the latest Cognitive Service Text Analytics API version'; State = 'Active'; Version = 3; Description = 'Upgrade to the latest Cognitive Service Text Analytics API version'; LongDescription = 'Please upgrade to the latest API version to get the best results in terms of model quality, performance and service availability. Also there are new features are available as new endpoints starting from V3.0 such as PII recognition, Entity recognition and entity linking available as separate endpoints. In terms of changes in preview endpoints we have Opinion Mining in SA endpoint, redacted text property in PII endpoint'; Benefits = 'Better service availability and performance'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-how-to-call-api'; } + ,[PSCustomObject]@{ Id = '1b94aa41-a51e-4cad-98fb-3a44447d5997'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Text Analytics'; ResourceType = 'microsoft.cognitiveservices/accounts'; Key = 'UpgradeToLatestSDK'; Message = 'Upgrade to the latest SDK version for Text Analytics'; State = 'Active'; Version = 3; Description = 'Upgrade to the latest Cognitive Service Text Analytics SDK version'; LongDescription = 'Please upgrade to the latest SDK version to get the best results in terms of model quality, performance and service availability. Also there are new features are available as new endpoints starting from V3.0 such as PII recognition, Entity recognition and entity linking available as separate endpoints. In terms of changes in preview endpoints we have Opinion Mining in SA endpoint, redacted text property in PII endpoint'; Benefits = 'Better service availability and performance'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/cognitive-services/text-analytics/quickstarts/text-analytics-sdk?tabs=version-3-1&pivots=programming-language-csharp'; } + ,[PSCustomObject]@{ Id = '843606b2-e019-495b-bf81-3cb4107aab6a'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.web/kubeenvironments'; Key = 'AppServiceContainerAppsResourceProviderMigration'; Message = 'Azure Container Apps: Namespace migration from Microsoft.Web to Microsoft.App'; State = 'Disabled'; Version = 6; Description = 'Azure Container Apps: Namespace migration from Microsoft.Web to Microsoft.App'; LongDescription = 'During March 2022, Azure Container Apps resources will be gradually migrated from the Microsoft.Web namespace to Microsoft.App. This will affect some management operations. Availability of your Container Apps resources will not be impacted.'; Benefits = 'Keep your apps healthy and highly available'; Tip = ''; LearnMoreLink = 'https://aka.ms/microsoftappmigration'; } + ,[PSCustomObject]@{ Id = '1294987d-c97d-41d0-8fd8-cb6eab52d87b'; Category = 'High Availability'; Control = 'Scalability'; Impact = 'High'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.web/sites'; Key = 'AppServiceCPUExhaustion'; Message = 'High CPU'; State = 'Active'; Version = 6; Description = 'Scale out your App Service plan to avoid CPU exhaustion'; LongDescription = 'High CPU utilization can lead to runtime issues with applications. Your application exceeded 90% CPU over the last couple of days. To reduce CPU usage and avoid runtime issues, scale out the application.'; Benefits = 'Keep your app healthy'; Tip = ''; LearnMoreLink = 'https://aka.ms/antbc-cpu'; } + ,[PSCustomObject]@{ Id = 'a85f5f1c-c01f-4926-84ec-700b7624af8c'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.web/sites'; Key = 'AppServiceServiceHealthIssues'; Message = 'Service Health Issue'; State = 'Active'; Version = 5; Description = 'Check your app''s service health issues'; LongDescription = 'We have a recommendation related to your app''s service health. Please open the Azure Portal, go to the app, click the Diagnose and Solve to see more details.'; Benefits = 'Keep your app healthy'; Tip = ''; LearnMoreLink = 'https://docs.microsoft.com/azure/app-service/app-service-best-practices'; } + ,[PSCustomObject]@{ Id = 'b30897cc-2c2e-4677-a2a1-107ae982ff49'; Category = 'High Availability'; Control = 'Disaster Recovery'; Impact = 'High'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.web/sites'; Key = 'AppServiceFixBackupDatabaseSettings'; Message = 'Fix backup database settings'; State = 'Active'; Version = 7; Description = 'Fix the backup database settings of your App Service resource'; LongDescription = 'When an application has an invalid database configuration, its backups fail. For details, see your application''s backup history on your app management page.'; Benefits = 'Ensure business continuity'; Tip = ''; LearnMoreLink = 'https://aka.ms/antbc'; } + ,[PSCustomObject]@{ Id = '80efd6cb-dcee-491b-83a4-7956e9e058d5'; Category = 'High Availability'; Control = 'Disaster Recovery'; Impact = 'High'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.web/sites'; Key = 'AppServiceFixBackupStorageSettings'; Message = 'Fix backup storage settings'; State = 'Active'; Version = 7; Description = 'Fix the backup storage settings of your App Service resource'; LongDescription = 'When an application has invalid storage settings, its backups fail. For details, see your application''s backup history on your app management page.'; Benefits = 'Ensure business continuity'; Tip = ''; LearnMoreLink = 'https://aka.ms/antbc'; } + ,[PSCustomObject]@{ Id = '66d3137a-c4da-4c8a-b6b8-e03f5dfba66e'; Category = 'High Availability'; Control = 'Scalability'; Impact = 'High'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.web/sites'; Key = 'AppServiceMemoryExhaustion'; Message = 'High memory'; State = 'Active'; Version = 6; Description = 'Scale up your App Service plan SKU to avoid memory problems'; LongDescription = 'The App Service Plan containing your application exceeded 85% memory allocation. High memory consumption can lead to runtime issues your applications. Find the problem application and scale it up to a higher plan with more memory resources.'; Benefits = 'Keep your app healthy'; Tip = ''; LearnMoreLink = 'https://aka.ms/antbc-memory'; } + ,[PSCustomObject]@{ Id = '9ebff5d5-10c1-4fed-8c58-1954e27d3bfa'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.web/sites'; Key = 'AppServiceMoveToPremiumV2'; Message = 'Try PremiumV2 SKU'; State = 'Active'; Version = 1.1; Description = 'Move your App Service Plan to PremiumV2 for better performance'; LongDescription = 'Your app served more than 1000 requests per day for the past 3 days. Your app may benefit from the higher performance infrastructure available with the Premium V2 App Service tier. The Premium V2 tier features Dv2-series VMs with faster processors, SSD storage, and doubled memory-to-core ratio when compared to the previous instances. Learn more about upgrading to Premium V2 from our documentation.'; Benefits = 'Obtain better performance with lower cost'; Tip = ''; LearnMoreLink = 'https://aka.ms/ant-premiumv2'; } + ,[PSCustomObject]@{ Id = '45cfc38d-3ffd-4088-bb15-e4d0e1e160fe'; Category = 'High Availability'; Control = 'Scalability'; Impact = 'Medium'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.web/serverfarms'; Key = 'AppServiceNumberOfInstances'; Message = 'Consider scaling out your App Service Plan to optimize user experience and availability'; State = 'Active'; Version = 5; Description = 'Scale out your App Service plan'; LongDescription = 'Consider scaling out your App Service Plan to at least two instances to avoid cold start delays and service interruptions during routine maintenance.'; Benefits = 'Optimize user experience and availability'; Tip = ''; LearnMoreLink = 'https://aka.ms/appsvcnuminstances'; } + ,[PSCustomObject]@{ Id = '07f9a07d-9030-465c-89dc-b1f712334b83'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.web/sites'; Key = 'AppServiceOutboundConnections'; Message = 'Many outbound connections'; State = 'Active'; Version = 1.1; Description = 'Check outbound connections from your App Service resource'; LongDescription = 'Your app has opened too many TCP/IP socket connections. Exceeding ephemeral TCP/IP port connection limits can cause unexpected connectivity issues for your apps.'; Benefits = 'Better performance and lower cost'; Tip = ''; LearnMoreLink = 'https://aka.ms/antbc-socket'; } + ,[PSCustomObject]@{ Id = '3e35f804-52cb-4ebf-84d5-d15b3ab85dfc'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.web/sites'; Key = 'AppServiceProactiveCrashMonitoring'; Message = 'Worker process crashed due to Unhandled Exception'; State = 'Active'; Version = 7; Description = 'Fix application code, a worker process crashed due to an unhandled exception'; LongDescription = 'A worker process in your application crashed due to an unhandled exception. To identify the root cause, collect memory dumps and call stack information at the time of the crash.'; Benefits = 'Keep your app healthy and highly available'; Tip = ''; LearnMoreLink = 'https://aka.ms/appsvcproactivecrashmonitoring'; } + ,[PSCustomObject]@{ Id = '78c5ab69-858a-43ca-a5ac-4ca6f9cdc30d'; Category = 'High Availability'; Control = 'Scalability'; Impact = 'High'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.web/sites'; Key = 'AppServiceRemoveQuota'; Message = 'Exceeded quota limit'; State = 'Active'; Version = 5; Description = 'Upgrade your App Service to a Standard plan to avoid request rejects'; LongDescription = 'When an application is part of a shared App Service plan and meets its quota multiple times, incoming requests might be rejected. Your web application can''t accept incoming requests after meeting a quota. To remove the quota, upgrade to a Standard plan.'; Benefits = 'Keep your app healthy'; Tip = ''; LearnMoreLink = 'https://aka.ms/ant-asp'; } + ,[PSCustomObject]@{ Id = '59a83512-d885-4f09-8e4f-c796c71c686e'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.web/sites'; Key = 'AppServiceStandardOrHigher'; Message = 'Site Slots'; State = 'Active'; Version = 7; Description = 'Move your App Service resource to Standard or higher and use deployment slots'; LongDescription = 'When an application is deployed multiple times in a week, problems might occur. You deployed your application multiple times last week. To help you reduce deployment impact to your production web application, move your App Service resource to the Standard (or higher) plan, and use deployment slots.'; Benefits = 'Keep your app healthy while updating'; Tip = ''; LearnMoreLink = 'https://aka.ms/ant-staging'; } + ,[PSCustomObject]@{ Id = 'dc3edeee-f0ab-44ae-b612-605a0a739612'; Category = 'High Availability'; Control = 'Scalability'; Impact = 'High'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.web/staticsites'; Key = 'StaticWebAppsUpgradeToStandardSKU'; Message = 'Consider upgrading the hosting plan of the Static Web App(s) in this subscription to Standard SKU.'; State = 'Active'; Version = 7; Description = 'Consider upgrading the hosting plan of the Static Web App(s) in this subscription to Standard SKU.'; LongDescription = 'The combined bandwidth used by all the Free SKU Static Web Apps in this subscription is exceeding the monthly limit of 100GB. Consider upgrading these applications to Standard SKU to avoid throttling.'; Benefits = 'Higher availability for the apps by avoiding throttling.'; Tip = ''; LearnMoreLink = 'https://azure.microsoft.com/pricing/details/app-service/static/'; } + ,[PSCustomObject]@{ Id = '0dc165fd-69bf-468a-aa04-a69377b6feb0'; Category = 'High Availability'; Control = 'Other'; Impact = 'High'; ServiceName = 'Azure App Service'; ResourceType = 'microsoft.web/sites'; Key = 'AppServiceUseDeploymentSlots'; Message = 'Site Slots'; State = 'Active'; Version = 7; Description = 'Use deployment slots for your App Service resource'; LongDescription = 'When an application is deployed multiple times in a week, problems might occur. You deployed your application multiple times over the last week. To help you manage changes and help reduce deployment impact to your production web application, use deployment slots.'; Benefits = 'Keep your app healthy while updating'; Tip = ''; LearnMoreLink = 'https://aka.ms/ant-staging'; } + ,[PSCustomObject]@{ Id = 'c8202443-6550-4fc8-9416-5f81089b77d0'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Monitor for SAP Solutions'; ResourceType = 'microsoft.workloads/monitors'; Key = 'UpdateToLatestAMSApiVersion'; Message = 'Upgrade to the latest AMS API version'; State = 'Active'; Version = 2; Description = 'Update to the latest AMS API Version'; LongDescription = 'We have identified calls to a AMS API version which is not recommended. We recommend switching to the latest AMS API version to ensure uninterrupted access to AMS, latest features, and performance improvements.'; Benefits = 'Latest AMS API contain fixes for known issues and additional improvements.'; Tip = 'Upgrade to the latest AMS API version'; LearnMoreLink = 'https://aka.ms/AMSAdvisor'; } + ,[PSCustomObject]@{ Id = 'eabfd1a1-6092-471b-8cff-22dd044e5535'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Azure Monitor for SAP Solutions'; ResourceType = 'microsoft.workloads/monitors'; Key = 'UpgradeToLatestAMSSdkVersion'; Message = 'Upgrade to the latest Workloads SDK version for AMS'; State = 'Active'; Version = 2; Description = 'Upgrade to the latest Workloads SDK version'; LongDescription = 'Please upgrade to the latest Workloads SDK version to get the best results in terms of model quality, performance and service availability.'; Benefits = 'Latest Workloads SDK contain fixes for known issues and additional improvements.'; Tip = ''; LearnMoreLink = 'https://aka.ms/AMSAdvisor'; } + ,[PSCustomObject]@{ Id = '2cc17306-822e-45b1-8d7f-5b0d2f2cccdb'; Category = 'Performance'; Control = ''; Impact = 'High'; ServiceName = 'Windows Virtual Desktop'; ResourceType = 'microsoft.desktopvirtualization/hostpools'; Key = 'ChangeMaxSessionLimitForDepthFirstHostPool'; Message = 'Change max session limit for depth first load balanced host pool'; State = 'Active'; Version = 1; Description = 'Change the max session limit for your depth first load balanced host pool to improve VM performance '; LongDescription = 'Depth first load balancing uses the max session limit to determine the maximum number of users that can have concurrent sessions on a single session host. If the max session limit is too high, all user sessions will be directed to the same session host and this may cause performance and reliability issues. Therefore, when setting a host pool to have depth first load balancing, you should also set an appropriate max session limit according to the configuration of your deployment and capacity of your VMs. To fix this, open your host pool''s properties and change the value next to the "Max session limit" setting.'; Benefits = 'Ensure session host functional stability, reliability, and performance when using Windows Virtual Desktop service'; Tip = 'Change the max session limit for your depth first load balanced host pool to improve VM performance.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-desktop/configure-host-pool-load-balancing'; } + ,[PSCustomObject]@{ Id = '87269ca9-dda6-448e-97ac-c5888b2a2d61'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Windows Virtual Desktop'; ResourceType = 'microsoft.desktopvirtualization/hostpools'; Key = 'ProductionEnvHostPools'; Message = 'Deploy Host Pool to production (non-validation) environment'; State = 'Disabled'; Version = 2.1; Description = 'Not enough production environments enabled'; LongDescription = 'We have determined that too many of your host pools have Validation Environment enabled. In order for Validation Environments to best serve their purpose, you should have at least one, but never more than half of your host pools in Validation Environment. By having a healthy balance between your host pools with Validation Environment enabled and those with it disabled, you will best be able to utilize the benefits of the multistage deployments that Windows Virtual Desktop offers with certain updates. To fix this issue, open your host pool''s properties and select "No" next to the "Validation Environment" setting.'; Benefits = 'Ensure functional stability and business continuity using Windows Virtual Desktop service'; Tip = 'Use Host Pool deployed to production (non-validation) environment to ensure business functionality continuation with increased stability'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-desktop/create-host-pools-powershell'; } + ,[PSCustomObject]@{ Id = 'd89829c9-dadf-4ddc-87d6-fd746debd5d3'; Category = 'Performance'; Control = ''; Impact = 'Medium'; ServiceName = 'Windows Virtual Desktop'; ResourceType = 'microsoft.desktopvirtualization/hostpools'; Key = 'RegionProximityHostPools'; Message = 'Deploy VMs to different region'; State = 'Active'; Version = 2; Description = 'Improve user experience and connectivity by deploying VMs closer to user''s location.'; LongDescription = 'We have determined that your VMs are located in a region different or far from where your users are connecting from, using Windows Virtual Desktop (WVD). This may lead to prolonged connection response times and will impact overall user experience on WVD. When creating VMs for your host pools, you should attempt to use a region closer to the user. Having close proximity ensures continuing satisfaction with the WVD service and a better overall quality of experience.'; Benefits = 'Improves satisfaction with network round-trip time of the WVD service deployments.'; Tip = 'Use VMs from a region where users are located.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-desktop/connection-latency'; } + ,[PSCustomObject]@{ Id = '53e0a3cb-3569-474a-8d7b-7fd06a8ec227'; Category = 'High Availability'; Control = 'Other'; Impact = 'Medium'; ServiceName = 'Windows Virtual Desktop'; ResourceType = 'microsoft.compute/virtualmachines'; Key = 'SessionHostNeedsAssistanceForUrlCheck'; Message = 'Provide access to mandatory URLs missing for your Azure Virtual Desktop environment'; State = 'Active'; Version = 8; Description = 'Provide access to mandatory URLs missing for your Azure Virtual Desktop environment'; LongDescription = 'For a session host to deploy and register to Windows Virtual Desktop (WVD) properly, you need a set of URLs in the ''allowed list'' in case your VM runs in a restricted environment. For specific URLs missing from your allowed list, search your application event log for event 3702.'; Benefits = 'Ensure successful deployment and session host functionality when using Windows Virtual Desktop service'; Tip = 'Unblock all URLs from the Safe URL list to ensure a successful deployment of your VMs.'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-desktop/safe-url-list'; } + ,[PSCustomObject]@{ Id = 'ba1f4576-9ace-4fa9-b0d6-311ad9f2f233'; Category = 'Operational Excellence'; Control = ''; Impact = 'Medium'; ServiceName = 'Windows Virtual Desktop'; ResourceType = 'microsoft.desktopvirtualization/hostpools'; Key = 'ValidationEnvHostPools'; Message = 'Deploy Host Pool to validation environment'; State = 'Disabled'; Version = 2.1; Description = 'No validation environment enabled'; LongDescription = 'We have determined that you do not have a validation environment enabled in current subscription. When creating your host pools, you have selected "No" for "Validation environment" in the properties tab. Having at least one host pool with a validation environment enabled ensures the business continuity through Windows Virtual Desktop service deployments with early detection of potential issues.'; Benefits = 'Ensure business continuity through WVD service deployments'; Tip = 'Use Host Pool deployed to Validation Environment to ensure deployment resilience and business functionality continuation'; LearnMoreLink = 'https://docs.microsoft.com/azure/virtual-desktop/create-validation-host-pool'; } + ) +} diff --git a/src/powershell/Public/Get-FinOpsRecommendationType.ps1 b/src/powershell/Public/Get-FinOpsRecommendationType.ps1 new file mode 100644 index 000000000..39c53ca45 --- /dev/null +++ b/src/powershell/Public/Get-FinOpsRecommendationType.ps1 @@ -0,0 +1,138 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +<# + .SYNOPSIS + Gets details about an Azure Advisor recommendation type. + + .PARAMETER Id + Optional. Azure Advisor recommendation type ID value. Accepts wildcards. Default = * (all). + + .PARAMETER Cost + Optional. Indicates that only cost recommendations should be returned. Can be combined with other category flags. + + .PARAMETER HighAvailability + Optional. Indicates that only high availability recommendations should be returned. Can be combined with other category flags. + + .PARAMETER OperationalExcellence + Optional. Indicates that only operational excellence recommendations should be returned. Can be combined with other category flags. + + .PARAMETER Performance + Optional. Indicates that only performance recommendations should be returned. Can be combined with other category flags. + + .PARAMETER High + Optional. Indicates that only high impact recommendations should be returned. Can be combined with other impact flags. + + .PARAMETER Medium + Optional. Indicates that only medium impact recommendations should be returned. Can be combined with other impact flags. + + .PARAMETER Low + Optional. Indicates that only low impact recommendations should be returned. Can be combined with other impact flags. + + .PARAMETER Service + Optional. Service name the recommendation pertains to. Accepts wildcards. Default = * (all). + + .PARAMETER Key + Optional. Azure recommendation type key value. Accepts wildcards. Default = * (all). + + .PARAMETER Message + Optional. Azure recommendation type message. Accepts wildcards. Default = * (all). + + .DESCRIPTION + The Get-FinOpsRecommendationType command returns details about an Azure Advisor recommendation type with name, description, and a documentation link. + + .EXAMPLE + Get-FinOpsRecommendationType -Id "abb1f687-2d58-4197-8f5b-8882f05c04b8" + + Returns the recommendation type details for virtual machine reservation renewal recommendation. + + .EXAMPLE + Get-FinOpsRecommendationType -Cost + + Returns details for all cost recommendation types. + + .EXAMPLE + Get-FinOpsRecommendationType -High + + Returns details for all high impact recommendation types. + + .EXAMPLE + Get-FinOpsRecommendationType -Service "Virtual Machines" + + Returns details for all virtual machine recommendation types. + + .LINK + https://aka.ms/ftk/Get-FinOpsRecommendationType +#> +function Get-FinOpsRecommendationType() +{ + Param( + [Parameter(Position = 0, ValueFromPipeline = $true)] + [SupportsWildcards()] + [string] + $Id = "*", + + [Parameter()] + [switch] + $Cost = $false, + + [Parameter()] + [switch] + $HighAvailability = $false, + + [Parameter()] + [switch] + $OperationalExcellence = $false, + + [Parameter()] + [switch] + $Performance = $false, + + [Parameter()] + [switch] + $High = $false, + + [Parameter()] + [switch] + $Medium = $false, + + [Parameter()] + [switch] + $Low = $false, + + [Parameter()] + [SupportsWildcards()] + [string] + $Service = "*", + + [Parameter()] + [SupportsWildcards()] + [string] + $Key = "*", + + [Parameter()] + [SupportsWildcards()] + [string] + $Message = "*" + ) + $allImpacts = $false -eq ($High -or $Medium -or $Low) + $allCategories = $false -eq ($Cost -or $HighAvailability -or $OperationalExcellence -or $Performance) + return Get-OpenDataRecommendationType ` + | Where-Object { + $_.RecommendationTypeId -like $Id ` + -and $_.ServiceName -like $Service ` + -and $_.Key -like $Key ` + -and $_.Message -like $Message ` + -and ($allImpacts ` + -or ($High -and $_.Impact -eq 'High') ` + -or ($Medium -and $_.Impact -eq 'Medium') ` + -or ($Low -and $_.Impact -eq 'Low') + ) ` + -and ($allCategories ` + -or ($Cost -and $_.Category -eq 'Cost') ` + -or ($HighAvailability -and $_.Category -eq 'High Availability') ` + -or ($OperationalExcellence -and $_.Category -eq 'Operation Excellence') ` + -or ($Performance -and $_.Category -eq 'Performance') + ) + } +} diff --git a/src/powershell/Tests/Unit/Get-FinOpsRecommendationType.Tests.ps1 b/src/powershell/Tests/Unit/Get-FinOpsRecommendationType.Tests.ps1 new file mode 100644 index 000000000..d797a383e --- /dev/null +++ b/src/powershell/Tests/Unit/Get-FinOpsRecommendationType.Tests.ps1 @@ -0,0 +1,197 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +Remove-Module FinOpsToolkit -ErrorAction SilentlyContinue +Import-Module -FullyQualifiedName "$PSScriptRoot/../../FinOpsToolkit.psm1" + +InModuleScope 'FinOpsToolkit' { + Describe 'Get-FinOpsRecommendationType' { + BeforeAll { + function getAllRecommendationTypes([string]$Id = "*") + { + Get-OpenDataRecommendationType ` + | Where-Object { $_.RecommendationType -like $Id } ` + | Select-Object -Property * -Unique + } + } + Context "No parameters" { + BeforeAll { + $actual = Get-FinOpsRecommendationType + } + It 'Should return all recommendation types by default' { + # Arrange + $expected = getAllRecommendationTypes + + # Act + # Assert + $expected.Count | Should -BeGreaterThan 0 + $actual.Count | Should -Be $expected.Count + } + } + Context "Wildcards" { + It 'Should return wildcard Id matches' { + # Arrange + $expected = getAllRecommendationTypes 'a*' + + # Act + $actual = Get-FinOpsRecommendationType -Id a* + + # Assert + $expected.Count | Should -BeGreaterThan 0 + $actual.Count | Should -Be $expected.Count + } + It 'Should return wildcard ServiceName matches' { + # Arrange + $expected = getAllRecommendationTypes '*App*' + + # Act + $actual = Get-FinOpsRecommendationType -ServiceName *App* + + # Assert + $expected.Count | Should -BeGreaterThan 0 + $actual.Count | Should -Be $expected.Count + } + It 'Should return wildcard Key matches' { + # Arrange + $expected = getAllRecommendationTypes '*Upgrade*' + + # Act + $actual = Get-FinOpsRecommendationType -Key *Upgrade* + + # Assert + $expected.Count | Should -BeGreaterThan 0 + $actual.Count | Should -Be $expected.Count + } + # -and ( + # ($Cost -and $_.Category -eq 'Cost') ` + # -or ($HighAvailability -and $_.Category -eq 'High Availability') ` + # -or ($OperationalExcellence -and $_.Category -eq 'Operation Excellence') ` + # -or ($Performance -and $_.Category -eq 'Performance') + # ) + # -and ( + # ($High -and $_.Impact -eq 'High') ` + # -or ($Medium -and $_.Impact -eq 'Medium') ` + # -or ($Low -and $_.Impact -eq 'Low') + # ) + + } + Context "Category" { + It 'Should include all recommendation types when no categories are set' { + # Arrange + $expected = getAllRecommendationTypes + + # Act + $actual = Get-FinOpsRecommendationType + + # Assert + $expected.Count | Should -BeGreaterThan 0 + $actual.Count | Should -Be $expected.Count + } + It 'Should include all recommendation types when all categories are set' { + # Arrange + $expected = getAllRecommendationTypes + + # Act + $actual = Get-FinOpsRecommendationType -Cost -HighAvailability -OperationalExcellence -Performance + + # Assert + $expected.Count | Should -BeGreaterThan 0 + $actual.Count | Should -Be $expected.Count + } + It 'Should include all recommendation types when all categories are false' { + # Arrange + $expected = getAllRecommendationTypes + + # Act + $actual = Get-FinOpsRecommendationType -Cost $false -HighAvailability $false -OperationalExcellence $false -Performance $false + + # Assert + $expected.Count | Should -BeGreaterThan 0 + $actual.Count | Should -Be $expected.Count + } + It 'Should only include one category when set' { + # Arrange + $expected = getAllRecommendationTypes | Where-Object { $_.Category -eq 'Cost' } + + # Act + $actual = Get-FinOpsRecommendationType -Cost $true + + # Assert + $expected.Count | Should -BeGreaterThan 0 + $actual.Count | Should -Be $expected.Count + ($actual | Where-Object { $_.Category -ne 'Cost' }).Count | Should -Be 0 + } + It 'Should only include two recommendation types when set' { + # Arrange + $expected = getAllRecommendationTypes | Where-Object { $_.Category -eq 'Cost' -or $_.Category -eq 'Performance' } + + # Act + $actual = Get-FinOpsRecommendationType -Cost $true -Performance $true + + # Assert + $expected.Count | Should -BeGreaterThan 0 + $actual.Count | Should -Be $expected.Count + ($actual | Where-Object { $_.Category -ne 'Cost' -and $_.Category -ne 'Performance' }).Count | Should -Be 0 + } + } + Context "Impact" { + It 'Should include all recommendation types when no impacts are set' { + # Arrange + $expected = getAllRecommendationTypes + + # Act + $actual = Get-FinOpsRecommendationType + + # Assert + $expected.Count | Should -BeGreaterThan 0 + $actual.Count | Should -Be $expected.Count + } + It 'Should include all recommendation types when all impacts are set' { + # Arrange + $expected = getAllRecommendationTypes + + # Act + $actual = Get-FinOpsRecommendationType -High -Medium -Low + + # Assert + $expected.Count | Should -BeGreaterThan 0 + $actual.Count | Should -Be $expected.Count + } + It 'Should include all recommendation types when all impacts are false' { + # Arrange + $expected = getAllRecommendationTypes + + # Act + $actual = Get-FinOpsRecommendationType -High $false -Medium $false -Low $false + + # Assert + $expected.Count | Should -BeGreaterThan 0 + $actual.Count | Should -Be $expected.Count + } + It 'Should only include one category when set' { + # Arrange + $expected = getAllRecommendationTypes | Where-Object { $_.Category -eq 'High' } + + # Act + $actual = Get-FinOpsRecommendationType -High $true + + # Assert + $expected.Count | Should -BeGreaterThan 0 + $actual.Count | Should -Be $expected.Count + ($actual | Where-Object { $_.Category -ne 'High' }).Count | Should -Be 0 + } + It 'Should only include two recommendation types when set' { + # Arrange + $expected = getAllRecommendationTypes | Where-Object { $_.Category -eq 'High' -or $_.Category -eq 'Low' } + + # Act + $actual = Get-FinOpsRecommendationType -High $true -Low $true + + # Assert + $expected.Count | Should -BeGreaterThan 0 + $actual.Count | Should -Be $expected.Count + ($actual | Where-Object { $_.Category -ne 'High' -and $_.Category -ne 'Low' }).Count | Should -Be 0 + } + } + } +} diff --git a/src/powershell/Tests/Unit/Get-OpenDataRecommendationType.Tests.ps1 b/src/powershell/Tests/Unit/Get-OpenDataRecommendationType.Tests.ps1 new file mode 100644 index 000000000..9d974c9bf --- /dev/null +++ b/src/powershell/Tests/Unit/Get-OpenDataRecommendationType.Tests.ps1 @@ -0,0 +1,16 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +Describe 'Get-OpenDataRecommendationType' { + It 'Should return same rows as the CSV file' { + # Arrange + . "$PSScriptRoot/../../Private/Get-OpenDataRecommendationType.ps1" + $csv = Import-Csv "$PSScriptRoot/../../../open-data/RecommendationTypes.csv" + + # Act + $cmd = Get-OpenDataRecommendationType + + # Assert + $cmd.Count | Should -Be $csv.Count + } +} diff --git a/src/scripts/Build-OpenData.ps1 b/src/scripts/Build-OpenData.ps1 index 514ed7f10..d6dd814ba 100644 --- a/src/scripts/Build-OpenData.ps1 +++ b/src/scripts/Build-OpenData.ps1 @@ -460,6 +460,7 @@ if (($Name -eq "ResourceTypes" -or $Name -eq "*") -and $Data) # PowerShell isn't respecting wrapping the value in @(), so forcing it with string manipulation function forceArray($val) { if ($val -and $val.Length -gt 0 -and $val[0] -ne '[') { return "[$val]" } else { return $val } } + Write-Host "Updated $($newTypes.Count) new resource types" # Save files $resourceTypes | ConvertTo-Json -Depth 10 | Out-File "$srcDir/ResourceTypes.json" -Encoding utf8 @@ -480,6 +481,118 @@ if (($Name -eq "ResourceTypes" -or $Name -eq "*") -and $Data) | Export-Csv "$srcDir/ResourceTypes.csv" -UseQuotes Always -NoTypeInformation -Encoding utf8 } +if (($Name -eq "RecommendationTypes" -or $Name -eq "*") -and $Data) +{ + $recommendationTypes = @() + + Write-Verbose "Parsing Advisor recommendation types..." + $folders = Get-ChildItem "$PSScriptRoot/../../../SelfHelpContent/articles/advisor?ecommendation.*" + Write-Verbose "Found $($folders.Count) folders" + + $files = $folders | ForEach-Object { Get-ChildItem "$_/*-public.md" } + Write-Verbose "Found $($files.Count) files" + + $files + | ForEach-Object { + $fileName = "$($_.Directory.Name)/$($_.Name)" + Write-Verbose "Reading $_" + + # Initialize a flag to indicate when to start and stop reading + $reading = $false + + # Initialize an array to store the contents + $content = @() + + # Read the file line by line + Get-Content $_ | ForEach-Object { + # Check for the "---" line + if ($_ -eq "---") + { + # Toggle the reading flag + $reading = -not $reading + } + elseif ($reading) + { + # Add the line to the content array if reading is true + $content += $_ + } + } + + # Fix bad JSON + $content = $content -join '' -replace '"condition": "cohort == \\"MongoDB API\\""\s+"condition": "cohort == \\"Only on .NET V3 SDK \(mergeproof\)\\""', '"condition": ""' + + # Output the content + $json = $content | ConvertFrom-Json -Depth 100 + # TODO: Should we filter on $schema == "AdvisorRecommendation"? + + # Clean up offering names + if (-not ($json.PSObject.Properties.Name -contains 'recommendationOfferingName')) + { + $json | Add-Member -MemberType NoteProperty -Name recommendationOfferingName -Value $null + } + $json.recommendationOfferingName = $json.recommendationOfferingName ` + -replace 'AzureAppService', 'Azure App Service' ` + -replace '^App Service$', 'Azure App Service' ` + -replace 'AzureDataExplorer_Kusto', 'Azure Data Explorer' ` + -replace 'AzureDataExplorer_Kusto', 'Azure Data Explorer' + if (-not $json.recommendationOfferingName) + { + $resourceTypeMappings = @{ + 'microsoft.classiccompute/virtualmachines' = 'Virtual Machines' + 'microsoft.compute/virtualmachines' = 'Virtual Machines' + 'microsoft.compute/virtualmachinescalesets' = 'Virtual Machine Scale Sets' + } + $friendlyNameMappings = @{ + EphemeralOsDisk = 'Virtual Machines' + ResourceHealthAlert = 'Microsoft Support' + ServiceHealthAlert = 'Microsoft Support' + SupportPlan = 'Microsoft Support' + } + if (($json.PSObject.Properties.Name -contains 'recommendationFriendlyName') -and $friendlyNameMappings.ContainsKey($json.recommendationFriendlyName)) + { + $json.recommendationOfferingName = $friendlyNameMappings[$json.recommendationFriendlyName] + Write-Verbose "- Using fallback service name based on friendly name: $($json.recommendationFriendlyName) -> $($json.recommendationOfferingName)" + } + elseif (($json.PSObject.Properties.Name -contains 'recommendationResourceType') -and $resourceTypeMappings.ContainsKey($json.recommendationResourceType)) + { + $json.recommendationOfferingName = $resourceTypeMappings[$json.recommendationResourceType] + Write-Verbose "- Using fallback service name based on resource type: $($json.recommendationResourceType) -> $($json.recommendationOfferingName)" + } + } + + # Clean up category/control names + $json.Category = $json.Category -creplace "([a-z])And([A-Z])", "`$1 and `$2" -creplace "([a-z])([A-Z])", "`$1 `$2" + $json.Control = $json.Control -creplace "([a-z])And([A-Z])", "`$1 and `$2" -creplace "([a-z])([A-Z])", "`$1 `$2" + + $recommendationTypes += @( + [PSCustomObject]@{ + Id = $json.recommendationTypeId + Category = $json.recommendationCategory + Control = $json.recommendationControl + Impact = $json.recommendationImpact + ServiceName = $json.recommendationOfferingName + ResourceType = ($json.recommendationResourceType + '').ToLower() + Key = $json.recommendationFriendlyName + Message = $json.displayLabel + State = $json.recommendationMetadataState + Version = $json.version + Description = $json.description -replace "`n", "\n" -replace "`r", "\r" + LongDescription = $json.longDescription -replace "`n", "\n" -replace "`r", "\r" + Benefits = $json.potentialBenefits + Tip = $json.tip + LearnMoreLink = $json.learnMoreLink + # File = $fileName + # portalFeatures: [], + # additionalColumns: [{ name, title }], + # actions: [{ description }], + # resourceMetadata: [{ actionType:Blade, extensionName, bladeName, metadata.id }], + } + ) + } + + $recommendationTypes | Export-Csv "$srcDir/RecommendationTypes.csv" -UseQuotes Always -NoTypeInformation -Encoding utf8 +} + # Generate PowerShell functions from data files if ($PowerShell) { diff --git a/src/scripts/Test-PowerShell.ps1 b/src/scripts/Test-PowerShell.ps1 index 812ae9070..b80c0e97b 100644 --- a/src/scripts/Test-PowerShell.ps1 +++ b/src/scripts/Test-PowerShell.ps1 @@ -114,7 +114,7 @@ else $testsToRun = @() if ($Cost) { $testsToRun += '*-FinOpsCost*', 'Cost*' } - if ($Data) { $testsToRun += '*-OpenData*', '*-FinOpsPricingUnit*', '*-FinOpsRegion*', '*-FinOpsResourceType*', '*-FinOpsService*' } + if ($Data) { $testsToRun += '*-OpenData*', '*-FinOpsPricingUnit*', '*-FinOpsRecommendationType*', '*-FinOpsRegion*', '*-FinOpsResourceType*', '*-FinOpsService*' } if ($Exports) { $testsToRun += '*-FinOpsCostExport*', 'CostExports.Tests.ps1' } if ($FOCUS) { $testsToRun += '*-FinOpsSchema*', 'FOCUS.Tests.ps1' } if ($Hubs) { $testsToRun += '*-FinOpsHub*', '*-Hub*', 'Hubs.Tests.ps1' }