OMS Agent einem VM Scale Set hinzufügen

Mit VM Scale Sets können Gruppen gleicher VMs bereitgestellt werden. Diese entstammen alle dem gleichen Image und weisen eine gleiche Konfiguration auf. VM Scale Sets sind von daher ideal dafür geignet für Applikationen die viel Skalieren (sowohl scale-in als auch scale-out) eingesetzt zu werden.

Ein Beispiel für den Einsatz von VM Scale Sets sind Service Fabric Cluster, die unter Azure deployed werden können. VM Scale Sets bilden hierbei die Grundlage für die Knoten des Clusters und können dynamisch skaliert werden.

In vielen Fällen ist es wünschenswert, dass die Knoten innerhalb eines Scale Sets überwacht werden können. Hierfür bietet sich OMS Log Analytics an, welches die Event Logs und Performance Counter aus einer VM abziehen und auswerten kann. Um den OMS Agenten (a.k.a. Microsoft Management Agent) auf das VM Scale Set zu installieren gibt es mehrere Möglichkeiten. Diese sind im folgenden beschrieben.

Installation via ARM Template

Das ARM Template, welches zum Deployment des VM Scale Sets verwendet wird muss lediglich um die VM Extension erweitert werden:

 {
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  "properties": {
    "virtualMachineProfile": {
      "extensionProfile": {
        "extensions": [
          {
            "name": "OmsAgent",
            "properties": {
              "type": "MicrosoftMonitoringAgent",
              "autoUpgradeMinorVersion": true,
              "protectedSettings": {
                "workspaceKey" : "!!! WORKSPACE KEY !!!"
              },
              "publisher": "Microsoft.EnterpriseCloud.Monitoring",
              "settings": {
                "workspaceId" : "!!! WORKSPACE ID !!!"
              },
              "typeHandlerVersion": "1.0"
            }
          }
        ]
      }
    }
  }
}

Wenn ein bestehendes Template erweitert wird, kann dieses auch genutzt werden, um ein bereits vorhandenes Deployment zu aktualisieren und dem OMS Agenten nach zu installieren.

Installation via PowerShell

 $resourceGroupName = "!!! RESOURCE GROUP NAME !!!";
$workspaceName = "!!! WORKSPACE NAME !!!";
$scaleSetName = "!!! SCALE SET NAME !!!";

Login-AzureRmAccount;

$workspace = (Get-AzureRmOperationalInsightsWorkspace).Where({$_.Name -eq $workspaceName});
$workspaceId = $workspace.CustomerId;
$workspaceKey = (Get-AzureRmOperationalInsightsWorkspaceSharedKeys -ResourceGroupName $workspace.ResourceGroupName -Name $workspace.Name).PrimarySharedKey;

$setting = [Newtonsoft.Json.Linq.JObject]::Parse("{'workspaceId': '$workspaceId'}");
$protectedSetting = [Newtonsoft.Json.Linq.JObject]::Parse("{'workspaceKey': '$workspaceKey'}");

$scaleSet = Get-AzureRmVmss -ResourceGroupName $resourceGroupName -VMScaleSetName $scaleSetName;
$scaleSet = Add-AzureRmVmssExtension -VirtualMachineScaleSet $scaleSet -Name "OmsAgent" -Publisher "Microsoft.EnterpriseCloud.Monitoring" -Type "MicrosoftMonitoringAgent" -TypeHandlerVersion "1.0" -AutoUpgradeMinorVersion $true -Setting $setting -ProtectedSetting $protectedSetting;
Update-AzureRmVmss -ResourceGroupName $resourceGroupName -Name $scaleSet.Name -VirtualMachineScaleSet $scaleSet;