Händelseaggregering och insamling med Hjälp av Windows Azure Diagnostics

När du kör ett Azure Service Fabric-kluster är det en bra idé att samla in loggarna från alla noder på en central plats. Om du har loggarna på en central plats kan du analysera och felsöka problem i klustret, eller problem i de program och tjänster som körs i klustret.

Ett sätt att ladda upp och samla in loggar är att använda WAD-tillägget (Windows Azure Diagnostics), som laddar upp loggar till Azure Storage, och även har möjlighet att skicka loggar till Azure Application Insights eller Event Hubs. Du kan också använda en extern process för att läsa händelserna från lagringen och placera dem i en analysplattformsprodukt, till exempel Azure Monitor-loggar eller en annan loggparsningslösning.

Kommentar

Vi rekommenderar att du använder Azure Az PowerShell-modulen för att interagera med Azure. Se Installera Azure PowerShell för att komma igång. Information om hur du migrerar till Az PowerShell-modulen finns i artikeln om att migrera Azure PowerShell från AzureRM till Az.

Förutsättningar

Följande verktyg används i den här artikeln:

Service Fabric-plattformshändelser

Service Fabric konfigurerar dig med några färdiga loggningskanaler, där följande kanaler är förkonfigurerade med tillägget för att skicka övervaknings- och diagnostikdata till en lagringstabell eller någon annanstans:

Distribuera diagnostiktillägget via portalen

Det första steget vid insamling av loggar är att distribuera diagnostiktillägget på noderna för vm-skalningsuppsättningar i Service Fabric-klustret. Diagnostiktillägget samlar in loggar på varje virtuell dator och laddar upp dem till det lagringskonto som du anger. Följande steg beskriver hur du gör detta för nya och befintliga kluster via Azure-portalen och Azure Resource Manager-mallar.

Distribuera diagnostiktillägget som en del av klusterskapandet via Azure-portalen

När du skapar klustret expanderar du de valfria inställningarna i klusterkonfigurationssteget och kontrollerar att Diagnostik är inställt på På (standardinställningen).

Azure Diagnostics settings in the portal for cluster creation

Vi rekommenderar starkt att du laddar ned mallen innan du klickar på Skapa i det sista steget. Mer information finns i Konfigurera ett Service Fabric-kluster med hjälp av en Azure Resource Manager-mall. Du behöver mallen för att göra ändringar i vilka kanaler (som anges ovan) för att samla in data från.

Cluster Template

Nu när du aggregerar händelser i Azure Storage konfigurerar du Azure Monitor-loggar för att få insikter och köra frågor mot dem i Azure Monitor-loggportalen

Kommentar

Det finns för närvarande inget sätt att filtrera eller rensa de händelser som skickas till tabellerna. Om du inte implementerar en process för att ta bort händelser från tabellen fortsätter tabellen att växa (standardtaket är 50 GB). Anvisningar om hur du ändrar detta finns längre ned i den här artikeln. Dessutom finns det ett exempel på en datarensningstjänst som körs i exemplet Watchdog, och vi rekommenderar att du skriver en åt dig själv också, såvida det inte finns en bra anledning för dig att lagra loggar utöver en tidsram på 30 eller 90 dagar.

Distribuera diagnostiktillägget via Azure Resource Manager

Skapa ett kluster med diagnostiktillägget

Om du vill skapa ett kluster med Hjälp av Resource Manager måste du lägga till JSON för diagnostikkonfiguration i den fullständiga Resource Manager-mallen. Vi tillhandahåller ett exempel på en Resource Manager-mall med fem virtuella datorer med diagnostikkonfiguration som lagts till i den som en del av våra Resource Manager-mallexempel. Du kan se den på den här platsen i Azure Samples-galleriet: Ett kluster med fem noder med mallexemplet Diagnostics Resource Manager.

Om du vill se diagnostikinställningen i Resource Manager-mallen öppnar du filen azuredeploy.json och söker efter IaaSDiagnostics. Om du vill skapa ett kluster med hjälp av den här mallen väljer du knappen Distribuera till Azure som är tillgänglig på föregående länk.

Du kan också ladda ned Resource Manager-exemplet, göra ändringar i det och skapa ett kluster med den ändrade mallen med hjälp New-AzResourceGroupDeployment av kommandot i ett Azure PowerShell-fönster. Se följande kod för de parametrar som du skickar in till kommandot. Detaljerad information om hur du distribuerar en resursgrupp med hjälp av PowerShell finns i artikeln Distribuera en resursgrupp med Azure Resource Manager-mallen.

Lägga till diagnostiktillägget i ett befintligt kluster

Om du har ett befintligt kluster som inte har distribuerat diagnostik kan du lägga till eller uppdatera det via klustermallen. Ändra Resource Manager-mallen som används för att skapa det befintliga klustret eller ladda ned mallen från portalen enligt beskrivningen tidigare. Ändra filen template.json genom att utföra följande uppgifter:

