Manually install Configuration Manager Log Analytics Integration

  • Last update on June 17th, 2025

Please note that this article is valid exclusively for the self-hosted version of Configuration Manager

 

Integrating Configuration Manager with Azure Log Analytics allows you to collect, monitor, and analyze Sync data for advanced reporting and automation. In Configuration Manager, the Log Analytics integration can be installed automatically via the Reports page. 

If you cannot use the automated installer, or wish to utilize custom resources in your tenant, you can follow the steps outlined below. This guide walks you through creating an Azure App Registration, configuring a resource group with the necessary analytics infrastructure, assigning permissions, and updating Pipeline variables.

Create an App Registration

  1. Go to Azure Active Directory > App registrations > New registration.
  2. Name:
    Suggested: Simeon Cloud Reporting
  3. Register the application.
  4. Create a Client Secret:
    In the app registration, go to Certificates & secrets > New client secret.

Provision Azure Resources

Create a dedicated Resource Group that includes the following:

  • Log Analytics Workspace
  • Data Collection Endpoint (DCE)
  • Data Collection Rule (DCR)

These resources can be provisioned using ARM templates or through the Azure Portal. 

Expand to view the ARM Template

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "workspaceName": {
      "type": "string"
    },
    "streamName": {
      "type": "string"
    },
    "dataCollectionRuleName": {
      "type": "string",
      "defaultValue": "SyncLogCollectionRule"
    },
    "dataCollectionEndpointName": {
      "type": "string",
      "defaultValue": "SyncLogCollectionEndpoint"
    },
    "retentionInDays": {
      "type": "int",
      "defaultValue": 120
    }
  },
  "resources": [
    {
      "type": "Microsoft.OperationalInsights/workspaces",
      "apiVersion": "2022-10-01",
      "name": "[parameters('workspaceName')]",
      "location": "[resourceGroup().location]",
      "properties": {
        "sku": {
          "name": "pergb2018"
        },
        "retentionInDays": "[parameters('retentionInDays')]",
        "features": {
          "enableLogAccessUsingOnlyResourcePermissions": true
        },
        "workspaceCapping": {
          "dailyQuotaGb": -1
        },
        "publicNetworkAccessForIngestion": "Enabled",
        "publicNetworkAccessForQuery": "Enabled"
      }
    },
    {
      "type": "Microsoft.Insights/dataCollectionEndpoints",
      "apiVersion": "2022-06-01",
      "name": "[parameters('dataCollectionEndpointName')]",
      "location": "[resourceGroup().location]",
      "properties": {
        "networkAcls": {
          "publicNetworkAccess": "Enabled"
        }
      }
    },
    {
      "type": "Microsoft.OperationalInsights/workspaces/tables",
      "apiVersion": "2021-12-01-preview",
      "name": "[concat(parameters('workspaceName'), '/SyncLogs_CL')]",
      "dependsOn": [
        "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspaceName'))]"
      ],
      "properties": {
        "totalRetentionInDays": "[parameters('retentionInDays')]",
        "plan": "Analytics",
        "schema": {
          "name": "SyncLogs_CL",
          "columns": [
            { "name": "Action",                         "type": "string"   },
            { "name": "Baseline_Name",                  "type": "string"   },
            { "name": "Baseline_Property_Value",        "type": "string"   },
            { "name": "Change_Type",                    "type": "string"   },
            { "name": "Configuration",                  "type": "string"   },
            { "name": "Configuration_Description",      "type": "string"   },
            { "name": "Configuration_Full_Name",        "type": "string"   },
            { "name": "Configuration_Reconciliation_Type","type": "string"  },
            { "name": "Configuration_Type",             "type": "string"   },
            { "name": "Configuration_Type_Description", "type": "string"   },
            { "name": "Error_Message",                  "type": "string"   },
            { "name": "Old_Property_Value",             "type": "string"   },
            { "name": "Organization",                   "type": "string"   },
            { "name": "Property_Name",                  "type": "string"   },
            { "name": "Property_Reconciliation_Type",   "type": "string"   },
            { "name": "Property_Value",                 "type": "string"   },
            { "name": "Sync_Comment",                   "type": "string"   },
            { "name": "Sync_Date_Time",                 "type": "datetime" },
            { "name": "Sync_Run_Name",                  "type": "string"   },
            { "name": "Tenant",                         "type": "string"   },
            { "name": "TimeGenerated",                  "type": "datetime" }
          ]
        },
        "retentionInDays": "[parameters('retentionInDays')]"
      }
    },
    {
      "type": "Microsoft.Insights/dataCollectionRules",
      "apiVersion": "2021-09-01-preview",
      "name": "[parameters('dataCollectionRuleName')]",
      "location": "[resourceGroup().location]",
      "dependsOn": [
        "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspaceName'))]",
        "[resourceId('Microsoft.Insights/dataCollectionEndpoints', parameters('dataCollectionEndpointName'))]",
        "[resourceId('Microsoft.OperationalInsights/workspaces/tables', parameters('workspaceName'), 'SyncLogs_CL')]"
      ],
      "properties": {
        "dataCollectionEndpointId": "[resourceId('Microsoft.Insights/dataCollectionEndpoints', parameters('dataCollectionEndpointName'))]",
        "streamDeclarations": {
          "[parameters('streamName')]": {
            "columns": [
              { "name": "Action",                          "type": "string"   },
              { "name": "Baseline_Name",                   "type": "string"   },
              { "name": "Baseline_Property_Value",         "type": "string"   },
              { "name": "Change_Type",                     "type": "string"   },
              { "name": "Configuration",                   "type": "string"   },
              { "name": "Configuration_Description",       "type": "string"   },
              { "name": "Configuration_Full_Name",         "type": "string"   },
              { "name": "Configuration_Reconciliation_Type","type": "string"   },
              { "name": "Configuration_Type",              "type": "string"   },
              { "name": "Configuration_Type_Description",  "type": "string"   },
              { "name": "Error_Message",                   "type": "string"   },
              { "name": "Old_Property_Value",              "type": "string"   },
              { "name": "Organization",                    "type": "string"   },
              { "name": "Property_Name",                   "type": "string"   },
              { "name": "Property_Reconciliation_Type",    "type": "string"   },
              { "name": "Property_Value",                  "type": "string"   },
              { "name": "Sync_Comment",                    "type": "string"   },
              { "name": "Sync_Date_Time",                  "type": "datetime" },
              { "name": "Sync_Run_Name",                   "type": "string"   },
              { "name": "Tenant",                          "type": "string"   }
            ]
          }
        },
        "destinations": {
          "logAnalytics": [
            {
              "workspaceResourceId": "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspaceName'))]",
              "name": "[parameters('workspaceName')]"
            }
          ]
        },
        "dataFlows": [
          {
            "streams": [
              "[parameters('streamName')]"
            ],
            "destinations": [
              "[parameters('workspaceName')]"
            ],
            "transformKql": "source\n| extend TimeGenerated = todatetime(Sync_Date_Time)\n",
            "outputStream": "Custom-SyncLogs_CL"
          }
        ]
      }
    }
  ],
  "outputs": {
    "dataCollectionEndpointId": {
      "type": "string",
      "value": "[resourceId('Microsoft.Insights/dataCollectionEndpoints', parameters('dataCollectionEndpointName'))]"
    },
    "dataCollectionRuleId": {
      "type": "string",
      "value": "[resourceId('Microsoft.Insights/dataCollectionRules', parameters('dataCollectionRuleName'))]"
    },
    "logAnalyticsResourceId": {
      "type": "string",
      "value": "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspaceName'))]"
    }
  }
}
 
 

Assign Required Role

Update Pipeline variables in DevOps

Navigate to your Configuration Manager project in Azure DevOps > Pipelines > Library > Variable Groups and select the variable group named “Sync”. 

If there is no variable group, you should create a new one. 

Update/define the following variables:

  • LogAnalyticsEndpointUrl
    • Constructed in the following format:
      {Data collection endpoint injestion URL}/dataCollectionRules/{dcr-id}/streams/Custom-SimeonSync
    • Example
      https://simeoncloud-simeoncloud-com-0xzf.eastus-1.ingest.monitor.azure.com/dataCollectionRules/dcr-bcf4176c6571489bdfgdf1de778781988b6/streams/Custom-SimeonSync
  • SimeonSyncIntegrationAppId App ID 
  • SimeonSyncIntegrationAppSecret: the client secret value you created earlier.
  • SimeonSyncIntegrationTenant: the tenant domain name