diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index d8e045265d..5622636083 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -22,12 +22,12 @@ SHELL ["pwsh", "-command"] RUN $url = "https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest";$latestVersion = (Invoke-WebRequest -Uri $url).Content | Select-String -Pattern "v[0-9]+\.[0-9]+\.[0-9]+" | Select-Object -ExpandProperty Matches | Select-Object -ExpandProperty Value;$downloadUrl = "https://github.com/JanDeDobbeleer/oh-my-posh/releases/download/$latestVersion/posh-linux-amd64.tar.gz";wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/download/$latestVersion/posh-linux-amd64 -O /usr/local/bin/oh-my-posh RUN chmod +x /usr/local/bin/oh-my-posh -# Install Azure Developer CLI (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/) +# Install Azure Developer CLI (https://learn.microsoft.com/azure/developer/azure-developer-cli/) RUN curl -fsSL https://aka.ms/install-azd.sh | bash # Switch to non-root user: WORKDIR /home/vscode USER vscode -# Install Azure PowerShell modules (https://docs.microsoft.com/en-us/powershell/azure/install-az-ps) +# Install Azure PowerShell modules (https://learn.microsoft.com/powershell/azure/install-az-ps) RUN Install-Module -Name Az -Force \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 589aa0f286..6df1323bc9 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -8,7 +8,7 @@ assignees: '' --- - + **Is your issue related to a Jumpstart scenario, ArcBox, HCIBox, or Agora?** @@ -31,12 +31,12 @@ assignees: '' **Have you looked at the Troubleshooting and Logs section?** **Screenshots** diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 92c7d0d90b..d4c6fce7ed 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -6,10 +6,10 @@ labels: '' assignees: '' --- - + **Is your feature request related to a new Jumpstart scenario you would like to contribute?** - + **Is your feature request related to a problem? Please describe.** diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template_bootstrap.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template_bootstrap.md index 609083681b..0db7002514 100644 --- a/.github/PULL_REQUEST_TEMPLATE/pull_request_template_bootstrap.md +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template_bootstrap.md @@ -16,10 +16,7 @@ - [ ] Breaking change (fix or feature that would cause existing functionality to change) ## Checklist - - - [ ] My code follows the code style of this project. - [ ] My change requires a change to the documentation. - [ ] I have updated the documentation and/or images accordingly. - - +- [ ] I've read the Jumpstart [contribution guidelines](https://aka.ms/JumpstartContribution). diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index d6979e4cd7..b9dbcadd06 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1 +1 @@ -./docs/code_of_conduct/_index.md \ No newline at end of file +https://aka.ms/JumpstartCOC \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0503439bb8..a28e22c917 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1 +1 @@ -./docs/contributing/_index.md \ No newline at end of file +https://aka.ms/JumpstartContribution \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index e95822b96e..0000000000 --- a/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# Azure Arc Jumpstart documentation - -If you are looking to explore the Jumpstart documentation, please go to the documentation website: - -https://azurearcjumpstart.io - -This repository contains the markdown files which generate the above website. See below for guidance on running with a local environment to contribute to the docs. - -> **Disclaimer: The intention for the Azure Arc Jumpstart project is to focus on the core Azure Arc capabilities, deployment scenarios, use-cases, and ease of use. It does not focus on Azure best-practices or the other tech and OSS projects being leveraged in the scenarios and code. Jumpstart scenarios, ArcBox, HCIBox, and Agora are all intended for evaluation, training and demo purposes only and are not supported for production use cases.** - -## Want to help and contribute? - -Before making your first contribution, make sure to review the [contributing](https://azurearcjumpstart.io/contributing/) section in the docs. - -* Found a bug?! Use the [Bug Report](https://github.com/microsoft/azure_arc/issues/new?assignees=&labels=bug&template=bug_report.md&title=) issue template to let us know. - -* To ask for a Jumpstart scenario, create one yourself or submit an Azure Arc core product feature request, use the [Feature Request](https://github.com/microsoft/azure_arc/issues/new?assignees=&labels=&template=feature_request.md&title=) issue template. - -This project welcomes contributions and suggestions. Most contributions require you to agree to a -Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us -the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com. - -When you submit a pull request, a CLA bot will automatically determine whether you need to provide -a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions -provided by the bot. You will only need to do this once across all repos using our CLA. - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). -For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or -contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. - -## Jumpstart Roadmap - -Up-to-date roadmap for the Azure Arc Jumpstart scenarios can be found under [the repository GitHub Project](https://github.com/microsoft/azure_arc/projects/1). - -## Legal Notices - -Microsoft and any contributors grant you a license to the Microsoft documentation and other content -in this repository under the [Creative Commons Attribution 4.0 International Public License](https://creativecommons.org/licenses/by/4.0/legalcode), -see the [LICENSE](LICENSE) file, and grant you a license to any code in the repository under the [MIT License](https://opensource.org/licenses/MIT), see the -[LICENSE-CODE](LICENSE-CODE) file. - -Microsoft, Windows, Microsoft Azure and/or other Microsoft products and services referenced in the documentation -may be either trademarks or registered trademarks of Microsoft in the United States and/or other countries. -The licenses for this project do not grant you rights to use any Microsoft names, logos, or trademarks. -Microsoft's general trademark guidelines can be found at http://go.microsoft.com/fwlink/?LinkID=254653. - -Privacy information can be found at https://privacy.microsoft.com/ - -Microsoft and any contributors reserve all other rights, whether under their respective copyrights, patents, -or trademarks, whether by implication, estoppel or otherwise. diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md deleted file mode 100644 index fee586f006..0000000000 --- a/RELEASE_NOTES.md +++ /dev/null @@ -1 +0,0 @@ -./docs/release_notes/_index.md \ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md index ca2bf7a61f..92b5ab00c3 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1 +1 @@ -./docs/security/_index.md \ No newline at end of file +https://github.com/Azure/arc_jumpstart_docs/blob/main/SECURITY.md \ No newline at end of file diff --git a/arc_data_services/deploy/scripts/create-sql-keytab.sh b/arc_data_services/deploy/scripts/create-sql-keytab.sh index 5582e71d09..1e60212577 100644 --- a/arc_data_services/deploy/scripts/create-sql-keytab.sh +++ b/arc_data_services/deploy/scripts/create-sql-keytab.sh @@ -11,7 +11,7 @@ # $ sudo apt-get install krb5-user # # 2) The tool 'adutil' should be pre-installed if using --use-adutil flag. -# Installation instructions: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-ad-auth-adutil-introduction?view=sql-server-ver15&tabs=ubuntu +# Installation instructions: https://learn.microsoft.com/sql/linux/sql-server-linux-ad-auth-adutil-introduction?view=sql-server-ver15&tabs=ubuntu # # 3) User must kinit with an AD user when using --use-adutil flag. # diff --git a/arc_data_services/deploy/scripts/rotate-sql-keytab.sh b/arc_data_services/deploy/scripts/rotate-sql-keytab.sh index d1668dfeb0..9987ee9909 100644 --- a/arc_data_services/deploy/scripts/rotate-sql-keytab.sh +++ b/arc_data_services/deploy/scripts/rotate-sql-keytab.sh @@ -11,7 +11,7 @@ # $ sudo apt-get install krb5-user # # 2) The tool 'adutil' should be pre-installed if using --use-adutil flag. -# Installation instructions: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-ad-auth-adutil-introduction?view=sql-server-ver15&tabs=ubuntu +# Installation instructions: https://learn.microsoft.com/sql/linux/sql-server-linux-ad-auth-adutil-introduction?view=sql-server-ver15&tabs=ubuntu # # 3) User must kinit with an AD user when using --use-adutil flag. # diff --git a/arc_data_services/deploy/yaml/README.md b/arc_data_services/deploy/yaml/README.md index 436e52b64e..9a850bc170 100644 --- a/arc_data_services/deploy/yaml/README.md +++ b/arc_data_services/deploy/yaml/README.md @@ -1,6 +1,6 @@ # Azure Arc enabled data services - Sample yaml files -This folder contains deployment related scripts for Azure Arc enabled data services. These scripts can be applied using kubectl command-line tool. If you are performing any operations on the services using the [Azure Data CLI](https://docs.microsoft.com/en-us/sql/azdata/install/deploy-install-azdata?toc=%2Fazure%2Fazure-arc%2Fdata%2Ftoc.json&bc=%2Fazure%2Fazure-arc%2Fdata%2Fbreadcrumb%2Ftoc.json&view=sql-server-ver15) tool then ensure that you have the latest version always. +This folder contains deployment related scripts for Azure Arc enabled data services. These scripts can be applied using kubectl command-line tool. If you are performing any operations on the services using the [Azure Data CLI](https://learn.microsoft.com/sql/azdata/install/deploy-install-azdata?toc=%2Fazure%2Fazure-arc%2Fdata%2Ftoc.json&bc=%2Fazure%2Fazure-arc%2Fdata%2Fbreadcrumb%2Ftoc.json&view=sql-server-ver15) tool then ensure that you have the latest version always. ## Deployment yaml files for kube-native operations diff --git a/arc_data_services/test/launcher/overlays/openshift/scc.yaml b/arc_data_services/test/launcher/overlays/openshift/scc.yaml index c165fe4adb..90ea435acf 100644 --- a/arc_data_services/test/launcher/overlays/openshift/scc.yaml +++ b/arc_data_services/test/launcher/overlays/openshift/scc.yaml @@ -1,5 +1,5 @@ # For Azure Arc Connected Cluster -# https://docs.microsoft.com/en-us/azure/azure-arc/kubernetes/quickstart-connect-cluster?tabs=azure-cli#prerequisites +# https://learn.microsoft.com/azure/azure-arc/kubernetes/quickstart-connect-cluster?tabs=azure-cli#prerequisites # TODO: Remove this once Connected Cluster removes SCC for fluentbit for node polling apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding diff --git a/arc_data_services/upgrade/yaml/README.md b/arc_data_services/upgrade/yaml/README.md index 73860ecef8..0bf24ac444 100644 --- a/arc_data_services/upgrade/yaml/README.md +++ b/arc_data_services/upgrade/yaml/README.md @@ -1,6 +1,6 @@ # Azure Arc-enabled data services - Sample yaml files -This folder contains upgrade related scripts for Azure Arc-enabled data services. These scripts can be applied using kubectl command-line tool. If you are performing any operations on the services using the [Azure Data CLI](https://docs.microsoft.com/sql/azdata/install/deploy-install-azdata?toc=%2Fazure%2Fazure-arc%2Fdata%2Ftoc.json&bc=%2Fazure%2Fazure-arc%2Fdata%2Fbreadcrumb%2Ftoc.json&view=sql-server-ver15) tool then ensure that you have the latest version always. +This folder contains upgrade related scripts for Azure Arc-enabled data services. These scripts can be applied using kubectl command-line tool. If you are performing any operations on the services using the [Azure Data CLI](https://learn.microsoft.com/sql/azdata/install/deploy-install-azdata?toc=%2Fazure%2Fazure-arc%2Fdata%2Ftoc.json&bc=%2Fazure%2Fazure-arc%2Fdata%2Fbreadcrumb%2Ftoc.json&view=sql-server-ver15) tool then ensure that you have the latest version always. ## Upgrade yaml files for kube-native operations diff --git a/archive/arc_updateManagement/_index.md b/archive/arc_updateManagement/_index.md deleted file mode 100644 index cbf4396d3a..0000000000 --- a/archive/arc_updateManagement/_index.md +++ /dev/null @@ -1,156 +0,0 @@ - - - - diff --git a/archive/arc_vm_extension_mma_arm/_index.md b/archive/arc_vm_extension_mma_arm/_index.md deleted file mode 100644 index 15c3d46c70..0000000000 --- a/archive/arc_vm_extension_mma_arm/_index.md +++ /dev/null @@ -1,185 +0,0 @@ - - diff --git a/azure_arc_app_services_jumpstart/aks/ARM/artifacts/Bootstrap.ps1 b/azure_arc_app_services_jumpstart/aks/ARM/artifacts/Bootstrap.ps1 index ae34604ac6..fd3231b007 100644 --- a/azure_arc_app_services_jumpstart/aks/ARM/artifacts/Bootstrap.ps1 +++ b/azure_arc_app_services_jumpstart/aks/ARM/artifacts/Bootstrap.ps1 @@ -71,7 +71,7 @@ Write-Host "Extending C:\ partition to the maximum size" Resize-Partition -DriveLetter C -Size $(Get-PartitionSupportedSize -DriveLetter C).SizeMax # Downloading global Jumpstart artifacts -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "C:\Temp\wallpaper.png" +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "C:\Temp\wallpaper.png" # Downloading GitHub artifacts for AppServicesLogonScript.ps1 if ($deployAppService -eq $true -Or $deployFunction -eq $true -Or $deployApiMgmt -eq $true -Or $deployLogicApp -eq $true) { diff --git a/azure_arc_app_services_jumpstart/cluster_api/capi_azure/ARM/artifacts/Bootstrap.ps1 b/azure_arc_app_services_jumpstart/cluster_api/capi_azure/ARM/artifacts/Bootstrap.ps1 index 18bb83b795..e4d13cfdc1 100644 --- a/azure_arc_app_services_jumpstart/cluster_api/capi_azure/ARM/artifacts/Bootstrap.ps1 +++ b/azure_arc_app_services_jumpstart/cluster_api/capi_azure/ARM/artifacts/Bootstrap.ps1 @@ -48,7 +48,7 @@ Write-Host "Extending C:\ partition to the maximum size" Resize-Partition -DriveLetter C -Size $(Get-PartitionSupportedSize -DriveLetter C).SizeMax # Downloading global Jumpstart artifacts -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "C:\Temp\wallpaper.png" +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "C:\Temp\wallpaper.png" # Downloading GitHub artifacts for AppServicesLogonScript.ps1 Invoke-WebRequest ($templateBaseUrl + "artifacts/capiStorageClass.yaml") -OutFile "C:\Temp\capiStorageClass.yaml" diff --git a/azure_arc_data_jumpstart/aks/ARM/artifacts/Bootstrap.ps1 b/azure_arc_data_jumpstart/aks/ARM/artifacts/Bootstrap.ps1 index e87138317c..420c461602 100644 --- a/azure_arc_data_jumpstart/aks/ARM/artifacts/Bootstrap.ps1 +++ b/azure_arc_data_jumpstart/aks/ARM/artifacts/Bootstrap.ps1 @@ -86,7 +86,7 @@ Invoke-WebRequest ($templateBaseUrl + "artifacts/postgreSQL.json") -OutFile "${t Invoke-WebRequest ($templateBaseUrl + "artifacts/postgreSQL.parameters.json") -OutFile "${tempDir}\postgreSQL.parameters.json" Invoke-WebRequest ($templateBaseUrl + "artifacts/SQLMIEndpoints.ps1") -OutFile "${tempDir}\SQLMIEndpoints.ps1" Invoke-WebRequest "https://github.com/ErikEJ/SqlQueryStress/releases/download/102/SqlQueryStress.zip" -OutFile "${tempDir}\SqlQueryStress.zip" -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "${tempDir}\wallpaper.png" +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "${tempDir}\wallpaper.png" Invoke-WebRequest ($templateBaseUrl + "artifacts/adConnector.yaml") -OutFile "${tempDir}\adConnector.yaml" Invoke-WebRequest ($templateBaseUrl + "artifacts/adConnectorCMK.yaml") -OutFile "${tempDir}\adConnectorCMK.yaml" Invoke-WebRequest ($templateBaseUrl + "artifacts/SQLMIADAuthCMK.yaml") -OutFile "${tempDir}\SQLMIADAuthCMK.yaml" diff --git a/azure_arc_data_jumpstart/aks/DR/ARM/artifacts/Bootstrap.ps1 b/azure_arc_data_jumpstart/aks/DR/ARM/artifacts/Bootstrap.ps1 index 9997604475..22a2e827a3 100644 --- a/azure_arc_data_jumpstart/aks/DR/ARM/artifacts/Bootstrap.ps1 +++ b/azure_arc_data_jumpstart/aks/DR/ARM/artifacts/Bootstrap.ps1 @@ -76,7 +76,7 @@ Invoke-WebRequest ($templateBaseUrl + "artifacts/postgreSQL.json") -OutFile "C:\ Invoke-WebRequest ($templateBaseUrl + "artifacts/postgreSQL.parameters.json") -OutFile "C:\Temp\postgreSQL.parameters.json" Invoke-WebRequest ($templateBaseUrl + "artifacts/SQLMIEndpoints.ps1") -OutFile "C:\Temp\SQLMIEndpoints.ps1" Invoke-WebRequest "https://github.com/ErikEJ/SqlQueryStress/releases/download/102/SqlQueryStress.zip" -OutFile "C:\Temp\SqlQueryStress.zip" -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "C:\Temp\wallpaper.png" +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "C:\Temp\wallpaper.png" # Installing tools workflow ClientTools_01 diff --git a/azure_arc_data_jumpstart/aks/Migration/ARM/artifacts/Bootstrap.ps1 b/azure_arc_data_jumpstart/aks/Migration/ARM/artifacts/Bootstrap.ps1 index f92fb284c1..dfb7c12f6b 100644 --- a/azure_arc_data_jumpstart/aks/Migration/ARM/artifacts/Bootstrap.ps1 +++ b/azure_arc_data_jumpstart/aks/Migration/ARM/artifacts/Bootstrap.ps1 @@ -75,7 +75,7 @@ Invoke-WebRequest ($templateBaseUrl + "artifacts/SQLMI.json") -OutFile "C:\Temp\ Invoke-WebRequest ($templateBaseUrl + "artifacts/SQLMI.parameters.json") -OutFile "C:\Temp\SQLMI.parameters.json" Invoke-WebRequest ($templateBaseUrl + "artifacts/SQLMIEndpoints.ps1") -OutFile "C:\Temp\SQLMIEndpoints.ps1" Invoke-WebRequest "https://github.com/ErikEJ/SqlQueryStress/releases/download/102/SqlQueryStress.zip" -OutFile "C:\Temp\SqlQueryStress.zip" -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "C:\Temp\wallpaper.png" +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "C:\Temp\wallpaper.png" # Installing tools workflow ClientTools_01 { diff --git a/azure_arc_data_jumpstart/aro/ARM/artifacts/Bootstrap.ps1 b/azure_arc_data_jumpstart/aro/ARM/artifacts/Bootstrap.ps1 index 371682ba24..eeb841c469 100644 --- a/azure_arc_data_jumpstart/aro/ARM/artifacts/Bootstrap.ps1 +++ b/azure_arc_data_jumpstart/aro/ARM/artifacts/Bootstrap.ps1 @@ -79,7 +79,7 @@ Invoke-WebRequest ($templateBaseUrl + "artifacts/postgreSQL.json") -OutFile "C:\ Invoke-WebRequest ($templateBaseUrl + "artifacts/postgreSQL.parameters.json") -OutFile "C:\Temp\postgreSQL.parameters.json" Invoke-WebRequest ($templateBaseUrl + "artifacts/SQLMIEndpoints.ps1") -OutFile "C:\Temp\SQLMIEndpoints.ps1" Invoke-WebRequest "https://github.com/ErikEJ/SqlQueryStress/releases/download/102/SqlQueryStress.zip" -OutFile "C:\Temp\SqlQueryStress.zip" -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "C:\Temp\wallpaper.png" +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "C:\Temp\wallpaper.png" Invoke-WebRequest ($templateBaseUrl + "artifacts/AROSCC.yaml") -OutFile "C:\Temp\AROSCC.yaml" diff --git a/azure_arc_data_jumpstart/cluster_api/capi_azure/ARM/artifacts/Bootstrap.ps1 b/azure_arc_data_jumpstart/cluster_api/capi_azure/ARM/artifacts/Bootstrap.ps1 index 97ebbafe42..d32db96a65 100644 --- a/azure_arc_data_jumpstart/cluster_api/capi_azure/ARM/artifacts/Bootstrap.ps1 +++ b/azure_arc_data_jumpstart/cluster_api/capi_azure/ARM/artifacts/Bootstrap.ps1 @@ -84,7 +84,7 @@ Invoke-WebRequest ($templateBaseUrl + "artifacts/postgreSQL.json") -OutFile "C:\ Invoke-WebRequest ($templateBaseUrl + "artifacts/postgreSQL.parameters.json") -OutFile "C:\Temp\postgreSQL.parameters.json" Invoke-WebRequest ($templateBaseUrl + "artifacts/SQLMIEndpoints.ps1") -OutFile "C:\Temp\SQLMIEndpoints.ps1" Invoke-WebRequest "https://github.com/ErikEJ/SqlQueryStress/releases/download/102/SqlQueryStress.zip" -OutFile "C:\Temp\SqlQueryStress.zip" -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "C:\Temp\wallpaper.png" +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "C:\Temp\wallpaper.png" # Installing tools workflow ClientTools_01 diff --git a/azure_arc_data_jumpstart/eks/terraform/artifacts/Bootstrap.ps1 b/azure_arc_data_jumpstart/eks/terraform/artifacts/Bootstrap.ps1 index 4bfbbbb557..81133e6c4e 100644 --- a/azure_arc_data_jumpstart/eks/terraform/artifacts/Bootstrap.ps1 +++ b/azure_arc_data_jumpstart/eks/terraform/artifacts/Bootstrap.ps1 @@ -89,7 +89,7 @@ Invoke-WebRequest ($templateBaseUrl + "artifacts/postgreSQL.json") -OutFile "C:\ Invoke-WebRequest ($templateBaseUrl + "artifacts/postgreSQL.parameters.json") -OutFile "C:\Temp\postgreSQL.parameters.json" Invoke-WebRequest ($templateBaseUrl + "artifacts/SQLMIEndpoints.ps1") -OutFile "C:\Temp\SQLMIEndpoints.ps1" Invoke-WebRequest "https://github.com/ErikEJ/SqlQueryStress/releases/download/102/SqlQueryStress.zip" -OutFile "C:\Temp\SqlQueryStress.zip" -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "C:\Temp\wallpaper.png" +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "C:\Temp\wallpaper.png" # Installing tools diff --git a/azure_arc_data_jumpstart/gke/terraform/artifacts/wallpaper.png b/azure_arc_data_jumpstart/gke/terraform/artifacts/wallpaper.png new file mode 100644 index 0000000000..e6b4ecc2b3 Binary files /dev/null and b/azure_arc_data_jumpstart/gke/terraform/artifacts/wallpaper.png differ diff --git a/azure_arc_data_jumpstart/kubeadm/azure/ARM/artifacts/Bootstrap.ps1 b/azure_arc_data_jumpstart/kubeadm/azure/ARM/artifacts/Bootstrap.ps1 index dd23b70782..1d7c37af3f 100644 --- a/azure_arc_data_jumpstart/kubeadm/azure/ARM/artifacts/Bootstrap.ps1 +++ b/azure_arc_data_jumpstart/kubeadm/azure/ARM/artifacts/Bootstrap.ps1 @@ -83,7 +83,7 @@ Invoke-WebRequest ($templateBaseUrl + "artifacts/postgreSQL.json") -OutFile "C:\ Invoke-WebRequest ($templateBaseUrl + "artifacts/postgreSQL.parameters.json") -OutFile "C:\Temp\postgreSQL.parameters.json" Invoke-WebRequest ($templateBaseUrl + "artifacts/SQLMIEndpoints.ps1") -OutFile "C:\Temp\SQLMIEndpoints.ps1" Invoke-WebRequest "https://github.com/ErikEJ/SqlQueryStress/releases/download/102/SqlQueryStress.zip" -OutFile "C:\Temp\SqlQueryStress.zip" -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "C:\Temp\wallpaper.png" +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "C:\Temp\wallpaper.png" # Installing tools workflow ClientTools_01 diff --git a/azure_arc_data_jumpstart/microk8s/azure/arm_template/artifacts/Bootstrap.ps1 b/azure_arc_data_jumpstart/microk8s/azure/arm_template/artifacts/Bootstrap.ps1 index 324cc8a3a0..43b018b8d0 100644 --- a/azure_arc_data_jumpstart/microk8s/azure/arm_template/artifacts/Bootstrap.ps1 +++ b/azure_arc_data_jumpstart/microk8s/azure/arm_template/artifacts/Bootstrap.ps1 @@ -83,7 +83,7 @@ Invoke-WebRequest ($templateBaseUrl + "artifacts/postgreSQL.json") -OutFile "C:\ Invoke-WebRequest ($templateBaseUrl + "artifacts/postgreSQL.parameters.json") -OutFile "C:\Temp\postgreSQL.parameters.json" Invoke-WebRequest ($templateBaseUrl + "artifacts/SQLMIEndpoints.ps1") -OutFile "C:\Temp\SQLMIEndpoints.ps1" Invoke-WebRequest "https://github.com/ErikEJ/SqlQueryStress/releases/download/102/SqlQueryStress.zip" -OutFile "C:\Temp\SqlQueryStress.zip" -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "C:\Temp\wallpaper.png" +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "C:\Temp\wallpaper.png" # Installing tools workflow ClientTools_01 diff --git a/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_full/bicep_template/artifacts/Bootstrap.ps1 b/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_full/bicep_template/artifacts/Bootstrap.ps1 index 9952ce3603..5b03d7a538 100644 --- a/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_full/bicep_template/artifacts/Bootstrap.ps1 +++ b/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_full/bicep_template/artifacts/Bootstrap.ps1 @@ -50,7 +50,7 @@ Resize-Partition -DriveLetter C -Size $(Get-PartitionSupportedSize -DriveLetter # Download artifacts Invoke-WebRequest ($templateBaseUrl + "artifacts/LogonScript.ps1") -OutFile "$tempDir\LogonScript.ps1" -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "$tempDir\wallpaper.png" +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "$tempDir\wallpaper.png" # Installing tools workflow ClientTools_01 diff --git a/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_full_akri/bicep_template/artifacts/Bootstrap.ps1 b/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_full_akri/bicep_template/artifacts/Bootstrap.ps1 index 19cb613ffa..28b1dff0da 100644 --- a/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_full_akri/bicep_template/artifacts/Bootstrap.ps1 +++ b/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_full_akri/bicep_template/artifacts/Bootstrap.ps1 @@ -59,7 +59,7 @@ Resize-Partition -DriveLetter C -Size $(Get-PartitionSupportedSize -DriveLetter # Download artifacts Invoke-WebRequest ($templateBaseUrl + "artifacts/LogonScript.ps1") -OutFile "$tempDir\LogonScript.ps1" -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "$tempDir\wallpaper.png" +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "$tempDir\wallpaper.png" # Installing tools workflow ClientTools_01 diff --git a/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_single/arm_template/artifacts/Bootstrap.ps1 b/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_single/arm_template/artifacts/Bootstrap.ps1 index b1b5b667f3..04d4e88b71 100644 --- a/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_single/arm_template/artifacts/Bootstrap.ps1 +++ b/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_single/arm_template/artifacts/Bootstrap.ps1 @@ -33,7 +33,7 @@ $ErrorActionPreference = "SilentlyContinue" # Downloading GitHub artifacts Invoke-WebRequest ($templateBaseUrl + "artifacts/LogonScript.ps1") -OutFile "C:\Temp\LogonScript.ps1" -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "C:\Temp\wallpaper.png" +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "C:\Temp\wallpaper.png" # Installing tools workflow ClientTools_01 diff --git a/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_single_akri/arm_template/artifacts/Bootstrap.ps1 b/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_single_akri/arm_template/artifacts/Bootstrap.ps1 index b1b5b667f3..04d4e88b71 100644 --- a/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_single_akri/arm_template/artifacts/Bootstrap.ps1 +++ b/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_single_akri/arm_template/artifacts/Bootstrap.ps1 @@ -33,7 +33,7 @@ $ErrorActionPreference = "SilentlyContinue" # Downloading GitHub artifacts Invoke-WebRequest ($templateBaseUrl + "artifacts/LogonScript.ps1") -OutFile "C:\Temp\LogonScript.ps1" -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "C:\Temp\wallpaper.png" +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "C:\Temp\wallpaper.png" # Installing tools workflow ClientTools_01 diff --git a/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_single_vi/artifacts/Bootstrap.ps1 b/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_single_vi/artifacts/Bootstrap.ps1 index b9c7d3cf5e..9c23d38883 100644 --- a/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_single_vi/artifacts/Bootstrap.ps1 +++ b/azure_arc_k8s_jumpstart/aks_hybrid/aks_edge_essentials_single_vi/artifacts/Bootstrap.ps1 @@ -70,7 +70,7 @@ if (($rdpPort -ne $null) -and ($rdpPort -ne "") -and ($rdpPort -ne "3389")) { Invoke-WebRequest ($templateBaseUrl + "artifacts/LogonScript.ps1") -OutFile "C:\Temp\LogonScript.ps1" Invoke-WebRequest ($templateBaseUrl + "artifacts/longhorn.yaml") -OutFile "C:\Temp\longhorn.yaml" Invoke-WebRequest ($templateBaseUrl + "artifacts/video/video.mp4") -OutFile "C:\Temp\video.mp4" -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "C:\Temp\wallpaper.png" +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "C:\Temp\wallpaper.png" Invoke-WebRequest "https://github.com/certbot/certbot/releases/latest/download/certbot-beta-installer-win_amd64_signed.exe" -OutFile "C:\Temp\certbot-beta-installer-win_amd64_signed.exe" ############################################################## diff --git a/azure_arc_ml_jumpstart/aks/arm_template/artifacts/Bootstrap.ps1 b/azure_arc_ml_jumpstart/aks/arm_template/artifacts/Bootstrap.ps1 index eb125104e6..691d673cd0 100644 --- a/azure_arc_ml_jumpstart/aks/arm_template/artifacts/Bootstrap.ps1 +++ b/azure_arc_ml_jumpstart/aks/arm_template/artifacts/Bootstrap.ps1 @@ -31,7 +31,7 @@ New-Item -Path $tempDir -ItemType directory -Force Start-Transcript "C:\Temp\Bootstrap.log" -# https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_preference_variables?view=powershell-7.1#erroractionpreference +# https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_preference_variables?view=powershell-7.1#erroractionpreference # Show errors, but to continue nonetheless $ErrorActionPreference = 'Continue' @@ -61,7 +61,7 @@ Invoke-WebRequest ($templateBaseUrl + "artifacts/inference.zip") -OutFile "C:\Te Invoke-WebRequest ($templateBaseUrl + "artifacts/1.Get_WS.py") -OutFile "C:\Temp\1.Get_WS.py" Invoke-WebRequest ($templateBaseUrl + "artifacts/2.Attach_Arc.py") -OutFile "C:\Temp\2.Attach_Arc.py" Invoke-WebRequest ($templateBaseUrl + "artifacts/3.Create_MNIST_Dataset.py") -OutFile "C:\Temp\3.Create_MNIST_Dataset.py" -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "C:\Temp\wallpaper.png" # Wallpaper is shared from main +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "C:\Temp\wallpaper.png" # Wallpaper is shared from main # Unzip training and inference payloads Expand-Archive -LiteralPath "C:\Temp\train.zip" -DestinationPath "C:\Temp" diff --git a/azure_arc_ml_jumpstart/aks/arm_template/artifacts/train/notebook/img-classification-training.ipynb b/azure_arc_ml_jumpstart/aks/arm_template/artifacts/train/notebook/img-classification-training.ipynb index ddb7c4f7d9..c8a6080053 100644 --- a/azure_arc_ml_jumpstart/aks/arm_template/artifacts/train/notebook/img-classification-training.ipynb +++ b/azure_arc_ml_jumpstart/aks/arm_template/artifacts/train/notebook/img-classification-training.ipynb @@ -185,7 +185,7 @@ "\n", "### Download the MNIST dataset\n", "\n", - "Use Azure Open Datasets to get the raw MNIST data files. [Azure Open Datasets](https://docs.microsoft.com/azure/open-datasets/overview-what-are-open-datasets) are curated public datasets that you can use to add scenario-specific features to machine learning solutions for more accurate models. Each dataset has a corrseponding class, `MNIST` in this case, to retrieve the data in different ways.\n", + "Use Azure Open Datasets to get the raw MNIST data files. [Azure Open Datasets](https://learn.microsoft.com/azure/open-datasets/overview-what-are-open-datasets) are curated public datasets that you can use to add scenario-specific features to machine learning solutions for more accurate models. Each dataset has a corrseponding class, `MNIST` in this case, to retrieve the data in different ways.\n", "\n", "This code retrieves the data as a `FileDataset` object, which is a subclass of `Dataset`. A `FileDataset` references single or multiple files of any format in your datastores or public urls. The class provides you with the ability to download or mount the files to your compute by creating a reference to the data source location. Additionally, you register the Dataset to your workspace for easy retrieval during training.\n", "\n", diff --git a/azure_arc_servers_jumpstart/esu/artifacts/Bootstrap.ps1 b/azure_arc_servers_jumpstart/esu/artifacts/Bootstrap.ps1 index 7d6bc8fc00..a0b741d0a0 100644 --- a/azure_arc_servers_jumpstart/esu/artifacts/Bootstrap.ps1 +++ b/azure_arc_servers_jumpstart/esu/artifacts/Bootstrap.ps1 @@ -98,7 +98,7 @@ foreach ($app in $appsToInstall) { Write-Header "Fetching GitHub Artifacts" Write-Host "Fetching Artifacts" -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile $Env:ESUDir\wallpaper.png +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile $Env:ESUDir\wallpaper.png Write-Host "Fetching Artifacts" Invoke-WebRequest ($Env:templateBaseUrl + "artifacts/LogonScript.ps1") -OutFile $Env:ESUDir\LogonScript.ps1 diff --git a/azure_arc_sqlsrv_jumpstart/aws/winsrv/terraform/scripts/install_arc_agent.ps1.tmpl b/azure_arc_sqlsrv_jumpstart/aws/winsrv/terraform/scripts/install_arc_agent.ps1.tmpl index 134c967425..dbd3c7db06 100644 --- a/azure_arc_sqlsrv_jumpstart/aws/winsrv/terraform/scripts/install_arc_agent.ps1.tmpl +++ b/azure_arc_sqlsrv_jumpstart/aws/winsrv/terraform/scripts/install_arc_agent.ps1.tmpl @@ -10,7 +10,7 @@ $resourceTags= @{"Project"="jumpstart_azure_arc_sql"} # These optional variables can be replaced with valid service principal details # if you would like to use this script for a registration at scale scenario, i.e. run it on multiple machines remotely -# For more information, see https://docs.microsoft.com/sql/sql-server/azure-arc/connect-at-scale +# For more information, see https://learn.microsoft.com/sql/sql-server/azure-arc/connect-at-scale # # For security purposes, passwords should be stored in encrypted files as secure strings # @@ -136,7 +136,7 @@ function installPowershellModule() { if ([version]$version -lt [version]"6.2.4") { Write-Error -Message ("Could not install Az module: Powershell $version does not support having both the AzureRM and Az modules installed. " + "If you need to keep AzureRM available on your system, install the Az module for PowerShell 6.2.4 or later. " + - "For more information, see: https://docs.microsoft.com/en-us/powershell/azure/migrate-from-azurerm-to-az") + "For more information, see: https://learn.microsoft.com/powershell/azure/migrate-from-azurerm-to-az") return } diff --git a/azure_arc_sqlsrv_jumpstart/azure/windows/archive/vanilla/arm_template/scripts/installArcAgentSQL.ps1 b/azure_arc_sqlsrv_jumpstart/azure/windows/archive/vanilla/arm_template/scripts/installArcAgentSQL.ps1 index 829bb121b9..b1b1723a92 100644 --- a/azure_arc_sqlsrv_jumpstart/azure/windows/archive/vanilla/arm_template/scripts/installArcAgentSQL.ps1 +++ b/azure_arc_sqlsrv_jumpstart/azure/windows/archive/vanilla/arm_template/scripts/installArcAgentSQL.ps1 @@ -22,7 +22,7 @@ $workspaceName = $logAnalyticsWorkspaceName # These optional variables can be replaced with valid service principal details # if you would like to use this script for a registration at scale scenario, i.e. run it on multiple machines remotely -# For more information, see https://docs.microsoft.com/sql/sql-server/azure-arc/connect-at-scale +# For more information, see https://learn.microsoft.com/sql/sql-server/azure-arc/connect-at-scale # # For security purposes, passwords should be stored in encrypted files as secure strings # @@ -185,7 +185,7 @@ function Install-PowershellModule() { if ([version]$version -lt [version]"6.2.4") { Write-Warning -Category NotInstalled -Message ("Could not install Az module: Powershell $version does not support having both the AzureRM and Az modules installed. " + "If you need to keep AzureRM available on your system, install the Az module for PowerShell 6.2.4 or later. " + - "For more information, see: https://docs.microsoft.com/en-us/powershell/azure/migrate-from-azurerm-to-az") + "For more information, see: https://learn.microsoft.com/powershell/azure/migrate-from-azurerm-to-az") return } diff --git a/azure_arc_sqlsrv_jumpstart/azure/windows/defender_sql/arm_template/scripts/Bootstrap.ps1 b/azure_arc_sqlsrv_jumpstart/azure/windows/defender_sql/arm_template/scripts/Bootstrap.ps1 index 7518f4b48d..474ac86098 100644 --- a/azure_arc_sqlsrv_jumpstart/azure/windows/defender_sql/arm_template/scripts/Bootstrap.ps1 +++ b/azure_arc_sqlsrv_jumpstart/azure/windows/defender_sql/arm_template/scripts/Bootstrap.ps1 @@ -101,7 +101,7 @@ Invoke-WebRequest ($templateBaseUrl + "azure/windows/defender_sql/arm_template/s Invoke-WebRequest ($templateBaseUrl + "azure/windows/defender_sql/arm_template/scripts/installArcAgent.ps1") -OutFile "$Env:agentScript\installArcAgent.ps1" Invoke-WebRequest ($templateBaseUrl + "azure/windows/defender_sql/arm_template/icons/arcsql.ico") -OutFile $Env:ArcJSIconDir\arcsql.ico Invoke-WebRequest ($templateBaseUrl + "azure/windows/defender_sql/arm_template/scripts/testDefenderForSQL.ps1") -OutFile $Env:ArcJSDir\testDefenderForSQL.ps1 -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "$Env:tempDir\wallpaper.png" +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "$Env:tempDir\wallpaper.png" Write-Header "Configuring Logon Scripts" diff --git a/azure_arc_sqlsrv_jumpstart/azure/windows/defender_sql/arm_template/scripts/installArcAgentSQLSP.ps1 b/azure_arc_sqlsrv_jumpstart/azure/windows/defender_sql/arm_template/scripts/installArcAgentSQLSP.ps1 index 6b6ff217f1..75dc96088e 100644 --- a/azure_arc_sqlsrv_jumpstart/azure/windows/defender_sql/arm_template/scripts/installArcAgentSQLSP.ps1 +++ b/azure_arc_sqlsrv_jumpstart/azure/windows/defender_sql/arm_template/scripts/installArcAgentSQLSP.ps1 @@ -24,7 +24,7 @@ $unattended = $spnClientId -And $spnTenantId -And $spnClientSecret # These optional variables can be replaced with valid service principal details # if you would like to use this script for a registration at scale scenario, i.e. run it on multiple machines remotely -# For more information, see https://docs.microsoft.com/sql/sql-server/azure-arc/connect-at-scale +# For more information, see https://learn.microsoft.com/sql/sql-server/azure-arc/connect-at-scale # # For security purposes, passwords should be stored in encrypted files as secure strings # diff --git a/azure_arc_sqlsrv_jumpstart/azure/windows/defender_sql/arm_template/scripts/installArcAgentSQLUser.ps1 b/azure_arc_sqlsrv_jumpstart/azure/windows/defender_sql/arm_template/scripts/installArcAgentSQLUser.ps1 index 0847ca6f3e..1877f275cf 100644 --- a/azure_arc_sqlsrv_jumpstart/azure/windows/defender_sql/arm_template/scripts/installArcAgentSQLUser.ps1 +++ b/azure_arc_sqlsrv_jumpstart/azure/windows/defender_sql/arm_template/scripts/installArcAgentSQLUser.ps1 @@ -10,7 +10,7 @@ $arcMachineName = [Environment]::MachineName # These optional variables can be replaced with valid service principal details # if you would like to use this script for a registration at scale scenario, i.e. run it on multiple machines remotely -# For more information, see https://docs.microsoft.com/sql/sql-server/azure-arc/connect-at-scale +# For more information, see https://learn.microsoft.com/sql/sql-server/azure-arc/connect-at-scale # # For security purposes, passwords should be stored in encrypted files as secure strings # @@ -46,7 +46,7 @@ function Install-PowershellModule() { if ([version]$version -lt [version]"6.2.4") { Write-Warning -Category NotInstalled -Message ("Could not install Az module: Powershell $version does not support having both the AzureRM and Az modules installed. " + "If you need to keep AzureRM available on your system, install the Az module for PowerShell 6.2.4 or later. " + - "For more information, see: https://docs.microsoft.com/en-us/powershell/azure/migrate-from-azurerm-to-az") + "For more information, see: https://learn.microsoft.com/powershell/azure/migrate-from-azurerm-to-az") return } diff --git a/azure_arc_sqlsrv_jumpstart/gcp/winsrv/terraform/scripts/install_arc_agent.ps1.tmpl b/azure_arc_sqlsrv_jumpstart/gcp/winsrv/terraform/scripts/install_arc_agent.ps1.tmpl index ab661db180..7cc7a51838 100644 --- a/azure_arc_sqlsrv_jumpstart/gcp/winsrv/terraform/scripts/install_arc_agent.ps1.tmpl +++ b/azure_arc_sqlsrv_jumpstart/gcp/winsrv/terraform/scripts/install_arc_agent.ps1.tmpl @@ -10,7 +10,7 @@ $resourceTags= @{"Project"="jumpstart_azure_arc_sql"} # These optional variables can be replaced with valid service principal details # if you would like to use this script for a registration at scale scenario, i.e. run it on multiple machines remotely -# For more information, see https://docs.microsoft.com/sql/sql-server/azure-arc/connect-at-scale +# For more information, see https://learn.microsoft.com/sql/sql-server/azure-arc/connect-at-scale # # For security purposes, passwords should be stored in encrypted files as secure strings # @@ -136,7 +136,7 @@ function installPowershellModule() { if ([version]$version -lt [version]"6.2.4") { Write-Error -Message ("Could not install Az module: Powershell $version does not support having both the AzureRM and Az modules installed. " + "If you need to keep AzureRM available on your system, install the Az module for PowerShell 6.2.4 or later. " + - "For more information, see: https://docs.microsoft.com/en-us/powershell/azure/migrate-from-azurerm-to-az") + "For more information, see: https://learn.microsoft.com/powershell/azure/migrate-from-azurerm-to-az") return } diff --git a/azure_arc_sqlsrv_jumpstart/vmware/winsrv/terraform/scripts/install_arc_agent.ps1.tmpl b/azure_arc_sqlsrv_jumpstart/vmware/winsrv/terraform/scripts/install_arc_agent.ps1.tmpl index 134c967425..dbd3c7db06 100644 --- a/azure_arc_sqlsrv_jumpstart/vmware/winsrv/terraform/scripts/install_arc_agent.ps1.tmpl +++ b/azure_arc_sqlsrv_jumpstart/vmware/winsrv/terraform/scripts/install_arc_agent.ps1.tmpl @@ -10,7 +10,7 @@ $resourceTags= @{"Project"="jumpstart_azure_arc_sql"} # These optional variables can be replaced with valid service principal details # if you would like to use this script for a registration at scale scenario, i.e. run it on multiple machines remotely -# For more information, see https://docs.microsoft.com/sql/sql-server/azure-arc/connect-at-scale +# For more information, see https://learn.microsoft.com/sql/sql-server/azure-arc/connect-at-scale # # For security purposes, passwords should be stored in encrypted files as secure strings # @@ -136,7 +136,7 @@ function installPowershellModule() { if ([version]$version -lt [version]"6.2.4") { Write-Error -Message ("Could not install Az module: Powershell $version does not support having both the AzureRM and Az modules installed. " + "If you need to keep AzureRM available on your system, install the Az module for PowerShell 6.2.4 or later. " + - "For more information, see: https://docs.microsoft.com/en-us/powershell/azure/migrate-from-azurerm-to-az") + "For more information, see: https://learn.microsoft.com/powershell/azure/migrate-from-azurerm-to-az") return } diff --git a/azure_edge_iot_ops_jumpstart/aio_manufacturing/bicep/artifacts/PowerShell/Bootstrap.ps1 b/azure_edge_iot_ops_jumpstart/aio_manufacturing/bicep/artifacts/PowerShell/Bootstrap.ps1 index ca82d7787c..3caf4239b2 100644 --- a/azure_edge_iot_ops_jumpstart/aio_manufacturing/bicep/artifacts/PowerShell/Bootstrap.ps1 +++ b/azure_edge_iot_ops_jumpstart/aio_manufacturing/bicep/artifacts/PowerShell/Bootstrap.ps1 @@ -138,10 +138,7 @@ Invoke-WebRequest ($templateBaseUrl + "artifacts/Settings/mqtt_listener.yml") -O Invoke-WebRequest ($templateBaseUrl + "artifacts/Settings/mqtt_explorer_settings.json") -OutFile "$aioToolsDir\mqtt_explorer_settings.json" Invoke-WebRequest ($templateBaseUrl + "artifacts/Settings/Bookmarks") -OutFile "$aioToolsDir\Bookmarks" Invoke-WebRequest ($templateBaseUrl + "artifacts/adx_dashboard/dashboard.json") -OutFile "$aioDataExplorer\dashboard.json" - -#Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/jumpstart_wallpaper.png" -OutFile "$aioDirectory\wallpaper.png" - -Invoke-WebRequest "https://raw.githubusercontent.com/azure/arc_jumpstart_docs/canary/img/wallpaper/jumpstart_title_wallpaper_dark.png" -OutFile "$aioDirectory\wallpaper.png" +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/jumpstart_wallpaper_dark.png" -OutFile "$aioDirectory\wallpaper.png" ############################################################## # Testing connectivity to required URLs diff --git a/azure_edge_iot_ops_jumpstart/aio_manufacturing/bicep/artifacts/Settings/Bookmarks b/azure_edge_iot_ops_jumpstart/aio_manufacturing/bicep/artifacts/Settings/Bookmarks index 68a682ff60..fd7e6893d5 100644 --- a/azure_edge_iot_ops_jumpstart/aio_manufacturing/bicep/artifacts/Settings/Bookmarks +++ b/azure_edge_iot_ops_jumpstart/aio_manufacturing/bicep/artifacts/Settings/Bookmarks @@ -21,7 +21,7 @@ "show_icon": false, "source": "unknown", "type": "url", - "url": "https://azurearcjumpstart.io/" + "url": "https://aka.ms/ArcJumpstart/" }, { "id": "24", "name": "Azure Portal", diff --git a/azure_jumpstart_ag/artifacts/PowerShell/Bootstrap.ps1 b/azure_jumpstart_ag/artifacts/PowerShell/Bootstrap.ps1 index 715b965d96..d8f87108e3 100644 --- a/azure_jumpstart_ag/artifacts/PowerShell/Bootstrap.ps1 +++ b/azure_jumpstart_ag/artifacts/PowerShell/Bootstrap.ps1 @@ -219,7 +219,8 @@ Invoke-WebRequest ($templateBaseUrl + "artifacts/icons/contoso.png") -OutFile $A Invoke-WebRequest ($templateBaseUrl + "artifacts/icons/contoso.svg") -OutFile $AgIconsDir\contoso.svg Invoke-WebRequest ($templateBaseUrl + "artifacts/settings/DockerDesktopSettings.json") -OutFile "$AgToolsDir\settings.json" Invoke-WebRequest ($templateBaseUrl + "artifacts/settings/Bookmarks") -OutFile "$AgToolsDir\Bookmarks" -Invoke-WebRequest "https://raw.githubusercontent.com/$githubAccount/azure_arc/$githubBranch/img/jumpstart_ag.png" -OutFile $AgDirectory\wallpaper.png +Invoke-WebRequest "https://raw.githubusercontent.com/$githubAccount/arc_jumpstart_docs/$githubBranch/img/wallpaper/agora_wallpaper_dark.png" -OutFile $AgDirectory\wallpaper.png + Invoke-WebRequest ($templateBaseUrl + "artifacts/monitoring/grafana-freezer-monitoring.json") -OutFile "$AgMonitoringDir\grafana-freezer-monitoring.json" Invoke-WebRequest ($templateBaseUrl + "artifacts/monitoring/grafana-node-exporter-full.json") -OutFile "$AgMonitoringDir\grafana-node-exporter-full.json" Invoke-WebRequest ($templateBaseUrl + "artifacts/monitoring/grafana-cluster-global.json") -OutFile "$AgMonitoringDir\grafana-cluster-global.json" diff --git a/azure_jumpstart_ag/artifacts/icons/contoso.png b/azure_jumpstart_ag/artifacts/icons/contoso.png new file mode 100644 index 0000000000..0077f7ae1e Binary files /dev/null and b/azure_jumpstart_ag/artifacts/icons/contoso.png differ diff --git a/azure_jumpstart_ag/artifacts/settings/Bookmarks b/azure_jumpstart_ag/artifacts/settings/Bookmarks index 69602069fc..120ebcc514 100644 --- a/azure_jumpstart_ag/artifacts/settings/Bookmarks +++ b/azure_jumpstart_ag/artifacts/settings/Bookmarks @@ -182,7 +182,7 @@ "show_icon": false, "source": "unknown", "type": "url", - "url": "https://azurearcjumpstart.io/" + "url": "https://aka.ms/ArcJumpstart/" }, { "id": "24", "name": "Azure Portal", diff --git a/azure_jumpstart_arcbox/artifacts/Bootstrap.ps1 b/azure_jumpstart_arcbox/artifacts/Bootstrap.ps1 index f206bb4fe3..6d95966f98 100644 --- a/azure_jumpstart_arcbox/artifacts/Bootstrap.ps1 +++ b/azure_jumpstart_arcbox/artifacts/Bootstrap.ps1 @@ -153,7 +153,7 @@ Write-Header "Fetching GitHub Artifacts" # All flavors Write-Host "Fetching Artifacts for All Flavors" -Invoke-WebRequest "https://raw.githubusercontent.com/microsoft/azure_arc/main/img/arcbox_wallpaper.png" -OutFile $Env:ArcBoxDir\wallpaper.png +Invoke-WebRequest "https://raw.githubusercontent.com/Azure/arc_jumpstart_docs/main/img/wallpaper/arcbox_wallpaper_dark.png" -OutFile $Env:ArcBoxDir\wallpaper.png Invoke-WebRequest ($templateBaseUrl + "artifacts/MonitorWorkbookLogonScript.ps1") -OutFile $Env:ArcBoxDir\MonitorWorkbookLogonScript.ps1 Invoke-WebRequest ($templateBaseUrl + "artifacts/mgmtMonitorWorkbook.parameters.json") -OutFile $Env:ArcBoxDir\mgmtMonitorWorkbook.parameters.json Invoke-WebRequest ($templateBaseUrl + "artifacts/DeploymentStatus.ps1") -OutFile $Env:ArcBoxDir\DeploymentStatus.ps1 diff --git a/azure_jumpstart_arcbox/artifacts/installArcAgentSQLSP.ps1 b/azure_jumpstart_arcbox/artifacts/installArcAgentSQLSP.ps1 index c935a7405d..b904e9ea6d 100644 --- a/azure_jumpstart_arcbox/artifacts/installArcAgentSQLSP.ps1 +++ b/azure_jumpstart_arcbox/artifacts/installArcAgentSQLSP.ps1 @@ -24,7 +24,7 @@ $unattended = $spnClientId -And $spnTenantId -And $spnClientSecret # These optional variables can be replaced with valid service principal details # if you would like to use this script for a registration at scale scenario, i.e. run it on multiple machines remotely -# For more information, see https://docs.microsoft.com/sql/sql-server/azure-arc/connect-at-scale +# For more information, see https://learn.microsoft.com/sql/sql-server/azure-arc/connect-at-scale # # For security purposes, passwords should be stored in encrypted files as secure strings # diff --git a/azure_jumpstart_arcbox/artifacts/installArcAgentSQLUser.ps1 b/azure_jumpstart_arcbox/artifacts/installArcAgentSQLUser.ps1 index b5edc2f73a..073879cf68 100644 --- a/azure_jumpstart_arcbox/artifacts/installArcAgentSQLUser.ps1 +++ b/azure_jumpstart_arcbox/artifacts/installArcAgentSQLUser.ps1 @@ -19,7 +19,7 @@ $unattended = $false # These optional variables can be replaced with valid service principal details # if you would like to use this script for a registration at scale scenario, i.e. run it on multiple machines remotely -# For more information, see https://docs.microsoft.com/sql/sql-server/azure-arc/connect-at-scale +# For more information, see https://learn.microsoft.com/sql/sql-server/azure-arc/connect-at-scale # # For security purposes, passwords should be stored in encrypted files as secure strings # diff --git a/azure_jumpstart_arcbox/artifacts/mgmtMonitorWorkbookDataOps.json b/azure_jumpstart_arcbox/artifacts/mgmtMonitorWorkbookDataOps.json index dc3502cce1..80c6568a9b 100644 --- a/azure_jumpstart_arcbox/artifacts/mgmtMonitorWorkbookDataOps.json +++ b/azure_jumpstart_arcbox/artifacts/mgmtMonitorWorkbookDataOps.json @@ -40,7 +40,7 @@ "kind": "shared", "properties": { "displayName": "[parameters('workbookDisplayName')]", - "serializedData": "{\"version\":\"Notebook/1.0\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Jumpstart ArcBox Workbook DataOps\\r\\n\\r\\nKeep track of your ArcBox resources by selecting one of the tabs below:\\r\\n____________________________________________________________________________________________________\\r\\n\"},\"name\":\"text - 3\"},{\"type\":11,\"content\":{\"version\":\"LinkItem/1.0\",\"style\":\"tabs\",\"links\":[{\"id\":\"001e53e2-be76-428e-9081-da7ce60368d4\",\"cellValue\":\"selectedTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Inventory\",\"subTarget\":\"Inventory\",\"style\":\"link\"},{\"id\":\"547c6d68-f351-4898-bd7f-de56cd1ea984\",\"cellValue\":\"selectedTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Monitoring\",\"subTarget\":\"Monitoring\",\"style\":\"link\"},{\"id\":\"942dd542-ac90-4ee4-bb5d-477c931c05b4\",\"cellValue\":\"selectedTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Security\",\"subTarget\":\"Security\",\"style\":\"link\"}]},\"customWidth\":\"100\",\"name\":\"links - 7\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"\"},\"name\":\"text - 4\"},{\"type\":1,\"content\":{\"json\":\"## Jumpstart ArcBox Metrics and Alerts\\r\\n\\r\\n💡 Select your Azure ArcBox subscription and Resource Group to see more information.\"},\"name\":\"text - 1\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"crossComponentResources\":[\"{subscriptionId}\"],\"parameters\":[{\"id\":\"1f74ed9a-e3ed-498d-bd5b-f68f3836a117\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"subscriptionId\",\"label\":\"Subscriptions\",\"type\":6,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"value\":[\"value::all\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"includeAll\":true,\"showDefault\":false}},{\"id\":\"b616a3a3-4271-4208-b1a9-a92a78efed08\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"resourceGroup\",\"label\":\"Resource groups\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"Resources\\r\\n| summarize by resourceGroup\\r\\n| order by resourceGroup asc\\r\\n| project id=resourceGroup, resourceGroup\",\"crossComponentResources\":[\"{subscriptionId}\"],\"value\":[\"value::all\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"},{\"id\":\"0e85e0e4-a7e8-4ea8-b291-e444c317843a\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"ResourceTypes\",\"label\":\"Resource types\",\"type\":7,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"value\":[\"value::all\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"includeAll\":true,\"selectAllValue\":\"*\",\"showDefault\":false}},{\"id\":\"f60ea0a0-3703-44ca-a59b-df0246423f41\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Resources\",\"type\":5,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"Resources\\r\\n| where \\\"*\\\" in ({ResourceTypes}) or type in~({ResourceTypes})\\r\\n| where '*' in~({resourceGroup}) or resourceGroup in~({resourceGroup}) \\r\\n| order by name asc\\r\\n| extend Rank = row_number()\\r\\n| project value = id, label = name, selected = Rank <= 10, group = resourceGroup\",\"crossComponentResources\":[\"{subscriptionId}\"],\"value\":[\"value::all\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"},{\"id\":\"015d1a5e-357f-4e01-ac77-598e7b493db0\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"timeRange\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":3600000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000}],\"allowCustom\":true}},{\"id\":\"bd6d6075-dc8f-43d3-829f-7e2245a3eb21\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"State\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"{\\\"version\\\":\\\"1.0.0\\\",\\\"content\\\":\\\"[ \\\\r\\\\n {\\\\\\\"id\\\\\\\":\\\\\\\"New\\\\\\\", \\\\\\\"label\\\\\\\": \\\\\\\"New\\\\\\\"},\\\\r\\\\n {\\\\\\\"id\\\\\\\":\\\\\\\"Acknowledged\\\\\\\", \\\\\\\"label\\\\\\\": \\\\\\\"Acknowledged\\\\\\\"},\\\\r\\\\n {\\\\\\\"id\\\\\\\":\\\\\\\"Closed\\\\\\\", \\\\\\\"label\\\\\\\": \\\\\\\"Closed\\\\\\\"}\\\\r\\\\n]\\\",\\\"transformers\\\":null}\",\"crossComponentResources\":[\"{Subscription}\"],\"value\":[\"value::all\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"queryType\":8}],\"style\":\"above\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"},\"name\":\"parameters\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"AlertsManagementResources | where type =~ 'microsoft.alertsmanagement/alerts'\\r\\n| where todatetime(properties.essentials.startDateTime) {timeRange} \\r\\n| where \\\"*\\\" in ({resourceGroup}) or properties.essentials.targetResourceGroup in~ ({resourceGroup})\\r\\n| where \\\"*\\\" in ({ResourceTypes}) or properties.essentials.targetResourceType in~ ({ResourceTypes})\\r\\n| where \\\"*\\\" in ({Resources}) or properties.essentials.targetResource in~ ({Resources})\\r\\n| extend State=tostring(properties.essentials.alertState)\\r\\n| where \\\"*\\\" in ({State}) or State in ({State})\\r\\n| summarize Count=count(), New=countif(State==\\\"New\\\"), \\r\\nAcknowledged=countif(State==\\\"Acknowledged\\\"), \\r\\nClosed=countif(State==\\\"Closed\\\") \\r\\nby Severity=tostring(properties.essentials.severity)\\r\\n| order by Severity asc\",\"size\":3,\"title\":\"Alert Summary\",\"noDataMessage\":\"No alerts found\",\"exportMultipleValues\":true,\"exportedParameters\":[{\"fieldName\":\"Severity\",\"parameterName\":\"Severity\",\"parameterType\":1}],\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\",\"crossComponentResources\":[\"{subscriptionId}\"],\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":11},{\"columnMatch\":\"Count\",\"formatter\":3,\"formatOptions\":{\"min\":0,\"palette\":\"blue\",\"aggregation\":\"Sum\"},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2}}},{\"columnMatch\":\"State\",\"formatter\":1}]}},\"showPin\":true,\"name\":\"query - 6\"},{\"type\":1,\"content\":{\"json\":\"## Azure Arc-enabled Kubernetes\"},\"name\":\"text - 9\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"crossComponentResources\":[\"{resource}\"],\"parameters\":[{\"id\":\"e2b5cd30-7276-477f-a6bb-07da25ba5e5f\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"timeRange\",\"label\":\"Time Range\",\"type\":4,\"description\":\"Filter data by time range\",\"isRequired\":true,\"value\":{\"durationMs\":7776000000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true}},{\"id\":\"b8b76ad0-de1a-4b7c-90a8-f4eb277bb878\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"subscription\",\"label\":\"Subscription\",\"type\":6,\"value\":null,\"typeSettings\":{\"additionalResourceOptions\":[],\"includeAll\":true,\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\"},{\"id\":\"6b8d59ca-08c5-40fb-9962-5061b3e6e779\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"workspaceName\",\"label\":\"Log Analytics Workspace\",\"type\":5,\"query\":\"resources\\r\\n| where type contains 'microsoft.operationalinsights/workspaces'\\r\\n| project id\",\"crossComponentResources\":[\"{subscription}\"],\"value\":\"\",\"typeSettings\":{\"additionalResourceOptions\":[],\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"},{\"id\":\"7aa94d19-4c5b-40e2-b14f-e29736a8f90c\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"resource\",\"label\":\"Azure Arc-enabled K8S cluster\",\"type\":5,\"query\":\" Resources\\r\\n | where type =~ 'microsoft.kubernetes/connectedclusters'\\r\\n | project id\",\"crossComponentResources\":[\"{subscription}\"],\"typeSettings\":{\"additionalResourceOptions\":[],\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\",\"value\":\"\"},{\"id\":\"3a3fdabe-6173-4e2b-8658-38c0195fd7e2\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"resourceType\",\"type\":7,\"isRequired\":true,\"query\":\"{\\\"version\\\":\\\"1.0.0\\\",\\\"content\\\":\\\"\\\\\\\"{resource:resourcetype}\\\\\\\"\\\",\\\"transformers\\\":null}\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::1\"],\"showDefault\":false},\"defaultValue\":\"value::1\",\"queryType\":8},{\"id\":\"9767de49-ba31-4847-9ffc-714c02e7523c\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"clusterId\",\"type\":1,\"description\":\"Filter workspace by cluster id\",\"isHiddenWhenLocked\":true,\"timeContext\":{\"durationMs\":14400000},\"timeContextFromParameter\":\"timeRange\"},{\"id\":\"cba109cf-db6e-4261-8d3a-fe038593622d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"clusterIdWhereClause\",\"type\":1,\"description\":\"Add to queries to filter by cluster id\",\"isHiddenWhenLocked\":true,\"criteriaData\":[{\"criteriaContext\":{\"leftOperand\":\"resourceType\",\"operator\":\"contains\",\"rightValType\":\"static\",\"rightVal\":\"microsoft.operationalinsights/workspaces\",\"resultValType\":\"static\",\"resultVal\":\"| where ClusterId =~ '{clusterId}'\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"param\",\"resultValType\":\"static\",\"resultVal\":\"| where \\\"a\\\" == \\\"a\\\"\"}}],\"timeContext\":{\"durationMs\":14400000},\"timeContextFromParameter\":\"timeRange\"},{\"id\":\"ee080bd8-83dc-4fa0-b688-b2f16b956b92\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"workloadType\",\"label\":\"Workload Type\",\"type\":2,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"KubePodInventory\\r\\n{clusterIdWhereClause}\\r\\n| distinct ControllerKind\\r\\n| where isempty(ControllerKind) == false\\r\\n| order by ControllerKind asc\",\"crossComponentResources\":[\"{resource}\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.kubernetes/connectedclusters\"},{\"id\":\"cf611d4b-aa93-4949-a7a1-c1d174af29ca\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"workloadKindWhereClause\",\"type\":1,\"isHiddenWhenLocked\":true,\"criteriaData\":[{\"condition\":\"if (workloadType is not empty ), result = '| where ControllerKind in ({workloadType})'\",\"criteriaContext\":{\"leftOperand\":\"workloadType\",\"operator\":\"isNotNull\",\"rightValType\":\"static\",\"rightVal\":\"unset\",\"resultValType\":\"static\",\"resultVal\":\"| where ControllerKind in ({workloadType})\"}},{\"condition\":\"else result = '| where \\\"a\\\" == \\\"a\\\"'\",\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"param\",\"resultValType\":\"static\",\"resultVal\":\"| where \\\"a\\\" == \\\"a\\\"\"}}],\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\"},{\"id\":\"034caae5-bee3-4b66-8f80-c120a2a25c77\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"namespace\",\"label\":\"Namespace\",\"type\":2,\"description\":\"Filter the workbook by namespace\",\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"KubePodInventory\\r\\n{clusterIdWhereClause}\\r\\n{workloadKindWhereClause}\\r\\n| distinct Namespace\\r\\n| where isnotempty(Namespace)\\r\\n| order by Namespace asc\",\"crossComponentResources\":[\"{Workspace}\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},{\"id\":\"faeee248-e4c3-4fae-b435-ef5fb6dabe3b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"namespaceWhereClause\",\"type\":1,\"isHiddenWhenLocked\":true,\"criteriaData\":[{\"condition\":\"if (namespace is not empty ), result = '| where Namespace in ({namespace})'\",\"criteriaContext\":{\"leftOperand\":\"namespace\",\"operator\":\"isNotNull\",\"rightValType\":\"static\",\"rightVal\":\"unset\",\"resultValType\":\"static\",\"resultVal\":\"| where Namespace in ({namespace})\"}},{\"condition\":\"else result = '| where \\\"a\\\" == \\\"a\\\"'\",\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"param\",\"resultValType\":\"static\",\"resultVal\":\"| where \\\"a\\\" == \\\"a\\\"\"}}],\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\"},{\"id\":\"8943e259-1dde-44cd-a00b-e815eea9de34\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"workloadName\",\"label\":\"Workload Name\",\"type\":2,\"description\":\"Filter the data for a particular workload\",\"isRequired\":true,\"query\":\"KubePodInventory\\r\\n{clusterIdWhereClause}\\r\\n{namespaceWhereClause}\\r\\n{workloadKindWhereClause}\\r\\n| distinct ControllerName\\r\\n| where isnotempty(ControllerName)\\r\\n| order by ControllerName asc\",\"crossComponentResources\":[\"{resource}\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::1\"],\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"defaultValue\":\"value::1\",\"queryType\":0,\"resourceType\":\"microsoft.kubernetes/connectedclusters\"},{\"id\":\"00a9be6c-ab0b-400b-b195-9775a47ecddd\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"podStatus\",\"label\":\"Pod Status\",\"type\":2,\"description\":\"Filter by Pod status like Pending/Running/Failed etc.\",\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"KubePodInventory\\r\\n{clusterIdWhereClause}\\r\\n| where ControllerName == '{workloadName}'\\r\\n| distinct PodStatus\\r\\n| where isnotempty(PodStatus)\\r\\n| order by PodStatus asc\",\"crossComponentResources\":[\"{resource}\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"timeContext\":{\"durationMs\":14400000},\"timeContextFromParameter\":\"timeRange\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"{resourceType}\",\"value\":[\"value::all\"]},{\"id\":\"388ea6aa-12d8-485a-8e80-b4d7b8994bd8\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"podStatusWhereClause\",\"type\":1,\"isHiddenWhenLocked\":true,\"criteriaData\":[{\"criteriaContext\":{\"leftOperand\":\"podStatus\",\"operator\":\"isNotNull\",\"rightValType\":\"static\",\"rightVal\":\"unset\",\"resultValType\":\"static\",\"resultVal\":\"| where PodStatus in ({podStatus})\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"param\",\"resultValType\":\"static\",\"resultVal\":\"| where \\\"a\\\" == \\\"a\\\"\"}}],\"timeContext\":{\"durationMs\":2592000000},\"timeContextFromParameter\":\"timeRange\"},{\"id\":\"64de23e6-96b5-4105-b65d-36e40f73f4ec\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"podName\",\"label\":\"Pod Name\",\"type\":2,\"description\":\"Filter by pod name \",\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"KubePodInventory\\r\\n{clusterIdWhereClause}\\r\\n| where ControllerName == '{workloadName:value}'\\r\\n{podStatusWhereClause}\\r\\n| summarize arg_max(TimeGenerated, PodStatus) by Name\\r\\n| project Name\\r\\n| where isempty(Name) == false\\r\\n| order by Name asc\",\"crossComponentResources\":[\"{resource}\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"timeContext\":{\"durationMs\":14400000},\"timeContextFromParameter\":\"timeRange\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"{resourceType}\",\"value\":[\"value::all\"]},{\"id\":\"4f7059c2-ebd7-4fc2-86c4-c51e66703582\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"podNameWhereClause\",\"type\":1,\"isHiddenWhenLocked\":true,\"criteriaData\":[{\"condition\":\"if (podName is not empty ), result = '| where PodName in ({podName})'\",\"criteriaContext\":{\"leftOperand\":\"podName\",\"operator\":\"isNotNull\",\"rightValType\":\"static\",\"rightVal\":\"unset\",\"resultValType\":\"static\",\"resultVal\":\"| where PodName in ({podName})\"}},{\"condition\":\"else result = '| where \\\"a\\\" == \\\"a\\\"'\",\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"param\",\"resultValType\":\"static\",\"resultVal\":\"| where \\\"a\\\" == \\\"a\\\"\"}}],\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\"},{\"id\":\"e60298ff-36da-485e-acea-73c0692b8446\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"workloadNamespaceText\",\"type\":1,\"description\":\"For displaying name space of the selected workload\",\"query\":\"KubePodInventory\\r\\n{clusterIdWhereClause}\\r\\n{namespaceWhereClause}\\r\\n| where ControllerName == '{workloadName}'\\r\\n| summarize Namespaces=make_set(Namespace)\\r\\n| extend Namespaces = strcat_array(Namespaces, ', ')\",\"crossComponentResources\":[\"{resource}\"],\"isHiddenWhenLocked\":true,\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"queryType\":0,\"resourceType\":\"{resourceType}\"},{\"id\":\"9f8d0d65-d7bc-42c9-bc5c-b394288b5216\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"workloadTypeText\",\"type\":1,\"description\":\"For displaying workload type of the selected workload\",\"query\":\"KubePodInventory\\r\\n{clusterIdWhereClause}\\r\\n{workloadKindWhereClause}\\r\\n| where ControllerName == '{workloadName}'\\r\\n| summarize ControllerKinds=make_set(ControllerKind)\\r\\n| extend ControllerKinds = strcat_array(ControllerKinds, ', ')\",\"crossComponentResources\":[\"{resource}\"],\"isHiddenWhenLocked\":true,\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"queryType\":0,\"resourceType\":\"{resourceType}\"}],\"style\":\"above\",\"queryType\":0,\"resourceType\":\"microsoft.kubernetes/connectedclusters\"},\"name\":\"pills\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"55cc0c6d-51df-4e58-9543-c8b21bc71e29\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"podTileStatusWhereClause\",\"type\":1,\"isHiddenWhenLocked\":true,\"criteriaData\":[{\"criteriaContext\":{\"leftOperand\":\"podStatusTileText\",\"operator\":\"!=\",\"rightValType\":\"static\",\"rightVal\":\"All\",\"resultValType\":\"static\",\"resultVal\":\"| where PodStatus == '{podStatusTileText}'\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"param\",\"resultValType\":\"static\",\"resultVal\":\"| where \\\"a\\\" == \\\"a\\\"\"}}],\"timeContext\":{\"durationMs\":14400000},\"timeContextFromParameter\":\"timeRange\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"conditionalVisibility\":{\"parameterName\":\"selectedTab\",\"comparison\":\"isEqualTo\",\"value\":\"asas\"},\"name\":\"pod-status-tile-text\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"let endDateTime = {timeRange:end};\\r\\nlet startDateTime = {timeRange:start};\\r\\nlet trendBinSize = {timeRange:grain};\\r\\nlet controllerName= '{workloadName}';\\r\\nKubePodInventory\\r\\n| where TimeGenerated >= startDateTime\\r\\n| where TimeGenerated < endDateTime\\r\\n{clusterIdWhereClause}\\r\\n{workloadKindWhereClause}\\r\\n{namespaceWhereClause}\\r\\n| where isnotempty(ClusterName)\\r\\n| where isnotempty(Namespace)\\r\\n| where ControllerName == controllerName\\r\\n| extend PodName = Name\\r\\n{podStatusWhereClause}\\r\\n{podTileStatusWhereClause}\\r\\n{podNameWhereClause}\\r\\n| summarize PodRestartCount=max(PodRestartCount) by PodName, bin(TimeGenerated, trendBinSize)\\r\\n| order by PodName asc nulls last, TimeGenerated asc\\r\\n| serialize \\r\\n| extend prevValue=iif(prev(PodName) == PodName, prev(PodRestartCount), PodRestartCount)\\r\\n| extend RestartCount=PodRestartCount - prevValue\\r\\n| extend RestartCount=iif(RestartCount < 0, 0, RestartCount) \\r\\n| project TimeGenerated, PodName, RestartCount\\r\\n| render timechart\",\"size\":0,\"aggregation\":5,\"showAnalytics\":true,\"title\":\"Azure Arc-enabled kubernetes - Pod Restart Trend\",\"timeContextFromParameter\":\"timeRange\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"]},\"customWidth\":\"50\",\"showPin\":true,\"name\":\"pod-restart-trend-chart\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"let endDateTime = {timeRange:end};\\r\\nlet startDateTime = {timeRange:start};\\r\\nlet trendBinSize = {timeRange:grain};\\r\\nlet controllerName= '{workloadName:value}';\\r\\nKubePodInventory\\r\\n| where TimeGenerated >= startDateTime\\r\\n| where TimeGenerated < endDateTime\\r\\n{clusterIdWhereClause}\\r\\n{workloadKindWhereClause}\\r\\n{namespaceWhereClause}\\r\\n| where isnotempty(ClusterName)\\r\\n| where isnotempty(Namespace)\\r\\n| where ControllerName == controllerName\\r\\n| extend PodName = Name\\r\\n{podStatusWhereClause}\\r\\n{podTileStatusWhereClause}\\r\\n{podNameWhereClause}\\r\\n| extend ContainerName=tostring(split(ContainerName, '/')[1])\\r\\n| where isempty(ContainerName) == false\\r\\n| summarize ContainerRestartCount=sum(ContainerRestartCount) by ContainerName, bin(TimeGenerated, 1tick)\\r\\n| order by ContainerName asc nulls last, TimeGenerated asc\\r\\n| serialize \\r\\n| extend prevValue=iif(prev(ContainerName) == ContainerName, prev(ContainerRestartCount), ContainerRestartCount)\\r\\n| extend RestartCount=ContainerRestartCount - prevValue\\r\\n| extend RestartCount=iif(RestartCount < 0, 0, RestartCount) \\r\\n| project TimeGenerated, ContainerName, RestartCount\\r\\n| summarize RestartCount=sum(RestartCount) by ContainerName, bin(TimeGenerated, trendBinSize)\",\"size\":0,\"aggregation\":5,\"showAnalytics\":true,\"title\":\"Azure Arc-enabled kubernetes - Container restart trend\",\"timeContextFromParameter\":\"timeRange\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"visualization\":\"timechart\"},\"customWidth\":\"50\",\"showPin\":true,\"name\":\"container-restart-trend-chart\",\"styleSettings\":{\"showBorder\":true}},{\"type\":10,\"content\":{\"chartId\":\"workbook3e0e301c-50cf-4e53-ac2a-40f5eed823a0\",\"version\":\"MetricsItem/2.0\",\"size\":0,\"chartType\":2,\"resourceType\":\"microsoft.kubernetes/connectedclusters\",\"metricScope\":0,\"resourceParameter\":\"resource\",\"resourceIds\":[\"{resource}\"],\"timeContext\":{\"durationMs\":3600000},\"metrics\":[{\"namespace\":\"insights.container/pods\",\"metric\":\"insights.container/pods--PodCount\",\"aggregation\":4,\"splitBy\":null}],\"title\":\"Azure Arc-enabled kubernetes - Pod Count\",\"gridSettings\":{\"rowLimit\":10000}},\"customWidth\":\"50\",\"name\":\"metric - 19\"},{\"type\":10,\"content\":{\"chartId\":\"workbook167c4490-9cde-4fcd-be0f-401070f13ccd\",\"version\":\"MetricsItem/2.0\",\"size\":0,\"chartType\":2,\"resourceType\":\"microsoft.kubernetes/connectedclusters\",\"metricScope\":0,\"resourceParameter\":\"resource\",\"resourceIds\":[\"{resource}\"],\"timeContext\":{\"durationMs\":3600000},\"metrics\":[{\"namespace\":\"insights.container/pods\",\"metric\":\"insights.container/pods--PodReadyPercentage\",\"aggregation\":4,\"splitBy\":null},{\"namespace\":\"insights.container/pods\",\"metric\":\"insights.container/pods--restartingContainerCount\",\"aggregation\":4}],\"title\":\"Azure Arc-enabled Kubernetes - Pod status\",\"gridSettings\":{\"rowLimit\":10000}},\"customWidth\":\"50\",\"name\":\"metric - 20\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"let endDateTime = {timeRange:end};\\r\\nlet startDateTime = {timeRange:start};\\r\\nlet trendBinSize = {timeRange:grain};\\r\\nlet controllerName= '{workloadName}';\\r\\nKubePodInventory\\r\\n| where TimeGenerated >= startDateTime\\r\\n| where TimeGenerated < endDateTime\\r\\n{clusterIdWhereClause}\\r\\n{workloadKindWhereClause}\\r\\n{namespaceWhereClause}\\r\\n| where isnotempty(ClusterName)\\r\\n| where isnotempty(Namespace)\\r\\n| extend PodName = Name\\r\\n{podStatusWhereClause}\\r\\n{podNameWhereClause}\\r\\n| where ControllerName == controllerName\\r\\n| extend InstanceName = strcat(ClusterId, '/', ContainerName),\\r\\n ContainerName = strcat(Name, '/', tostring(split(ContainerName, '/')[1]))\\r\\n| summarize arg_max(TimeGenerated, *) by ContainerName, Name\\r\\n{podTileStatusWhereClause}\\r\\n| extend ContainerLastStatus = todynamic(ContainerLastStatus) \\r\\n| project TimeGenerated, ContainerName, PodStatus, ContainerStatus, LastState=ContainerLastStatus.lastState, LastStateReason=ContainerLastStatus.reason, LastStateStartTime=ContainerLastStatus.startedAt,\\r\\nLastStateFinishTime=ContainerLastStatus.finishedAt\\r\\n\",\"size\":0,\"aggregation\":5,\"showAnalytics\":true,\"title\":\"Azure Arc-enabled kubernetes - Container Status for Pods\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"TimeGenerated\",\"formatter\":6,\"formatOptions\":{},\"dateFormat\":{\"showUtcTime\":null,\"formatName\":\"shortDateTimePattern\"}},{\"columnMatch\":\"PodStatus\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"icons\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Running\",\"representation\":\"success\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Pending\",\"representation\":\"pending\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Failed\",\"representation\":\"failed\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"thresholdValue\":null,\"representation\":\"Blank\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"ContainerStatus\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"icons\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Running\",\"representation\":\"success\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"waiting\",\"representation\":\"pending\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"thresholdValue\":null,\"representation\":\"success\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"LastState\",\"formatter\":0,\"formatOptions\":{},\"numberFormat\":{\"unit\":0,\"options\":{\"style\":\"decimal\"},\"emptyValCustomText\":\"-\"}},{\"columnMatch\":\"LastStateReason\",\"formatter\":0,\"formatOptions\":{},\"numberFormat\":{\"unit\":0,\"options\":{\"style\":\"decimal\"},\"emptyValCustomText\":\"-\"}},{\"columnMatch\":\"LastStateStartTime\",\"formatter\":6,\"formatOptions\":{},\"dateFormat\":{\"showUtcTime\":null,\"formatName\":\"shortDateTimePattern\"}},{\"columnMatch\":\"LastStateFinishTime\",\"formatter\":6,\"formatOptions\":{},\"dateFormat\":{\"showUtcTime\":null,\"formatName\":\"shortDateTimePattern\"}}]},\"sortBy\":[]},\"showPin\":true,\"name\":\"container-status-for-pods-chart\"},{\"type\":10,\"content\":{\"chartId\":\"workbook87327d65-b260-4473-9f2b-5d90b1100543\",\"version\":\"MetricsItem/2.0\",\"size\":0,\"chartType\":2,\"resourceType\":\"microsoft.kubernetes/connectedclusters\",\"metricScope\":0,\"resourceParameter\":\"resource\",\"resourceIds\":[\"{resource}\"],\"timeContext\":{\"durationMs\":2592000000},\"metrics\":[{\"namespace\":\"insights.container/nodes\",\"metric\":\"insights.container/nodes--cpuUsagePercentage\",\"aggregation\":4,\"splitBy\":null}],\"title\":\"Azure Arc-enabled kubernetes cluster - Node CPU usage %\",\"gridSettings\":{\"rowLimit\":10000}},\"customWidth\":\"50\",\"name\":\"metric - 17\"},{\"type\":10,\"content\":{\"chartId\":\"workbook2f202f95-1281-4077-a49b-31c3e3d3271b\",\"version\":\"MetricsItem/2.0\",\"size\":0,\"chartType\":2,\"resourceType\":\"microsoft.kubernetes/connectedclusters\",\"metricScope\":0,\"resourceParameter\":\"resource\",\"resourceIds\":[\"{resource}\"],\"timeContext\":{\"durationMs\":3600000},\"metrics\":[{\"namespace\":\"insights.container/nodes\",\"metric\":\"insights.container/nodes--memoryWorkingSetPercentage\",\"aggregation\":4,\"splitBy\":null}],\"title\":\"Azure Arc-enabled kubernetes cluster - Node memory working set %\",\"gridSettings\":{\"rowLimit\":10000}},\"customWidth\":\"50\",\"name\":\"metric - 18\"},{\"type\":1,\"content\":{\"json\":\"## Azure Arc-enabled SQL Managed Instance\"},\"name\":\"text - 18\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"crossComponentResources\":[\"{subscription}\"],\"parameters\":[{\"id\":\"be802690-79de-4708-8629-4c57b0d78085\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"subscriptionId\",\"label\":\"Subscription\",\"type\":6,\"value\":null,\"typeSettings\":{\"additionalResourceOptions\":[],\"includeAll\":true,\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\"},{\"id\":\"3bd2e749-7c3f-47fd-9f8a-7ab118be8850\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"workspaceName\",\"label\":\"Log Analytics Workspace\",\"type\":5,\"query\":\"resources\\r\\n| where type contains 'microsoft.operationalinsights/workspaces'\\r\\n| project id\",\"crossComponentResources\":[\"{subscription}\"],\"value\":null,\"typeSettings\":{\"additionalResourceOptions\":[],\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"},{\"id\":\"a308510f-a9f5-4ee4-a4b1-a175aa96b290\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"SQLMI\",\"label\":\"Azure Arc-enabled SQL MI\",\"type\":5,\"query\":\" Resources\\r\\n | where type =~ 'Microsoft.AzureArcData/sqlManagedInstances'\\r\\n | project id\",\"crossComponentResources\":[\"{subscription}\"],\"value\":null,\"typeSettings\":{\"additionalResourceOptions\":[],\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"}],\"style\":\"above\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"},\"name\":\"pills - Copy\"},{\"type\":10,\"content\":{\"chartId\":\"789dd9d3-afbc-4440-8e31-7fe124f7b9ce\",\"version\":\"MetricsItem/2.0\",\"size\":0,\"chartType\":2,\"resourceType\":\"microsoft.azurearcdata/sqlmanagedinstances\",\"metricScope\":0,\"resourceParameter\":\"SQLMI\",\"resourceIds\":[\"{SQLMI}\"],\"timeContext\":{\"durationMs\":86400000},\"metrics\":[{\"namespace\":\"sql server\",\"metric\":\"sql server--CPU Usage: pod-0\",\"aggregation\":4,\"splitBy\":null}],\"title\":\"Azure Arc-enabled SQL MI - CPU usage\",\"gridSettings\":{\"rowLimit\":10000}},\"name\":\"metric - 0\"},{\"type\":10,\"content\":{\"chartId\":\"540fb39f-7903-4cc8-af49-679ee1f331fe\",\"version\":\"MetricsItem/2.0\",\"size\":0,\"chartType\":2,\"resourceType\":\"microsoft.azurearcdata/sqlmanagedinstances\",\"metricScope\":0,\"resourceParameter\":\"SQLMI\",\"resourceIds\":[\"{SQLMI}\"],\"timeContext\":{\"durationMs\":86400000},\"metrics\":[{\"namespace\":\"sql server\",\"metric\":\"sql server--Memory Usage: pod-0\",\"aggregation\":4,\"splitBy\":null}],\"gridSettings\":{\"rowLimit\":10000}},\"name\":\"metric - 0\"},{\"type\":10,\"content\":{\"chartId\":\"31b401d2-6d90-4a57-a61a-d6e458523448\",\"version\":\"MetricsItem/2.0\",\"size\":0,\"chartType\":2,\"resourceType\":\"microsoft.azurearcdata/sqlmanagedinstances\",\"metricScope\":0,\"resourceParameter\":\"SQLMI\",\"resourceIds\":[\"{SQLMI}\"],\"timeContext\":{\"durationMs\":86400000},\"metrics\":[{\"namespace\":\"sql server\",\"metric\":\"sql server--Transactions/second: pod-0\",\"aggregation\":4,\"splitBy\":null}],\"title\":\"Azure Arc-enabled SQL MI - Transactions per Second\",\"gridSettings\":{\"rowLimit\":10000}},\"name\":\"metric - 0\"}]},\"conditionalVisibility\":{\"parameterName\":\"selectedTab\",\"comparison\":\"isEqualTo\",\"value\":\"Monitoring\"},\"name\":\"Monitoring\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"## Jumpstart ArcBox resource inventory\\r\\n\\r\\n💡 Select your Azure ArcBox subscription and Resource Group to see more information.\"},\"name\":\"text - 4\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"crossComponentResources\":[\"{subscriptionId}\"],\"parameters\":[{\"id\":\"984514df-fff0-434c-a373-7090566e8c44\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"subscriptionId\",\"type\":6,\"value\":null,\"typeSettings\":{\"additionalResourceOptions\":[],\"includeAll\":true,\"showDefault\":false},\"timeContext\":{\"durationMs\":86400000},\"label\":\"Subscription\"},{\"id\":\"cb849a6b-937d-4e93-8d09-770554777009\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"resourceGroup\",\"label\":\"Resource Group\",\"type\":2,\"query\":\"Resources\\r\\n| summarize by resourceGroup\\r\\n| order by resourceGroup asc\\r\\n| project id=resourceGroup, resourceGroup\",\"crossComponentResources\":[\"{subscriptionId}\"],\"value\":\"arcboxdataops\",\"typeSettings\":{\"additionalResourceOptions\":[],\"showDefault\":false},\"timeContext\":{\"durationMs\":86400000},\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"},{\"id\":\"0fd9f40f-ffe0-4894-adc7-64866aa4b1e4\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"ResourceType\",\"label\":\"Resources\",\"type\":7,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"includeAll\":true,\"showDefault\":false},\"timeContext\":{\"durationMs\":86400000},\"value\":[\"value::all\"]}],\"style\":\"pills\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"},\"name\":\"parameters - 1\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"Resources \\r\\n| where resourceGroup == \\\"{resourceGroup}\\\"\\r\\n| extend type = case(\\r\\ntype contains 'microsoft.netapp/netappaccounts', 'NetApp Accounts',\\r\\ntype contains \\\"microsoft.compute\\\", \\\"Azure Compute\\\",\\r\\ntype contains \\\"microsoft.logic\\\", \\\"LogicApps\\\",\\r\\ntype contains 'microsoft.keyvault/vaults', \\\"Key Vaults\\\",\\r\\ntype contains 'microsoft.storage/storageaccounts', \\\"Storage Accounts\\\",\\r\\ntype contains 'microsoft.compute/availabilitysets', 'Availability Sets',\\r\\ntype contains 'microsoft.operationalinsights/workspaces', 'Azure Monitor Resources',\\r\\ntype contains 'microsoft.operationsmanagement', 'Operations Management Resources',\\r\\ntype contains 'microsoft.insights', 'Azure Monitor Resources',\\r\\ntype contains 'microsoft.desktopvirtualization/applicationgroups', 'WVD Application Groups',\\r\\ntype contains 'microsoft.desktopvirtualization/workspaces', 'WVD Workspaces',\\r\\ntype contains 'microsoft.desktopvirtualization/hostpools', 'WVD Hostpools',\\r\\ntype contains 'microsoft.recoveryservices/vaults', 'Backup Vaults',\\r\\ntype contains 'microsoft.web', 'App Services',\\r\\ntype contains 'microsoft.managedidentity/userassignedidentities','Managed Identities',\\r\\ntype contains 'microsoft.storagesync/storagesyncservices', 'Azure File Sync',\\r\\ntype contains 'microsoft.hybridcompute/machines', 'Azure Arc-enabled servers ',\\r\\ntype contains 'Microsoft.EventHub', 'Event Hub',\\r\\ntype contains 'Microsoft.EventGrid', 'Event Grid',\\r\\ntype contains 'Microsoft.Sql', 'SQL Resources',\\r\\ntype contains 'Microsoft.HDInsight/clusters', 'HDInsight Clusters',\\r\\ntype contains 'microsoft.devtestlab', 'DevTest Labs Resources',\\r\\ntype contains 'microsoft.containerinstance', 'Container Instances Resources',\\r\\ntype contains 'microsoft.portal/dashboards', 'Azure Dashboards',\\r\\ntype contains 'microsoft.containerregistry/registries', 'Container Registry',\\r\\ntype contains 'microsoft.automation', 'Automation Resources',\\r\\ntype contains 'sendgrid.email/accounts', 'SendGrid Accounts',\\r\\ntype contains 'microsoft.datafactory/factories', 'Data Factory',\\r\\ntype contains 'microsoft.databricks/workspaces', 'Databricks Workspaces',\\r\\ntype contains 'microsoft.machinelearningservices/workspaces', 'Machine Learnings Workspaces',\\r\\ntype contains 'microsoft.alertsmanagement/smartdetectoralertrules', 'Azure Monitor Resources',\\r\\ntype contains 'microsoft.apimanagement/service', 'API Management Services',\\r\\ntype contains 'microsoft.dbforpostgresql', 'PostgreSQL Resources',\\r\\ntype contains 'microsoft.scheduler/jobcollections', 'Scheduler Job Collections',\\r\\ntype contains 'microsoft.visualstudio/account', 'Azure DevOps Organization',\\r\\ntype contains 'microsoft.network/', 'Network Resources',\\r\\ntype contains 'microsoft.migrate/' or type contains 'microsoft.offazure', 'Azure Migrate Resources',\\r\\ntype contains 'microsoft.servicebus/namespaces', 'Service Bus Namespaces',\\r\\ntype contains 'microsoft.classic', 'ASM Obsolete Resources',\\r\\ntype contains 'microsoft.resources/templatespecs', 'Template Spec Resources',\\r\\ntype contains 'microsoft.virtualmachineimages', 'VM Image Templates',\\r\\ntype contains 'microsoft.documentdb', 'CosmosDB DB Resources',\\r\\ntype contains 'microsoft.alertsmanagement/actionrules', 'Azure Monitor Resources',\\r\\ntype contains 'microsoft.kubernetes/connectedclusters', 'Azure Arc-enabled Kubernetes',\\r\\ntype contains 'microsoft.purview', 'Purview Resources',\\r\\ntype contains 'microsoft.security', 'Security Resources',\\r\\ntype contains 'microsoft.cdn', 'CDN Resources',\\r\\ntype contains 'microsoft.devices','IoT Resources',\\r\\ntype contains 'microsoft.datamigration', 'Data Migraiton Services',\\r\\ntype contains 'microsoft.cognitiveservices', 'Congitive Services',\\r\\ntype contains 'microsoft.customproviders', 'Custom Providers',\\r\\ntype contains 'microsoft.appconfiguration', 'App Services',\\r\\ntype contains 'microsoft.search', 'Search Services',\\r\\ntype contains 'microsoft.maps', 'Maps',\\r\\ntype contains 'microsoft.containerservice/managedclusters', 'AKS',\\r\\ntype contains 'microsoft.signalrservice', 'SignalR',\\r\\ntype contains 'microsoft.resourcegraph/queries', 'Resource Graph Queries',\\r\\ntype contains 'microsoft.batch', 'MS Batch',\\r\\ntype contains 'microsoft.analysisservices', 'Analysis Services',\\r\\ntype contains 'microsoft.synapse/workspaces', 'Synapse Workspaces',\\r\\ntype contains 'microsoft.synapse/workspaces/sqlpools', 'Synapse SQL Pools',\\r\\ntype contains 'microsoft.kusto/clusters', 'ADX Clusters',\\r\\ntype contains 'microsoft.resources/deploymentscripts', 'Deployment Scripts',\\r\\ntype contains 'microsoft.aad/domainservices', 'AD Domain Services',\\r\\ntype contains 'microsoft.labservices/labaccounts', 'Lab Accounts',\\r\\ntype contains 'microsoft.automanage/accounts', 'Automanage Accounts',\\r\\ntype contains 'microsoft.extendedlocation/customlocations', 'Azure Arc Custom Locations',\\r\\ntype contains 'microsoft.azurearcdata/postgresinstances', 'Azure Arc-enabled PostgresSQL',\\r\\ntype contains 'microsoft.azurearcdata/sqlmanagedinstances', 'Azure Arc-enabled SQL Managed Instance',\\r\\ntype contains 'microsoft.azurearcdata/datacontrollers', 'Azure Arc-enabled data controller',\\r\\ntype contains 'microsoft.azurearcdata/sqlserverinstances', 'Azure Arc-enabled SQL server',\\r\\nstrcat(\\\"Not Translated: \\\", type))\\r\\n| summarize count() by type\",\"size\":1,\"title\":\"Resource Count by Type\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\",\"crossComponentResources\":[\"{subscriptionId}\"],\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"type\",\"formatter\":1},\"leftContent\":{\"columnMatch\":\"count_\",\"formatter\":12,\"formatOptions\":{\"palette\":\"auto\"},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"useGrouping\":false,\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"sortCriteriaField\":\"count_\",\"sortOrderField\":2}},\"name\":\"query - Overview Resource Counts by type\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"Resources\\r\\n| where type in~ ({ResourceType})\\r\\n| where resourceGroup == \\\"{resourceGroup}\\\"\\r\\n| project Resource = id, Subscription = subscriptionId, ['Resource group'] = strcat('/subscriptions/', subscriptionId, '/resourceGroups/', resourceGroup), Location = location, tags\",\"size\":2,\"title\":\"Resources List\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\",\"crossComponentResources\":[\"{subscriptionId}\"]},\"name\":\"query - 2\"}]},\"conditionalVisibility\":{\"parameterName\":\"selectedTab\",\"comparison\":\"isEqualTo\",\"value\":\"Inventory\"},\"name\":\"Inventory\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"## Jumpstart ArcBox security overview\"},\"name\":\"text - 5\"},{\"type\":1,\"content\":{\"json\":\"💡 To use this workbook, you'll need to configure **continuous export** to export data to a Log Analytics workspace:\\r\\n1. From Microsoft Defender for Cloud's sidebar, select **Environment Settings**.\\r\\n2. Select the specific Azure subscription for which you want to configure the data export.\\r\\n3. From the sidebar of the settings page for that subscription, select **Continuous Export**.\\r\\n4. Set the export target to **Log Analytics workspace**.\\r\\n5. Select the following data types: **Security recommendations** and **Secure Score (Preview)**.\\r\\n6. From the export frequency options, select **Streaming** and **Snapshots**.\\r\\n7. Make sure to select ArcBox's subscription, resource group and Log Analytics workspace as the export target. Select Save.\\r\\n\\r\\n[Learn more](https://docs.microsoft.com/en-us/azure/security-center/continuous-export?tabs=azure-portal#set-up-a-continuous-export)\\r\\n\\r\\n> **Notes**\\r\\n* To get full visibility, wait at least one week for the first snapshot to be exported.\\r\\n* To configure continuous export across your organization, use the supplied Azure Policy 'DeployIfNotExist' policies described [here](https://docs.microsoft.com/en-us/azure/security-center/continuous-export?tabs=azure-policy#set-up-a-continuous-export).\"},\"showPin\":false,\"name\":\"Instructions\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"crossComponentResources\":[\"{workspaceName}\"],\"parameters\":[{\"id\":\"ae721cb1-e030-4e02-8839-9c6a00f66c8a\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"workspaceName\",\"type\":5,\"description\":\"Select at least one workspace that contains continuous export data based on the selected subscriptions\",\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"resources\\r\\n| where type =~ 'microsoft.operationalinsights/workspaces'\\r\\n| project id\",\"crossComponentResources\":[\"value::selected\"],\"value\":[\"value::all\"],\"typeSettings\":{\"resourceTypeFilter\":{\"microsoft.operationalinsights/workspaces\":true},\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\",\"label\":\"Log Analytics Workspace\"},{\"id\":\"4f3a03fd-9968-4ee7-b6bc-d04d3bbe14a8\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"TimeRange\",\"label\":\"Time Range\",\"type\":4,\"description\":\"Filter the data of this report to one of these predefined time ranges\",\"isRequired\":true,\"value\":{\"durationMs\":2592000000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000}],\"allowCustom\":true}},{\"id\":\"0117bdc3-a4e2-476b-b7cc-3d1f486e67cf\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"ErrorHandle\",\"type\":1,\"query\":\"let MissingTable = view () { print isMissing=1 };\\r\\nunion isfuzzy=true MissingTable, (SecureScores | getschema | summarize c=count() | project isMissing=iff(c > 0, 0, 1))\\r\\n| top 1 by isMissing asc\",\"crossComponentResources\":[\"{workspaceName}\"],\"isHiddenWhenLocked\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"above\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"Parameters\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"  Current score trends per subscription (not affected by the time range parameter)\\r\\n\"},\"customWidth\":\"50\",\"name\":\"text - 3\"},{\"type\":1,\"content\":{\"json\":\"  Aggregated score for selected subscriptions over time\\r\\n\"},\"customWidth\":\"50\",\"name\":\"text - 4\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"//Current score trends per subscription (show current, 7-day change from the current score as %, 30-day change from the current score as %)\\r\\nlet startOfToday = startofday(now()); \\r\\nlet offsetWeek = 6d; \\r\\nlet offsetMonth = 29d; \\r\\nlet lookbackDurationWeek = 14d; \\r\\nlet lookbackDurationMonth = 45d; \\r\\nlet endTimeWeek = startOfToday - offsetWeek; \\r\\nlet startTimeWeek = endTimeWeek - lookbackDurationWeek; \\r\\nlet endTimeMonth = startOfToday - offsetMonth; \\r\\nlet startTimeMonth = endTimeMonth - lookbackDurationMonth; \\r\\nSecureScores \\r\\n| extend Day = startofday(TimeGenerated) \\r\\n| summarize arg_max(TimeGenerated, *) by Day, SecureScoresSubscriptionId \\r\\n| summarize arg_max(Day, *) by SecureScoresSubscriptionId \\r\\n| join kind = fullouter( \\r\\n SecureScores \\r\\n | extend Day = startofday(TimeGenerated) \\r\\n | where TimeGenerated > startTimeWeek and TimeGenerated <= endTimeWeek \\r\\n | summarize arg_max(TimeGenerated, *) by SecureScoresSubscriptionId \\r\\n | project OldScoreSevenDays = PercentageScore, SecureScoresSubscriptionId \\r\\n ) \\r\\n on SecureScoresSubscriptionId \\r\\n| join kind = fullouter( \\r\\n SecureScores \\r\\n | extend Day = startofday(TimeGenerated) \\r\\n | where TimeGenerated > startTimeMonth and TimeGenerated <= endTimeMonth \\r\\n | summarize arg_max(TimeGenerated, *) by SecureScoresSubscriptionId \\r\\n | project OldMonthScore = PercentageScore, SecureScoresSubscriptionId \\r\\n ) \\r\\n on SecureScoresSubscriptionId \\r\\n| extend DiffSevenDays = tostring(((PercentageScore - OldScoreSevenDays) / OldScoreSevenDays) * 100) \\r\\n| extend DiffSevenDays = iff(isempty(DiffSevenDays), \\\"\\\", DiffSevenDays) \\r\\n| extend DiffMonth = tostring(((PercentageScore - OldMonthScore) / OldMonthScore) * 100) \\r\\n| extend DiffMonth = iff(isempty(DiffMonth), \\\"\\\", DiffMonth) \\r\\n| project SecureScoresSubscriptionId, CurrentScore = PercentageScore * 100, todouble(DiffSevenDays), todouble(DiffMonth)\",\"size\":0,\"noDataMessage\":\"No data available. Check your continuous export configuration for the selected workspaces.\",\"exportFieldName\":\"SecureScoresSubscriptionId\",\"exportParameterName\":\"selectedSubscription\",\"exportDefaultValue\":\"All\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"SecureScoresSubscriptionId\",\"formatter\":15,\"formatOptions\":{\"linkTarget\":null,\"showIcon\":true,\"customColumnWidthSetting\":\"25ch\"}},{\"columnMatch\":\"CurrentScore\",\"formatter\":4,\"formatOptions\":{\"min\":0,\"max\":100,\"palette\":\"redGreen\",\"customColumnWidthSetting\":\"20ch\"},\"numberFormat\":{\"unit\":1,\"options\":{\"style\":\"decimal\",\"useGrouping\":false,\"maximumSignificantDigits\":2}}},{\"columnMatch\":\"DiffSevenDays\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"icons\",\"thresholdsGrid\":[{\"operator\":\"<\",\"thresholdValue\":\"0\",\"representation\":\"trenddown\",\"text\":\"{0}{1}\"},{\"operator\":\">\",\"thresholdValue\":\"0\",\"representation\":\"trendup\",\"text\":\"{0}{1}\"},{\"operator\":\"is Empty\",\"thresholdValue\":\"0\",\"representation\":\"Normal\",\"text\":\"N/A\"},{\"operator\":\"Default\",\"thresholdValue\":null,\"representation\":\"Blank\",\"text\":\"{0}{1}\"}],\"customColumnWidthSetting\":\"20ch\"},\"numberFormat\":{\"unit\":1,\"options\":{\"style\":\"decimal\",\"useGrouping\":false,\"maximumSignificantDigits\":2}}},{\"columnMatch\":\"DiffMonth\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"icons\",\"thresholdsGrid\":[{\"operator\":\"<\",\"thresholdValue\":\"0\",\"representation\":\"trenddown\",\"text\":\"{0}{1}\"},{\"operator\":\">\",\"thresholdValue\":\"0\",\"representation\":\"trendup\",\"text\":\"{0}{1}\"},{\"operator\":\"is Empty\",\"thresholdValue\":\"0\",\"representation\":\"Normal\",\"text\":\"N/A\"},{\"operator\":\"Default\",\"thresholdValue\":null,\"representation\":\"Blank\",\"text\":\"{0}{1}\"}],\"customColumnWidthSetting\":\"20ch\"},\"numberFormat\":{\"unit\":1,\"options\":{\"style\":\"decimal\",\"useGrouping\":false,\"maximumSignificantDigits\":2}}}],\"rowLimit\":500,\"sortBy\":[{\"itemKey\":\"$gen_link_SecureScoresSubscriptionId_0\",\"sortOrder\":1}],\"labelSettings\":[{\"columnId\":\"SecureScoresSubscriptionId\",\"label\":\"Subscription name\"},{\"columnId\":\"CurrentScore\",\"label\":\"Current score %\"},{\"columnId\":\"DiffSevenDays\",\"label\":\"7-day change\"},{\"columnId\":\"DiffMonth\",\"label\":\"30-day change\"}]},\"sortBy\":[{\"itemKey\":\"$gen_link_SecureScoresSubscriptionId_0\",\"sortOrder\":1}]},\"customWidth\":\"50\",\"showPin\":true,\"name\":\"ScoreTrends\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"//Aggregated score for all subscriptions over time\\r\\nSecureScores\\r\\n| where '{selectedSubscription}' == 'All' or SecureScoresSubscriptionId == '{selectedSubscription}'\\r\\n| where MaxScore>0\\r\\n| extend subscriptionScore = CurrentScore/MaxScore \\r\\n| extend subScoreXsubWeight = subscriptionScore*Weight \\r\\n| extend Day = startofday(TimeGenerated) \\r\\n| summarize upperValue = sum(subScoreXsubWeight), underValue = sum(todouble(Weight)) by Day\\r\\n| extend OverallScore = 100*((upperValue)/(underValue))\\r\\n| project OverallScore, Day\",\"size\":0,\"aggregation\":5,\"showAnnotations\":true,\"noDataMessage\":\"No data available. Check your continuous export configuration for the selected workspaces.\",\"timeContextFromParameter\":\"TimeRange\",\"timeBrushParameterName\":\"TimeRange\",\"timeBrushExportOnlyWhenBrushed\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"visualization\":\"timechart\",\"chartSettings\":{\"seriesLabelSettings\":[{\"seriesName\":\"overallScore\",\"label\":\"Overall Score\",\"color\":\"lightBlue\"}],\"ySettings\":{\"min\":0,\"max\":100}}},\"customWidth\":\"50\",\"showPin\":true,\"name\":\"ScoreOvertime\"}],\"exportParameters\":true},\"conditionalVisibilities\":[{\"parameterName\":\"workspaceName\",\"comparison\":\"isNotEqualTo\"},{\"parameterName\":\"ErrorHandle\",\"comparison\":\"isNotEqualTo\",\"value\":\"1\"}],\"name\":\"SecureScore\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"  Top recommendations with recent increase in unhealthy resources\\r\\n
\\r\\n       Recommendations with the most resources that have become unhealthy in the periods shown\"},\"customWidth\":\"50\",\"name\":\"UnhealthyRecommendations\"},{\"type\":1,\"content\":{\"json\":\"  Security controls scores over time (weekly)\\r\\n\\r\\n\\r\\n\"},\"customWidth\":\"50\",\"name\":\"text - 3\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"//Top recommendations with recent increase in unhealthy resources\\r\\nSecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState =~ \\\"Unhealthy\\\"\\r\\n| summarize UnhealthyAssessedResources = dcount(AssessedResourceId),RecommendationName = any(RecommendationName) by RecommendationId\\r\\n| project RecommendationName, UnhealthyAssessedResources\\r\\n| sort by UnhealthyAssessedResources desc\\r\\n| take 10\",\"size\":0,\"noDataMessage\":\"No data available. Check your continuous export configuration for the selected workspaces.\",\"timeContextFromParameter\":\"TimeRange\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"RecommendationName\",\"formatter\":0,\"formatOptions\":{\"customColumnWidthSetting\":\"70ch\"},\"numberFormat\":{\"unit\":0,\"options\":{\"style\":\"decimal\",\"useGrouping\":false}},\"tooltipFormat\":{\"tooltip\":\"View recommendation '{0}'\"}},{\"columnMatch\":\"UnhealthyAssessedResources\",\"formatter\":4,\"formatOptions\":{\"min\":0,\"palette\":\"blue\",\"compositeBarSettings\":{\"labelText\":\"\",\"columnSettings\":[]},\"customColumnWidthSetting\":\"25ch\"}},{\"columnMatch\":\"RecommendationId\",\"formatter\":5}],\"labelSettings\":[{\"columnId\":\"RecommendationName\",\"label\":\"Recommendation name\"},{\"columnId\":\"UnhealthyAssessedResources\",\"label\":\"Unhealthy count\"}]},\"tileSettings\":{\"showBorder\":false,\"titleContent\":{\"columnMatch\":\"RecommendationName\",\"formatter\":1},\"leftContent\":{\"columnMatch\":\"UnhealthyCount\",\"formatter\":12,\"formatOptions\":{\"palette\":\"auto\"},\"numberFormat\":{\"unit\":17,\"options\":{\"maximumSignificantDigits\":3,\"maximumFractionDigits\":2}}}},\"graphSettings\":{\"type\":0,\"topContent\":{\"columnMatch\":\"RecommendationName\",\"formatter\":1},\"centerContent\":{\"columnMatch\":\"UnhealthyCount\",\"formatter\":1,\"numberFormat\":{\"unit\":17,\"options\":{\"maximumSignificantDigits\":3,\"maximumFractionDigits\":2}}}}},\"customWidth\":\"50\",\"name\":\"query - 7\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"//Security controls score over time (weekly) \\r\\nlet subscriptionsWeight = \\r\\n SecureScores\\r\\n | where '{selectedSubscription}' == 'All' or SecureScoresSubscriptionId == '{selectedSubscription}'\\r\\n | summarize arg_max(TimeGenerated, *) by SecureScoresSubscriptionId \\r\\n | project SecureScoresSubscriptionId, SubscriptionWeight = Weight; \\r\\nSecureScoreControls \\r\\n| where MaxScore > 0\\r\\n| where IsSnapshot == true\\r\\n| extend Week = startofweek(TimeGenerated) \\r\\n| summarize arg_max(TimeGenerated, *) by SecureScoresSubscriptionId, ControlId, Week \\r\\n| join kind=inner(\\r\\n subscriptionsWeight\\r\\n ) on SecureScoresSubscriptionId \\r\\n| extend WeightedControlScore = PercentageScore * SubscriptionWeight \\r\\n| summarize WeightedScoreAvg = sum(WeightedControlScore)/sum(SubscriptionWeight)*100, ControlName = any(ControlName) by ControlId, Week\\r\\n| order by WeightedScoreAvg desc\",\"size\":0,\"aggregation\":5,\"showAnnotations\":true,\"noDataMessage\":\"No data available. Check your continuous export configuration for the selected workspaces.\",\"timeContextFromParameter\":\"TimeRange\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"visualization\":\"timechart\",\"graphSettings\":{\"type\":0,\"topContent\":{\"columnMatch\":\"ControlId\",\"formatter\":1},\"centerContent\":{\"columnMatch\":\"WeightedAvgPerControl\",\"formatter\":1,\"numberFormat\":{\"unit\":17,\"options\":{\"maximumSignificantDigits\":3,\"maximumFractionDigits\":2}}}},\"chartSettings\":{\"group\":\"ControlName\",\"createOtherGroup\":0,\"showLegend\":true,\"ySettings\":{\"numberFormatSettings\":{\"unit\":1,\"options\":{\"style\":\"decimal\",\"useGrouping\":true}},\"min\":0,\"max\":100}}},\"customWidth\":\"50\",\"name\":\"Controls\"}]},\"conditionalVisibilities\":[{\"parameterName\":\"workspaceName\",\"comparison\":\"isNotEqualTo\"},{\"parameterName\":\"ErrorHandle\",\"comparison\":\"isNotEqualTo\",\"value\":\"1\"}],\"name\":\"group - 8\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"  Resources changed over time\\r\\n
\\r\\n       Select a recommendation to see its changes\"},\"name\":\"text - 2\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"//Recommendations changes over time (count how many resources have been changed to unhealthy, heathy, and not applicable, per recommendation) \\r\\nlet unhealthy = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState == 'Unhealthy'\\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName) \\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId;\\r\\nlet healthy = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState == 'Healthy' \\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName) \\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId;\\r\\nlet notApplicable = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState == 'NotApplicable' \\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName) \\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId; \\r\\nlet notUnhealthy = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState !~ 'Unhealthy' \\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName) \\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId; \\r\\nlet notHealthy = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState !~ 'Healthy'\\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName) \\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId; \\r\\nlet notNotApplicable = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState !~ 'NotApplicable' \\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName) \\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId; \\r\\nlet notHealthyToHealthy = \\r\\n notHealthy \\r\\n | join (\\r\\n healthy\\r\\n ) on RecommendationId, AssessedResourceId \\r\\n | where TimeGenerated < TimeGenerated1 \\r\\n | summarize ToHealthyCount = count(), RecommendationName=any(RecommendationName) by RecommendationId;\\r\\nlet notUnhealthyToUnhealthy = \\r\\n notUnhealthy \\r\\n | join ( \\r\\n unhealthy\\r\\n ) on RecommendationId, AssessedResourceId \\r\\n | where TimeGenerated < TimeGenerated1 \\r\\n | summarize ToUnhealthyCount = count(), RecommendationName=any(RecommendationName) by RecommendationId;\\r\\nlet notNotApplicableToNotApplicable = \\r\\n notNotApplicable \\r\\n | join (\\r\\n notApplicable\\r\\n ) on RecommendationId, AssessedResourceId \\r\\n | where TimeGenerated < TimeGenerated1 \\r\\n | summarize ToNotApplicableCount = count(), RecommendationName=any(RecommendationName) by RecommendationId;\\r\\n// Union \\r\\nunion notHealthyToHealthy, notUnhealthyToUnhealthy, notNotApplicableToNotApplicable\\r\\n| summarize RecommendationName=any(RecommendationName), ToUnhealthyCount = sum(ToUnhealthyCount), ToHealthyCount = sum(ToHealthyCount), ToNotApplicableCount = sum(ToNotApplicableCount) by RecommendationId\\r\\n| order by ToUnhealthyCount desc\",\"size\":0,\"noDataMessage\":\"No data available. Check your continuous export configuration for the selected workspaces.\",\"timeContextFromParameter\":\"TimeRange\",\"exportedParameters\":[{\"fieldName\":\"RecommendationId\",\"parameterName\":\"RecommendationId\"},{\"fieldName\":\"RecommendationName\",\"parameterName\":\"RecommendationName\",\"parameterType\":1}],\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"RecommendationId\",\"formatter\":5},{\"columnMatch\":\"RecommendationName\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"bladeOpenContext\":{\"bladeName\":\"RecommendationsBlade\",\"extensionName\":\"Microsoft_Azure_Security\",\"bladeParameters\":[{\"name\":\"assessmentKey\",\"source\":\"column\",\"value\":\"RecommendationId\"}]},\"customColumnWidthSetting\":\"100ch\"}},{\"columnMatch\":\"UnhealthyCount\",\"formatter\":8,\"formatOptions\":{\"palette\":\"redBright\"}},{\"columnMatch\":\"HealthyCount\",\"formatter\":8,\"formatOptions\":{\"palette\":\"green\"}},{\"columnMatch\":\"NotApplicableCount\",\"formatter\":8,\"formatOptions\":{\"palette\":\"gray\"}},{\"columnMatch\":\"AssessedResourceId\",\"formatter\":13,\"formatOptions\":{\"linkTarget\":null,\"showIcon\":true}}],\"labelSettings\":[{\"columnId\":\"RecommendationName\",\"label\":\"Recommendation name\"},{\"columnId\":\"ToUnhealthyCount\",\"label\":\"To unhealthy\"},{\"columnId\":\"ToHealthyCount\",\"label\":\"To healthy\"},{\"columnId\":\"ToNotApplicableCount\",\"label\":\"To not applicable\"}]},\"sortBy\":[]},\"name\":\"RecommendationStatusChanges\"},{\"type\":1,\"content\":{\"json\":\"To view changes over time on a specific recommendation, please select any from the list above.\",\"style\":\"info\"},\"conditionalVisibility\":{\"parameterName\":\"RecommendationId\",\"comparison\":\"isEqualTo\"},\"name\":\"ChangeLogBanner\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"let unhealthy = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState == 'Unhealthy'\\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName)\\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId\\r\\n| project UnhealthyRecommendationId = RecommendationId, UnhealthyResourceId = AssessedResourceId, UnhealhyTime = TimeGenerated, tostring(SubscriptionId);\\r\\nlet notApplicable = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState == 'NotApplicable'\\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName)\\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId\\r\\n| project NARecommendationId = RecommendationId, NAResourceId = AssessedResourceId, NATime = TimeGenerated, tostring(SubscriptionId);\\r\\nlet healthy = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState == 'Healthy'\\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName)\\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId\\r\\n| project HealthyRecommendationId = RecommendationId, HealthyResourceId = AssessedResourceId, HealhyTime = TimeGenerated, tostring(SubscriptionId);\\r\\nlet NotHealthy = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState !~ 'Healthy'\\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName)\\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId;\\r\\nlet NotUnhealthy = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState !~ 'Unhealthy'\\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName)\\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId;\\r\\nlet NotNotApplicable = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState !~ 'NotApplicable'\\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName)\\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId;\\r\\nlet 1_to_Healthy = \\r\\n NotHealthy\\r\\n | extend orignalState = RecommendationState\\r\\n | join healthy on $left.RecommendationId == $right.HealthyRecommendationId, $left.AssessedResourceId == $right.HealthyResourceId\\r\\n | where TimeGenerated < HealhyTime\\r\\n | extend update = \\\"To healthy\\\"\\r\\n | project RecommendationId, RecommendationName, Description, OriginalState = RecommendationState, update, TimeGenerated, RecommendationSeverity, tostring(SubscriptionId), AssessedResourceId, RecommendationLink;\\r\\n//1_to_Healthy\\r\\nlet 2_to_Unhealthy = \\r\\n NotUnhealthy\\r\\n | extend orignalState = RecommendationState\\r\\n | join unhealthy on $left.RecommendationId == $right.UnhealthyRecommendationId, $left.AssessedResourceId == $right.UnhealthyResourceId\\r\\n | where TimeGenerated < UnhealhyTime\\r\\n | extend update = \\\"To unhealthy\\\"\\r\\n | project RecommendationId, RecommendationName, Description, OriginalState = RecommendationState, update, TimeGenerated, RecommendationSeverity, tostring(SubscriptionId), AssessedResourceId, RecommendationLink;\\r\\n//2_to_Unhealthy\\r\\nlet 3_to_NotApplicable = \\r\\n NotNotApplicable\\r\\n | extend orignalState = RecommendationState\\r\\n | join notApplicable on $left.RecommendationId == $right.NARecommendationId, $left.AssessedResourceId == $right.NAResourceId\\r\\n | where TimeGenerated < NATime\\r\\n | extend update = \\\"To not applicable\\\"\\r\\n | extend NotApplicableReason = iff(isempty(NotApplicableReason), \\\"NA\\\", NotApplicableReason)\\r\\n | project RecommendationId, RecommendationName, Description, OriginalState = RecommendationState, update, TimeGenerated, RecommendationSeverity, tostring(SubscriptionId), AssessedResourceId, RecommendationLink, NotApplicableReason;\\r\\n// JOIN\\r\\nunion 1_to_Healthy, 2_to_Unhealthy, 3_to_NotApplicable\\r\\n| extend FullRecommendationLink = strcat(\\\"http://\\\",RecommendationLink)\\r\\n| extend AssessedResourceId = iff(AssessedResourceId==\\\"N/A\\\", extract(\\\".*onPremiseMachines/(.+)\\\",1, url_decode(RecommendationLink)), AssessedResourceId)\\r\\n| project-away RecommendationLink\\r\\n| where RecommendationId == '{RecommendationId}'\",\"size\":0,\"title\":\"Changes for \\\"{RecommendationName}\\\"\",\"noDataMessage\":\"No data available. Check your continuous export configuration for the selected workspaces.\",\"showExportToExcel\":true,\"exportToExcelOptions\":\"all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"RecommendationId\",\"formatter\":5},{\"columnMatch\":\"RecommendationName\",\"formatter\":5},{\"columnMatch\":\"Description\",\"formatter\":5},{\"columnMatch\":\"SubscriptionId\",\"formatter\":15,\"formatOptions\":{\"linkTarget\":null,\"showIcon\":true}},{\"columnMatch\":\"NotApplicableReason\",\"formatter\":0,\"formatOptions\":{\"customColumnWidthSetting\":\"30ch\"}},{\"columnMatch\":\"FullRecommendationLink\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"View\",\"linkIsContextBlade\":false}}],\"rowLimit\":1000,\"hierarchySettings\":{\"treeType\":1,\"groupBy\":[\"update\"]},\"labelSettings\":[{\"columnId\":\"RecommendationName\",\"label\":\"Recommendation name\"},{\"columnId\":\"OriginalState\",\"label\":\"Original state\"},{\"columnId\":\"update\",\"label\":\"Updated state\"},{\"columnId\":\"TimeGenerated\",\"label\":\"Time of change\"},{\"columnId\":\"RecommendationSeverity\",\"label\":\"Severity\"},{\"columnId\":\"SubscriptionId\",\"label\":\"Subscription\"},{\"columnId\":\"AssessedResourceId\",\"label\":\"Resource\"},{\"columnId\":\"NotApplicableReason\",\"label\":\"Reason\"},{\"columnId\":\"FullRecommendationLink\",\"label\":\"View recommendation\"}]},\"sortBy\":[]},\"conditionalVisibility\":{\"parameterName\":\"RecommendationId\",\"comparison\":\"isNotEqualTo\"},\"name\":\"ChangeLogDetails\"}]},\"conditionalVisibilities\":[{\"parameterName\":\"workspaceName\",\"comparison\":\"isNotEqualTo\"},{\"parameterName\":\"ErrorHandle\",\"comparison\":\"isNotEqualTo\",\"value\":\"1\"}],\"name\":\"ChangeLog\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"title\":\"Machines not sending current heartbeats\",\"items\":[{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"Heartbeat\\n| join kind = leftanti (\\n Heartbeat\\n | where TimeGenerated > now(-15m)\\n) on SourceComputerId\\n| summarize arg_max(LatestTimestamp=TimeGenerated, SubscriptionId) by ResourceId\\n| order by LatestTimestamp\",\"size\":3,\"showAnalytics\":true,\"title\":\"Agent not reporting for more than 15 minutes\",\"noDataMessage\":\"No machines found not reporting for more than 15 minutes.\",\"timeContext\":{\"durationMs\":86400000},\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"gridSettings\":{\"labelSettings\":[{\"columnId\":\"ResourceId\",\"label\":\"Resource ID\"},{\"columnId\":\"LatestTimestamp\",\"label\":\"Latest Heartbeat\"},{\"columnId\":\"SubscriptionId\",\"label\":\"Subscription ID\"}]}},\"customWidth\":\"50\",\"name\":\"query - 0\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"Heartbeat\\n| join kind = leftanti (\\n Heartbeat\\n | where TimeGenerated > now(-24h)\\n) on SourceComputerId\\n| summarize arg_max(LatestTimestamp=TimeGenerated, SubscriptionId) by ResourceId\\n| order by LatestTimestamp\",\"size\":3,\"showAnalytics\":true,\"title\":\"Agent not reporting for more than 24 hours\",\"noDataMessage\":\"No machines found not reporting for more than 24 hours.\",\"timeContext\":{\"durationMs\":172800000},\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"gridSettings\":{\"labelSettings\":[{\"columnId\":\"ResourceId\",\"label\":\"Resource ID\"},{\"columnId\":\"LatestTimestamp\",\"label\":\"Latest Heartbeat\"},{\"columnId\":\"SubscriptionId\",\"label\":\"Subscription ID\"}]}},\"customWidth\":\"50\",\"name\":\"query - 1\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"Heartbeat\\n| join kind = leftanti (\\n Heartbeat\\n | where TimeGenerated > now(-48h)\\n) on SourceComputerId\\n| summarize arg_max(LatestTimestamp=TimeGenerated, SubscriptionId) by ResourceId\\n| order by LatestTimestamp\",\"size\":3,\"showAnalytics\":true,\"title\":\"Agent not reporting for more than 48 hours\",\"noDataMessage\":\"No machines found not reporting for more than 48 hours.\",\"timeContext\":{\"durationMs\":604800000},\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"gridSettings\":{\"labelSettings\":[{\"columnId\":\"ResourceId\",\"label\":\"Resource ID\"},{\"columnId\":\"LatestTimestamp\",\"label\":\"Latest Heartbeat\"},{\"columnId\":\"SubscriptionId\",\"label\":\"Subscription ID\"}]}},\"customWidth\":\"50\",\"name\":\"query - 2\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"Heartbeat\\n| join kind = leftanti (\\n Heartbeat\\n | where TimeGenerated > now(-7d)\\n) on SourceComputerId\\n| summarize arg_max(LatestTimestamp=TimeGenerated, SubscriptionId) by ResourceId\\n| order by LatestTimestamp\",\"size\":3,\"showAnalytics\":true,\"title\":\"Agent not reporting for more than 7 days\",\"noDataMessage\":\"No machines found not reporting for more than 7 days.\",\"timeContext\":{\"durationMs\":2592000000},\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"gridSettings\":{\"labelSettings\":[{\"columnId\":\"ResourceId\",\"label\":\"Resource ID\"},{\"columnId\":\"LatestTimestamp\",\"label\":\"Latest Heartbeat\"},{\"columnId\":\"SubscriptionId\",\"label\":\"Subscription ID\"}]}},\"customWidth\":\"50\",\"name\":\"query - 3\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibilities\":[{\"parameterName\":\"SelectedTab\",\"comparison\":\"isEqualTo\",\"value\":\"NotReportingTab\"},{\"parameterName\":\"workspaceName\",\"comparison\":\"isNotEqualTo\"}],\"name\":\"MachinesNotReporting\",\"styleSettings\":{\"showBorder\":true}},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"title\":\"Protection Status\",\"items\":[{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"securityresources\\n| where type =~ \\\"microsoft.security/assessments\\\" or type =~ \\\"microsoft.security/softwareInventories\\\"\\n| extend assessmentStatusCode = case(type =~ \\\"microsoft.security/assessments\\\", tostring(properties.status.code), \\\"\\\")\\n| extend severity = case(assessmentStatusCode =~ \\\"unhealthy\\\", tolower(tostring(properties.metadata.severity)), tolower(assessmentStatusCode))\\n| extend exemptionType = case(tolower(type) != \\\"microsoft.security/assessments\\\",\\\"N/A\\\", case(properties.status.cause =~ \\\"exempt\\\", \\\"Yes\\\", \\\"No\\\"))\\n| extend source = case(type =~ \\\"microsoft.security/assessments\\\", tostring(properties.resourceDetails.Source), \\\"\\\")\\n| extend resourceId = trim(\\\" \\\", tolower(tostring(case(source =~ \\\"azure\\\", properties.resourceDetails.Id,\\n source =~ \\\"aws\\\" and isnotempty(tostring(properties.resourceDetails.ConnectorId)), properties.resourceDetails.Id,\\n source =~ \\\"aws\\\", properties.resourceDetails.AzureResourceId,\\n source =~ \\\"gcp\\\", properties.resourceDetails.AzureResourceId,\\n type =~ \\\"microsoft.security/assessments\\\", extract(\\\"^(.+)/providers/Microsoft.Security/assessments/.+$\\\",1,id),extract(\\\"^(.+)/providers/Microsoft.Security/softwareInventories/.+$\\\",1,id)))))\\n| extend resourceName = iff(source =~ \\\"aws\\\" and isnotempty(tostring(properties.resourceDetails.ConnectorId)), tostring(properties.additionalData.ResourceName), extract(@\\\"(.+)/(.+)\\\", 2, resourceId))\\n| extend regexResourceId = extract_all(@\\\"/providers/([^/]+)(?:/([^/]+)/[^/]+(?:/([^/]+)/[^/]+)?)?/([^/]+)/[^/]+$\\\", resourceId)\\n| extend RegexResourceType = regexResourceId[0]\\n| extend mainType = RegexResourceType[1], extendedType = RegexResourceType[2], resourceType = RegexResourceType[3]\\n| extend providerName = RegexResourceType[0],\\n mainType = case(mainType !~ \\\"\\\", strcat(\\\"/\\\",mainType), \\\"\\\"),\\n extendedType = case(extendedType!~ \\\"\\\", strcat(\\\"/\\\",extendedType), \\\"\\\"),\\n resourceType = case(resourceType!~ \\\"\\\", strcat(\\\"/\\\",resourceType), \\\"\\\")\\n| extend array = split(resourceId, '/')\\n| extend typeFullPath = case(\\n array_length(array) == 3, 'subscription',\\n array_length(array) == 5, 'resourcegroups',\\n source =~ \\\"aws\\\" and isnotempty(tostring(properties.resourceDetails.ConnectorId)), tolower(strcat(providerName, mainType, \\\"/\\\", tostring(properties.additionalData.ResourceProvider), tostring(properties.additionalData.ResourceType))),\\n strcat(providerName, mainType, extendedType, resourceType))\\n| extend resourceType = case(typeFullPath =~ 'resourcegroups' or typeFullPath =~ 'subscription', typeFullPath, tolower(trim(\\\"/\\\", resourceType)))\\n| extend assessmentKey = case(type =~ \\\"microsoft.security/assessments\\\", tostring(name), \\\"\\\")\\n| extend softwareVendorName = case(type =~ \\\"microsoft.security/softwareInventories\\\", tostring(properties.vendor), \\\"\\\")\\n| extend softwareName = case(type =~ \\\"microsoft.security/softwareInventories\\\", tostring(properties.softwareName), \\\"\\\")\\n| extend softwareVersion = case(type =~ \\\"microsoft.security/softwareInventories\\\", tostring(properties.version), \\\"\\\")\\n| extend softwareNameIdentifier = case(type =~ \\\"microsoft.security/softwareInventories\\\", strcat(softwareVendorName, \\\",\\\", softwareName, \\\",\\\", softwareVersion), \\\"\\\")\\n| extend environment = case(type =~ \\\"microsoft.security/assessments\\\", properties.resourceDetails[\\\"Source\\\"], \\\"\\\")\\n| extend environment = case(environment =~ \\\"onpremise\\\", tolower(\\\"Non-Azure\\\"), tolower(environment))\\n| extend osTypeProperty = properties.additionalData[\\\"OS Type\\\"]\\n| extend osType = case(isnotempty(osTypeProperty), osTypeProperty, \\\"\\\")\\n| extend hasAgent = case(assessmentKey == \\\"d1db3318-01ff-16de-29eb-28b344515626\\\" or assessmentKey == \\\"45cfe080-ceb1-a91e-9743-71551ed24e94\\\" or assessmentKey == \\\"720a3e77-0b9a-4fa9-98b6-ddf0fd7e32c1\\\" or assessmentKey == \\\"27ac71b1-75c5-41c2-adc2-858f5db45b08\\\", assessmentStatusCode, \\\"\\\")\\n| extend hasAgent = case(assessmentKey == \\\"4ab6e3c5-74dd-8b35-9ab9-f61b30875b27\\\" or assessmentKey == \\\"181ac480-f7c4-544b-9865-11b8ffe87f47\\\" or assessmentKey == \\\"4fb67663-9ab9-475d-b026-8c544cced439\\\" , \\\"healthy\\\", hasAgent)\\n| extend workspaceAzureResourceId = case(hasAgent !~ \\\"\\\", properties.additionalData[\\\"Reporting workspace azure id\\\"], \\\"\\\")\\n| extend workspaceName = case(workspaceAzureResourceId !~ \\\"\\\", extract(@\\\"(.+)/(.+)\\\", 2, workspaceAzureResourceId), \\\"\\\")\\n| extend assessmentDisplayName = case(type =~ \\\"microsoft.security/assessments\\\", case(isnotempty(properties.displayName), properties.displayName, properties.metadata.displayName), \\\"\\\")\\n| extend assessmentIdentifier = case(type =~ \\\"microsoft.security/assessments\\\", strcat(assessmentKey, \\\",\\\" , assessmentDisplayName, \\\",\\\", severity), \\\"\\\")\\n| summarize assessmentsCount = count() , assessmentsIdentifier = make_list(assessmentIdentifier), softwareNamesIdentifier = make_list(softwareNameIdentifier), hasAgent = max(hasAgent), workspaceName = max(workspaceName), environment = max(environment), osType = max(osType), exemptionType = max(exemptionType) by resourceId, subscriptionId, resourceName, resourceType, typeFullPath, severity\\n| extend packAssessments = pack(severity, assessmentsCount)\\n| summarize assessmentsSummary = make_bag(packAssessments), assessmentsIdentifier = make_set(assessmentsIdentifier), softwareNamesIdentifier = make_set(softwareNamesIdentifier), hasAgent = max(hasAgent), workspaceName= max(workspaceName), environment = max(environment), osType= max(osType), exemptionType = max(exemptionType) by resourceId, subscriptionId, resourceName, resourceType, typeFullPath\\n| extend agentMonitoring = case(hasAgent =~ \\\"NotApplicable\\\" or hasAgent =~ \\\"\\\", '',\\n hasAgent =~ \\\"Unhealthy\\\", \\\"notInstalled\\\",\\n \\\"installed\\\")\\n| join kind=leftouter (\\n securityresources\\n | where type =~ \\\"microsoft.security/pricings\\\"\\n | project subscriptionId, bundleName = tolower(name), freeTrialRemainingTime = properties.freeTrialRemainingTime, pricingTier = tolower(properties.pricingTier)\\n | extend bundlesPricing = pack(bundleName, pricingTier)\\n | summarize subscriptionPricing = make_bag(bundlesPricing) by subscriptionId\\n ) on subscriptionId\\n| extend hasNoSoftwareData = case(array_length(softwareNamesIdentifier) == 1, case(set_has_element(softwareNamesIdentifier, \\\"\\\"), true, false), false)\\n| extend softwareNamesIdentifier = case(hasNoSoftwareData, softwareNamesIdentifier, set_difference(softwareNamesIdentifier, pack_array(\\\"\\\")))\\n| extend AssessmentsHigh = case(isnull(assessmentsSummary.high), 0 , toint(assessmentsSummary.high))\\n| extend AssessmentsMedium = case(isnull(assessmentsSummary.medium), 0 , toint(assessmentsSummary.medium))\\n| extend AssessmentsLow = case(isnull(assessmentsSummary.low), 0 , toint(assessmentsSummary.low))\\n| extend unhealthyAssessmentsCount = AssessmentsHigh + AssessmentsMedium + AssessmentsLow\\n| extend virtualmachines = case(isnull(subscriptionPricing), '' , subscriptionPricing.virtualmachines)\\n| extend virtualmachines = case(virtualmachines == 'free', 'off', 'on')\\n| extend sqlservers = case(isnull(subscriptionPricing), '' , subscriptionPricing.sqlservers)\\n| extend sqlservers = case(sqlservers == 'free', 'off', 'on')\\n| extend kubernetesservice = case(isnull(subscriptionPricing), '' , subscriptionPricing.kubernetesservice)\\n| extend kubernetesservice = case(kubernetesservice == 'free', 'off', 'on')\\n| extend containerregistry = case(isnull(subscriptionPricing), '' , subscriptionPricing.containerregistry)\\n| extend containerregistry = case(containerregistry == 'free', 'off', 'on')\\n| extend connectedcontainerregistry = case(isnull(subscriptionPricing), '' , subscriptionPricing.connectedcontainerregistry)\\n| extend connectedcontainerregistry = case(connectedcontainerregistry == 'free', 'off', 'on')\\n| extend sqlservervirtualmachines = case(isnull(subscriptionPricing), '' , subscriptionPricing.sqlservervirtualmachines)\\n| extend sqlservervirtualmachines = case(sqlservervirtualmachines == 'free', 'off', 'on')\\n| extend appservices = case(isnull(subscriptionPricing), '' , subscriptionPricing.appservices)\\n| extend appservices = case(appservices == 'free', 'off', 'on')\\n| extend storageaccounts = case(isnull(subscriptionPricing), '' , subscriptionPricing.storageaccounts)\\n| extend storageaccounts = case(storageaccounts == 'free', 'off', 'on')\\n| extend keyvaults = case(isnull(subscriptionPricing), '' , subscriptionPricing.keyvaults)\\n| extend keyvaults = case(keyvaults == 'free', 'off', 'on')\\n| extend opensourcerelationaldatabases = case(isnull(subscriptionPricing), '' , subscriptionPricing.opensourcerelationaldatabases)\\n| extend opensourcerelationaldatabases = case(opensourcerelationaldatabases == 'free', 'off', 'on')\\n| extend calculatedSubscriptionPricing = case(resourceType =~ \\\"subscription\\\" and isempty(subscriptionPricing) == false , iff(subscriptionPricing has \\\"free\\\" and subscriptionPricing has \\\"standard\\\", \\\"partial\\\", iff(subscriptionPricing has \\\"free\\\", \\\"off\\\", \\\"on\\\")), \\\"\\\")\\n| extend resourcePricing = case(typeFullPath =~ \\\"microsoft.classiccompute/virtualmachines\\\", virtualmachines, typeFullPath =~ \\\"microsoft.compute/virtualmachines\\\", virtualmachines, typeFullPath =~ \\\"microsoft.hybridcompute/machines\\\", virtualmachines, typeFullPath =~ \\\"microsoft.sql/servers\\\", sqlservers, typeFullPath =~ \\\"microsoft.containerservice/managedclusters\\\", kubernetesservice, typeFullPath =~ \\\"microsoft.kubernetes/connectedclusters\\\", kubernetesservice, typeFullPath =~ \\\"microsoft.containerregistry/registries\\\", containerregistry, typeFullPath =~ \\\"microsoft.security/connectedcontainerregistries\\\", connectedcontainerregistry, typeFullPath =~ \\\"microsoft.sqlvirtualmachine/sqlvirtualmachines\\\", sqlservervirtualmachines, typeFullPath =~ \\\"microsoft.web/sites\\\", appservices, typeFullPath =~ \\\"microsoft.storage/storageaccounts\\\", storageaccounts, typeFullPath =~ \\\"microsoft.compute/virtualmachinescalesets\\\", virtualmachines, typeFullPath =~ \\\"microsoft.keyvault/vaults\\\", keyvaults, typeFullPath =~ \\\"microsoft.dbforpostgresql/servers\\\", opensourcerelationaldatabases, typeFullPath =~ \\\"microsoft.dbformysql/servers\\\", opensourcerelationaldatabases, typeFullPath =~ \\\"microsoft.dbformariadb/servers\\\", opensourcerelationaldatabases, calculatedSubscriptionPricing)\\n| extend pricing = case(resourceType =~ \\\"subscription\\\" , calculatedSubscriptionPricing , resourcePricing)\\n| extend selectedSoftware = \\\"\\\"\\n| project resourceType, exemptionType, typeFullPath, resourceId, resourceName, subscriptionId, environment, osType, workspaceName, agentMonitoring, assessmentsIdentifier, assessmentsSummary, subscriptionPricing, unhealthyAssessmentsCount, pricing, softwareNamesIdentifier, selectedSoftware\\n| extend resourceGroup = tolower(tostring(split(resourceId, \\\"/\\\")[4]))\\n| order by unhealthyAssessmentsCount, subscriptionId, resourceType, resourceId\\n| where typeFullPath in ('microsoft.compute/virtualmachines', 'microsoft.hybridcompute/machines')\\n| where isnotempty(resourceId)\",\"size\":3,\"showAnalytics\":true,\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\",\"crossComponentResources\":[\"value::all\"],\"visualization\":\"table\",\"showExpandCollapseGrid\":true,\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"resourceType\",\"formatter\":5},{\"columnMatch\":\"exemptionType\",\"formatter\":5},{\"columnMatch\":\"typeFullPath\",\"formatter\":5},{\"columnMatch\":\"resourceName\",\"formatter\":5},{\"columnMatch\":\"agentMonitoring\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"icons\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"installed\",\"representation\":\"success\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Unhealthy\",\"representation\":\"2\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"NotApplicable\",\"representation\":\"cancelled\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"notInstalled\",\"representation\":\"disabled\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"thresholdValue\":null,\"representation\":\"Disable\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"assessmentsIdentifier\",\"formatter\":5},{\"columnMatch\":\"assessmentsSummary\",\"formatter\":5},{\"columnMatch\":\"subscriptionPricing\",\"formatter\":5},{\"columnMatch\":\"unhealthyAssessmentsCount\",\"formatter\":3,\"formatOptions\":{\"min\":0,\"max\":15,\"palette\":\"greenRed\"}},{\"columnMatch\":\"pricing\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"icons\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"on\",\"representation\":\"success\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"off\",\"representation\":\"disabled\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"thresholdValue\":null,\"representation\":\"disabled\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"softwareNamesIdentifier\",\"formatter\":5},{\"columnMatch\":\"selectedSoftware\",\"formatter\":5},{\"columnMatch\":\"resourceGroup\",\"formatter\":5}],\"rowLimit\":1000,\"filter\":true,\"sortBy\":[{\"itemKey\":\"$gen_link_resourceId_3\",\"sortOrder\":2}],\"labelSettings\":[{\"columnId\":\"exemptionType\",\"label\":\"Resource Exemption exists\"},{\"columnId\":\"resourceId\",\"label\":\"Resource ID\"},{\"columnId\":\"subscriptionId\",\"label\":\"Subscription ID\"},{\"columnId\":\"environment\",\"label\":\"Environment\"},{\"columnId\":\"osType\",\"label\":\"OS Type\"},{\"columnId\":\"workspaceName\",\"label\":\"Workspace Name\"},{\"columnId\":\"agentMonitoring\",\"label\":\"Log Analytics agent status\"},{\"columnId\":\"unhealthyAssessmentsCount\",\"label\":\"Open Recommendations\"},{\"columnId\":\"pricing\",\"label\":\"Azure Defender status\"}]},\"sortBy\":[{\"itemKey\":\"$gen_link_resourceId_3\",\"sortOrder\":2}]},\"name\":\"query - 0\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"SelectedTab\",\"comparison\":\"isEqualTo\",\"value\":\"SecurityTab\"},\"name\":\"protectionStatus\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"selectedTab\",\"comparison\":\"isEqualTo\",\"value\":\"Security\"},\"name\":\"Security\"}],\"isLocked\":false,\"fallbackResourceIds\":[\"workbookresourceid-stage\"]}", + "serializedData": "{\"version\":\"Notebook/1.0\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Jumpstart ArcBox Workbook DataOps\\r\\n\\r\\nKeep track of your ArcBox resources by selecting one of the tabs below:\\r\\n____________________________________________________________________________________________________\\r\\n\"},\"name\":\"text - 3\"},{\"type\":11,\"content\":{\"version\":\"LinkItem/1.0\",\"style\":\"tabs\",\"links\":[{\"id\":\"001e53e2-be76-428e-9081-da7ce60368d4\",\"cellValue\":\"selectedTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Inventory\",\"subTarget\":\"Inventory\",\"style\":\"link\"},{\"id\":\"547c6d68-f351-4898-bd7f-de56cd1ea984\",\"cellValue\":\"selectedTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Monitoring\",\"subTarget\":\"Monitoring\",\"style\":\"link\"},{\"id\":\"942dd542-ac90-4ee4-bb5d-477c931c05b4\",\"cellValue\":\"selectedTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Security\",\"subTarget\":\"Security\",\"style\":\"link\"}]},\"customWidth\":\"100\",\"name\":\"links - 7\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"\"},\"name\":\"text - 4\"},{\"type\":1,\"content\":{\"json\":\"## Jumpstart ArcBox Metrics and Alerts\\r\\n\\r\\n💡 Select your Azure ArcBox subscription and Resource Group to see more information.\"},\"name\":\"text - 1\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"crossComponentResources\":[\"{subscriptionId}\"],\"parameters\":[{\"id\":\"1f74ed9a-e3ed-498d-bd5b-f68f3836a117\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"subscriptionId\",\"label\":\"Subscriptions\",\"type\":6,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"value\":[\"value::all\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"includeAll\":true,\"showDefault\":false}},{\"id\":\"b616a3a3-4271-4208-b1a9-a92a78efed08\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"resourceGroup\",\"label\":\"Resource groups\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"Resources\\r\\n| summarize by resourceGroup\\r\\n| order by resourceGroup asc\\r\\n| project id=resourceGroup, resourceGroup\",\"crossComponentResources\":[\"{subscriptionId}\"],\"value\":[\"value::all\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"},{\"id\":\"0e85e0e4-a7e8-4ea8-b291-e444c317843a\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"ResourceTypes\",\"label\":\"Resource types\",\"type\":7,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"value\":[\"value::all\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"includeAll\":true,\"selectAllValue\":\"*\",\"showDefault\":false}},{\"id\":\"f60ea0a0-3703-44ca-a59b-df0246423f41\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Resources\",\"type\":5,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"Resources\\r\\n| where \\\"*\\\" in ({ResourceTypes}) or type in~({ResourceTypes})\\r\\n| where '*' in~({resourceGroup}) or resourceGroup in~({resourceGroup}) \\r\\n| order by name asc\\r\\n| extend Rank = row_number()\\r\\n| project value = id, label = name, selected = Rank <= 10, group = resourceGroup\",\"crossComponentResources\":[\"{subscriptionId}\"],\"value\":[\"value::all\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"},{\"id\":\"015d1a5e-357f-4e01-ac77-598e7b493db0\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"timeRange\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":3600000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000}],\"allowCustom\":true}},{\"id\":\"bd6d6075-dc8f-43d3-829f-7e2245a3eb21\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"State\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"{\\\"version\\\":\\\"1.0.0\\\",\\\"content\\\":\\\"[ \\\\r\\\\n {\\\\\\\"id\\\\\\\":\\\\\\\"New\\\\\\\", \\\\\\\"label\\\\\\\": \\\\\\\"New\\\\\\\"},\\\\r\\\\n {\\\\\\\"id\\\\\\\":\\\\\\\"Acknowledged\\\\\\\", \\\\\\\"label\\\\\\\": \\\\\\\"Acknowledged\\\\\\\"},\\\\r\\\\n {\\\\\\\"id\\\\\\\":\\\\\\\"Closed\\\\\\\", \\\\\\\"label\\\\\\\": \\\\\\\"Closed\\\\\\\"}\\\\r\\\\n]\\\",\\\"transformers\\\":null}\",\"crossComponentResources\":[\"{Subscription}\"],\"value\":[\"value::all\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"queryType\":8}],\"style\":\"above\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"},\"name\":\"parameters\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"AlertsManagementResources | where type =~ 'microsoft.alertsmanagement/alerts'\\r\\n| where todatetime(properties.essentials.startDateTime) {timeRange} \\r\\n| where \\\"*\\\" in ({resourceGroup}) or properties.essentials.targetResourceGroup in~ ({resourceGroup})\\r\\n| where \\\"*\\\" in ({ResourceTypes}) or properties.essentials.targetResourceType in~ ({ResourceTypes})\\r\\n| where \\\"*\\\" in ({Resources}) or properties.essentials.targetResource in~ ({Resources})\\r\\n| extend State=tostring(properties.essentials.alertState)\\r\\n| where \\\"*\\\" in ({State}) or State in ({State})\\r\\n| summarize Count=count(), New=countif(State==\\\"New\\\"), \\r\\nAcknowledged=countif(State==\\\"Acknowledged\\\"), \\r\\nClosed=countif(State==\\\"Closed\\\") \\r\\nby Severity=tostring(properties.essentials.severity)\\r\\n| order by Severity asc\",\"size\":3,\"title\":\"Alert Summary\",\"noDataMessage\":\"No alerts found\",\"exportMultipleValues\":true,\"exportedParameters\":[{\"fieldName\":\"Severity\",\"parameterName\":\"Severity\",\"parameterType\":1}],\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\",\"crossComponentResources\":[\"{subscriptionId}\"],\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":11},{\"columnMatch\":\"Count\",\"formatter\":3,\"formatOptions\":{\"min\":0,\"palette\":\"blue\",\"aggregation\":\"Sum\"},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2}}},{\"columnMatch\":\"State\",\"formatter\":1}]}},\"showPin\":true,\"name\":\"query - 6\"},{\"type\":1,\"content\":{\"json\":\"## Azure Arc-enabled Kubernetes\"},\"name\":\"text - 9\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"crossComponentResources\":[\"{resource}\"],\"parameters\":[{\"id\":\"e2b5cd30-7276-477f-a6bb-07da25ba5e5f\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"timeRange\",\"label\":\"Time Range\",\"type\":4,\"description\":\"Filter data by time range\",\"isRequired\":true,\"value\":{\"durationMs\":7776000000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true}},{\"id\":\"b8b76ad0-de1a-4b7c-90a8-f4eb277bb878\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"subscription\",\"label\":\"Subscription\",\"type\":6,\"value\":null,\"typeSettings\":{\"additionalResourceOptions\":[],\"includeAll\":true,\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\"},{\"id\":\"6b8d59ca-08c5-40fb-9962-5061b3e6e779\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"workspaceName\",\"label\":\"Log Analytics Workspace\",\"type\":5,\"query\":\"resources\\r\\n| where type contains 'microsoft.operationalinsights/workspaces'\\r\\n| project id\",\"crossComponentResources\":[\"{subscription}\"],\"value\":\"\",\"typeSettings\":{\"additionalResourceOptions\":[],\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"},{\"id\":\"7aa94d19-4c5b-40e2-b14f-e29736a8f90c\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"resource\",\"label\":\"Azure Arc-enabled K8S cluster\",\"type\":5,\"query\":\" Resources\\r\\n | where type =~ 'microsoft.kubernetes/connectedclusters'\\r\\n | project id\",\"crossComponentResources\":[\"{subscription}\"],\"typeSettings\":{\"additionalResourceOptions\":[],\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\",\"value\":\"\"},{\"id\":\"3a3fdabe-6173-4e2b-8658-38c0195fd7e2\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"resourceType\",\"type\":7,\"isRequired\":true,\"query\":\"{\\\"version\\\":\\\"1.0.0\\\",\\\"content\\\":\\\"\\\\\\\"{resource:resourcetype}\\\\\\\"\\\",\\\"transformers\\\":null}\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::1\"],\"showDefault\":false},\"defaultValue\":\"value::1\",\"queryType\":8},{\"id\":\"9767de49-ba31-4847-9ffc-714c02e7523c\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"clusterId\",\"type\":1,\"description\":\"Filter workspace by cluster id\",\"isHiddenWhenLocked\":true,\"timeContext\":{\"durationMs\":14400000},\"timeContextFromParameter\":\"timeRange\"},{\"id\":\"cba109cf-db6e-4261-8d3a-fe038593622d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"clusterIdWhereClause\",\"type\":1,\"description\":\"Add to queries to filter by cluster id\",\"isHiddenWhenLocked\":true,\"criteriaData\":[{\"criteriaContext\":{\"leftOperand\":\"resourceType\",\"operator\":\"contains\",\"rightValType\":\"static\",\"rightVal\":\"microsoft.operationalinsights/workspaces\",\"resultValType\":\"static\",\"resultVal\":\"| where ClusterId =~ '{clusterId}'\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"param\",\"resultValType\":\"static\",\"resultVal\":\"| where \\\"a\\\" == \\\"a\\\"\"}}],\"timeContext\":{\"durationMs\":14400000},\"timeContextFromParameter\":\"timeRange\"},{\"id\":\"ee080bd8-83dc-4fa0-b688-b2f16b956b92\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"workloadType\",\"label\":\"Workload Type\",\"type\":2,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"KubePodInventory\\r\\n{clusterIdWhereClause}\\r\\n| distinct ControllerKind\\r\\n| where isempty(ControllerKind) == false\\r\\n| order by ControllerKind asc\",\"crossComponentResources\":[\"{resource}\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.kubernetes/connectedclusters\"},{\"id\":\"cf611d4b-aa93-4949-a7a1-c1d174af29ca\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"workloadKindWhereClause\",\"type\":1,\"isHiddenWhenLocked\":true,\"criteriaData\":[{\"condition\":\"if (workloadType is not empty ), result = '| where ControllerKind in ({workloadType})'\",\"criteriaContext\":{\"leftOperand\":\"workloadType\",\"operator\":\"isNotNull\",\"rightValType\":\"static\",\"rightVal\":\"unset\",\"resultValType\":\"static\",\"resultVal\":\"| where ControllerKind in ({workloadType})\"}},{\"condition\":\"else result = '| where \\\"a\\\" == \\\"a\\\"'\",\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"param\",\"resultValType\":\"static\",\"resultVal\":\"| where \\\"a\\\" == \\\"a\\\"\"}}],\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\"},{\"id\":\"034caae5-bee3-4b66-8f80-c120a2a25c77\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"namespace\",\"label\":\"Namespace\",\"type\":2,\"description\":\"Filter the workbook by namespace\",\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"KubePodInventory\\r\\n{clusterIdWhereClause}\\r\\n{workloadKindWhereClause}\\r\\n| distinct Namespace\\r\\n| where isnotempty(Namespace)\\r\\n| order by Namespace asc\",\"crossComponentResources\":[\"{Workspace}\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},{\"id\":\"faeee248-e4c3-4fae-b435-ef5fb6dabe3b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"namespaceWhereClause\",\"type\":1,\"isHiddenWhenLocked\":true,\"criteriaData\":[{\"condition\":\"if (namespace is not empty ), result = '| where Namespace in ({namespace})'\",\"criteriaContext\":{\"leftOperand\":\"namespace\",\"operator\":\"isNotNull\",\"rightValType\":\"static\",\"rightVal\":\"unset\",\"resultValType\":\"static\",\"resultVal\":\"| where Namespace in ({namespace})\"}},{\"condition\":\"else result = '| where \\\"a\\\" == \\\"a\\\"'\",\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"param\",\"resultValType\":\"static\",\"resultVal\":\"| where \\\"a\\\" == \\\"a\\\"\"}}],\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\"},{\"id\":\"8943e259-1dde-44cd-a00b-e815eea9de34\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"workloadName\",\"label\":\"Workload Name\",\"type\":2,\"description\":\"Filter the data for a particular workload\",\"isRequired\":true,\"query\":\"KubePodInventory\\r\\n{clusterIdWhereClause}\\r\\n{namespaceWhereClause}\\r\\n{workloadKindWhereClause}\\r\\n| distinct ControllerName\\r\\n| where isnotempty(ControllerName)\\r\\n| order by ControllerName asc\",\"crossComponentResources\":[\"{resource}\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::1\"],\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"defaultValue\":\"value::1\",\"queryType\":0,\"resourceType\":\"microsoft.kubernetes/connectedclusters\"},{\"id\":\"00a9be6c-ab0b-400b-b195-9775a47ecddd\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"podStatus\",\"label\":\"Pod Status\",\"type\":2,\"description\":\"Filter by Pod status like Pending/Running/Failed etc.\",\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"KubePodInventory\\r\\n{clusterIdWhereClause}\\r\\n| where ControllerName == '{workloadName}'\\r\\n| distinct PodStatus\\r\\n| where isnotempty(PodStatus)\\r\\n| order by PodStatus asc\",\"crossComponentResources\":[\"{resource}\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"timeContext\":{\"durationMs\":14400000},\"timeContextFromParameter\":\"timeRange\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"{resourceType}\",\"value\":[\"value::all\"]},{\"id\":\"388ea6aa-12d8-485a-8e80-b4d7b8994bd8\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"podStatusWhereClause\",\"type\":1,\"isHiddenWhenLocked\":true,\"criteriaData\":[{\"criteriaContext\":{\"leftOperand\":\"podStatus\",\"operator\":\"isNotNull\",\"rightValType\":\"static\",\"rightVal\":\"unset\",\"resultValType\":\"static\",\"resultVal\":\"| where PodStatus in ({podStatus})\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"param\",\"resultValType\":\"static\",\"resultVal\":\"| where \\\"a\\\" == \\\"a\\\"\"}}],\"timeContext\":{\"durationMs\":2592000000},\"timeContextFromParameter\":\"timeRange\"},{\"id\":\"64de23e6-96b5-4105-b65d-36e40f73f4ec\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"podName\",\"label\":\"Pod Name\",\"type\":2,\"description\":\"Filter by pod name \",\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"KubePodInventory\\r\\n{clusterIdWhereClause}\\r\\n| where ControllerName == '{workloadName:value}'\\r\\n{podStatusWhereClause}\\r\\n| summarize arg_max(TimeGenerated, PodStatus) by Name\\r\\n| project Name\\r\\n| where isempty(Name) == false\\r\\n| order by Name asc\",\"crossComponentResources\":[\"{resource}\"],\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"timeContext\":{\"durationMs\":14400000},\"timeContextFromParameter\":\"timeRange\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"{resourceType}\",\"value\":[\"value::all\"]},{\"id\":\"4f7059c2-ebd7-4fc2-86c4-c51e66703582\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"podNameWhereClause\",\"type\":1,\"isHiddenWhenLocked\":true,\"criteriaData\":[{\"condition\":\"if (podName is not empty ), result = '| where PodName in ({podName})'\",\"criteriaContext\":{\"leftOperand\":\"podName\",\"operator\":\"isNotNull\",\"rightValType\":\"static\",\"rightVal\":\"unset\",\"resultValType\":\"static\",\"resultVal\":\"| where PodName in ({podName})\"}},{\"condition\":\"else result = '| where \\\"a\\\" == \\\"a\\\"'\",\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"param\",\"resultValType\":\"static\",\"resultVal\":\"| where \\\"a\\\" == \\\"a\\\"\"}}],\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\"},{\"id\":\"e60298ff-36da-485e-acea-73c0692b8446\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"workloadNamespaceText\",\"type\":1,\"description\":\"For displaying name space of the selected workload\",\"query\":\"KubePodInventory\\r\\n{clusterIdWhereClause}\\r\\n{namespaceWhereClause}\\r\\n| where ControllerName == '{workloadName}'\\r\\n| summarize Namespaces=make_set(Namespace)\\r\\n| extend Namespaces = strcat_array(Namespaces, ', ')\",\"crossComponentResources\":[\"{resource}\"],\"isHiddenWhenLocked\":true,\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"queryType\":0,\"resourceType\":\"{resourceType}\"},{\"id\":\"9f8d0d65-d7bc-42c9-bc5c-b394288b5216\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"workloadTypeText\",\"type\":1,\"description\":\"For displaying workload type of the selected workload\",\"query\":\"KubePodInventory\\r\\n{clusterIdWhereClause}\\r\\n{workloadKindWhereClause}\\r\\n| where ControllerName == '{workloadName}'\\r\\n| summarize ControllerKinds=make_set(ControllerKind)\\r\\n| extend ControllerKinds = strcat_array(ControllerKinds, ', ')\",\"crossComponentResources\":[\"{resource}\"],\"isHiddenWhenLocked\":true,\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"queryType\":0,\"resourceType\":\"{resourceType}\"}],\"style\":\"above\",\"queryType\":0,\"resourceType\":\"microsoft.kubernetes/connectedclusters\"},\"name\":\"pills\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"55cc0c6d-51df-4e58-9543-c8b21bc71e29\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"podTileStatusWhereClause\",\"type\":1,\"isHiddenWhenLocked\":true,\"criteriaData\":[{\"criteriaContext\":{\"leftOperand\":\"podStatusTileText\",\"operator\":\"!=\",\"rightValType\":\"static\",\"rightVal\":\"All\",\"resultValType\":\"static\",\"resultVal\":\"| where PodStatus == '{podStatusTileText}'\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"param\",\"resultValType\":\"static\",\"resultVal\":\"| where \\\"a\\\" == \\\"a\\\"\"}}],\"timeContext\":{\"durationMs\":14400000},\"timeContextFromParameter\":\"timeRange\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"conditionalVisibility\":{\"parameterName\":\"selectedTab\",\"comparison\":\"isEqualTo\",\"value\":\"asas\"},\"name\":\"pod-status-tile-text\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"let endDateTime = {timeRange:end};\\r\\nlet startDateTime = {timeRange:start};\\r\\nlet trendBinSize = {timeRange:grain};\\r\\nlet controllerName= '{workloadName}';\\r\\nKubePodInventory\\r\\n| where TimeGenerated >= startDateTime\\r\\n| where TimeGenerated < endDateTime\\r\\n{clusterIdWhereClause}\\r\\n{workloadKindWhereClause}\\r\\n{namespaceWhereClause}\\r\\n| where isnotempty(ClusterName)\\r\\n| where isnotempty(Namespace)\\r\\n| where ControllerName == controllerName\\r\\n| extend PodName = Name\\r\\n{podStatusWhereClause}\\r\\n{podTileStatusWhereClause}\\r\\n{podNameWhereClause}\\r\\n| summarize PodRestartCount=max(PodRestartCount) by PodName, bin(TimeGenerated, trendBinSize)\\r\\n| order by PodName asc nulls last, TimeGenerated asc\\r\\n| serialize \\r\\n| extend prevValue=iif(prev(PodName) == PodName, prev(PodRestartCount), PodRestartCount)\\r\\n| extend RestartCount=PodRestartCount - prevValue\\r\\n| extend RestartCount=iif(RestartCount < 0, 0, RestartCount) \\r\\n| project TimeGenerated, PodName, RestartCount\\r\\n| render timechart\",\"size\":0,\"aggregation\":5,\"showAnalytics\":true,\"title\":\"Azure Arc-enabled kubernetes - Pod Restart Trend\",\"timeContextFromParameter\":\"timeRange\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"]},\"customWidth\":\"50\",\"showPin\":true,\"name\":\"pod-restart-trend-chart\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"let endDateTime = {timeRange:end};\\r\\nlet startDateTime = {timeRange:start};\\r\\nlet trendBinSize = {timeRange:grain};\\r\\nlet controllerName= '{workloadName:value}';\\r\\nKubePodInventory\\r\\n| where TimeGenerated >= startDateTime\\r\\n| where TimeGenerated < endDateTime\\r\\n{clusterIdWhereClause}\\r\\n{workloadKindWhereClause}\\r\\n{namespaceWhereClause}\\r\\n| where isnotempty(ClusterName)\\r\\n| where isnotempty(Namespace)\\r\\n| where ControllerName == controllerName\\r\\n| extend PodName = Name\\r\\n{podStatusWhereClause}\\r\\n{podTileStatusWhereClause}\\r\\n{podNameWhereClause}\\r\\n| extend ContainerName=tostring(split(ContainerName, '/')[1])\\r\\n| where isempty(ContainerName) == false\\r\\n| summarize ContainerRestartCount=sum(ContainerRestartCount) by ContainerName, bin(TimeGenerated, 1tick)\\r\\n| order by ContainerName asc nulls last, TimeGenerated asc\\r\\n| serialize \\r\\n| extend prevValue=iif(prev(ContainerName) == ContainerName, prev(ContainerRestartCount), ContainerRestartCount)\\r\\n| extend RestartCount=ContainerRestartCount - prevValue\\r\\n| extend RestartCount=iif(RestartCount < 0, 0, RestartCount) \\r\\n| project TimeGenerated, ContainerName, RestartCount\\r\\n| summarize RestartCount=sum(RestartCount) by ContainerName, bin(TimeGenerated, trendBinSize)\",\"size\":0,\"aggregation\":5,\"showAnalytics\":true,\"title\":\"Azure Arc-enabled kubernetes - Container restart trend\",\"timeContextFromParameter\":\"timeRange\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"visualization\":\"timechart\"},\"customWidth\":\"50\",\"showPin\":true,\"name\":\"container-restart-trend-chart\",\"styleSettings\":{\"showBorder\":true}},{\"type\":10,\"content\":{\"chartId\":\"workbook3e0e301c-50cf-4e53-ac2a-40f5eed823a0\",\"version\":\"MetricsItem/2.0\",\"size\":0,\"chartType\":2,\"resourceType\":\"microsoft.kubernetes/connectedclusters\",\"metricScope\":0,\"resourceParameter\":\"resource\",\"resourceIds\":[\"{resource}\"],\"timeContext\":{\"durationMs\":3600000},\"metrics\":[{\"namespace\":\"insights.container/pods\",\"metric\":\"insights.container/pods--PodCount\",\"aggregation\":4,\"splitBy\":null}],\"title\":\"Azure Arc-enabled kubernetes - Pod Count\",\"gridSettings\":{\"rowLimit\":10000}},\"customWidth\":\"50\",\"name\":\"metric - 19\"},{\"type\":10,\"content\":{\"chartId\":\"workbook167c4490-9cde-4fcd-be0f-401070f13ccd\",\"version\":\"MetricsItem/2.0\",\"size\":0,\"chartType\":2,\"resourceType\":\"microsoft.kubernetes/connectedclusters\",\"metricScope\":0,\"resourceParameter\":\"resource\",\"resourceIds\":[\"{resource}\"],\"timeContext\":{\"durationMs\":3600000},\"metrics\":[{\"namespace\":\"insights.container/pods\",\"metric\":\"insights.container/pods--PodReadyPercentage\",\"aggregation\":4,\"splitBy\":null},{\"namespace\":\"insights.container/pods\",\"metric\":\"insights.container/pods--restartingContainerCount\",\"aggregation\":4}],\"title\":\"Azure Arc-enabled Kubernetes - Pod status\",\"gridSettings\":{\"rowLimit\":10000}},\"customWidth\":\"50\",\"name\":\"metric - 20\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"let endDateTime = {timeRange:end};\\r\\nlet startDateTime = {timeRange:start};\\r\\nlet trendBinSize = {timeRange:grain};\\r\\nlet controllerName= '{workloadName}';\\r\\nKubePodInventory\\r\\n| where TimeGenerated >= startDateTime\\r\\n| where TimeGenerated < endDateTime\\r\\n{clusterIdWhereClause}\\r\\n{workloadKindWhereClause}\\r\\n{namespaceWhereClause}\\r\\n| where isnotempty(ClusterName)\\r\\n| where isnotempty(Namespace)\\r\\n| extend PodName = Name\\r\\n{podStatusWhereClause}\\r\\n{podNameWhereClause}\\r\\n| where ControllerName == controllerName\\r\\n| extend InstanceName = strcat(ClusterId, '/', ContainerName),\\r\\n ContainerName = strcat(Name, '/', tostring(split(ContainerName, '/')[1]))\\r\\n| summarize arg_max(TimeGenerated, *) by ContainerName, Name\\r\\n{podTileStatusWhereClause}\\r\\n| extend ContainerLastStatus = todynamic(ContainerLastStatus) \\r\\n| project TimeGenerated, ContainerName, PodStatus, ContainerStatus, LastState=ContainerLastStatus.lastState, LastStateReason=ContainerLastStatus.reason, LastStateStartTime=ContainerLastStatus.startedAt,\\r\\nLastStateFinishTime=ContainerLastStatus.finishedAt\\r\\n\",\"size\":0,\"aggregation\":5,\"showAnalytics\":true,\"title\":\"Azure Arc-enabled kubernetes - Container Status for Pods\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"TimeGenerated\",\"formatter\":6,\"formatOptions\":{},\"dateFormat\":{\"showUtcTime\":null,\"formatName\":\"shortDateTimePattern\"}},{\"columnMatch\":\"PodStatus\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"icons\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Running\",\"representation\":\"success\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Pending\",\"representation\":\"pending\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Failed\",\"representation\":\"failed\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"thresholdValue\":null,\"representation\":\"Blank\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"ContainerStatus\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"icons\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Running\",\"representation\":\"success\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"waiting\",\"representation\":\"pending\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"thresholdValue\":null,\"representation\":\"success\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"LastState\",\"formatter\":0,\"formatOptions\":{},\"numberFormat\":{\"unit\":0,\"options\":{\"style\":\"decimal\"},\"emptyValCustomText\":\"-\"}},{\"columnMatch\":\"LastStateReason\",\"formatter\":0,\"formatOptions\":{},\"numberFormat\":{\"unit\":0,\"options\":{\"style\":\"decimal\"},\"emptyValCustomText\":\"-\"}},{\"columnMatch\":\"LastStateStartTime\",\"formatter\":6,\"formatOptions\":{},\"dateFormat\":{\"showUtcTime\":null,\"formatName\":\"shortDateTimePattern\"}},{\"columnMatch\":\"LastStateFinishTime\",\"formatter\":6,\"formatOptions\":{},\"dateFormat\":{\"showUtcTime\":null,\"formatName\":\"shortDateTimePattern\"}}]},\"sortBy\":[]},\"showPin\":true,\"name\":\"container-status-for-pods-chart\"},{\"type\":10,\"content\":{\"chartId\":\"workbook87327d65-b260-4473-9f2b-5d90b1100543\",\"version\":\"MetricsItem/2.0\",\"size\":0,\"chartType\":2,\"resourceType\":\"microsoft.kubernetes/connectedclusters\",\"metricScope\":0,\"resourceParameter\":\"resource\",\"resourceIds\":[\"{resource}\"],\"timeContext\":{\"durationMs\":2592000000},\"metrics\":[{\"namespace\":\"insights.container/nodes\",\"metric\":\"insights.container/nodes--cpuUsagePercentage\",\"aggregation\":4,\"splitBy\":null}],\"title\":\"Azure Arc-enabled kubernetes cluster - Node CPU usage %\",\"gridSettings\":{\"rowLimit\":10000}},\"customWidth\":\"50\",\"name\":\"metric - 17\"},{\"type\":10,\"content\":{\"chartId\":\"workbook2f202f95-1281-4077-a49b-31c3e3d3271b\",\"version\":\"MetricsItem/2.0\",\"size\":0,\"chartType\":2,\"resourceType\":\"microsoft.kubernetes/connectedclusters\",\"metricScope\":0,\"resourceParameter\":\"resource\",\"resourceIds\":[\"{resource}\"],\"timeContext\":{\"durationMs\":3600000},\"metrics\":[{\"namespace\":\"insights.container/nodes\",\"metric\":\"insights.container/nodes--memoryWorkingSetPercentage\",\"aggregation\":4,\"splitBy\":null}],\"title\":\"Azure Arc-enabled kubernetes cluster - Node memory working set %\",\"gridSettings\":{\"rowLimit\":10000}},\"customWidth\":\"50\",\"name\":\"metric - 18\"},{\"type\":1,\"content\":{\"json\":\"## Azure Arc-enabled SQL Managed Instance\"},\"name\":\"text - 18\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"crossComponentResources\":[\"{subscription}\"],\"parameters\":[{\"id\":\"be802690-79de-4708-8629-4c57b0d78085\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"subscriptionId\",\"label\":\"Subscription\",\"type\":6,\"value\":null,\"typeSettings\":{\"additionalResourceOptions\":[],\"includeAll\":true,\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\"},{\"id\":\"3bd2e749-7c3f-47fd-9f8a-7ab118be8850\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"workspaceName\",\"label\":\"Log Analytics Workspace\",\"type\":5,\"query\":\"resources\\r\\n| where type contains 'microsoft.operationalinsights/workspaces'\\r\\n| project id\",\"crossComponentResources\":[\"{subscription}\"],\"value\":null,\"typeSettings\":{\"additionalResourceOptions\":[],\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"},{\"id\":\"a308510f-a9f5-4ee4-a4b1-a175aa96b290\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"SQLMI\",\"label\":\"Azure Arc-enabled SQL MI\",\"type\":5,\"query\":\" Resources\\r\\n | where type =~ 'Microsoft.AzureArcData/sqlManagedInstances'\\r\\n | project id\",\"crossComponentResources\":[\"{subscription}\"],\"value\":null,\"typeSettings\":{\"additionalResourceOptions\":[],\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"timeRange\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"}],\"style\":\"above\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"},\"name\":\"pills - Copy\"},{\"type\":10,\"content\":{\"chartId\":\"789dd9d3-afbc-4440-8e31-7fe124f7b9ce\",\"version\":\"MetricsItem/2.0\",\"size\":0,\"chartType\":2,\"resourceType\":\"microsoft.azurearcdata/sqlmanagedinstances\",\"metricScope\":0,\"resourceParameter\":\"SQLMI\",\"resourceIds\":[\"{SQLMI}\"],\"timeContext\":{\"durationMs\":86400000},\"metrics\":[{\"namespace\":\"sql server\",\"metric\":\"sql server--CPU Usage: pod-0\",\"aggregation\":4,\"splitBy\":null}],\"title\":\"Azure Arc-enabled SQL MI - CPU usage\",\"gridSettings\":{\"rowLimit\":10000}},\"name\":\"metric - 0\"},{\"type\":10,\"content\":{\"chartId\":\"540fb39f-7903-4cc8-af49-679ee1f331fe\",\"version\":\"MetricsItem/2.0\",\"size\":0,\"chartType\":2,\"resourceType\":\"microsoft.azurearcdata/sqlmanagedinstances\",\"metricScope\":0,\"resourceParameter\":\"SQLMI\",\"resourceIds\":[\"{SQLMI}\"],\"timeContext\":{\"durationMs\":86400000},\"metrics\":[{\"namespace\":\"sql server\",\"metric\":\"sql server--Memory Usage: pod-0\",\"aggregation\":4,\"splitBy\":null}],\"gridSettings\":{\"rowLimit\":10000}},\"name\":\"metric - 0\"},{\"type\":10,\"content\":{\"chartId\":\"31b401d2-6d90-4a57-a61a-d6e458523448\",\"version\":\"MetricsItem/2.0\",\"size\":0,\"chartType\":2,\"resourceType\":\"microsoft.azurearcdata/sqlmanagedinstances\",\"metricScope\":0,\"resourceParameter\":\"SQLMI\",\"resourceIds\":[\"{SQLMI}\"],\"timeContext\":{\"durationMs\":86400000},\"metrics\":[{\"namespace\":\"sql server\",\"metric\":\"sql server--Transactions/second: pod-0\",\"aggregation\":4,\"splitBy\":null}],\"title\":\"Azure Arc-enabled SQL MI - Transactions per Second\",\"gridSettings\":{\"rowLimit\":10000}},\"name\":\"metric - 0\"}]},\"conditionalVisibility\":{\"parameterName\":\"selectedTab\",\"comparison\":\"isEqualTo\",\"value\":\"Monitoring\"},\"name\":\"Monitoring\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"## Jumpstart ArcBox resource inventory\\r\\n\\r\\n💡 Select your Azure ArcBox subscription and Resource Group to see more information.\"},\"name\":\"text - 4\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"crossComponentResources\":[\"{subscriptionId}\"],\"parameters\":[{\"id\":\"984514df-fff0-434c-a373-7090566e8c44\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"subscriptionId\",\"type\":6,\"value\":null,\"typeSettings\":{\"additionalResourceOptions\":[],\"includeAll\":true,\"showDefault\":false},\"timeContext\":{\"durationMs\":86400000},\"label\":\"Subscription\"},{\"id\":\"cb849a6b-937d-4e93-8d09-770554777009\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"resourceGroup\",\"label\":\"Resource Group\",\"type\":2,\"query\":\"Resources\\r\\n| summarize by resourceGroup\\r\\n| order by resourceGroup asc\\r\\n| project id=resourceGroup, resourceGroup\",\"crossComponentResources\":[\"{subscriptionId}\"],\"value\":\"arcboxdataops\",\"typeSettings\":{\"additionalResourceOptions\":[],\"showDefault\":false},\"timeContext\":{\"durationMs\":86400000},\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"},{\"id\":\"0fd9f40f-ffe0-4894-adc7-64866aa4b1e4\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"ResourceType\",\"label\":\"Resources\",\"type\":7,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"includeAll\":true,\"showDefault\":false},\"timeContext\":{\"durationMs\":86400000},\"value\":[\"value::all\"]}],\"style\":\"pills\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\"},\"name\":\"parameters - 1\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"Resources \\r\\n| where resourceGroup == \\\"{resourceGroup}\\\"\\r\\n| extend type = case(\\r\\ntype contains 'microsoft.netapp/netappaccounts', 'NetApp Accounts',\\r\\ntype contains \\\"microsoft.compute\\\", \\\"Azure Compute\\\",\\r\\ntype contains \\\"microsoft.logic\\\", \\\"LogicApps\\\",\\r\\ntype contains 'microsoft.keyvault/vaults', \\\"Key Vaults\\\",\\r\\ntype contains 'microsoft.storage/storageaccounts', \\\"Storage Accounts\\\",\\r\\ntype contains 'microsoft.compute/availabilitysets', 'Availability Sets',\\r\\ntype contains 'microsoft.operationalinsights/workspaces', 'Azure Monitor Resources',\\r\\ntype contains 'microsoft.operationsmanagement', 'Operations Management Resources',\\r\\ntype contains 'microsoft.insights', 'Azure Monitor Resources',\\r\\ntype contains 'microsoft.desktopvirtualization/applicationgroups', 'WVD Application Groups',\\r\\ntype contains 'microsoft.desktopvirtualization/workspaces', 'WVD Workspaces',\\r\\ntype contains 'microsoft.desktopvirtualization/hostpools', 'WVD Hostpools',\\r\\ntype contains 'microsoft.recoveryservices/vaults', 'Backup Vaults',\\r\\ntype contains 'microsoft.web', 'App Services',\\r\\ntype contains 'microsoft.managedidentity/userassignedidentities','Managed Identities',\\r\\ntype contains 'microsoft.storagesync/storagesyncservices', 'Azure File Sync',\\r\\ntype contains 'microsoft.hybridcompute/machines', 'Azure Arc-enabled servers ',\\r\\ntype contains 'Microsoft.EventHub', 'Event Hub',\\r\\ntype contains 'Microsoft.EventGrid', 'Event Grid',\\r\\ntype contains 'Microsoft.Sql', 'SQL Resources',\\r\\ntype contains 'Microsoft.HDInsight/clusters', 'HDInsight Clusters',\\r\\ntype contains 'microsoft.devtestlab', 'DevTest Labs Resources',\\r\\ntype contains 'microsoft.containerinstance', 'Container Instances Resources',\\r\\ntype contains 'microsoft.portal/dashboards', 'Azure Dashboards',\\r\\ntype contains 'microsoft.containerregistry/registries', 'Container Registry',\\r\\ntype contains 'microsoft.automation', 'Automation Resources',\\r\\ntype contains 'sendgrid.email/accounts', 'SendGrid Accounts',\\r\\ntype contains 'microsoft.datafactory/factories', 'Data Factory',\\r\\ntype contains 'microsoft.databricks/workspaces', 'Databricks Workspaces',\\r\\ntype contains 'microsoft.machinelearningservices/workspaces', 'Machine Learnings Workspaces',\\r\\ntype contains 'microsoft.alertsmanagement/smartdetectoralertrules', 'Azure Monitor Resources',\\r\\ntype contains 'microsoft.apimanagement/service', 'API Management Services',\\r\\ntype contains 'microsoft.dbforpostgresql', 'PostgreSQL Resources',\\r\\ntype contains 'microsoft.scheduler/jobcollections', 'Scheduler Job Collections',\\r\\ntype contains 'microsoft.visualstudio/account', 'Azure DevOps Organization',\\r\\ntype contains 'microsoft.network/', 'Network Resources',\\r\\ntype contains 'microsoft.migrate/' or type contains 'microsoft.offazure', 'Azure Migrate Resources',\\r\\ntype contains 'microsoft.servicebus/namespaces', 'Service Bus Namespaces',\\r\\ntype contains 'microsoft.classic', 'ASM Obsolete Resources',\\r\\ntype contains 'microsoft.resources/templatespecs', 'Template Spec Resources',\\r\\ntype contains 'microsoft.virtualmachineimages', 'VM Image Templates',\\r\\ntype contains 'microsoft.documentdb', 'CosmosDB DB Resources',\\r\\ntype contains 'microsoft.alertsmanagement/actionrules', 'Azure Monitor Resources',\\r\\ntype contains 'microsoft.kubernetes/connectedclusters', 'Azure Arc-enabled Kubernetes',\\r\\ntype contains 'microsoft.purview', 'Purview Resources',\\r\\ntype contains 'microsoft.security', 'Security Resources',\\r\\ntype contains 'microsoft.cdn', 'CDN Resources',\\r\\ntype contains 'microsoft.devices','IoT Resources',\\r\\ntype contains 'microsoft.datamigration', 'Data Migraiton Services',\\r\\ntype contains 'microsoft.cognitiveservices', 'Congitive Services',\\r\\ntype contains 'microsoft.customproviders', 'Custom Providers',\\r\\ntype contains 'microsoft.appconfiguration', 'App Services',\\r\\ntype contains 'microsoft.search', 'Search Services',\\r\\ntype contains 'microsoft.maps', 'Maps',\\r\\ntype contains 'microsoft.containerservice/managedclusters', 'AKS',\\r\\ntype contains 'microsoft.signalrservice', 'SignalR',\\r\\ntype contains 'microsoft.resourcegraph/queries', 'Resource Graph Queries',\\r\\ntype contains 'microsoft.batch', 'MS Batch',\\r\\ntype contains 'microsoft.analysisservices', 'Analysis Services',\\r\\ntype contains 'microsoft.synapse/workspaces', 'Synapse Workspaces',\\r\\ntype contains 'microsoft.synapse/workspaces/sqlpools', 'Synapse SQL Pools',\\r\\ntype contains 'microsoft.kusto/clusters', 'ADX Clusters',\\r\\ntype contains 'microsoft.resources/deploymentscripts', 'Deployment Scripts',\\r\\ntype contains 'microsoft.aad/domainservices', 'AD Domain Services',\\r\\ntype contains 'microsoft.labservices/labaccounts', 'Lab Accounts',\\r\\ntype contains 'microsoft.automanage/accounts', 'Automanage Accounts',\\r\\ntype contains 'microsoft.extendedlocation/customlocations', 'Azure Arc Custom Locations',\\r\\ntype contains 'microsoft.azurearcdata/postgresinstances', 'Azure Arc-enabled PostgresSQL',\\r\\ntype contains 'microsoft.azurearcdata/sqlmanagedinstances', 'Azure Arc-enabled SQL Managed Instance',\\r\\ntype contains 'microsoft.azurearcdata/datacontrollers', 'Azure Arc-enabled data controller',\\r\\ntype contains 'microsoft.azurearcdata/sqlserverinstances', 'Azure Arc-enabled SQL server',\\r\\nstrcat(\\\"Not Translated: \\\", type))\\r\\n| summarize count() by type\",\"size\":1,\"title\":\"Resource Count by Type\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\",\"crossComponentResources\":[\"{subscriptionId}\"],\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"type\",\"formatter\":1},\"leftContent\":{\"columnMatch\":\"count_\",\"formatter\":12,\"formatOptions\":{\"palette\":\"auto\"},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"useGrouping\":false,\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"sortCriteriaField\":\"count_\",\"sortOrderField\":2}},\"name\":\"query - Overview Resource Counts by type\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"Resources\\r\\n| where type in~ ({ResourceType})\\r\\n| where resourceGroup == \\\"{resourceGroup}\\\"\\r\\n| project Resource = id, Subscription = subscriptionId, ['Resource group'] = strcat('/subscriptions/', subscriptionId, '/resourceGroups/', resourceGroup), Location = location, tags\",\"size\":2,\"title\":\"Resources List\",\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\",\"crossComponentResources\":[\"{subscriptionId}\"]},\"name\":\"query - 2\"}]},\"conditionalVisibility\":{\"parameterName\":\"selectedTab\",\"comparison\":\"isEqualTo\",\"value\":\"Inventory\"},\"name\":\"Inventory\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"## Jumpstart ArcBox security overview\"},\"name\":\"text - 5\"},{\"type\":1,\"content\":{\"json\":\"💡 To use this workbook, you'll need to configure **continuous export** to export data to a Log Analytics workspace:\\r\\n1. From Microsoft Defender for Cloud's sidebar, select **Environment Settings**.\\r\\n2. Select the specific Azure subscription for which you want to configure the data export.\\r\\n3. From the sidebar of the settings page for that subscription, select **Continuous Export**.\\r\\n4. Set the export target to **Log Analytics workspace**.\\r\\n5. Select the following data types: **Security recommendations** and **Secure Score (Preview)**.\\r\\n6. From the export frequency options, select **Streaming** and **Snapshots**.\\r\\n7. Make sure to select ArcBox's subscription, resource group and Log Analytics workspace as the export target. Select Save.\\r\\n\\r\\n[Learn more](https://learn.microsoft.com/azure/security-center/continuous-export?tabs=azure-portal#set-up-a-continuous-export)\\r\\n\\r\\n> **Notes**\\r\\n* To get full visibility, wait at least one week for the first snapshot to be exported.\\r\\n* To configure continuous export across your organization, use the supplied Azure Policy 'DeployIfNotExist' policies described [here](https://learn.microsoft.com/azure/security-center/continuous-export?tabs=azure-policy#set-up-a-continuous-export).\"},\"showPin\":false,\"name\":\"Instructions\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"crossComponentResources\":[\"{workspaceName}\"],\"parameters\":[{\"id\":\"ae721cb1-e030-4e02-8839-9c6a00f66c8a\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"workspaceName\",\"type\":5,\"description\":\"Select at least one workspace that contains continuous export data based on the selected subscriptions\",\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"resources\\r\\n| where type =~ 'microsoft.operationalinsights/workspaces'\\r\\n| project id\",\"crossComponentResources\":[\"value::selected\"],\"value\":[\"value::all\"],\"typeSettings\":{\"resourceTypeFilter\":{\"microsoft.operationalinsights/workspaces\":true},\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\",\"label\":\"Log Analytics Workspace\"},{\"id\":\"4f3a03fd-9968-4ee7-b6bc-d04d3bbe14a8\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"TimeRange\",\"label\":\"Time Range\",\"type\":4,\"description\":\"Filter the data of this report to one of these predefined time ranges\",\"isRequired\":true,\"value\":{\"durationMs\":2592000000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000}],\"allowCustom\":true}},{\"id\":\"0117bdc3-a4e2-476b-b7cc-3d1f486e67cf\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"ErrorHandle\",\"type\":1,\"query\":\"let MissingTable = view () { print isMissing=1 };\\r\\nunion isfuzzy=true MissingTable, (SecureScores | getschema | summarize c=count() | project isMissing=iff(c > 0, 0, 1))\\r\\n| top 1 by isMissing asc\",\"crossComponentResources\":[\"{workspaceName}\"],\"isHiddenWhenLocked\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"above\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"Parameters\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"  Current score trends per subscription (not affected by the time range parameter)\\r\\n\"},\"customWidth\":\"50\",\"name\":\"text - 3\"},{\"type\":1,\"content\":{\"json\":\"  Aggregated score for selected subscriptions over time\\r\\n\"},\"customWidth\":\"50\",\"name\":\"text - 4\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"//Current score trends per subscription (show current, 7-day change from the current score as %, 30-day change from the current score as %)\\r\\nlet startOfToday = startofday(now()); \\r\\nlet offsetWeek = 6d; \\r\\nlet offsetMonth = 29d; \\r\\nlet lookbackDurationWeek = 14d; \\r\\nlet lookbackDurationMonth = 45d; \\r\\nlet endTimeWeek = startOfToday - offsetWeek; \\r\\nlet startTimeWeek = endTimeWeek - lookbackDurationWeek; \\r\\nlet endTimeMonth = startOfToday - offsetMonth; \\r\\nlet startTimeMonth = endTimeMonth - lookbackDurationMonth; \\r\\nSecureScores \\r\\n| extend Day = startofday(TimeGenerated) \\r\\n| summarize arg_max(TimeGenerated, *) by Day, SecureScoresSubscriptionId \\r\\n| summarize arg_max(Day, *) by SecureScoresSubscriptionId \\r\\n| join kind = fullouter( \\r\\n SecureScores \\r\\n | extend Day = startofday(TimeGenerated) \\r\\n | where TimeGenerated > startTimeWeek and TimeGenerated <= endTimeWeek \\r\\n | summarize arg_max(TimeGenerated, *) by SecureScoresSubscriptionId \\r\\n | project OldScoreSevenDays = PercentageScore, SecureScoresSubscriptionId \\r\\n ) \\r\\n on SecureScoresSubscriptionId \\r\\n| join kind = fullouter( \\r\\n SecureScores \\r\\n | extend Day = startofday(TimeGenerated) \\r\\n | where TimeGenerated > startTimeMonth and TimeGenerated <= endTimeMonth \\r\\n | summarize arg_max(TimeGenerated, *) by SecureScoresSubscriptionId \\r\\n | project OldMonthScore = PercentageScore, SecureScoresSubscriptionId \\r\\n ) \\r\\n on SecureScoresSubscriptionId \\r\\n| extend DiffSevenDays = tostring(((PercentageScore - OldScoreSevenDays) / OldScoreSevenDays) * 100) \\r\\n| extend DiffSevenDays = iff(isempty(DiffSevenDays), \\\"\\\", DiffSevenDays) \\r\\n| extend DiffMonth = tostring(((PercentageScore - OldMonthScore) / OldMonthScore) * 100) \\r\\n| extend DiffMonth = iff(isempty(DiffMonth), \\\"\\\", DiffMonth) \\r\\n| project SecureScoresSubscriptionId, CurrentScore = PercentageScore * 100, todouble(DiffSevenDays), todouble(DiffMonth)\",\"size\":0,\"noDataMessage\":\"No data available. Check your continuous export configuration for the selected workspaces.\",\"exportFieldName\":\"SecureScoresSubscriptionId\",\"exportParameterName\":\"selectedSubscription\",\"exportDefaultValue\":\"All\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"SecureScoresSubscriptionId\",\"formatter\":15,\"formatOptions\":{\"linkTarget\":null,\"showIcon\":true,\"customColumnWidthSetting\":\"25ch\"}},{\"columnMatch\":\"CurrentScore\",\"formatter\":4,\"formatOptions\":{\"min\":0,\"max\":100,\"palette\":\"redGreen\",\"customColumnWidthSetting\":\"20ch\"},\"numberFormat\":{\"unit\":1,\"options\":{\"style\":\"decimal\",\"useGrouping\":false,\"maximumSignificantDigits\":2}}},{\"columnMatch\":\"DiffSevenDays\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"icons\",\"thresholdsGrid\":[{\"operator\":\"<\",\"thresholdValue\":\"0\",\"representation\":\"trenddown\",\"text\":\"{0}{1}\"},{\"operator\":\">\",\"thresholdValue\":\"0\",\"representation\":\"trendup\",\"text\":\"{0}{1}\"},{\"operator\":\"is Empty\",\"thresholdValue\":\"0\",\"representation\":\"Normal\",\"text\":\"N/A\"},{\"operator\":\"Default\",\"thresholdValue\":null,\"representation\":\"Blank\",\"text\":\"{0}{1}\"}],\"customColumnWidthSetting\":\"20ch\"},\"numberFormat\":{\"unit\":1,\"options\":{\"style\":\"decimal\",\"useGrouping\":false,\"maximumSignificantDigits\":2}}},{\"columnMatch\":\"DiffMonth\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"icons\",\"thresholdsGrid\":[{\"operator\":\"<\",\"thresholdValue\":\"0\",\"representation\":\"trenddown\",\"text\":\"{0}{1}\"},{\"operator\":\">\",\"thresholdValue\":\"0\",\"representation\":\"trendup\",\"text\":\"{0}{1}\"},{\"operator\":\"is Empty\",\"thresholdValue\":\"0\",\"representation\":\"Normal\",\"text\":\"N/A\"},{\"operator\":\"Default\",\"thresholdValue\":null,\"representation\":\"Blank\",\"text\":\"{0}{1}\"}],\"customColumnWidthSetting\":\"20ch\"},\"numberFormat\":{\"unit\":1,\"options\":{\"style\":\"decimal\",\"useGrouping\":false,\"maximumSignificantDigits\":2}}}],\"rowLimit\":500,\"sortBy\":[{\"itemKey\":\"$gen_link_SecureScoresSubscriptionId_0\",\"sortOrder\":1}],\"labelSettings\":[{\"columnId\":\"SecureScoresSubscriptionId\",\"label\":\"Subscription name\"},{\"columnId\":\"CurrentScore\",\"label\":\"Current score %\"},{\"columnId\":\"DiffSevenDays\",\"label\":\"7-day change\"},{\"columnId\":\"DiffMonth\",\"label\":\"30-day change\"}]},\"sortBy\":[{\"itemKey\":\"$gen_link_SecureScoresSubscriptionId_0\",\"sortOrder\":1}]},\"customWidth\":\"50\",\"showPin\":true,\"name\":\"ScoreTrends\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"//Aggregated score for all subscriptions over time\\r\\nSecureScores\\r\\n| where '{selectedSubscription}' == 'All' or SecureScoresSubscriptionId == '{selectedSubscription}'\\r\\n| where MaxScore>0\\r\\n| extend subscriptionScore = CurrentScore/MaxScore \\r\\n| extend subScoreXsubWeight = subscriptionScore*Weight \\r\\n| extend Day = startofday(TimeGenerated) \\r\\n| summarize upperValue = sum(subScoreXsubWeight), underValue = sum(todouble(Weight)) by Day\\r\\n| extend OverallScore = 100*((upperValue)/(underValue))\\r\\n| project OverallScore, Day\",\"size\":0,\"aggregation\":5,\"showAnnotations\":true,\"noDataMessage\":\"No data available. Check your continuous export configuration for the selected workspaces.\",\"timeContextFromParameter\":\"TimeRange\",\"timeBrushParameterName\":\"TimeRange\",\"timeBrushExportOnlyWhenBrushed\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"visualization\":\"timechart\",\"chartSettings\":{\"seriesLabelSettings\":[{\"seriesName\":\"overallScore\",\"label\":\"Overall Score\",\"color\":\"lightBlue\"}],\"ySettings\":{\"min\":0,\"max\":100}}},\"customWidth\":\"50\",\"showPin\":true,\"name\":\"ScoreOvertime\"}],\"exportParameters\":true},\"conditionalVisibilities\":[{\"parameterName\":\"workspaceName\",\"comparison\":\"isNotEqualTo\"},{\"parameterName\":\"ErrorHandle\",\"comparison\":\"isNotEqualTo\",\"value\":\"1\"}],\"name\":\"SecureScore\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"  Top recommendations with recent increase in unhealthy resources\\r\\n
\\r\\n       Recommendations with the most resources that have become unhealthy in the periods shown\"},\"customWidth\":\"50\",\"name\":\"UnhealthyRecommendations\"},{\"type\":1,\"content\":{\"json\":\"  Security controls scores over time (weekly)\\r\\n\\r\\n\\r\\n\"},\"customWidth\":\"50\",\"name\":\"text - 3\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"//Top recommendations with recent increase in unhealthy resources\\r\\nSecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState =~ \\\"Unhealthy\\\"\\r\\n| summarize UnhealthyAssessedResources = dcount(AssessedResourceId),RecommendationName = any(RecommendationName) by RecommendationId\\r\\n| project RecommendationName, UnhealthyAssessedResources\\r\\n| sort by UnhealthyAssessedResources desc\\r\\n| take 10\",\"size\":0,\"noDataMessage\":\"No data available. Check your continuous export configuration for the selected workspaces.\",\"timeContextFromParameter\":\"TimeRange\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"RecommendationName\",\"formatter\":0,\"formatOptions\":{\"customColumnWidthSetting\":\"70ch\"},\"numberFormat\":{\"unit\":0,\"options\":{\"style\":\"decimal\",\"useGrouping\":false}},\"tooltipFormat\":{\"tooltip\":\"View recommendation '{0}'\"}},{\"columnMatch\":\"UnhealthyAssessedResources\",\"formatter\":4,\"formatOptions\":{\"min\":0,\"palette\":\"blue\",\"compositeBarSettings\":{\"labelText\":\"\",\"columnSettings\":[]},\"customColumnWidthSetting\":\"25ch\"}},{\"columnMatch\":\"RecommendationId\",\"formatter\":5}],\"labelSettings\":[{\"columnId\":\"RecommendationName\",\"label\":\"Recommendation name\"},{\"columnId\":\"UnhealthyAssessedResources\",\"label\":\"Unhealthy count\"}]},\"tileSettings\":{\"showBorder\":false,\"titleContent\":{\"columnMatch\":\"RecommendationName\",\"formatter\":1},\"leftContent\":{\"columnMatch\":\"UnhealthyCount\",\"formatter\":12,\"formatOptions\":{\"palette\":\"auto\"},\"numberFormat\":{\"unit\":17,\"options\":{\"maximumSignificantDigits\":3,\"maximumFractionDigits\":2}}}},\"graphSettings\":{\"type\":0,\"topContent\":{\"columnMatch\":\"RecommendationName\",\"formatter\":1},\"centerContent\":{\"columnMatch\":\"UnhealthyCount\",\"formatter\":1,\"numberFormat\":{\"unit\":17,\"options\":{\"maximumSignificantDigits\":3,\"maximumFractionDigits\":2}}}}},\"customWidth\":\"50\",\"name\":\"query - 7\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"//Security controls score over time (weekly) \\r\\nlet subscriptionsWeight = \\r\\n SecureScores\\r\\n | where '{selectedSubscription}' == 'All' or SecureScoresSubscriptionId == '{selectedSubscription}'\\r\\n | summarize arg_max(TimeGenerated, *) by SecureScoresSubscriptionId \\r\\n | project SecureScoresSubscriptionId, SubscriptionWeight = Weight; \\r\\nSecureScoreControls \\r\\n| where MaxScore > 0\\r\\n| where IsSnapshot == true\\r\\n| extend Week = startofweek(TimeGenerated) \\r\\n| summarize arg_max(TimeGenerated, *) by SecureScoresSubscriptionId, ControlId, Week \\r\\n| join kind=inner(\\r\\n subscriptionsWeight\\r\\n ) on SecureScoresSubscriptionId \\r\\n| extend WeightedControlScore = PercentageScore * SubscriptionWeight \\r\\n| summarize WeightedScoreAvg = sum(WeightedControlScore)/sum(SubscriptionWeight)*100, ControlName = any(ControlName) by ControlId, Week\\r\\n| order by WeightedScoreAvg desc\",\"size\":0,\"aggregation\":5,\"showAnnotations\":true,\"noDataMessage\":\"No data available. Check your continuous export configuration for the selected workspaces.\",\"timeContextFromParameter\":\"TimeRange\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"visualization\":\"timechart\",\"graphSettings\":{\"type\":0,\"topContent\":{\"columnMatch\":\"ControlId\",\"formatter\":1},\"centerContent\":{\"columnMatch\":\"WeightedAvgPerControl\",\"formatter\":1,\"numberFormat\":{\"unit\":17,\"options\":{\"maximumSignificantDigits\":3,\"maximumFractionDigits\":2}}}},\"chartSettings\":{\"group\":\"ControlName\",\"createOtherGroup\":0,\"showLegend\":true,\"ySettings\":{\"numberFormatSettings\":{\"unit\":1,\"options\":{\"style\":\"decimal\",\"useGrouping\":true}},\"min\":0,\"max\":100}}},\"customWidth\":\"50\",\"name\":\"Controls\"}]},\"conditionalVisibilities\":[{\"parameterName\":\"workspaceName\",\"comparison\":\"isNotEqualTo\"},{\"parameterName\":\"ErrorHandle\",\"comparison\":\"isNotEqualTo\",\"value\":\"1\"}],\"name\":\"group - 8\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"  Resources changed over time\\r\\n
\\r\\n       Select a recommendation to see its changes\"},\"name\":\"text - 2\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"//Recommendations changes over time (count how many resources have been changed to unhealthy, heathy, and not applicable, per recommendation) \\r\\nlet unhealthy = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState == 'Unhealthy'\\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName) \\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId;\\r\\nlet healthy = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState == 'Healthy' \\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName) \\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId;\\r\\nlet notApplicable = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState == 'NotApplicable' \\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName) \\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId; \\r\\nlet notUnhealthy = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState !~ 'Unhealthy' \\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName) \\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId; \\r\\nlet notHealthy = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState !~ 'Healthy'\\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName) \\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId; \\r\\nlet notNotApplicable = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState !~ 'NotApplicable' \\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName) \\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId; \\r\\nlet notHealthyToHealthy = \\r\\n notHealthy \\r\\n | join (\\r\\n healthy\\r\\n ) on RecommendationId, AssessedResourceId \\r\\n | where TimeGenerated < TimeGenerated1 \\r\\n | summarize ToHealthyCount = count(), RecommendationName=any(RecommendationName) by RecommendationId;\\r\\nlet notUnhealthyToUnhealthy = \\r\\n notUnhealthy \\r\\n | join ( \\r\\n unhealthy\\r\\n ) on RecommendationId, AssessedResourceId \\r\\n | where TimeGenerated < TimeGenerated1 \\r\\n | summarize ToUnhealthyCount = count(), RecommendationName=any(RecommendationName) by RecommendationId;\\r\\nlet notNotApplicableToNotApplicable = \\r\\n notNotApplicable \\r\\n | join (\\r\\n notApplicable\\r\\n ) on RecommendationId, AssessedResourceId \\r\\n | where TimeGenerated < TimeGenerated1 \\r\\n | summarize ToNotApplicableCount = count(), RecommendationName=any(RecommendationName) by RecommendationId;\\r\\n// Union \\r\\nunion notHealthyToHealthy, notUnhealthyToUnhealthy, notNotApplicableToNotApplicable\\r\\n| summarize RecommendationName=any(RecommendationName), ToUnhealthyCount = sum(ToUnhealthyCount), ToHealthyCount = sum(ToHealthyCount), ToNotApplicableCount = sum(ToNotApplicableCount) by RecommendationId\\r\\n| order by ToUnhealthyCount desc\",\"size\":0,\"noDataMessage\":\"No data available. Check your continuous export configuration for the selected workspaces.\",\"timeContextFromParameter\":\"TimeRange\",\"exportedParameters\":[{\"fieldName\":\"RecommendationId\",\"parameterName\":\"RecommendationId\"},{\"fieldName\":\"RecommendationName\",\"parameterName\":\"RecommendationName\",\"parameterType\":1}],\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"RecommendationId\",\"formatter\":5},{\"columnMatch\":\"RecommendationName\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"bladeOpenContext\":{\"bladeName\":\"RecommendationsBlade\",\"extensionName\":\"Microsoft_Azure_Security\",\"bladeParameters\":[{\"name\":\"assessmentKey\",\"source\":\"column\",\"value\":\"RecommendationId\"}]},\"customColumnWidthSetting\":\"100ch\"}},{\"columnMatch\":\"UnhealthyCount\",\"formatter\":8,\"formatOptions\":{\"palette\":\"redBright\"}},{\"columnMatch\":\"HealthyCount\",\"formatter\":8,\"formatOptions\":{\"palette\":\"green\"}},{\"columnMatch\":\"NotApplicableCount\",\"formatter\":8,\"formatOptions\":{\"palette\":\"gray\"}},{\"columnMatch\":\"AssessedResourceId\",\"formatter\":13,\"formatOptions\":{\"linkTarget\":null,\"showIcon\":true}}],\"labelSettings\":[{\"columnId\":\"RecommendationName\",\"label\":\"Recommendation name\"},{\"columnId\":\"ToUnhealthyCount\",\"label\":\"To unhealthy\"},{\"columnId\":\"ToHealthyCount\",\"label\":\"To healthy\"},{\"columnId\":\"ToNotApplicableCount\",\"label\":\"To not applicable\"}]},\"sortBy\":[]},\"name\":\"RecommendationStatusChanges\"},{\"type\":1,\"content\":{\"json\":\"To view changes over time on a specific recommendation, please select any from the list above.\",\"style\":\"info\"},\"conditionalVisibility\":{\"parameterName\":\"RecommendationId\",\"comparison\":\"isEqualTo\"},\"name\":\"ChangeLogBanner\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"let unhealthy = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState == 'Unhealthy'\\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName)\\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId\\r\\n| project UnhealthyRecommendationId = RecommendationId, UnhealthyResourceId = AssessedResourceId, UnhealhyTime = TimeGenerated, tostring(SubscriptionId);\\r\\nlet notApplicable = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState == 'NotApplicable'\\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName)\\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId\\r\\n| project NARecommendationId = RecommendationId, NAResourceId = AssessedResourceId, NATime = TimeGenerated, tostring(SubscriptionId);\\r\\nlet healthy = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState == 'Healthy'\\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName)\\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId\\r\\n| project HealthyRecommendationId = RecommendationId, HealthyResourceId = AssessedResourceId, HealhyTime = TimeGenerated, tostring(SubscriptionId);\\r\\nlet NotHealthy = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState !~ 'Healthy'\\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName)\\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId;\\r\\nlet NotUnhealthy = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState !~ 'Unhealthy'\\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName)\\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId;\\r\\nlet NotNotApplicable = SecurityRecommendation\\r\\n| extend SubscriptionId = iff(AssessedResourceId==\\\"N/A\\\", split(url_decode(RecommendationLink),'/')[9], split(AssessedResourceId, '/')[2])\\r\\n| where '{selectedSubscription}' == 'All' or SubscriptionId == '{selectedSubscription}'\\r\\n| where RecommendationState !~ 'NotApplicable'\\r\\n| where isnotempty(RecommendationId) and isnotempty(RecommendationName)\\r\\n| summarize arg_max(TimeGenerated, *) by RecommendationId, AssessedResourceId;\\r\\nlet 1_to_Healthy = \\r\\n NotHealthy\\r\\n | extend orignalState = RecommendationState\\r\\n | join healthy on $left.RecommendationId == $right.HealthyRecommendationId, $left.AssessedResourceId == $right.HealthyResourceId\\r\\n | where TimeGenerated < HealhyTime\\r\\n | extend update = \\\"To healthy\\\"\\r\\n | project RecommendationId, RecommendationName, Description, OriginalState = RecommendationState, update, TimeGenerated, RecommendationSeverity, tostring(SubscriptionId), AssessedResourceId, RecommendationLink;\\r\\n//1_to_Healthy\\r\\nlet 2_to_Unhealthy = \\r\\n NotUnhealthy\\r\\n | extend orignalState = RecommendationState\\r\\n | join unhealthy on $left.RecommendationId == $right.UnhealthyRecommendationId, $left.AssessedResourceId == $right.UnhealthyResourceId\\r\\n | where TimeGenerated < UnhealhyTime\\r\\n | extend update = \\\"To unhealthy\\\"\\r\\n | project RecommendationId, RecommendationName, Description, OriginalState = RecommendationState, update, TimeGenerated, RecommendationSeverity, tostring(SubscriptionId), AssessedResourceId, RecommendationLink;\\r\\n//2_to_Unhealthy\\r\\nlet 3_to_NotApplicable = \\r\\n NotNotApplicable\\r\\n | extend orignalState = RecommendationState\\r\\n | join notApplicable on $left.RecommendationId == $right.NARecommendationId, $left.AssessedResourceId == $right.NAResourceId\\r\\n | where TimeGenerated < NATime\\r\\n | extend update = \\\"To not applicable\\\"\\r\\n | extend NotApplicableReason = iff(isempty(NotApplicableReason), \\\"NA\\\", NotApplicableReason)\\r\\n | project RecommendationId, RecommendationName, Description, OriginalState = RecommendationState, update, TimeGenerated, RecommendationSeverity, tostring(SubscriptionId), AssessedResourceId, RecommendationLink, NotApplicableReason;\\r\\n// JOIN\\r\\nunion 1_to_Healthy, 2_to_Unhealthy, 3_to_NotApplicable\\r\\n| extend FullRecommendationLink = strcat(\\\"http://\\\",RecommendationLink)\\r\\n| extend AssessedResourceId = iff(AssessedResourceId==\\\"N/A\\\", extract(\\\".*onPremiseMachines/(.+)\\\",1, url_decode(RecommendationLink)), AssessedResourceId)\\r\\n| project-away RecommendationLink\\r\\n| where RecommendationId == '{RecommendationId}'\",\"size\":0,\"title\":\"Changes for \\\"{RecommendationName}\\\"\",\"noDataMessage\":\"No data available. Check your continuous export configuration for the selected workspaces.\",\"showExportToExcel\":true,\"exportToExcelOptions\":\"all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"RecommendationId\",\"formatter\":5},{\"columnMatch\":\"RecommendationName\",\"formatter\":5},{\"columnMatch\":\"Description\",\"formatter\":5},{\"columnMatch\":\"SubscriptionId\",\"formatter\":15,\"formatOptions\":{\"linkTarget\":null,\"showIcon\":true}},{\"columnMatch\":\"NotApplicableReason\",\"formatter\":0,\"formatOptions\":{\"customColumnWidthSetting\":\"30ch\"}},{\"columnMatch\":\"FullRecommendationLink\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"View\",\"linkIsContextBlade\":false}}],\"rowLimit\":1000,\"hierarchySettings\":{\"treeType\":1,\"groupBy\":[\"update\"]},\"labelSettings\":[{\"columnId\":\"RecommendationName\",\"label\":\"Recommendation name\"},{\"columnId\":\"OriginalState\",\"label\":\"Original state\"},{\"columnId\":\"update\",\"label\":\"Updated state\"},{\"columnId\":\"TimeGenerated\",\"label\":\"Time of change\"},{\"columnId\":\"RecommendationSeverity\",\"label\":\"Severity\"},{\"columnId\":\"SubscriptionId\",\"label\":\"Subscription\"},{\"columnId\":\"AssessedResourceId\",\"label\":\"Resource\"},{\"columnId\":\"NotApplicableReason\",\"label\":\"Reason\"},{\"columnId\":\"FullRecommendationLink\",\"label\":\"View recommendation\"}]},\"sortBy\":[]},\"conditionalVisibility\":{\"parameterName\":\"RecommendationId\",\"comparison\":\"isNotEqualTo\"},\"name\":\"ChangeLogDetails\"}]},\"conditionalVisibilities\":[{\"parameterName\":\"workspaceName\",\"comparison\":\"isNotEqualTo\"},{\"parameterName\":\"ErrorHandle\",\"comparison\":\"isNotEqualTo\",\"value\":\"1\"}],\"name\":\"ChangeLog\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"title\":\"Machines not sending current heartbeats\",\"items\":[{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"Heartbeat\\n| join kind = leftanti (\\n Heartbeat\\n | where TimeGenerated > now(-15m)\\n) on SourceComputerId\\n| summarize arg_max(LatestTimestamp=TimeGenerated, SubscriptionId) by ResourceId\\n| order by LatestTimestamp\",\"size\":3,\"showAnalytics\":true,\"title\":\"Agent not reporting for more than 15 minutes\",\"noDataMessage\":\"No machines found not reporting for more than 15 minutes.\",\"timeContext\":{\"durationMs\":86400000},\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"gridSettings\":{\"labelSettings\":[{\"columnId\":\"ResourceId\",\"label\":\"Resource ID\"},{\"columnId\":\"LatestTimestamp\",\"label\":\"Latest Heartbeat\"},{\"columnId\":\"SubscriptionId\",\"label\":\"Subscription ID\"}]}},\"customWidth\":\"50\",\"name\":\"query - 0\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"Heartbeat\\n| join kind = leftanti (\\n Heartbeat\\n | where TimeGenerated > now(-24h)\\n) on SourceComputerId\\n| summarize arg_max(LatestTimestamp=TimeGenerated, SubscriptionId) by ResourceId\\n| order by LatestTimestamp\",\"size\":3,\"showAnalytics\":true,\"title\":\"Agent not reporting for more than 24 hours\",\"noDataMessage\":\"No machines found not reporting for more than 24 hours.\",\"timeContext\":{\"durationMs\":172800000},\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"gridSettings\":{\"labelSettings\":[{\"columnId\":\"ResourceId\",\"label\":\"Resource ID\"},{\"columnId\":\"LatestTimestamp\",\"label\":\"Latest Heartbeat\"},{\"columnId\":\"SubscriptionId\",\"label\":\"Subscription ID\"}]}},\"customWidth\":\"50\",\"name\":\"query - 1\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"Heartbeat\\n| join kind = leftanti (\\n Heartbeat\\n | where TimeGenerated > now(-48h)\\n) on SourceComputerId\\n| summarize arg_max(LatestTimestamp=TimeGenerated, SubscriptionId) by ResourceId\\n| order by LatestTimestamp\",\"size\":3,\"showAnalytics\":true,\"title\":\"Agent not reporting for more than 48 hours\",\"noDataMessage\":\"No machines found not reporting for more than 48 hours.\",\"timeContext\":{\"durationMs\":604800000},\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"gridSettings\":{\"labelSettings\":[{\"columnId\":\"ResourceId\",\"label\":\"Resource ID\"},{\"columnId\":\"LatestTimestamp\",\"label\":\"Latest Heartbeat\"},{\"columnId\":\"SubscriptionId\",\"label\":\"Subscription ID\"}]}},\"customWidth\":\"50\",\"name\":\"query - 2\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"Heartbeat\\n| join kind = leftanti (\\n Heartbeat\\n | where TimeGenerated > now(-7d)\\n) on SourceComputerId\\n| summarize arg_max(LatestTimestamp=TimeGenerated, SubscriptionId) by ResourceId\\n| order by LatestTimestamp\",\"size\":3,\"showAnalytics\":true,\"title\":\"Agent not reporting for more than 7 days\",\"noDataMessage\":\"No machines found not reporting for more than 7 days.\",\"timeContext\":{\"durationMs\":2592000000},\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"crossComponentResources\":[\"{workspaceName}\"],\"gridSettings\":{\"labelSettings\":[{\"columnId\":\"ResourceId\",\"label\":\"Resource ID\"},{\"columnId\":\"LatestTimestamp\",\"label\":\"Latest Heartbeat\"},{\"columnId\":\"SubscriptionId\",\"label\":\"Subscription ID\"}]}},\"customWidth\":\"50\",\"name\":\"query - 3\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibilities\":[{\"parameterName\":\"SelectedTab\",\"comparison\":\"isEqualTo\",\"value\":\"NotReportingTab\"},{\"parameterName\":\"workspaceName\",\"comparison\":\"isNotEqualTo\"}],\"name\":\"MachinesNotReporting\",\"styleSettings\":{\"showBorder\":true}},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"title\":\"Protection Status\",\"items\":[{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"securityresources\\n| where type =~ \\\"microsoft.security/assessments\\\" or type =~ \\\"microsoft.security/softwareInventories\\\"\\n| extend assessmentStatusCode = case(type =~ \\\"microsoft.security/assessments\\\", tostring(properties.status.code), \\\"\\\")\\n| extend severity = case(assessmentStatusCode =~ \\\"unhealthy\\\", tolower(tostring(properties.metadata.severity)), tolower(assessmentStatusCode))\\n| extend exemptionType = case(tolower(type) != \\\"microsoft.security/assessments\\\",\\\"N/A\\\", case(properties.status.cause =~ \\\"exempt\\\", \\\"Yes\\\", \\\"No\\\"))\\n| extend source = case(type =~ \\\"microsoft.security/assessments\\\", tostring(properties.resourceDetails.Source), \\\"\\\")\\n| extend resourceId = trim(\\\" \\\", tolower(tostring(case(source =~ \\\"azure\\\", properties.resourceDetails.Id,\\n source =~ \\\"aws\\\" and isnotempty(tostring(properties.resourceDetails.ConnectorId)), properties.resourceDetails.Id,\\n source =~ \\\"aws\\\", properties.resourceDetails.AzureResourceId,\\n source =~ \\\"gcp\\\", properties.resourceDetails.AzureResourceId,\\n type =~ \\\"microsoft.security/assessments\\\", extract(\\\"^(.+)/providers/Microsoft.Security/assessments/.+$\\\",1,id),extract(\\\"^(.+)/providers/Microsoft.Security/softwareInventories/.+$\\\",1,id)))))\\n| extend resourceName = iff(source =~ \\\"aws\\\" and isnotempty(tostring(properties.resourceDetails.ConnectorId)), tostring(properties.additionalData.ResourceName), extract(@\\\"(.+)/(.+)\\\", 2, resourceId))\\n| extend regexResourceId = extract_all(@\\\"/providers/([^/]+)(?:/([^/]+)/[^/]+(?:/([^/]+)/[^/]+)?)?/([^/]+)/[^/]+$\\\", resourceId)\\n| extend RegexResourceType = regexResourceId[0]\\n| extend mainType = RegexResourceType[1], extendedType = RegexResourceType[2], resourceType = RegexResourceType[3]\\n| extend providerName = RegexResourceType[0],\\n mainType = case(mainType !~ \\\"\\\", strcat(\\\"/\\\",mainType), \\\"\\\"),\\n extendedType = case(extendedType!~ \\\"\\\", strcat(\\\"/\\\",extendedType), \\\"\\\"),\\n resourceType = case(resourceType!~ \\\"\\\", strcat(\\\"/\\\",resourceType), \\\"\\\")\\n| extend array = split(resourceId, '/')\\n| extend typeFullPath = case(\\n array_length(array) == 3, 'subscription',\\n array_length(array) == 5, 'resourcegroups',\\n source =~ \\\"aws\\\" and isnotempty(tostring(properties.resourceDetails.ConnectorId)), tolower(strcat(providerName, mainType, \\\"/\\\", tostring(properties.additionalData.ResourceProvider), tostring(properties.additionalData.ResourceType))),\\n strcat(providerName, mainType, extendedType, resourceType))\\n| extend resourceType = case(typeFullPath =~ 'resourcegroups' or typeFullPath =~ 'subscription', typeFullPath, tolower(trim(\\\"/\\\", resourceType)))\\n| extend assessmentKey = case(type =~ \\\"microsoft.security/assessments\\\", tostring(name), \\\"\\\")\\n| extend softwareVendorName = case(type =~ \\\"microsoft.security/softwareInventories\\\", tostring(properties.vendor), \\\"\\\")\\n| extend softwareName = case(type =~ \\\"microsoft.security/softwareInventories\\\", tostring(properties.softwareName), \\\"\\\")\\n| extend softwareVersion = case(type =~ \\\"microsoft.security/softwareInventories\\\", tostring(properties.version), \\\"\\\")\\n| extend softwareNameIdentifier = case(type =~ \\\"microsoft.security/softwareInventories\\\", strcat(softwareVendorName, \\\",\\\", softwareName, \\\",\\\", softwareVersion), \\\"\\\")\\n| extend environment = case(type =~ \\\"microsoft.security/assessments\\\", properties.resourceDetails[\\\"Source\\\"], \\\"\\\")\\n| extend environment = case(environment =~ \\\"onpremise\\\", tolower(\\\"Non-Azure\\\"), tolower(environment))\\n| extend osTypeProperty = properties.additionalData[\\\"OS Type\\\"]\\n| extend osType = case(isnotempty(osTypeProperty), osTypeProperty, \\\"\\\")\\n| extend hasAgent = case(assessmentKey == \\\"d1db3318-01ff-16de-29eb-28b344515626\\\" or assessmentKey == \\\"45cfe080-ceb1-a91e-9743-71551ed24e94\\\" or assessmentKey == \\\"720a3e77-0b9a-4fa9-98b6-ddf0fd7e32c1\\\" or assessmentKey == \\\"27ac71b1-75c5-41c2-adc2-858f5db45b08\\\", assessmentStatusCode, \\\"\\\")\\n| extend hasAgent = case(assessmentKey == \\\"4ab6e3c5-74dd-8b35-9ab9-f61b30875b27\\\" or assessmentKey == \\\"181ac480-f7c4-544b-9865-11b8ffe87f47\\\" or assessmentKey == \\\"4fb67663-9ab9-475d-b026-8c544cced439\\\" , \\\"healthy\\\", hasAgent)\\n| extend workspaceAzureResourceId = case(hasAgent !~ \\\"\\\", properties.additionalData[\\\"Reporting workspace azure id\\\"], \\\"\\\")\\n| extend workspaceName = case(workspaceAzureResourceId !~ \\\"\\\", extract(@\\\"(.+)/(.+)\\\", 2, workspaceAzureResourceId), \\\"\\\")\\n| extend assessmentDisplayName = case(type =~ \\\"microsoft.security/assessments\\\", case(isnotempty(properties.displayName), properties.displayName, properties.metadata.displayName), \\\"\\\")\\n| extend assessmentIdentifier = case(type =~ \\\"microsoft.security/assessments\\\", strcat(assessmentKey, \\\",\\\" , assessmentDisplayName, \\\",\\\", severity), \\\"\\\")\\n| summarize assessmentsCount = count() , assessmentsIdentifier = make_list(assessmentIdentifier), softwareNamesIdentifier = make_list(softwareNameIdentifier), hasAgent = max(hasAgent), workspaceName = max(workspaceName), environment = max(environment), osType = max(osType), exemptionType = max(exemptionType) by resourceId, subscriptionId, resourceName, resourceType, typeFullPath, severity\\n| extend packAssessments = pack(severity, assessmentsCount)\\n| summarize assessmentsSummary = make_bag(packAssessments), assessmentsIdentifier = make_set(assessmentsIdentifier), softwareNamesIdentifier = make_set(softwareNamesIdentifier), hasAgent = max(hasAgent), workspaceName= max(workspaceName), environment = max(environment), osType= max(osType), exemptionType = max(exemptionType) by resourceId, subscriptionId, resourceName, resourceType, typeFullPath\\n| extend agentMonitoring = case(hasAgent =~ \\\"NotApplicable\\\" or hasAgent =~ \\\"\\\", '',\\n hasAgent =~ \\\"Unhealthy\\\", \\\"notInstalled\\\",\\n \\\"installed\\\")\\n| join kind=leftouter (\\n securityresources\\n | where type =~ \\\"microsoft.security/pricings\\\"\\n | project subscriptionId, bundleName = tolower(name), freeTrialRemainingTime = properties.freeTrialRemainingTime, pricingTier = tolower(properties.pricingTier)\\n | extend bundlesPricing = pack(bundleName, pricingTier)\\n | summarize subscriptionPricing = make_bag(bundlesPricing) by subscriptionId\\n ) on subscriptionId\\n| extend hasNoSoftwareData = case(array_length(softwareNamesIdentifier) == 1, case(set_has_element(softwareNamesIdentifier, \\\"\\\"), true, false), false)\\n| extend softwareNamesIdentifier = case(hasNoSoftwareData, softwareNamesIdentifier, set_difference(softwareNamesIdentifier, pack_array(\\\"\\\")))\\n| extend AssessmentsHigh = case(isnull(assessmentsSummary.high), 0 , toint(assessmentsSummary.high))\\n| extend AssessmentsMedium = case(isnull(assessmentsSummary.medium), 0 , toint(assessmentsSummary.medium))\\n| extend AssessmentsLow = case(isnull(assessmentsSummary.low), 0 , toint(assessmentsSummary.low))\\n| extend unhealthyAssessmentsCount = AssessmentsHigh + AssessmentsMedium + AssessmentsLow\\n| extend virtualmachines = case(isnull(subscriptionPricing), '' , subscriptionPricing.virtualmachines)\\n| extend virtualmachines = case(virtualmachines == 'free', 'off', 'on')\\n| extend sqlservers = case(isnull(subscriptionPricing), '' , subscriptionPricing.sqlservers)\\n| extend sqlservers = case(sqlservers == 'free', 'off', 'on')\\n| extend kubernetesservice = case(isnull(subscriptionPricing), '' , subscriptionPricing.kubernetesservice)\\n| extend kubernetesservice = case(kubernetesservice == 'free', 'off', 'on')\\n| extend containerregistry = case(isnull(subscriptionPricing), '' , subscriptionPricing.containerregistry)\\n| extend containerregistry = case(containerregistry == 'free', 'off', 'on')\\n| extend connectedcontainerregistry = case(isnull(subscriptionPricing), '' , subscriptionPricing.connectedcontainerregistry)\\n| extend connectedcontainerregistry = case(connectedcontainerregistry == 'free', 'off', 'on')\\n| extend sqlservervirtualmachines = case(isnull(subscriptionPricing), '' , subscriptionPricing.sqlservervirtualmachines)\\n| extend sqlservervirtualmachines = case(sqlservervirtualmachines == 'free', 'off', 'on')\\n| extend appservices = case(isnull(subscriptionPricing), '' , subscriptionPricing.appservices)\\n| extend appservices = case(appservices == 'free', 'off', 'on')\\n| extend storageaccounts = case(isnull(subscriptionPricing), '' , subscriptionPricing.storageaccounts)\\n| extend storageaccounts = case(storageaccounts == 'free', 'off', 'on')\\n| extend keyvaults = case(isnull(subscriptionPricing), '' , subscriptionPricing.keyvaults)\\n| extend keyvaults = case(keyvaults == 'free', 'off', 'on')\\n| extend opensourcerelationaldatabases = case(isnull(subscriptionPricing), '' , subscriptionPricing.opensourcerelationaldatabases)\\n| extend opensourcerelationaldatabases = case(opensourcerelationaldatabases == 'free', 'off', 'on')\\n| extend calculatedSubscriptionPricing = case(resourceType =~ \\\"subscription\\\" and isempty(subscriptionPricing) == false , iff(subscriptionPricing has \\\"free\\\" and subscriptionPricing has \\\"standard\\\", \\\"partial\\\", iff(subscriptionPricing has \\\"free\\\", \\\"off\\\", \\\"on\\\")), \\\"\\\")\\n| extend resourcePricing = case(typeFullPath =~ \\\"microsoft.classiccompute/virtualmachines\\\", virtualmachines, typeFullPath =~ \\\"microsoft.compute/virtualmachines\\\", virtualmachines, typeFullPath =~ \\\"microsoft.hybridcompute/machines\\\", virtualmachines, typeFullPath =~ \\\"microsoft.sql/servers\\\", sqlservers, typeFullPath =~ \\\"microsoft.containerservice/managedclusters\\\", kubernetesservice, typeFullPath =~ \\\"microsoft.kubernetes/connectedclusters\\\", kubernetesservice, typeFullPath =~ \\\"microsoft.containerregistry/registries\\\", containerregistry, typeFullPath =~ \\\"microsoft.security/connectedcontainerregistries\\\", connectedcontainerregistry, typeFullPath =~ \\\"microsoft.sqlvirtualmachine/sqlvirtualmachines\\\", sqlservervirtualmachines, typeFullPath =~ \\\"microsoft.web/sites\\\", appservices, typeFullPath =~ \\\"microsoft.storage/storageaccounts\\\", storageaccounts, typeFullPath =~ \\\"microsoft.compute/virtualmachinescalesets\\\", virtualmachines, typeFullPath =~ \\\"microsoft.keyvault/vaults\\\", keyvaults, typeFullPath =~ \\\"microsoft.dbforpostgresql/servers\\\", opensourcerelationaldatabases, typeFullPath =~ \\\"microsoft.dbformysql/servers\\\", opensourcerelationaldatabases, typeFullPath =~ \\\"microsoft.dbformariadb/servers\\\", opensourcerelationaldatabases, calculatedSubscriptionPricing)\\n| extend pricing = case(resourceType =~ \\\"subscription\\\" , calculatedSubscriptionPricing , resourcePricing)\\n| extend selectedSoftware = \\\"\\\"\\n| project resourceType, exemptionType, typeFullPath, resourceId, resourceName, subscriptionId, environment, osType, workspaceName, agentMonitoring, assessmentsIdentifier, assessmentsSummary, subscriptionPricing, unhealthyAssessmentsCount, pricing, softwareNamesIdentifier, selectedSoftware\\n| extend resourceGroup = tolower(tostring(split(resourceId, \\\"/\\\")[4]))\\n| order by unhealthyAssessmentsCount, subscriptionId, resourceType, resourceId\\n| where typeFullPath in ('microsoft.compute/virtualmachines', 'microsoft.hybridcompute/machines')\\n| where isnotempty(resourceId)\",\"size\":3,\"showAnalytics\":true,\"queryType\":1,\"resourceType\":\"microsoft.resourcegraph/resources\",\"crossComponentResources\":[\"value::all\"],\"visualization\":\"table\",\"showExpandCollapseGrid\":true,\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"resourceType\",\"formatter\":5},{\"columnMatch\":\"exemptionType\",\"formatter\":5},{\"columnMatch\":\"typeFullPath\",\"formatter\":5},{\"columnMatch\":\"resourceName\",\"formatter\":5},{\"columnMatch\":\"agentMonitoring\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"icons\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"installed\",\"representation\":\"success\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Unhealthy\",\"representation\":\"2\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"NotApplicable\",\"representation\":\"cancelled\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"notInstalled\",\"representation\":\"disabled\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"thresholdValue\":null,\"representation\":\"Disable\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"assessmentsIdentifier\",\"formatter\":5},{\"columnMatch\":\"assessmentsSummary\",\"formatter\":5},{\"columnMatch\":\"subscriptionPricing\",\"formatter\":5},{\"columnMatch\":\"unhealthyAssessmentsCount\",\"formatter\":3,\"formatOptions\":{\"min\":0,\"max\":15,\"palette\":\"greenRed\"}},{\"columnMatch\":\"pricing\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"icons\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"on\",\"representation\":\"success\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"off\",\"representation\":\"disabled\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"thresholdValue\":null,\"representation\":\"disabled\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"softwareNamesIdentifier\",\"formatter\":5},{\"columnMatch\":\"selectedSoftware\",\"formatter\":5},{\"columnMatch\":\"resourceGroup\",\"formatter\":5}],\"rowLimit\":1000,\"filter\":true,\"sortBy\":[{\"itemKey\":\"$gen_link_resourceId_3\",\"sortOrder\":2}],\"labelSettings\":[{\"columnId\":\"exemptionType\",\"label\":\"Resource Exemption exists\"},{\"columnId\":\"resourceId\",\"label\":\"Resource ID\"},{\"columnId\":\"subscriptionId\",\"label\":\"Subscription ID\"},{\"columnId\":\"environment\",\"label\":\"Environment\"},{\"columnId\":\"osType\",\"label\":\"OS Type\"},{\"columnId\":\"workspaceName\",\"label\":\"Workspace Name\"},{\"columnId\":\"agentMonitoring\",\"label\":\"Log Analytics agent status\"},{\"columnId\":\"unhealthyAssessmentsCount\",\"label\":\"Open Recommendations\"},{\"columnId\":\"pricing\",\"label\":\"Azure Defender status\"}]},\"sortBy\":[{\"itemKey\":\"$gen_link_resourceId_3\",\"sortOrder\":2}]},\"name\":\"query - 0\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"SelectedTab\",\"comparison\":\"isEqualTo\",\"value\":\"SecurityTab\"},\"name\":\"protectionStatus\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"selectedTab\",\"comparison\":\"isEqualTo\",\"value\":\"Security\"},\"name\":\"Security\"}],\"isLocked\":false,\"fallbackResourceIds\":[\"workbookresourceid-stage\"]}", "version": "1.0", "sourceId": "[parameters('workbookResourceId')]", "category": "[parameters('workbookType')]" diff --git a/azure_jumpstart_arcbox/artifacts/mgmtMonitorWorkbookDevOps.json b/azure_jumpstart_arcbox/artifacts/mgmtMonitorWorkbookDevOps.json index 6a14f5d8af..89745f3ee8 100644 --- a/azure_jumpstart_arcbox/artifacts/mgmtMonitorWorkbookDevOps.json +++ b/azure_jumpstart_arcbox/artifacts/mgmtMonitorWorkbookDevOps.json @@ -1400,7 +1400,7 @@ { "type": 1, "content": { - "json": "💡 To use this workbook, you'll need to configure **continuous export** to export data to a Log Analytics workspace:\r\n1. From Microsoft Defender for Cloud's sidebar, select **Environment Settings**.\r\n2. Select the specific Azure subscription for which you want to configure the data export.\r\n3. From the sidebar of the settings page for that subscription, select **Continuous Export**.\r\n4. Set the export target to **Log Analytics workspace**.\r\n5. Select the following data types: **Security recommendations** and **Secure Score (Preview)**.\r\n6. From the export frequency options, select **Streaming** and **Snapshots**.\r\n7. Make sure to select ArcBox's subscription, resource group and Log Analytics workspace as the export target. Select Save.\r\n\r\n[Learn more](https://docs.microsoft.com/en-us/azure/security-center/continuous-export?tabs=azure-portal#set-up-a-continuous-export)\r\n\r\n> **Notes**\r\n* To get full visibility, wait at least one week for the first snapshot to be exported.\r\n* To configure continuous export across your organization, use the supplied Azure Policy 'DeployIfNotExist' policies described [here](https://docs.microsoft.com/en-us/azure/security-center/continuous-export?tabs=azure-policy#set-up-a-continuous-export)." + "json": "💡 To use this workbook, you'll need to configure **continuous export** to export data to a Log Analytics workspace:\r\n1. From Microsoft Defender for Cloud's sidebar, select **Environment Settings**.\r\n2. Select the specific Azure subscription for which you want to configure the data export.\r\n3. From the sidebar of the settings page for that subscription, select **Continuous Export**.\r\n4. Set the export target to **Log Analytics workspace**.\r\n5. Select the following data types: **Security recommendations** and **Secure Score (Preview)**.\r\n6. From the export frequency options, select **Streaming** and **Snapshots**.\r\n7. Make sure to select ArcBox's subscription, resource group and Log Analytics workspace as the export target. Select Save.\r\n\r\n[Learn more](https://learn.microsoft.com/azure/security-center/continuous-export?tabs=azure-portal#set-up-a-continuous-export)\r\n\r\n> **Notes**\r\n* To get full visibility, wait at least one week for the first snapshot to be exported.\r\n* To configure continuous export across your organization, use the supplied Azure Policy 'DeployIfNotExist' policies described [here](https://learn.microsoft.com/azure/security-center/continuous-export?tabs=azure-policy#set-up-a-continuous-export)." }, "showPin": false, "name": "Instructions" diff --git a/azure_jumpstart_arcbox/artifacts/mgmtMonitorWorkbookFull.json b/azure_jumpstart_arcbox/artifacts/mgmtMonitorWorkbookFull.json index ea0fed94ff..1de21157ea 100644 --- a/azure_jumpstart_arcbox/artifacts/mgmtMonitorWorkbookFull.json +++ b/azure_jumpstart_arcbox/artifacts/mgmtMonitorWorkbookFull.json @@ -1607,7 +1607,7 @@ { "type": 1, "content": { - "json": "💡 To use this workbook, you'll need to configure **continuous export** to export data to a Log Analytics workspace:\r\n1. From Microsoft Defender for Cloud's sidebar, select **Environment Settings**.\r\n2. Select the specific Azure subscription for which you want to configure the data export.\r\n3. From the sidebar of the settings page for that subscription, select **Continuous Export**.\r\n4. Set the export target to **Log Analytics workspace**.\r\n5. Select the following data types: **Security recommendations** and **Secure Score (Preview)**.\r\n6. From the export frequency options, select **Streaming** and **Snapshots**.\r\n7. Make sure to select ArcBox's subscription, resource group and Log Analytics workspace as the export target. Select Save.\r\n\r\n[Learn more](https://docs.microsoft.com/en-us/azure/security-center/continuous-export?tabs=azure-portal#set-up-a-continuous-export)\r\n\r\n> **Notes**\r\n* To get full visibility, wait at least one week for the first snapshot to be exported.\r\n* To configure continuous export across your organization, use the supplied Azure Policy 'DeployIfNotExist' policies described [here](https://docs.microsoft.com/en-us/azure/security-center/continuous-export?tabs=azure-policy#set-up-a-continuous-export)." + "json": "💡 To use this workbook, you'll need to configure **continuous export** to export data to a Log Analytics workspace:\r\n1. From Microsoft Defender for Cloud's sidebar, select **Environment Settings**.\r\n2. Select the specific Azure subscription for which you want to configure the data export.\r\n3. From the sidebar of the settings page for that subscription, select **Continuous Export**.\r\n4. Set the export target to **Log Analytics workspace**.\r\n5. Select the following data types: **Security recommendations** and **Secure Score (Preview)**.\r\n6. From the export frequency options, select **Streaming** and **Snapshots**.\r\n7. Make sure to select ArcBox's subscription, resource group and Log Analytics workspace as the export target. Select Save.\r\n\r\n[Learn more](https://learn.microsoft.com/azure/security-center/continuous-export?tabs=azure-portal#set-up-a-continuous-export)\r\n\r\n> **Notes**\r\n* To get full visibility, wait at least one week for the first snapshot to be exported.\r\n* To configure continuous export across your organization, use the supplied Azure Policy 'DeployIfNotExist' policies described [here](https://learn.microsoft.com/azure/security-center/continuous-export?tabs=azure-policy#set-up-a-continuous-export)." }, "showPin": false, "name": "Instructions" diff --git a/azure_jumpstart_arcbox/artifacts/mgmtMonitorWorkbookITPro.json b/azure_jumpstart_arcbox/artifacts/mgmtMonitorWorkbookITPro.json index f7cafe50df..2beb6c41c6 100644 --- a/azure_jumpstart_arcbox/artifacts/mgmtMonitorWorkbookITPro.json +++ b/azure_jumpstart_arcbox/artifacts/mgmtMonitorWorkbookITPro.json @@ -750,7 +750,7 @@ { "type": 1, "content": { - "json": "💡 To use this workbook, you'll need to configure **continuous export** to export data to a Log Analytics workspace:\r\n1. From Microsoft Defender for Cloud's sidebar, select **Environment Settings**.\r\n2. Select the specific Azure subscription for which you want to configure the data export.\r\n3. From the sidebar of the settings page for that subscription, select **Continuous Export**.\r\n4. Set the export target to **Log Analytics workspace**.\r\n5. Select the following data types: **Security recommendations** and **Secure Score (Preview)**.\r\n6. From the export frequency options, select **Streaming** and **Snapshots**.\r\n7. Make sure to select ArcBox's subscription, resource group and Log Analytics workspace as the export target. Select Save.\r\n\r\n[Learn more](https://docs.microsoft.com/en-us/azure/security-center/continuous-export?tabs=azure-portal#set-up-a-continuous-export)\r\n\r\n> **Notes**\r\n* To get full visibility, wait at least one week for the first snapshot to be exported.\r\n* To configure continuous export across your organization, use the supplied Azure Policy 'DeployIfNotExist' policies described [here](https://docs.microsoft.com/en-us/azure/security-center/continuous-export?tabs=azure-policy#set-up-a-continuous-export)." + "json": "💡 To use this workbook, you'll need to configure **continuous export** to export data to a Log Analytics workspace:\r\n1. From Microsoft Defender for Cloud's sidebar, select **Environment Settings**.\r\n2. Select the specific Azure subscription for which you want to configure the data export.\r\n3. From the sidebar of the settings page for that subscription, select **Continuous Export**.\r\n4. Set the export target to **Log Analytics workspace**.\r\n5. Select the following data types: **Security recommendations** and **Secure Score (Preview)**.\r\n6. From the export frequency options, select **Streaming** and **Snapshots**.\r\n7. Make sure to select ArcBox's subscription, resource group and Log Analytics workspace as the export target. Select Save.\r\n\r\n[Learn more](https://learn.microsoft.com/azure/security-center/continuous-export?tabs=azure-portal#set-up-a-continuous-export)\r\n\r\n> **Notes**\r\n* To get full visibility, wait at least one week for the first snapshot to be exported.\r\n* To configure continuous export across your organization, use the supplied Azure Policy 'DeployIfNotExist' policies described [here](https://learn.microsoft.com/azure/security-center/continuous-export?tabs=azure-policy#set-up-a-continuous-export)." }, "showPin": false, "name": "Instructions" diff --git a/azure_jumpstart_hcibox/artifacts/SDN/CertHelpers.ps1 b/azure_jumpstart_hcibox/artifacts/SDN/CertHelpers.ps1 index 5e89d5b776..94e0acb7cb 100644 --- a/azure_jumpstart_hcibox/artifacts/SDN/CertHelpers.ps1 +++ b/azure_jumpstart_hcibox/artifacts/SDN/CertHelpers.ps1 @@ -1,5 +1,5 @@ # -------------------------------------------------------------- -# Copyright Microsoft Corporation. All Rights Reserved. +# Copyright � Microsoft Corporation. All Rights Reserved. # Microsoft Corporation (or based on where you live, one of its affiliates) licenses this sample code for your internal testing purposes only. # Microsoft provides the following sample code AS IS without warranty of any kind. The sample code arenot supported under any Microsoft standard support program or services. # Microsoft further disclaims all implied warranties including, without limitation, any implied warranties of merchantability or of fitness for a particular purpose. @@ -118,7 +118,7 @@ Function AddCertToLocalMachineStore($certFullPath, $storeName, $securePassword) } else { - # https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509keystorageflags(v=vs.110).aspx + # https://msdn.microsoft.com/library/system.security.cryptography.x509certificates.x509keystorageflags(v=vs.110).aspx $certificate.import($certFullPath, $securePassword, "MachineKeySet,PersistKeySet") } diff --git a/azure_jumpstart_hcibox/artifacts/SDN/SDNExpressUI.psm1 b/azure_jumpstart_hcibox/artifacts/SDN/SDNExpressUI.psm1 index 9c9fe02336..849f094176 100644 --- a/azure_jumpstart_hcibox/artifacts/SDN/SDNExpressUI.psm1 +++ b/azure_jumpstart_hcibox/artifacts/SDN/SDNExpressUI.psm1 @@ -420,7 +420,7 @@ function SDNExpressUI { - Plan SDN topic on docs.microsoft.com. + Plan SDN topic on docs.microsoft.com.