Lägg till en ny lagringsresurs i mallen genom att lägga till i avsnittet resurser.

{
	"apiVersion": "2018-07-01",
	"type": "Microsoft.Storage/storageAccounts",
	"name": "[parameters('applicationDiagnosticsStorageAccountName')]",
	"location": "[parameters('computeLocation')]",
	"sku": {
	"name": "[parameters('applicationDiagnosticsStorageAccountType')]"
	"tier": "standard"
  },
	"tags": {
	"resourceType": "Service Fabric",
	"clusterName": "[parameters('clusterName')]"
  }
},

Lägg sedan till i avsnittet parametrar strax efter definitionerna för lagringskontot mellan supportLogStorageAccountName. Ersätt platshållarnamnet för textlagringskontot här med namnet på det lagringskonto som du vill använda.

    "applicationDiagnosticsStorageAccountType": {
      "type": "string",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS"
      ],
      "defaultValue": "Standard_LRS",
      "metadata": {
        "description": "Replication option for the application diagnostics storage account"
      }
    },
    "applicationDiagnosticsStorageAccountName": {
      "type": "string",
      "defaultValue": "**STORAGE ACCOUNT NAME GOES HERE**",
      "metadata": {
        "description": "Name for the storage account that contains application diagnostics data from the cluster"
      }
    },

Uppdatera VirtualMachineProfile sedan avsnittet i filen template.json genom att lägga till följande kod i tilläggsmatrisen. Se till att lägga till ett kommatecken i början eller slutet, beroende på var det infogas.

{
    "name": "[concat(parameters('vmNodeType0Name'),'_Microsoft.Insights.VMDiagnosticsSettings')]",
    "properties": {
        "type": "IaaSDiagnostics",
        "autoUpgradeMinorVersion": true,
        "protectedSettings": {
        "storageAccountName": "[parameters('applicationDiagnosticsStorageAccountName')]",
        "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]",
        "storageAccountEndPoint": "https://core.windows.net/"
        },
        "publisher": "Microsoft.Azure.Diagnostics",
        "settings": {
        "WadCfg": {
            "DiagnosticMonitorConfiguration": {
            "overallQuotaInMB": "50000",
            "EtwProviders": {
                "EtwEventSourceProviderConfiguration": [
                {
                    "provider": "Microsoft-ServiceFabric-Actors",
                    "scheduledTransferKeywordFilter": "1",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricReliableActorEventTable"
                    }
                },
                {
                    "provider": "Microsoft-ServiceFabric-Services",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricReliableServiceEventTable"
                    }
                }
                ],
                "EtwManifestProviderConfiguration": [
                {
                    "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
                    "scheduledTransferLogLevelFilter": "Information",
                    "scheduledTransferKeywordFilter": "4611686018427387904",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricSystemEventTable"
                    }
                },
                {
                    "provider": "02d06793-efeb-48c8-8f7f-09713309a810",
                    "scheduledTransferLogLevelFilter": "Information",
                    "scheduledTransferKeywordFilter": "4611686018427387904",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricSystemEventTable"
                    }
                }
                ]
            }
            }
        },
        "StorageAccount": "[parameters('applicationDiagnosticsStorageAccountName')]"
        },
        "typeHandlerVersion": "1.5"
    }
}

När du har modifierat filen template.json enligt beskrivningen publicerar du Resource Manager-mallen igen. Om mallen exporterades publiceras mallen igen när du kör filen deploy.ps1. När du har distribuerat kontrollerar du att ProvisioningState har slutförts.

Dricks

Om du ska distribuera containrar till klustret aktiverar du WAD för att hämta dockerstatistik genom att lägga till detta i avsnittet WadCfg > DiagnosticMonitorConfiguration .

"DockerSources": {
    "Stats": {
        "enabled": true,
        "sampleRate": "PT1M"
    }
},

Uppdatera lagringskvot

Eftersom tabellerna som fylls i av tillägget växer tills kvoten har nåtts kan det vara bra att överväga att minska kvotstorleken. Standardvärdet är 50 GB och kan konfigureras i mallen under fältet overallQuotaInMB under DiagnosticMonitorConfiguration

"overallQuotaInMB": "50000",

Konfigurationer för loggsamling

