Programövervakning för Azure App Service och Node.js

Övervakning av dina Node.js webbprogram som körs i Azure App Services kräver inga ändringar i koden. Den här artikeln beskriver hur du aktiverar Övervakning av Azure Monitor Application Insights och ger preliminär vägledning för att automatisera processen för storskaliga distributioner.

Aktivera Application Insights

Det enklaste sättet att aktivera programövervakning för Node.js program som körs i Azure App Services är via Azure-portalen. Om du aktiverar programövervakning i Azure-portalen instrumenteras ditt program automatiskt med Application Insights och kräver inga kodändringar.

Kommentar

Du kan konfigurera den automatiskt anslutna agenten med hjälp av miljövariabeln APPLICATIONINSIGHTS_CONFIGURATION_CONTENT på bladet App Service-miljön variabel. Mer information om de konfigurationsalternativ som kan skickas via den här miljövariabeln finns i Node.js Konfiguration.

Kommentar

Om både automatisk instrumentering och manuell SDK-baserad instrumentation identifieras, respekteras endast de manuella instrumentationsinställningarna. Detta för att förhindra att dubbletter av data skickas. Mer information finns i felsökningsavsnittet i den här artikeln.

Automatisk instrumentering via Azure-portalen

En fullständig lista över scenarier med automatisk instrumentering som stöds finns i Miljöer, språk och resursprovidrar som stöds.

Du kan aktivera övervakning för dina Node.js appar som körs i Azure App Service bara med ett klick, ingen kodändring krävs. Application Insights för Node.js är integrerat med Azure App Service på Linux – både kodbaserade och anpassade containrar och med App Service i Windows för kodbaserade appar. Integreringen finns i en offentlig förhandsversion. Integreringen lägger till Node.js SDK, som finns i GA.

  1. Välj Application Insights på Azure-kontrollpanelen för din apptjänst och välj sedan Aktivera.

    Skärmbild av fliken Application Insights med aktivera markerad.

  2. Välj att skapa en ny resurs eller välj en befintlig Application Insights-resurs för det här programmet.

    Kommentar

    När du väljer OK för att skapa den nya resursen uppmanas du att använda övervakningsinställningar. Om du väljer Fortsätt länkas din nya Application Insights-resurs till apptjänsten, vilket också utlöser en omstart av apptjänsten.

    Skärmbild av listrutan Ändra resurs.

  3. När du har angett vilken resurs som ska användas är du redo att gå.

    Skärmbild av instrumentera ditt program.

Konfiguration

Node.js-agenten kan konfigureras med JSON. APPLICATIONINSIGHTS_CONFIGURATION_CONTENT Ange miljövariabeln till JSON-strängen eller ange APPLICATIONINSIGHTS_CONFIGURATION_FILE miljövariabeln till filsökvägen som innehåller JSON.

"samplingPercentage": 80,
"enableAutoCollectExternalLoggers": true,
"enableAutoCollectExceptions": true,
"enableAutoCollectHeartbeat": true,
"enableSendLiveMetrics": true,
...
    

Den fullständiga uppsättningen konfigurationer är tillgänglig. Du behöver bara använda en giltig json-fil.

Aktivera övervakning på klientsidan

Om du vill aktivera övervakning på klientsidan för ditt Node.js-program måste du manuellt lägga till JavaScript SDK på klientsidan i ditt program.

Automatisera övervakning

För att aktivera telemetriinsamling med Application Insights behöver endast följande programinställningar anges:

Skärmbild av App Service Application Inställningar med tillgängliga Application Insights-inställningar.

Definitioner för programinställningar

Namn på appinställning Definition Värde
ApplicationInsightsAgent_EXTENSION_VERSION Huvudtillägget, som styr körningsövervakning. ~2 i Windows eller ~3 i Linux.
XDT_MicrosoftApplicationInsights_NodeJS Flagga för att styra om Node.js agent ingår. 0 eller 1 (gäller endast i Windows).

Kommentar

Felsökare för profilerare och ögonblicksbilder är inte tillgängliga för Node.js program

