Files
azure-examples/GrafanaBlazor/.bicep/modules/monitoring.bicep

101 lines
3.2 KiB
Bicep

@description('The location for all resources')
param location string
@description('The name of the Application Insights instance')
param appInsightsName string
@description('The name of the Log Analytics Workspace')
param logAnalyticsWorkspaceName string
@description('The name of the Grafana instance')
param grafanaName string = 'grafana-${uniqueString(resourceGroupId())}'
// Create Log Analytics Workspace
resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2022-10-01' = {
name: logAnalyticsWorkspaceName
location: location
properties: {
sku: {
name: 'PerGB2018'
}
retentionInDays: 30
features: {
enableLogAccessUsingOnlyResourcePermissions: true
}
}
}
// Create Application Insights
resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
name: appInsightsName
location: location
kind: 'web'
properties: {
Application_Type: 'web'
WorkspaceResourceId: logAnalyticsWorkspace.id
IngestionMode: 'LogAnalytics'
publicNetworkAccessForIngestion: 'Enabled'
publicNetworkAccessForQuery: 'Enabled'
}
}
// Create Grafana Instance - Standard SKU (lowest cost managed option)
resource grafana 'Microsoft.Dashboard/grafana@2023-09-01' = {
name: grafanaName
location: location
sku: {
name: 'Standard'
}
identity: {
type: 'SystemAssigned'
}
properties: {
apiKey: 'Enabled'
autoLogoutMinutes: 0
azureMonitorWorkspaceIntegrations: [
{
azureMonitorWorkspaceResourceId: logAnalyticsWorkspace.id
}
]
grafanaIntegrations: {
azureMonitorWorkspaceIntegrations: [
{
azureMonitorWorkspaceResourceId: logAnalyticsWorkspace.id
}
]
}
}
}
// Assign Monitoring Data Reader role to Grafana for Log Analytics Workspace
resource grafanaLogAnalyticsRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
scope: logAnalyticsWorkspace
name: guid(logAnalyticsWorkspace.id, grafana.id, 'b24988ac-6180-42a0-ab88-20f7382dd24c')
properties: {
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
principalId: grafana.identity.principalId
principalType: 'ServicePrincipal'
}
}
// Assign Monitoring Data Reader role to Grafana for Application Insights
resource grafanaAppInsightsRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
scope: applicationInsights
name: guid(applicationInsights.id, grafana.id, 'b24988ac-6180-42a0-ab88-20f7382dd24c')
properties: {
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
principalId: grafana.identity.principalId
principalType: 'ServicePrincipal'
}
}
// Outputs
output appInsightsName string = applicationInsights.name
output instrumentationKey string = applicationInsights.properties.InstrumentationKey
output connectionString string = applicationInsights.properties.ConnectionString
output workspaceId string = logAnalyticsWorkspace.id
output workspaceName string = logAnalyticsWorkspace.name
output grafanaName string = grafana.name
output grafanaId string = grafana.id
output grafanaEndpoint string = grafana.properties.endpoint