Loggar från ytterligare kanaler är också tillgängliga för samling, här är några av de vanligaste konfigurationerna som du kan göra i mallen för kluster som körs i Azure.

  • Operational Channel – Bas: Aktiverad som standard, åtgärder på hög nivå som utförs av Service Fabric och klustret, inklusive händelser för en nod som kommer upp, ett nytt program som distribueras eller en återställning av uppgradering osv. En lista över händelser finns i Händelser för operativa kanaler.

      "scheduledTransferKeywordFilter": "4611686018427387904"
    
  • Operational Channel – Detaljerad: Detta inkluderar hälsorapporter och belastningsutjämningsbeslut, plus allt i den grundläggande operativa kanalen. Dessa händelser genereras av antingen systemet eller koden med hjälp av API:erna för hälso- eller belastningsrapportering, till exempel ReportPartitionHealth eller ReportLoad. Om du vill visa dessa händelser i Visual Studio Diagnostic Loggboken lägga till "Microsoft-ServiceFabric:4:0x4000000000000008" i listan över ETW-leverantörer.

      "scheduledTransferKeywordFilter": "4611686018427387912"
    
  • Data- och meddelandekanal – Bas: Kritiska loggar och händelser som genereras i meddelandena (för närvarande endast ReverseProxy) och datasökvägen, förutom detaljerade driftkanalloggar. Dessa händelser är fel vid bearbetning av begäranden och andra kritiska problem i ReverseProxy, samt begäranden som bearbetas. Detta är vår rekommendation för omfattande loggning. Om du vill visa dessa händelser i Visual Studio Diagnostic Loggboken lägger du till "Microsoft-ServiceFabric:4:0x4000000000000010" i listan över ETW-leverantörer.

      "scheduledTransferKeywordFilter": "4611686018427387928"
    
  • Data & Messaging Channel – Detaljerad: Utförlig kanal som innehåller alla icke-kritiska loggar från data och meddelanden i klustret och den detaljerade operativa kanalen. Detaljerad felsökning av alla omvända proxyhändelser finns i diagnostikguiden för omvänd proxy. Om du vill visa dessa händelser i Visual Studio Diagnostic Event Viewer lägger du till "Microsoft-ServiceFabric:4:0x4000000000000020" i listan över ETW-leverantörer.

      "scheduledTransferKeywordFilter": "4611686018427387944"
    

Kommentar

Den här kanalen har en mycket stor mängd händelser, vilket gör att händelseinsamling från den här detaljerade kanalen resulterar i att många spårningar genereras snabbt och kan förbruka lagringskapacitet. Aktivera bara detta om det är absolut nödvändigt.

Om du vill aktivera basdriftskanalen ser vår rekommendation för omfattande loggning med minsta möjliga brus EtwManifestProviderConfiguration in i mallen WadCfg ut så här:

  "WadCfg": {
        "DiagnosticMonitorConfiguration": {
          "overallQuotaInMB": "50000",
          "EtwProviders": {
            "EtwEventSourceProviderConfiguration": [
              {
                "provider": "Microsoft-ServiceFabric-Actors",
                "scheduledTransferKeywordFilter": "1",
                "scheduledTransferPeriod": "PT5M",
                "DefaultEvents": {
                  "eventDestination": "ServiceFabricReliableActorEventTable"
                }
              },
              {
                "provider": "Microsoft-ServiceFabric-Services",
                "scheduledTransferPeriod": "PT5M",
                "DefaultEvents": {
                  "eventDestination": "ServiceFabricReliableServiceEventTable"
                }
              }
            ],
            "EtwManifestProviderConfiguration": [
              {
                "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
                "scheduledTransferLogLevelFilter": "Information",
                "scheduledTransferKeywordFilter": "4611686018427387904",
                "scheduledTransferPeriod": "PT5M",
                "DefaultEvents": {
                  "eventDestination": "ServiceFabricSystemEventTable"
                }
              },
              {
                "provider": "02d06793-efeb-48c8-8f7f-09713309a810",
                "scheduledTransferLogLevelFilter": "Information",
                "scheduledTransferKeywordFilter": "4611686018427387904",
                "scheduledTransferPeriod": "PT5M",
                "DefaultEvents": {
                "eventDestination": "ServiceFabricSystemEventTable"
                }
              }
            ]
          }
        }
      },

Samla in från nya EventSource-kanaler

Om du vill uppdatera Diagnostik för att samla in loggar från nya EventSource-kanaler som representerar ett nytt program som du håller på att distribuera utför du samma steg som tidigare beskrivits för konfigurationen av diagnostik för ett befintligt kluster.

EtwEventSourceProviderConfiguration Uppdatera avsnittet i filen template.json för att lägga till poster för de nya EventSource-kanalerna innan du tillämpar konfigurationsuppdateringen New-AzResourceGroupDeployment med hjälp av PowerShell-kommandot. Namnet på händelsekällan definieras som en del av koden i filen Visual Studio-genererade ServiceEventSource.cs.

Om händelsekällan till exempel heter My-Eventsource lägger du till följande kod för att placera händelserna från My-Eventsource i en tabell med namnet MyDestinationTableName.