App Service-programinställningar med Azure Resource Manager

Programinställningar för Azure App Service kan hanteras och konfigureras med Azure Resource Manager-mallar. Du kan använda den här metoden när du distribuerar nya App Service-resurser med Resource Manager-automatisering eller ändrar inställningarna för befintliga resurser.

Den grundläggande strukturen för JSON för programinställningar för en App Service-resurs:

      "resources": [
        {
          "name": "appsettings",
          "type": "config",
          "apiVersion": "2015-08-01",
          "dependsOn": [
            "[resourceId('Microsoft.Web/sites', variables('webSiteName'))]"
          ],
          "tags": {
            "displayName": "Application Insights Settings"
          },
          "properties": {
            "key1": "value1",
            "key2": "value2"
          }
        }
      ]

För ett exempel på en Resource Manager-mall med programinställningar som konfigurerats för Application Insights kan den här mallen vara till hjälp. Mer information finns i avsnittet som börjar på rad 238.

Om du vill skapa en Resource Manager-mall med standardinställningarna för Application Insights börjar du processen som om du skulle skapa en ny webbapp med Application Insights aktiverat.

  1. Skapa en ny App Service-resurs med önskad webbappsinformation. Aktivera Application Insights på fliken Övervakning .

  2. Välj Granska + skapa. Välj sedan Ladda ned en mall för automatisering.

    Skärmbild som visar menyn för att skapa App Service-webbappar.

    Det här alternativet genererar den senaste Resource Manager-mallen med alla nödvändiga inställningar konfigurerade.

    Skärmbild som visar en App Service-webbappmall.

I följande exempel ersätter du alla instanser av AppMonitoredSite med webbplatsnamnet:

Kommentar

Om du använder Windows anger du ApplicationInsightsAgent_EXTENSION_VERSION till ~2. Om du använder Linux anger du ApplicationInsightsAgent_EXTENSION_VERSION till ~3.

