Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This article includes sample Azure Resource Manager templates to create diagnostic settings for an Azure resource. Each sample includes a template file and a parameters file with sample values to provide to the template.
Note
Before you deploy a sample:
- Ensure that the monitored resource and each selected destination already exist. The Bicep
existingdeclarations reference monitored resources; they don't create or update them. - Provide the destination subscription, resource group, and resource names used to compose the resource IDs. The resource-group templates target a monitored resource in the deployment resource group unless their scope says otherwise.
- Check the resource's supported log and metric categories and the destination requirements.
- Use a new diagnostic-setting name to add a setting. Reusing an existing name updates that setting, so preserve its required destinations, logs, metrics, retention configuration, and other settings.
Each named API-version placeholder corresponds to its resource declaration. Use the resource type's template reference to resolve that version. The Storage sample also uses a separately named API version for its endpoint lookup and its nested deployment.
To create a diagnostic setting for an Azure resource, add a resource of type <resource namespace>/providers/diagnosticSettings to the template. This article provides examples for some resource types, but the same pattern can be applied to other resource types. The collection of allowed logs and metrics varies for each resource type.
Important
Template deployments create or update the named diagnostic setting; they aren't partial PATCH operations. When updating a setting, preserve its required destinations and complete log and metric collections.
The following table lists the resource types with samples in this article.
| Resource type | Diagnostic settings resource |
|---|---|
| Activity log | Microsoft.Insights/diagnosticSettings |
| Azure Data Explorer | Microsoft.Kusto/clusters/providers/diagnosticSettings |
| Azure Key Vault | Microsoft.KeyVault/vaults/providers/diagnosticSettings |
| Azure SQL Database | microsoft.sql/servers/databases/providers/diagnosticSettings |
| Azure SQL Managed Instance | microsoft.sql/managedInstances/providers/diagnosticSettings |
| Managed instance of Azure SQL Database | microsoft.sql/managedInstances/databases/providers/diagnosticSettings |
| Recovery Services vault | microsoft.recoveryservices/vaults/providers/diagnosticSettings |
| Log Analytics workspace | Microsoft.OperationalInsights/workspaces/providers/diagnosticSettings |
| Azure Storage | Microsoft.Storage/storageAccounts/providers/diagnosticSettings |
Note
See Azure Resource Manager samples for Azure Monitor for a list of samples that are available and guidance on deploying them in your Azure subscription.
Diagnostic setting for an activity log
Important
Diagnostic settings for activity logs are created for a subscription, not for a resource group like settings for Azure resources. To deploy the Resource Manager template, use New-AzSubscriptionDeployment for PowerShell or az deployment sub create for the Azure CLI.
Activity log
The following sample creates a diagnostic setting for an activity log by adding a resource of type Microsoft.Insights/diagnosticSettings to the template.
The following Bicep example uses the Microsoft.Insights/diagnosticSettings resource type.
Configure diagnostic destinations for the activity log
targetScope = 'subscription'
param settingName string = '<SettingName>'
param destinationWorkspaceSubscriptionId string = '<DestinationWorkspaceSubscriptionId>'
param destinationWorkspaceResourceGroupName string = '<DestinationWorkspaceResourceGroupName>'
param destinationWorkspaceName string = '<DestinationWorkspaceName>'
param destinationStorageSubscriptionId string = '<DestinationStorageSubscriptionId>'
param destinationStorageResourceGroupName string = '<DestinationStorageResourceGroupName>'
param destinationStorageAccountName string = '<DestinationStorageAccountName>'
param eventHubSubscriptionId string = '<EventHubSubscriptionId>'
param eventHubResourceGroupName string = '<EventHubResourceGroupName>'
param eventHubNamespaceName string = '<EventHubNamespaceName>'
param eventHubAuthorizationRuleName string = '<EventHubAuthorizationRuleName>'
param eventHubName string = '<EventHubName>'
var workspaceId = resourceId(
destinationWorkspaceSubscriptionId,
destinationWorkspaceResourceGroupName,
'Microsoft.OperationalInsights/workspaces',
destinationWorkspaceName
)
var storageAccountId = resourceId(
destinationStorageSubscriptionId,
destinationStorageResourceGroupName,
'Microsoft.Storage/storageAccounts',
destinationStorageAccountName
)
var eventHubAuthorizationRuleId = resourceId(
eventHubSubscriptionId,
eventHubResourceGroupName,
'Microsoft.EventHub/namespaces/authorizationRules',
eventHubNamespaceName,
eventHubAuthorizationRuleName
)
resource diagnosticSetting 'Microsoft.Insights/diagnosticSettings@<DiagnosticSettingsApiVersion>' = {
name: settingName
properties: {
workspaceId: workspaceId
storageAccountId: storageAccountId
eventHubAuthorizationRuleId: eventHubAuthorizationRuleId
eventHubName: eventHubName
logs: [
{
category: 'Administrative'
enabled: true
}
{
category: 'Security'
enabled: true
}
{
category: 'ServiceHealth'
enabled: true
}
{
category: 'Alert'
enabled: true
}
{
category: 'Recommendation'
enabled: true
}
{
category: 'Policy'
enabled: true
}
{
category: 'Autoscale'
enabled: true
}
{
category: 'ResourceHealth'
enabled: true
}
]
}
}
Activity log parameter file
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"settingName": {
"value": "<SettingName>"
},
"destinationWorkspaceSubscriptionId": {
"value": "<DestinationWorkspaceSubscriptionId>"
},
"destinationWorkspaceResourceGroupName": {
"value": "<DestinationWorkspaceResourceGroupName>"
},
"destinationWorkspaceName": {
"value": "<DestinationWorkspaceName>"
},
"destinationStorageSubscriptionId": {
"value": "<DestinationStorageSubscriptionId>"
},
"destinationStorageResourceGroupName": {
"value": "<DestinationStorageResourceGroupName>"
},
"destinationStorageAccountName": {
"value": "<DestinationStorageAccountName>"
},
"eventHubSubscriptionId": {
"value": "<EventHubSubscriptionId>"
},
"eventHubResourceGroupName": {
"value": "<EventHubResourceGroupName>"
},
"eventHubNamespaceName": {
"value": "<EventHubNamespaceName>"
},
"eventHubAuthorizationRuleName": {
"value": "<EventHubAuthorizationRuleName>"
},
"eventHubName": {
"value": "<EventHubName>"
}
}
}
Diagnostic setting for Azure Data Explorer
The following sample creates a diagnostic setting for an Azure Data Explorer cluster by adding a resource of type Microsoft.Kusto/clusters/providers/diagnosticSettings to the template.
Azure Data Explorer
The following Bicep example uses the Microsoft.Insights/diagnosticSettings resource type.
Configure diagnostic categories for Azure Data Explorer
param clusterName string = '<ClusterName>'
param settingName string = '<SettingName>'
param destinationWorkspaceSubscriptionId string = '<DestinationWorkspaceSubscriptionId>'
param destinationWorkspaceResourceGroupName string = '<DestinationWorkspaceResourceGroupName>'
param destinationWorkspaceName string = '<DestinationWorkspaceName>'
param destinationStorageSubscriptionId string = '<DestinationStorageSubscriptionId>'
param destinationStorageResourceGroupName string = '<DestinationStorageResourceGroupName>'
param destinationStorageAccountName string = '<DestinationStorageAccountName>'
param eventHubSubscriptionId string = '<EventHubSubscriptionId>'
param eventHubResourceGroupName string = '<EventHubResourceGroupName>'
param eventHubNamespaceName string = '<EventHubNamespaceName>'
param eventHubAuthorizationRuleName string = '<EventHubAuthorizationRuleName>'
param eventHubName string = '<EventHubName>'
var workspaceId = resourceId(
destinationWorkspaceSubscriptionId,
destinationWorkspaceResourceGroupName,
'Microsoft.OperationalInsights/workspaces',
destinationWorkspaceName
)
var storageAccountId = resourceId(
destinationStorageSubscriptionId,
destinationStorageResourceGroupName,
'Microsoft.Storage/storageAccounts',
destinationStorageAccountName
)
var eventHubAuthorizationRuleId = resourceId(
eventHubSubscriptionId,
eventHubResourceGroupName,
'Microsoft.EventHub/namespaces/authorizationRules',
eventHubNamespaceName,
eventHubAuthorizationRuleName
)
resource dataExplorerCluster 'Microsoft.Kusto/clusters@<DataExplorerClusterApiVersion>' existing = {
name: clusterName
}
resource diagnosticSetting 'Microsoft.Insights/diagnosticSettings@<DiagnosticSettingsApiVersion>' = {
name: settingName
scope: dataExplorerCluster
properties: {
workspaceId: workspaceId
storageAccountId: storageAccountId
eventHubAuthorizationRuleId: eventHubAuthorizationRuleId
eventHubName: eventHubName
metrics: []
logs: [
{
category: 'Command'
categoryGroup: null
enabled: true
retentionPolicy: {
enabled: false
days: 0
}
}
{
category: 'Query'
categoryGroup: null
enabled: true
retentionPolicy: {
enabled: false
days: 0
}
}
{
category: 'Journal'
categoryGroup: null
enabled: true
retentionPolicy: {
enabled: false
days: 0
}
}
{
category: 'SucceededIngestion'
categoryGroup: null
enabled: false
retentionPolicy: {
enabled: false
days: 0
}
}
{
category: 'FailedIngestion'
categoryGroup: null
enabled: false
retentionPolicy: {
enabled: false
days: 0
}
}
{
category: 'IngestionBatching'
categoryGroup: null
enabled: false
retentionPolicy: {
enabled: false
days: 0
}
}
{
category: 'TableUsageStatistics'
categoryGroup: null
enabled: false
retentionPolicy: {
enabled: false
days: 0
}
}
{
category: 'TableDetails'
categoryGroup: null
enabled: false
retentionPolicy: {
enabled: false
days: 0
}
}
]
}
}
Azure Data Explorer parameter file
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"clusterName": {
"value": "<ClusterName>"
},
"settingName": {
"value": "<SettingName>"
},
"destinationWorkspaceSubscriptionId": {
"value": "<DestinationWorkspaceSubscriptionId>"
},
"destinationWorkspaceResourceGroupName": {
"value": "<DestinationWorkspaceResourceGroupName>"
},
"destinationWorkspaceName": {
"value": "<DestinationWorkspaceName>"
},
"destinationStorageSubscriptionId": {
"value": "<DestinationStorageSubscriptionId>"
},
"destinationStorageResourceGroupName": {
"value": "<DestinationStorageResourceGroupName>"
},
"destinationStorageAccountName": {
"value": "<DestinationStorageAccountName>"
},
"eventHubSubscriptionId": {
"value": "<EventHubSubscriptionId>"
},
"eventHubResourceGroupName": {
"value": "<EventHubResourceGroupName>"
},
"eventHubNamespaceName": {
"value": "<EventHubNamespaceName>"
},
"eventHubAuthorizationRuleName": {
"value": "<EventHubAuthorizationRuleName>"
},
"eventHubName": {
"value": "<EventHubName>"
}
}
}
Azure Data Explorer: enabling the 'audit' category group
Note
Use this variant instead of the individual-category example when you want the audit category group. Both variants use the Azure Data Explorer parameter file.
The following Bicep example uses the Microsoft.Insights/diagnosticSettings resource type.
Enable the Azure Data Explorer audit category group
param clusterName string = '<ClusterName>'
param settingName string = '<SettingName>'
param destinationWorkspaceSubscriptionId string = '<DestinationWorkspaceSubscriptionId>'
param destinationWorkspaceResourceGroupName string = '<DestinationWorkspaceResourceGroupName>'
param destinationWorkspaceName string = '<DestinationWorkspaceName>'
param destinationStorageSubscriptionId string = '<DestinationStorageSubscriptionId>'
param destinationStorageResourceGroupName string = '<DestinationStorageResourceGroupName>'
param destinationStorageAccountName string = '<DestinationStorageAccountName>'
param eventHubSubscriptionId string = '<EventHubSubscriptionId>'
param eventHubResourceGroupName string = '<EventHubResourceGroupName>'
param eventHubNamespaceName string = '<EventHubNamespaceName>'
param eventHubAuthorizationRuleName string = '<EventHubAuthorizationRuleName>'
param eventHubName string = '<EventHubName>'
var workspaceId = resourceId(
destinationWorkspaceSubscriptionId,
destinationWorkspaceResourceGroupName,
'Microsoft.OperationalInsights/workspaces',
destinationWorkspaceName
)
var storageAccountId = resourceId(
destinationStorageSubscriptionId,
destinationStorageResourceGroupName,
'Microsoft.Storage/storageAccounts',
destinationStorageAccountName
)
var eventHubAuthorizationRuleId = resourceId(
eventHubSubscriptionId,
eventHubResourceGroupName,
'Microsoft.EventHub/namespaces/authorizationRules',
eventHubNamespaceName,
eventHubAuthorizationRuleName
)
resource dataExplorerCluster 'Microsoft.Kusto/clusters@<DataExplorerClusterApiVersion>' existing = {
name: clusterName
}
resource diagnosticSetting 'Microsoft.Insights/diagnosticSettings@<DiagnosticSettingsApiVersion>' = {
name: settingName
scope: dataExplorerCluster
properties: {
workspaceId: workspaceId
storageAccountId: storageAccountId
eventHubAuthorizationRuleId: eventHubAuthorizationRuleId
eventHubName: eventHubName
logs: [
{
category: null
categoryGroup: 'audit'
enabled: true
retentionPolicy: {
enabled: false
days: 0
}
}
]
}
}
Diagnostic setting for Azure Key Vault
Important
For Azure Key Vault, the event hub must be in the same region as the key vault.
Azure Key Vault
The following sample creates a diagnostic setting for an instance of Azure Key Vault by adding a resource of type Microsoft.KeyVault/vaults/providers/diagnosticSettings to the template.
The following Bicep example uses the Microsoft.Insights/diagnosticSettings resource type.
Configure diagnostic destinations for Azure Key Vault
param settingName string = '<SettingName>'
param vaultName string = '<VaultName>'
param destinationWorkspaceSubscriptionId string = '<DestinationWorkspaceSubscriptionId>'
param destinationWorkspaceResourceGroupName string = '<DestinationWorkspaceResourceGroupName>'
param destinationWorkspaceName string = '<DestinationWorkspaceName>'
param destinationStorageSubscriptionId string = '<DestinationStorageSubscriptionId>'
param destinationStorageResourceGroupName string = '<DestinationStorageResourceGroupName>'
param destinationStorageAccountName string = '<DestinationStorageAccountName>'
param eventHubSubscriptionId string = '<EventHubSubscriptionId>'
param eventHubResourceGroupName string = '<EventHubResourceGroupName>'
param eventHubNamespaceName string = '<EventHubNamespaceName>'
param eventHubAuthorizationRuleName string = '<EventHubAuthorizationRuleName>'
param eventHubName string = '<EventHubName>'
var workspaceId = resourceId(
destinationWorkspaceSubscriptionId,
destinationWorkspaceResourceGroupName,
'Microsoft.OperationalInsights/workspaces',
destinationWorkspaceName
)
var storageAccountId = resourceId(
destinationStorageSubscriptionId,
destinationStorageResourceGroupName,
'Microsoft.Storage/storageAccounts',
destinationStorageAccountName
)
var eventHubAuthorizationRuleId = resourceId(
eventHubSubscriptionId,
eventHubResourceGroupName,
'Microsoft.EventHub/namespaces/authorizationRules',
eventHubNamespaceName,
eventHubAuthorizationRuleName
)
resource keyVault 'Microsoft.KeyVault/vaults@<KeyVaultApiVersion>' existing = {
name: vaultName
}
resource diagnosticSetting 'Microsoft.Insights/diagnosticSettings@<DiagnosticSettingsApiVersion>' = {
name: settingName
scope: keyVault
properties: {
workspaceId: workspaceId
storageAccountId: storageAccountId
eventHubAuthorizationRuleId: eventHubAuthorizationRuleId
eventHubName: eventHubName
logs: [
{
category: 'AuditEvent'
enabled: true
}
]
metrics: [
{
category: 'AllMetrics'
enabled: true
}
]
}
}
Azure Key Vault parameter file
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"settingName": {
"value": "<SettingName>"
},
"vaultName": {
"value": "<VaultName>"
},
"destinationWorkspaceSubscriptionId": {
"value": "<DestinationWorkspaceSubscriptionId>"
},
"destinationWorkspaceResourceGroupName": {
"value": "<DestinationWorkspaceResourceGroupName>"
},
"destinationWorkspaceName": {
"value": "<DestinationWorkspaceName>"
},
"destinationStorageSubscriptionId": {
"value": "<DestinationStorageSubscriptionId>"
},
"destinationStorageResourceGroupName": {
"value": "<DestinationStorageResourceGroupName>"
},
"destinationStorageAccountName": {
"value": "<DestinationStorageAccountName>"
},
"eventHubSubscriptionId": {
"value": "<EventHubSubscriptionId>"
},
"eventHubResourceGroupName": {
"value": "<EventHubResourceGroupName>"
},
"eventHubNamespaceName": {
"value": "<EventHubNamespaceName>"
},
"eventHubAuthorizationRuleName": {
"value": "<EventHubAuthorizationRuleName>"
},
"eventHubName": {
"value": "<EventHubName>"
}
}
}
Diagnostic setting for Azure SQL Database
The following sample creates a diagnostic setting for an instance of Azure SQL Database by adding a resource of type microsoft.sql/servers/databases/providers/diagnosticSettings to the template.
Azure SQL Database
The following Bicep example uses the Microsoft.Insights/diagnosticSettings resource type.
Configure diagnostic destinations for Azure SQL Database
param settingName string = '<SettingName>'
param serverName string = '<ServerName>'
param dbName string = '<DbName>'
param destinationWorkspaceSubscriptionId string = '<DestinationWorkspaceSubscriptionId>'
param destinationWorkspaceResourceGroupName string = '<DestinationWorkspaceResourceGroupName>'
param destinationWorkspaceName string = '<DestinationWorkspaceName>'
param destinationStorageSubscriptionId string = '<DestinationStorageSubscriptionId>'
param destinationStorageResourceGroupName string = '<DestinationStorageResourceGroupName>'
param destinationStorageAccountName string = '<DestinationStorageAccountName>'
param eventHubSubscriptionId string = '<EventHubSubscriptionId>'
param eventHubResourceGroupName string = '<EventHubResourceGroupName>'
param eventHubNamespaceName string = '<EventHubNamespaceName>'
param eventHubAuthorizationRuleName string = '<EventHubAuthorizationRuleName>'
param eventHubName string = '<EventHubName>'
var workspaceId = resourceId(
destinationWorkspaceSubscriptionId,
destinationWorkspaceResourceGroupName,
'Microsoft.OperationalInsights/workspaces',
destinationWorkspaceName
)
var storageAccountId = resourceId(
destinationStorageSubscriptionId,
destinationStorageResourceGroupName,
'Microsoft.Storage/storageAccounts',
destinationStorageAccountName
)
var eventHubAuthorizationRuleId = resourceId(
eventHubSubscriptionId,
eventHubResourceGroupName,
'Microsoft.EventHub/namespaces/authorizationRules',
eventHubNamespaceName,
eventHubAuthorizationRuleName
)
resource sqlServer 'Microsoft.Sql/servers@<SqlServerApiVersion>' existing = {
name: serverName
}
resource sqlDatabase 'Microsoft.Sql/servers/databases@<SqlDatabaseApiVersion>' existing = {
parent: sqlServer
name: dbName
}
resource diagnosticSetting 'Microsoft.Insights/diagnosticSettings@<DiagnosticSettingsApiVersion>' = {
name: settingName
scope: sqlDatabase
properties: {
workspaceId: workspaceId
storageAccountId: storageAccountId
eventHubAuthorizationRuleId: eventHubAuthorizationRuleId
eventHubName: eventHubName
logs: [
{
category: 'SQLInsights'
enabled: true
}
{
category: 'AutomaticTuning'
enabled: true
}
{
category: 'QueryStoreRuntimeStatistics'
enabled: true
}
{
category: 'QueryStoreWaitStatistics'
enabled: true
}
{
category: 'Errors'
enabled: true
}
{
category: 'DatabaseWaitStatistics'
enabled: true
}
{
category: 'Timeouts'
enabled: true
}
{
category: 'Blocks'
enabled: true
}
{
category: 'Deadlocks'
enabled: true
}
]
metrics: [
{
category: 'Basic'
enabled: true
}
{
category: 'InstanceAndAppAdvanced'
enabled: true
}
{
category: 'WorkloadManagement'
enabled: true
}
]
}
}
Azure SQL Database parameter file
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"settingName": {
"value": "<SettingName>"
},
"serverName": {
"value": "<ServerName>"
},
"dbName": {
"value": "<DbName>"
},
"destinationWorkspaceSubscriptionId": {
"value": "<DestinationWorkspaceSubscriptionId>"
},
"destinationWorkspaceResourceGroupName": {
"value": "<DestinationWorkspaceResourceGroupName>"
},
"destinationWorkspaceName": {
"value": "<DestinationWorkspaceName>"
},
"destinationStorageSubscriptionId": {
"value": "<DestinationStorageSubscriptionId>"
},
"destinationStorageResourceGroupName": {
"value": "<DestinationStorageResourceGroupName>"
},
"destinationStorageAccountName": {
"value": "<DestinationStorageAccountName>"
},
"eventHubSubscriptionId": {
"value": "<EventHubSubscriptionId>"
},
"eventHubResourceGroupName": {
"value": "<EventHubResourceGroupName>"
},
"eventHubNamespaceName": {
"value": "<EventHubNamespaceName>"
},
"eventHubAuthorizationRuleName": {
"value": "<EventHubAuthorizationRuleName>"
},
"eventHubName": {
"value": "<EventHubName>"
}
}
}
Diagnostic setting for Azure SQL Managed Instance
The following sample creates a diagnostic setting for an instance of Azure SQL Managed Instance by adding a resource of type microsoft.sql/managedInstances/providers/diagnosticSettings to the template.
Azure SQL Managed Instance
The following Bicep example uses the Microsoft.Insights/diagnosticSettings resource type.
Configure diagnostics for Azure SQL Managed Instance
param sqlManagedInstanceName string = '<SqlManagedInstanceName>'
param diagnosticSettingName string = '<DiagnosticSettingName>'
param destinationWorkspaceSubscriptionId string = '<DestinationWorkspaceSubscriptionId>'
param destinationWorkspaceResourceGroupName string = '<DestinationWorkspaceResourceGroupName>'
param destinationWorkspaceName string = '<DestinationWorkspaceName>'
param destinationStorageSubscriptionId string = '<DestinationStorageSubscriptionId>'
param destinationStorageResourceGroupName string = '<DestinationStorageResourceGroupName>'
param destinationStorageAccountName string = '<DestinationStorageAccountName>'
param eventHubSubscriptionId string = '<EventHubSubscriptionId>'
param eventHubResourceGroupName string = '<EventHubResourceGroupName>'
param eventHubNamespaceName string = '<EventHubNamespaceName>'
param eventHubAuthorizationRuleName string = '<EventHubAuthorizationRuleName>'
param eventHubName string = '<EventHubName>'
var diagnosticWorkspaceId = resourceId(
destinationWorkspaceSubscriptionId,
destinationWorkspaceResourceGroupName,
'Microsoft.OperationalInsights/workspaces',
destinationWorkspaceName
)
var storageAccountId = resourceId(
destinationStorageSubscriptionId,
destinationStorageResourceGroupName,
'Microsoft.Storage/storageAccounts',
destinationStorageAccountName
)
var eventHubAuthorizationRuleId = resourceId(
eventHubSubscriptionId,
eventHubResourceGroupName,
'Microsoft.EventHub/namespaces/authorizationRules',
eventHubNamespaceName,
eventHubAuthorizationRuleName
)
resource sqlManagedInstance 'Microsoft.Sql/managedInstances@<SqlManagedInstanceApiVersion>' existing = {
name: sqlManagedInstanceName
}
resource diagnosticSetting 'Microsoft.Insights/diagnosticSettings@<DiagnosticSettingsApiVersion>' = {
name: diagnosticSettingName
scope: sqlManagedInstance
properties: {
workspaceId: diagnosticWorkspaceId
storageAccountId: storageAccountId
eventHubAuthorizationRuleId: eventHubAuthorizationRuleId
eventHubName: eventHubName
logs: [
{
category: 'ResourceUsageStats'
enabled: true
}
{
category: 'DevOpsOperationsAudit'
enabled: true
}
{
category: 'SQLSecurityAuditEvents'
enabled: true
}
]
}
}
Azure SQL Managed Instance parameter file
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"sqlManagedInstanceName": {
"value": "<SqlManagedInstanceName>"
},
"diagnosticSettingName": {
"value": "<DiagnosticSettingName>"
},
"destinationWorkspaceSubscriptionId": {
"value": "<DestinationWorkspaceSubscriptionId>"
},
"destinationWorkspaceResourceGroupName": {
"value": "<DestinationWorkspaceResourceGroupName>"
},
"destinationWorkspaceName": {
"value": "<DestinationWorkspaceName>"
},
"destinationStorageSubscriptionId": {
"value": "<DestinationStorageSubscriptionId>"
},
"destinationStorageResourceGroupName": {
"value": "<DestinationStorageResourceGroupName>"
},
"destinationStorageAccountName": {
"value": "<DestinationStorageAccountName>"
},
"eventHubSubscriptionId": {
"value": "<EventHubSubscriptionId>"
},
"eventHubResourceGroupName": {
"value": "<EventHubResourceGroupName>"
},
"eventHubNamespaceName": {
"value": "<EventHubNamespaceName>"
},
"eventHubAuthorizationRuleName": {
"value": "<EventHubAuthorizationRuleName>"
},
"eventHubName": {
"value": "<EventHubName>"
}
}
}
Diagnostic setting for a managed instance of Azure SQL Database
The following sample creates a diagnostic setting for a managed instance of Azure SQL Database by adding a resource of type microsoft.sql/managedInstances/databases/providers/diagnosticSettings to the template.
Managed instance of Azure SQL Database
The following Bicep example uses the Microsoft.Insights/diagnosticSettings resource type.
Configure diagnostics for a managed SQL database
param sqlManagedInstanceName string = '<SqlManagedInstanceName>'
param sqlManagedDatabaseName string = '<SqlManagedDatabaseName>'
param diagnosticSettingName string = '<DiagnosticSettingName>'
param destinationWorkspaceSubscriptionId string = '<DestinationWorkspaceSubscriptionId>'
param destinationWorkspaceResourceGroupName string = '<DestinationWorkspaceResourceGroupName>'
param destinationWorkspaceName string = '<DestinationWorkspaceName>'
param destinationStorageSubscriptionId string = '<DestinationStorageSubscriptionId>'
param destinationStorageResourceGroupName string = '<DestinationStorageResourceGroupName>'
param destinationStorageAccountName string = '<DestinationStorageAccountName>'
param eventHubSubscriptionId string = '<EventHubSubscriptionId>'
param eventHubResourceGroupName string = '<EventHubResourceGroupName>'
param eventHubNamespaceName string = '<EventHubNamespaceName>'
param eventHubAuthorizationRuleName string = '<EventHubAuthorizationRuleName>'
param eventHubName string = '<EventHubName>'
var diagnosticWorkspaceId = resourceId(
destinationWorkspaceSubscriptionId,
destinationWorkspaceResourceGroupName,
'Microsoft.OperationalInsights/workspaces',
destinationWorkspaceName
)
var storageAccountId = resourceId(
destinationStorageSubscriptionId,
destinationStorageResourceGroupName,
'Microsoft.Storage/storageAccounts',
destinationStorageAccountName
)
var eventHubAuthorizationRuleId = resourceId(
eventHubSubscriptionId,
eventHubResourceGroupName,
'Microsoft.EventHub/namespaces/authorizationRules',
eventHubNamespaceName,
eventHubAuthorizationRuleName
)
resource sqlManagedInstance 'Microsoft.Sql/managedInstances@<SqlManagedInstanceApiVersion>' existing = {
name:sqlManagedInstanceName
}
resource sqlManagedDatabase 'Microsoft.Sql/managedInstances/databases@<SqlManagedDatabaseApiVersion>' existing = {
name: sqlManagedDatabaseName
parent: sqlManagedInstance
}
resource diagnosticSetting 'Microsoft.Insights/diagnosticSettings@<DiagnosticSettingsApiVersion>' = {
name: diagnosticSettingName
scope: sqlManagedDatabase
properties: {
workspaceId: diagnosticWorkspaceId
storageAccountId: storageAccountId
eventHubAuthorizationRuleId: eventHubAuthorizationRuleId
eventHubName: eventHubName
logs: [
{
category: 'SQLInsights'
enabled: true
}
{
category: 'QueryStoreRuntimeStatistics'
enabled: true
}
{
category: 'QueryStoreWaitStatistics'
enabled: true
}
{
category: 'Errors'
enabled: true
}
]
}
}
Managed instance of Azure SQL Database parameter file
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"sqlManagedInstanceName": {
"value": "<SqlManagedInstanceName>"
},
"sqlManagedDatabaseName": {
"value": "<SqlManagedDatabaseName>"
},
"diagnosticSettingName": {
"value": "<DiagnosticSettingName>"
},
"destinationWorkspaceSubscriptionId": {
"value": "<DestinationWorkspaceSubscriptionId>"
},
"destinationWorkspaceResourceGroupName": {
"value": "<DestinationWorkspaceResourceGroupName>"
},
"destinationWorkspaceName": {
"value": "<DestinationWorkspaceName>"
},
"destinationStorageSubscriptionId": {
"value": "<DestinationStorageSubscriptionId>"
},
"destinationStorageResourceGroupName": {
"value": "<DestinationStorageResourceGroupName>"
},
"destinationStorageAccountName": {
"value": "<DestinationStorageAccountName>"
},
"eventHubSubscriptionId": {
"value": "<EventHubSubscriptionId>"
},
"eventHubResourceGroupName": {
"value": "<EventHubResourceGroupName>"
},
"eventHubNamespaceName": {
"value": "<EventHubNamespaceName>"
},
"eventHubAuthorizationRuleName": {
"value": "<EventHubAuthorizationRuleName>"
},
"eventHubName": {
"value": "<EventHubName>"
}
}
}
Diagnostic setting for Recovery Services vault
The following sample creates a diagnostic setting for an Azure Recovery Services vault by adding a resource of type microsoft.recoveryservices/vaults/providers/diagnosticSettings to the template. This example specifies the collection mode as described in Azure resource logs. Specify Dedicated or AzureDiagnostics for the logAnalyticsDestinationType property.
Recovery Services vault
The following Bicep example uses the Microsoft.Insights/diagnosticSettings resource type.
Configure diagnostic destinations for a Recovery Services vault
param recoveryServicesName string = '<RecoveryServicesName>'
param settingName string = '<SettingName>'
param destinationWorkspaceSubscriptionId string = '<DestinationWorkspaceSubscriptionId>'
param destinationWorkspaceResourceGroupName string = '<DestinationWorkspaceResourceGroupName>'
param destinationWorkspaceName string = '<DestinationWorkspaceName>'
param destinationStorageSubscriptionId string = '<DestinationStorageSubscriptionId>'
param destinationStorageResourceGroupName string = '<DestinationStorageResourceGroupName>'
param destinationStorageAccountName string = '<DestinationStorageAccountName>'
param eventHubSubscriptionId string = '<EventHubSubscriptionId>'
param eventHubResourceGroupName string = '<EventHubResourceGroupName>'
param eventHubNamespaceName string = '<EventHubNamespaceName>'
param eventHubAuthorizationRuleName string = '<EventHubAuthorizationRuleName>'
param eventHubName string = '<EventHubName>'
var workspaceId = resourceId(
destinationWorkspaceSubscriptionId,
destinationWorkspaceResourceGroupName,
'Microsoft.OperationalInsights/workspaces',
destinationWorkspaceName
)
var storageAccountId = resourceId(
destinationStorageSubscriptionId,
destinationStorageResourceGroupName,
'Microsoft.Storage/storageAccounts',
destinationStorageAccountName
)
var eventHubAuthorizationRuleId = resourceId(
eventHubSubscriptionId,
eventHubResourceGroupName,
'Microsoft.EventHub/namespaces/authorizationRules',
eventHubNamespaceName,
eventHubAuthorizationRuleName
)
resource recoveryServicesVault 'Microsoft.RecoveryServices/vaults@<RecoveryServicesVaultApiVersion>' existing = {
name: recoveryServicesName
}
resource diagnosticSetting 'Microsoft.Insights/diagnosticSettings@<DiagnosticSettingsApiVersion>' = {
name: settingName
scope: recoveryServicesVault
properties: {
workspaceId: workspaceId
storageAccountId: storageAccountId
eventHubAuthorizationRuleId: eventHubAuthorizationRuleId
eventHubName: eventHubName
logs: [
{
category: 'AzureBackupReport'
enabled: false
}
{
category: 'CoreAzureBackup'
enabled: true
}
{
category: 'AddonAzureBackupJobs'
enabled: true
}
{
category: 'AddonAzureBackupAlerts'
enabled: true
}
{
category: 'AddonAzureBackupPolicy'
enabled: true
}
{
category: 'AddonAzureBackupStorage'
enabled: true
}
{
category: 'AddonAzureBackupProtectedInstance'
enabled: true
}
{
category: 'AzureSiteRecoveryJobs'
enabled: false
}
{
category: 'AzureSiteRecoveryEvents'
enabled: false
}
{
category: 'AzureSiteRecoveryReplicatedItems'
enabled: false
}
{
category: 'AzureSiteRecoveryReplicationStats'
enabled: false
}
{
category: 'AzureSiteRecoveryRecoveryPoints'
enabled: false
}
{
category: 'AzureSiteRecoveryReplicationDataUploadRate'
enabled: false
}
{
category: 'AzureSiteRecoveryProtectedDiskDataChurn'
enabled: false
}
]
logAnalyticsDestinationType: 'Dedicated'
}
}
Recovery Services vault parameter file
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"settingName": {
"value": "<SettingName>"
},
"recoveryServicesName": {
"value": "<RecoveryServicesName>"
},
"destinationWorkspaceSubscriptionId": {
"value": "<DestinationWorkspaceSubscriptionId>"
},
"destinationWorkspaceResourceGroupName": {
"value": "<DestinationWorkspaceResourceGroupName>"
},
"destinationWorkspaceName": {
"value": "<DestinationWorkspaceName>"
},
"destinationStorageSubscriptionId": {
"value": "<DestinationStorageSubscriptionId>"
},
"destinationStorageResourceGroupName": {
"value": "<DestinationStorageResourceGroupName>"
},
"destinationStorageAccountName": {
"value": "<DestinationStorageAccountName>"
},
"eventHubSubscriptionId": {
"value": "<EventHubSubscriptionId>"
},
"eventHubResourceGroupName": {
"value": "<EventHubResourceGroupName>"
},
"eventHubNamespaceName": {
"value": "<EventHubNamespaceName>"
},
"eventHubAuthorizationRuleName": {
"value": "<EventHubAuthorizationRuleName>"
},
"eventHubName": {
"value": "<EventHubName>"
}
}
}
Diagnostic setting for a Log Analytics workspace
The following sample creates a diagnostic setting for a Log Analytics workspace by adding a resource of type Microsoft.OperationalInsights/workspaces/providers/diagnosticSettings to the template. This example sends audit data about queries executed in the workspace to the same workspace.
Log Analytics workspace
The following Bicep example uses the Microsoft.Insights/diagnosticSettings resource type.
Configure query auditing for a Log Analytics workspace
param workspaceName string = '<WorkspaceName>'
param settingName string = '<SettingName>'
param destinationWorkspaceSubscriptionId string = '<DestinationWorkspaceSubscriptionId>'
param destinationWorkspaceResourceGroupName string = '<DestinationWorkspaceResourceGroupName>'
param destinationWorkspaceName string = '<DestinationWorkspaceName>'
param destinationStorageSubscriptionId string = '<DestinationStorageSubscriptionId>'
param destinationStorageResourceGroupName string = '<DestinationStorageResourceGroupName>'
param destinationStorageAccountName string = '<DestinationStorageAccountName>'
param eventHubSubscriptionId string = '<EventHubSubscriptionId>'
param eventHubResourceGroupName string = '<EventHubResourceGroupName>'
param eventHubNamespaceName string = '<EventHubNamespaceName>'
param eventHubAuthorizationRuleName string = '<EventHubAuthorizationRuleName>'
param eventHubName string = '<EventHubName>'
var workspaceId = resourceId(
destinationWorkspaceSubscriptionId,
destinationWorkspaceResourceGroupName,
'Microsoft.OperationalInsights/workspaces',
destinationWorkspaceName
)
var storageAccountId = resourceId(
destinationStorageSubscriptionId,
destinationStorageResourceGroupName,
'Microsoft.Storage/storageAccounts',
destinationStorageAccountName
)
var eventHubAuthorizationRuleId = resourceId(
eventHubSubscriptionId,
eventHubResourceGroupName,
'Microsoft.EventHub/namespaces/authorizationRules',
eventHubNamespaceName,
eventHubAuthorizationRuleName
)
resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@<WorkspaceApiVersion>' existing = {
name: workspaceName
}
resource diagnosticSetting 'Microsoft.Insights/diagnosticSettings@<DiagnosticSettingsApiVersion>' = {
name: settingName
scope: logAnalyticsWorkspace
properties: {
workspaceId: workspaceId
storageAccountId: storageAccountId
eventHubAuthorizationRuleId: eventHubAuthorizationRuleId
eventHubName: eventHubName
logs: [
{
category: 'Audit'
enabled: true
}
]
}
}
Log Analytics workspace parameter file
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"settingName": {
"value": "<SettingName>"
},
"workspaceName": {
"value": "<WorkspaceName>"
},
"destinationWorkspaceSubscriptionId": {
"value": "<DestinationWorkspaceSubscriptionId>"
},
"destinationWorkspaceResourceGroupName": {
"value": "<DestinationWorkspaceResourceGroupName>"
},
"destinationWorkspaceName": {
"value": "<DestinationWorkspaceName>"
},
"destinationStorageSubscriptionId": {
"value": "<DestinationStorageSubscriptionId>"
},
"destinationStorageResourceGroupName": {
"value": "<DestinationStorageResourceGroupName>"
},
"destinationStorageAccountName": {
"value": "<DestinationStorageAccountName>"
},
"eventHubSubscriptionId": {
"value": "<EventHubSubscriptionId>"
},
"eventHubResourceGroupName": {
"value": "<EventHubResourceGroupName>"
},
"eventHubNamespaceName": {
"value": "<EventHubNamespaceName>"
},
"eventHubAuthorizationRuleName": {
"value": "<EventHubAuthorizationRuleName>"
},
"eventHubName": {
"value": "<EventHubName>"
}
}
}
Diagnostic setting for Azure Storage
The following sample creates a diagnostic setting for each storage service endpoint that's available in the Azure Storage account. A setting is applied to each individual storage service that's available on the account. The storage services that are available depend on the type of storage account.
This template creates a diagnostic setting for a storage service in the account only if it exists for the account. For each available service, the diagnostic setting enables transaction metrics, and the collection of resource logs for read, write, and delete operations.
Azure Storage
The following Bicep example uses the Microsoft.Insights/diagnosticSettings resource type.
main.bicep
Note
Keep main.bicep and module.bicep in the same directory. The main file retrieves the existing account's service endpoints and passes them, along with the destination parameters, to the module.
param storageAccountName string = '<StorageAccountName>'
param settingName string = '<SettingName>'
param storageSyncName string = '<StorageSyncName>'
param destinationWorkspaceSubscriptionId string = '<DestinationWorkspaceSubscriptionId>'
param destinationWorkspaceResourceGroupName string = '<DestinationWorkspaceResourceGroupName>'
param destinationWorkspaceName string = '<DestinationWorkspaceName>'
module nested './module.bicep' = {
name: 'nested'
params: {
endpoints: reference(resourceId('Microsoft.Storage/storageAccounts', storageAccountName), '<StorageEndpointReadApiVersion>', 'Full').properties.primaryEndpoints
settingName: settingName
storageAccountName: storageAccountName
storageSyncName: storageSyncName
destinationWorkspaceSubscriptionId: destinationWorkspaceSubscriptionId
destinationWorkspaceResourceGroupName: destinationWorkspaceResourceGroupName
destinationWorkspaceName: destinationWorkspaceName
}
}
module.bicep
Note
This module is invoked by main.bicep; it isn't a separate deployment entry point. Its endpoints object comes from the existing storage account. storageSyncName identifies a separate destination storage account in the same deployment resource group.
Configure diagnostics for available storage services
param endpoints object
param settingName string = '<SettingName>'
param storageAccountName string = '<StorageAccountName>'
param storageSyncName string = '<StorageSyncName>'
param destinationWorkspaceSubscriptionId string = '<DestinationWorkspaceSubscriptionId>'
param destinationWorkspaceResourceGroupName string = '<DestinationWorkspaceResourceGroupName>'
param destinationWorkspaceName string = '<DestinationWorkspaceName>'
var workspaceId = resourceId(
destinationWorkspaceSubscriptionId,
destinationWorkspaceResourceGroupName,
'Microsoft.OperationalInsights/workspaces',
destinationWorkspaceName
)
var hasBlob = contains(endpoints, 'blob')
var hasTable = contains(endpoints, 'table')
var hasFile = contains(endpoints, 'file')
var hasQueue = contains(endpoints, 'queue')
resource storageAccount 'Microsoft.Storage/storageAccounts@<StorageAccountApiVersion>' existing = {
name: storageAccountName
}
resource diagnosticSetting 'Microsoft.Insights/diagnosticSettings@<DiagnosticSettingsApiVersion>' = {
name: settingName
scope: storageAccount
properties: {
workspaceId: workspaceId
storageAccountId: resourceId('Microsoft.Storage/storageAccounts', storageSyncName)
metrics: [
{
category: 'Transaction'
enabled: true
}
]
}
}
resource blob 'Microsoft.Storage/storageAccounts/blobServices@<StorageBlobServiceApiVersion>' existing = {
name:'default'
parent:storageAccount
}
resource blobSetting 'Microsoft.Insights/diagnosticSettings@<DiagnosticSettingsApiVersion>' = if (hasBlob) {
name: settingName
scope: blob
properties: {
workspaceId: workspaceId
storageAccountId: resourceId('Microsoft.Storage/storageAccounts', storageSyncName)
logs: [
{
category: 'StorageRead'
enabled: true
}
{
category: 'StorageWrite'
enabled: true
}
{
category: 'StorageDelete'
enabled: true
}
]
metrics: [
{
category: 'Transaction'
enabled: true
}
]
}
}
resource table 'Microsoft.Storage/storageAccounts/tableServices@<StorageTableServiceApiVersion>' existing = {
name:'default'
parent:storageAccount
}
resource tableSetting 'Microsoft.Insights/diagnosticSettings@<DiagnosticSettingsApiVersion>' = if (hasTable) {
name: settingName
scope: table
properties: {
workspaceId: workspaceId
storageAccountId: resourceId('Microsoft.Storage/storageAccounts', storageSyncName)
logs: [
{
category: 'StorageRead'
enabled: true
}
{
category: 'StorageWrite'
enabled: true
}
{
category: 'StorageDelete'
enabled: true
}
]
metrics: [
{
category: 'Transaction'
enabled: true
}
]
}
}
resource file 'Microsoft.Storage/storageAccounts/fileServices@<StorageFileServiceApiVersion>' existing = {
name:'default'
parent:storageAccount
}
resource fileSetting 'Microsoft.Insights/diagnosticSettings@<DiagnosticSettingsApiVersion>' = if (hasFile) {
name: settingName
scope: file
properties: {
workspaceId: workspaceId
storageAccountId: resourceId('Microsoft.Storage/storageAccounts', storageSyncName)
logs: [
{
category: 'StorageRead'
enabled: true
}
{
category: 'StorageWrite'
enabled: true
}
{
category: 'StorageDelete'
enabled: true
}
]
metrics: [
{
category: 'Transaction'
enabled: true
}
]
}
}
resource queue 'Microsoft.Storage/storageAccounts/queueServices@<StorageQueueServiceApiVersion>' existing = {
name:'default'
parent:storageAccount
}
resource queueSetting 'Microsoft.Insights/diagnosticSettings@<DiagnosticSettingsApiVersion>' = if (hasQueue) {
name: settingName
scope: queue
properties: {
workspaceId: workspaceId
storageAccountId: resourceId('Microsoft.Storage/storageAccounts', storageSyncName)
logs: [
{
category: 'StorageRead'
enabled: true
}
{
category: 'StorageWrite'
enabled: true
}
{
category: 'StorageDelete'
enabled: true
}
]
metrics: [
{
category: 'Transaction'
enabled: true
}
]
}
}
Azure Storage parameter file
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"value": "<StorageAccountName>"
},
"settingName": {
"value": "<SettingName>"
},
"storageSyncName": {
"value": "<StorageSyncName>"
},
"destinationWorkspaceSubscriptionId": {
"value": "<DestinationWorkspaceSubscriptionId>"
},
"destinationWorkspaceResourceGroupName": {
"value": "<DestinationWorkspaceResourceGroupName>"
},
"destinationWorkspaceName": {
"value": "<DestinationWorkspaceName>"
}
}
}