{
  "provider": "My-Eventsource",
  "scheduledTransferPeriod": "PT5M",
  "DefaultEvents": {
    "eventDestination": "MyDestinationTableName"
  }
}

Om du vill samla in prestandaräknare eller händelseloggar ändrar du Resource Manager-mallen med hjälp av exemplen i Skapa en virtuell Windows-dator med övervakning och diagnostik med hjälp av en Azure Resource Manager-mall. Publicera sedan om Resource Manager-mallen.

Samla in prestandaräknare

Om du vill samla in prestandamått från klustret lägger du till prestandaräknarna i "WadCfg > DiagnosticMonitorConfiguration" i Resource Manager-mallen för klustret. Se Prestandaövervakning med WAD för steg om hur du ändrar din WadCfg för att samla in specifika prestandaräknare. Referera till Service Fabric-prestandaräknare för en lista över prestandaräknare som vi rekommenderar att du samlar in.

Om du använder en Application Insights-mottagare, enligt beskrivningen i avsnittet nedan, och vill att dessa mått ska visas i Application Insights, måste du lägga till mottagarnamnet i avsnittet "mottagare" enligt ovan. Detta skickar automatiskt de prestandaräknare som är individuellt konfigurerade till application insights-resursen.

Skicka loggar till Application Insights

Konfigurera Application Insights med WAD

Kommentar

Detta gäller endast för Windows-kluster för tillfället.

Det finns två huvudsakliga sätt att skicka data från WAD till Azure Application Insights, vilket uppnås genom att lägga till en Application Insights-mottagare i WAD-konfigurationen, via Azure-portalen eller via en Azure Resource Manager-mall.

Lägga till en Application Insights-instrumentationsnyckel när du skapar ett kluster i Azure-portalen

Adding an AIKey

Om Diagnostik är aktiverat när du skapar ett kluster visas ett valfritt fält för att ange en Application Insights Instrumentation-nyckel. Om du klistrar in Application Insights-nyckeln här konfigureras Application Insights-mottagaren automatiskt åt dig i Resource Manager-mallen som används för att distribuera klustret.

Lägg till Application Insights-mottagare i Resource Manager-mallen

I "WadCfg" i Resource Manager-mallen lägger du till en "mottagare" genom att inkludera följande två ändringar:

  1. Lägg till mottagarkonfigurationen direkt när deklareringen av DiagnosticMonitorConfiguration har slutförts:

    "SinksConfig": {
        "Sink": [
            {
                "name": "applicationInsights",
                "ApplicationInsights": "***ADD INSTRUMENTATION KEY HERE***"
            }
        ]
    }
    
    
  2. Inkludera mottagaren i DiagnosticMonitorConfiguration genom att lägga till följande rad i DiagnosticMonitorConfiguration ( WadCfg precis innan de EtwProviders deklareras):

    "sinks": "applicationInsights"
    

I båda kodfragmenten ovan användes namnet "applicationInsights" för att beskriva mottagaren. Detta är inte ett krav och så länge namnet på mottagaren ingår i "mottagare" kan du ange namnet på valfri sträng.

För närvarande visas loggar från klustret som spårningar i Application Insights loggvisningsprogram. Eftersom de flesta spårningar som kommer från plattformen är av nivån "Informational" kan du också överväga att ändra mottagarkonfigurationen så att endast loggar av typen "Varning" eller "Fel" skickas. Detta kan göras genom att lägga till "Kanaler" i din mottagare, vilket visas i den här artikeln.

Kommentar

Om du använder en felaktig Application Insights-nyckel antingen i portalen eller i Resource Manager-mallen måste du ändra nyckeln manuellt och uppdatera klustret/distribuera om det.

Nästa steg

När du har konfigurerat Azure-diagnostik korrekt visas data i dina Lagringstabeller från ETW- och EventSource-loggarna. Om du väljer att använda Azure Monitor-loggar, Kibana eller någon annan plattform för dataanalys och visualisering som inte är direkt konfigurerad i Resource Manager-mallen ska du konfigurera den plattform som du vill läsa i data från dessa lagringstabeller. Att göra detta för Azure Monitor-loggar är relativt enkelt och förklaras i händelse- och logganalys. Application Insights är lite av ett specialfall i den här meningen, eftersom det kan konfigureras som en del av konfigurationen av diagnostiktillägget, så läs lämplig artikel om du väljer att använda AI.

Kommentar

Det finns för närvarande inget sätt att filtrera eller rensa de händelser som skickas till tabellen. Om du inte implementerar en process för att ta bort händelser från tabellen fortsätter tabellen att växa. För närvarande finns det ett exempel på en datarensningstjänst som körs i exemplet Watchdog, och vi rekommenderar att du också skriver en åt dig själv, såvida det inte finns en bra anledning för dig att lagra loggar utöver en tidsram på 30 eller 90 dagar.