{
    "resources": [
        {
            "name": "[parameters('name')]",
            "type": "Microsoft.Web/sites",
            "properties": {
                "siteConfig": {
                    "appSettings": [
                        {
                            "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').InstrumentationKey]"
                        },
                        {
                            "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').ConnectionString]"
                        },
                        {
                            "name": "ApplicationInsightsAgent_EXTENSION_VERSION",
                            "value": "~2"
                        }
                    ]
                },
                "name": "[parameters('name')]",
                "serverFarmId": "[concat('/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('serverFarmResourceGroup'), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "dependsOn": [
                "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "microsoft.insights/components/AppMonitoredSite"
            ],
            "apiVersion": "2016-03-01",
            "location": "[parameters('location')]"
        },
        {
            "apiVersion": "2016-09-01",
            "name": "[parameters('hostingPlanName')]",
            "type": "Microsoft.Web/serverfarms",
            "location": "[parameters('location')]",
            "properties": {
                "name": "[parameters('hostingPlanName')]",
                "workerSizeId": "[parameters('workerSize')]",
                "numberOfWorkers": "1",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "sku": {
                "Tier": "[parameters('sku')]",
                "Name": "[parameters('skuCode')]"
            }
        },
        {
            "apiVersion": "2015-05-01",
            "name": "AppMonitoredSite",
            "type": "microsoft.insights/components",
            "location": "West US 2",
            "properties": {
                "ApplicationId": "[parameters('name')]",
                "Request_Source": "IbizaWebAppExtensionCreate"
            }
        }
    ],
    "parameters": {
        "name": {
            "type": "string"
        },
        "hostingPlanName": {
            "type": "string"
        },
        "hostingEnvironment": {
            "type": "string"
        },
        "location": {
            "type": "string"
        },
        "sku": {
            "type": "string"
        },
        "skuCode": {
            "type": "string"
        },
        "workerSize": {
            "type": "string"
        },
        "serverFarmResourceGroup": {
            "type": "string"
        },
        "subscriptionId": {
            "type": "string"
        }
    },
    "$schema": "https://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0"
}

Aktivera via PowerShell

För att aktivera programövervakning via PowerShell måste endast de underliggande programinställningarna ändras. Följande exempel aktiverar programövervakning för en webbplats som heter AppMonitoredSite i resursgruppen AppMonitoredRG. Den konfigurerar data som ska skickas till instrumentationsnyckeln 012345678-abcd-ef01-2345-6789abcd .

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.

Kommentar

Om du använder Windows anger du ApplicationInsightsAgent_EXTENSION_VERSION till ~2. Om du använder Linux anger du ApplicationInsightsAgent_EXTENSION_VERSION till ~3.

$app = Get-AzWebApp -ResourceGroupName "AppMonitoredRG" -Name "AppMonitoredSite" -ErrorAction Stop
$newAppSettings = @{} # case-insensitive hash map
$app.SiteConfig.AppSettings | %{$newAppSettings[$_.Name] = $_.Value} # preserve non Application Insights application settings.
$newAppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"] = "012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights instrumentation key
$newAppSettings["APPLICATIONINSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights connection string
$newAppSettings["ApplicationInsightsAgent_EXTENSION_VERSION"] = "~2"; # enable the ApplicationInsightsAgent
$app = Set-AzWebApp -AppSettings $newAppSettings -ResourceGroupName $app.ResourceGroup -Name $app.Name -ErrorAction Stop

Felsökning

Nedan följer vår stegvisa felsökningsguide för tilläggs-/agentbaserad övervakning för Node.js baserade program som körs på Azure App Services.

  1. Kontrollera att ApplicationInsightsAgent_EXTENSION_VERSION appinställningen är inställd på värdet "~2".

  2. Bläddra till https://yoursitename.scm.azurewebsites.net/ApplicationInsights.

    Skärmbild av länken ovanför resultatsidan.

    • Bekräfta att Application Insights Extension Status är Pre-Installed Site Extension, version 2.8.x.xxxx, is running.

      Om den inte körs följer du anvisningarna för att aktivera Application Insights-övervakning.

    • Gå till D:\local\Temp\status.json och öppna status.json.

    Bekräfta att SDKPresent är inställt på false, AgentInitializedSuccessfully true och IKey att ha en giltig iKey.

    Nedan visas ett exempel på JSON-filen:

        "AppType":"node.js",
    
        "MachineName":"c89d3a6d0357",
    
        "PID":"47",
    
        "AgentInitializedSuccessfully":true,
    
        "SDKPresent":false,
    
        "IKey":"00000000-0000-0000-0000-000000000000",
    
        "SdkVersion":"1.8.10"
    
    

    Om SDKPresent är sant anger detta att tillägget har identifierat att någon aspekt av SDK redan finns i programmet och kommer att backa.

Vad är skillnaden mellan standardmått från Application Insights jämfört med Azure App Service-mått?

Application Insights samlar in telemetri för de begäranden som gjorde det till programmet. Om felet inträffar i WebApps/WebServer och begäran inte nådde användarprogrammet har Application Insights ingen telemetri om det.

Varaktigheten för serverresponsetime beräknad av Application Insights matchar inte nödvändigtvis serverns svarstid som observeras av Web Apps. Det här beteendet beror på att Application Insights bara räknar varaktigheten när begäran faktiskt når användarprogrammet. Om begäran har fastnat eller placerats i kö i WebServer inkluderas väntetiden i Web Apps-måtten men inte i Application Insights-mått.

Testa anslutningen mellan programvärden och inmatningstjänsten

Application Insights SDK:er och agenter skickar telemetri för att matas in som REST-anrop till våra inmatningsslutpunkter. Du kan testa anslutningen från webbservern eller programvärddatorn till slutpunkterna för inmatningstjänsten med hjälp av råa REST-klienter från PowerShell- eller curl-kommandon. Se Felsöka programtelemetri som saknas i Azure Monitor Application Insights.

Viktig information

De senaste uppdateringarna och felkorrigeringarna finns i viktig information.

Nästa steg