Troubleshoot HTTP 500 Internal Service Errors

APPLIES TO: SDK v4

The first step in troubleshooting 500 errors is enabling Application Insights.

For AppInsights samples, see the luis-with-appinsights C# sample and JS sample.

Note

Language Understanding (LUIS) will be retired on 1 October 2025. Beginning 1 April 2023, you won't be able to create new LUIS resources. A newer version of language understanding is now available as part of Azure AI Language.

Conversational language understanding (CLU), a feature of Azure AI Language, is the updated version of LUIS. For more information about language understanding support in the Bot Framework SDK, see Natural language understanding.

See conversation analytics telemetry for information about how to add Application Insights to an existing bot.

Enable Application Insights for ASP.NET

For basic Application Insights support, see how to set up Application Insights for your ASP.NET website. The Bot Framework (starting with v4.2) provides an additional level of Application Insights telemetry, but it's not required for diagnosing HTTP 500 errors.

Enable Application Insights for Node.js

For basic Application Insights support, see how to monitor your Node.js services and apps with Application Insights. The Bot Framework (starting with v4.2) provides an additional level of Application Insights telemetry, but it's not required for diagnosing HTTP 500 errors.

Query for exceptions

The easiest method of analyzing HTTP status code 500 errors is to begin with exceptions.

The following queries will tell you the most recent exceptions:

exceptions
| order by timestamp desc
| project timestamp, operation_Id, appName

From the first query, select a few of the operation IDs and look for more information:

let my_operation_id = "d298f1385197fd438b520e617d58f4fb";
let union_all = () {
    union
    (traces | where operation_Id == my_operation_id),
    (customEvents | where operation_Id == my_operation_id),
    (requests | where operation_Id == my_operation_id),
    (dependencies | where operation_Id  == my_operation_id),
    (exceptions | where operation_Id == my_operation_id)
};

union_all
    | order by timestamp desc

If you only have exceptions, analyze the details and see if they correspond to lines in your code. If you only see exceptions coming from the Channel Connector (Microsoft.Bot.ChannelConnector), then see No Application Insights events to ensure that Application Insights is set up correctly and your code is logging events.

No Application Insights events

If you're receiving 500 errors and there are no further events within Application Insights from your bot, check the following:

Ensure the bot runs locally

First, test your bot locally with the Bot Framework Emulator.

Ensure configuration files are being copied (.NET only)

Make sure your appsettings.json and any other configuration files are being packaged correctly during the deployment process.

Application assemblies

Ensure the Application Insights assemblies are being packaged correctly during the deployment process.

  • Microsoft.ApplicationInsights
  • Microsoft.ApplicationInsights.TraceListener
  • Microsoft.AI.Web
  • Microsoft.AI.WebServer
  • Microsoft.AI.ServeTelemetryChannel
  • Microsoft.AI.PerfCounterCollector
  • Microsoft.AI.DependencyCollector
  • Microsoft.AI.Agent.Intercept

Make sure your appsettings.json and any other configuration files are being packaged correctly during the deployment process.

appsettings.json

Within your appsettings.json file ensure the Instrumentation Key is set.

{
    "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
            "Default": "Debug",
            "System": "Information",
            "Microsoft": "Information"
        },
        "Console": {
            "IncludeScopes": "true"
        }
    }
}

Verify config file

Ensure there's an Application Insights key included in your config file.

{
    "ApplicationInsights": {
        "type": "appInsights",
        "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "subscriptionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "resourceGroup": "my resource group",
        "name": "my appinsights name",
        "serviceName": "my service name",
        "instrumentationKey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "apiKeys": {},
        "id": ""
    }
},

Check logs

Bot ASP.NET and Node will emit logs at the server level that can be inspected.

Set up a browser to watch your logs

  1. Open your bot in the Azure portal.
  2. Open the App Service Settings / All App service settings page to see all service settings.
  3. Open the Monitoring / Diagnostics Logs page for the app service.
    • Ensure that Application Logging (Filesystem) is enabled. Be sure to click Save if you change this setting.
  4. Switch to the Monitoring / Log Stream page.
    • Select Web server logs and ensure you see a message that you're connected. It should look something like the following:

      Connecting...
      2018-11-14T17:24:51  Welcome, you are now connected to log-streaming service.
      

      Keep this window open.

Set up browser to restart your bot service

  1. Using a separate browser, open your bot in the Azure portal.
  2. Open the App Service Settings / All App service settings page to see all service settings.
  3. Switch to the Overview page for the app service and click Restart.
    • It will prompt if you're sure; select yes.
  4. Return to the first browser window and watch the logs.
  5. Verify that you're receiving new logs.
    • If there's no activity, redeploy your bot.
    • Then switch to the Application logs page and look for any errors.

Next steps