101 lines
3.2 KiB
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
|