From ff2c4ae7fb59e04b301b8926e4e158f482c1c8c9 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Fri, 5 Aug 2022 10:00:19 -0700 Subject: [PATCH 01/36] Original doc but with relative links --- .../app-insights/troubleshoot-missing-data.md | 309 ++++++++++++++++++ 1 file changed, 309 insertions(+) create mode 100644 support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md diff --git a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md new file mode 100644 index 0000000000..626114c563 --- /dev/null +++ b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md @@ -0,0 +1,309 @@ +--- +title: Test connectivity and telemetry ingestion using PowerShell or curl clients +description: Learn how to troubleshoot missing data by using PowerShell or curl clients. +ms.topic: conceptual +ms.date: 8/5/2022 +ms.author: toddfous +editor: v-kainawroth +ms.reviewer: aaronmax +ms.service: azure-monitor +ms.subservice: application-insights +#Customer intent: As an Application Insights user I want to understand known issues for the Application Insights Agent and how to troubleshoot common issues so I can use Application Insights and the Agent effectively. +--- + +# Test connectivity and telemetry ingestion using PowerShell or curl clients + +## Missing or No Data Symptoms + +One of the most common problems reported is the 'missing data' or 'not finding specific telemetry records' symptom. + +Missing data symptoms can be the result of failures across every single step in the life of a telemetry record. + +**SDK/Codeless Agents** → **Networking** → **Ingestion Endpoint** → **App Insights Ingestion Pipeline** → **Kusto Backend** ← **Query API** ← **Azure Portal** + +1. The SDK or Agent could be misconfigured and not sending data to our ingestion endpoint +2. The SDK or Agent could be correctly configured but the customer's, or public networking may be blocking calls to the ingestion endpoint +3. The Ingestion Endpoint may be dropping or throttling inbound telemetry +4. The Ingestion Pipeline may possibly dropping or severely slowing down some records as part of its processing (rare) +5. Kusto could be facing some problems saving the telemetry (very rare) +6. The "Draft" or Query API, at api.applicationinsights.io, may have failures querying the data out of Kusto +7. The Azure Portal UI code may have an issue pulling and rendering the records the customer is trying to view. + +As you can see, 'no telemetry' or 'partial telemetry' symptoms can occur anywhere across the service, and may be tedious to properly diagnose. The goal is to eliminate these layers as fast as possible so that we investigate the correct step within the processing pipeline which is causing the symptoms. One tool that will drastically assist with this isolation is to send a sample telemetry record using PowerShell. + +## Troubleshooting with PowerShell + +### On-Premises or Azure VM + +If you connect to the machine/VM where the customer's web application is running, then you can attempt to send a single telemetry record to the customers Applications Insights service instance using PowerShell. This does not require you to install any other tool, so it's easy to walkthrough and test with the customer. + +### Web App + +It is possible using the Powershell script outlined here from Kudu's PowerShell Debug Command prompt feature in Web Apps. It is probably a good idea to test from this tool if this where the app is running that is having issues sending telemetry. + +The are two caveats to running the operations from Kudu one, prior to executing the Invoke-WebRequest command, issue the Powershell command: ```$ProgressPreference = "SilentlyContinue"``` and two you cannot use -Verbose or -Debug, instead use -UseBasicParsing. This would look like following as opposed to the examples further down: + +```shell +$ProgressPreference = "SilentlyContinue" +Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsing + +``` + +After you send a telemetry record via PowerShell, then you can check to see if the sample telemetry record arrives using the Application Insights Logs tab in the Azure Portal. If you do see the sample record show up, then you have just eliminated a large portion of the processing pipeline: + +**A Sample PowerShell Record Correctly Saved and Displayed Suggests:** + +- The client machine/VM has DNS that resolves to correct IP address +- The client/public network delivered the telemetry to our ingestion endpoint without blocking or dropping +- Ingestion endpoint accepted that sample payload and processed through the ingestion pipeline +- Kusto correctly saved the sample telemetry record +- The Azure Portal Logs tab was able to query our Draft API (api.applicaitoninsights.io) and render that record in the portal UI + +If the sample record does show up, then it typically means you just need to troubleshoot the Application Insights SDK or Codeless Agent. You would typically move to collect SDK Logs or PerfView traces, whichever is appropriate for the SDK/Agent version. + +There are still small chances that ingestion or the backend pipeline is sampling records, or dropping a specific telemetry types, which may explain why your test record arrives but the customers production telemetry doesn't, but you should always start investigating the SDKs or Agents if the below sample scripts correctly save and return telemetry records. + +**Availability Test Result Telemetry Records** + +Availability Web Test Results are the best telemetry type to test with. The main reason is because our ingestion pipeline never samples out Availability Test records. If you were to instead send a Request Telemetry record using PowerShell, then that record could get sampled out with Ingestion Sampling, and not show up when you go to query for it. Start with a sample Availability Test Records first, then try other telemetry types as needed. + +### PowerShell Script To Send an Availability Test Telemetry + +This script builds a raw REST request to deliver a single Availability Test Result record to the customers Application Insights component. You can supply the **ConnectionString** or **InstrumentationKey** parameters. + +- Connection String only: Telemetry sent to regional endpoint in connection string +- Ikey only: Telemetry sent to global ingestion endpoint +- If both Connection String and Ikey parameters are supplied the script sends telemetry to the regional endpoint in the connection string + +It is easiest to have customer run this from the PowerShell ISE environment on an IaaS or VMSS instance, you can also copy and paste the script into the App Services Kudu interface PowerShell debug console + +```shell +# Info: Provide either the Connection String or Ikey for your Application Insights Resource +$ConnectionString = "" +$InstrumentationKey = "" + +function ParseConnectionString { +param ([string]$ConnectionString) + $Map = @{} + + foreach ($Part in $ConnectionString.Split(";")) { + $KeyValue = $Part.Split("=") + $Map.Add($KeyValue[0], $KeyValue[1]) + } + return $Map +} + +# If Ikey is the only parameter supplied, we'll send telemetry to the +# global ingestion endpoint instead of regional endpoint found in connection strings +If (($InstrumentationKey) -and ("" -eq $ConnectionString)) { +$ConnectionString = "InstrumentationKey=$InstrumentationKey;IngestionEndpoint=https://dc.services.visualstudio.com/" +} + +$map = ParseConnectionString($ConnectionString) +$url = $map["IngestionEndpoint"] + "v2/track" +$ikey = $map["InstrumentationKey"] +$lmUrl = $map["LiveEndpoint"] + +$time = (Get-Date).ToUniversalTime().ToString("o") + +$availabilityData = @" +{ + "data": { + "baseData": { + "ver": 2, + "id": "SampleRunId", + "name": "Microsoft Support Sample Webtest Result", + "duration": "00.00:00:10", + "success": true, + "runLocation": "Region Name", + "message": "Sample Webtest Result", + "properties": { + "Sample Property": "Sample Value" + } + }, + "baseType": "AvailabilityData" + }, + "ver": 1, + "name": "Microsoft.ApplicationInsights.Metric", + "time": "$time", + "sampleRate": 100, + "iKey": "$iKey", + "flags": 0 +} +"@ + + +# Uncomment one or more of the following lines to test client TLS/SSL protocols other than the machine default option +# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::SSL3 +# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS +# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS11 +# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS12 +# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS13 + +$ProgressPreference = "SilentlyContinue" +Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsing + +``` + +When the above script executes, you want to review the response details. We are looking for a HTTP 200 response, and as part of the response JSON payload we want to see the **itemsReceived** count **matches** the **itemsAccepted**. This is the ingestion endpoint informing the client, you sent one record, I accepted one record. + +![image.png](/.attachments/image-0e46ee4c-d6e4-4605-a73f-e94f3db6c5de.png) + +### PowerShell Script To Send a Request Telemetry + +If you want to test sending a single Request Telemetry record then the below script will help format a Request telemetry record. Remember, this telemetry type is susceptible to server-side ingestion sampling configuration, so make sure ingestion sampling is turned off to help confirm if these records are getting saved correctly. + +```shell +# Info: Provide either the Connection String or Ikey for your Application Insights Resource +$ConnectionString = "" +$InstrumentationKey = "" + +function ParseConnectionString { +param ([string]$ConnectionString) + $Map = @{} + + foreach ($Part in $ConnectionString.Split(";")) { + $KeyValue = $Part.Split("=") + $Map.Add($KeyValue[0], $KeyValue[1]) + } + return $Map +} + +# If Ikey is the only parameter supplied, we'll send telemetry to the +# global ingestion endpoint instead of regional endpoint found in connection strings +If (($InstrumentationKey) -and ("" -eq $ConnectionString)) { +$ConnectionString = "InstrumentationKey=$InstrumentationKey;IngestionEndpoint=https://dc.services.visualstudio.com/" +} + +$map = ParseConnectionString($ConnectionString) +$url = $map["IngestionEndpoint"] + "v2/track" +$ikey = $map["InstrumentationKey"] +$lmUrl = $map["LiveEndpoint"] + +$time = (Get-Date).ToUniversalTime().ToString("o") + +$requestData = @" +{ + "data": { + "baseType": "RequestData", + "baseData": { + "ver": 2, + "id": "22093920382029384", + "name": "GET /msftsupport/requestdata/", + "starttime": "$time", + "duration": "00:00:01.0000000", + "success": true, + "responseCode": "200", + "url": http://localhost:8080/requestData/sampleurl, + "httpMethod": "GET" + } + }, + "ver": 1, + "iKey": "$iKey", + "name": "Microsoft.ApplicationInsights.Request", + "time": "$time", + "sampleRate": 100, + "flags": 0 +} +"@ + + +# Uncomment one or more of the following lines to test client TLS/SSL protocols other than the machine default option +# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::SSL3 +# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS +# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS11 +# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS12 +# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS13 + +$ProgressPreference = "SilentlyContinue" +Invoke-WebRequest -Uri $url -Method POST -Body $requestData -UseBasicParsing + +``` + +### Curl Client To Send Availability Test Telemetry Record + +For customers running Linux VMs, you could rely on Curl client to send a similar REST call instead of PowerShell. Below is a Curl request to send a single Availability Web Test result record. You will need to adjust the ingestion endpoint host, the ikey value and the timestamp values. + +Curl command for **Linux/MaxOS**: + +``` +>curl -H "Content-Type: application/json" -X POST -d '{"data":{"baseData":{"ver":2,"id":"SampleRunId","name":"MicrosoftSupportSampleWebtestResultUsingCurl","duration":"00.00:00:10","success":true,"runLocation":"RegionName","message":"SampleWebtestResult","properties":{"SampleProperty":"SampleValue"}},"baseType":"AvailabilityData"},"ver":1,"name":"Microsoft.ApplicationInsights.Metric","time":"2021-10-05T22:00:00.0000000Z","sampleRate":100,"iKey":"4c529c82-dee8-4723-b030-7b56bae7562a","flags":0}' [https://%3cspan]https://dc.applicationinsights.azure.com/v2.1/track + +``` + +Curl command for **Windows** (adjust timestamp before running): + +```shell +curl -H "Content-Type: application/json" -X POST -d {\"data\":{\"baseData\":{\"ver\":2,\"id\":\"SampleRunId\",\"name\":\"MicrosoftSupportSampleWebtestResultUsingCurl\",\"duration\":\"00.00:00:10\",\"success\":true,\"runLocation\":\"RegionName\",\"message\":\"SampleWebtestResult\",\"properties\":{\"SampleProperty\":\"SampleValue\"}},\"baseType\":\"AvailabilityData\"},\"ver\":1,\"name\":\"Microsoft.ApplicationInsights.Metric\",\"time\":\"2021-10-05T22:00:00.0000000Z\",\"sampleRate\":100,\"iKey\":\"4c529c82-dee8-4723-b030-7b56bae7562a\",\"flags\":0} https://dc.applicationinsights.azure.com/v2/track + +``` + +### PowerShell Script To Send 100 Trace Messages + +You may also want to try and send a burst of telemetry records from the client machine to their component. For this approach, you will want to find a version of Microsoft.ApplicationInsights.dll loaded on the customers machine. You can find it as part of Nuget package installation or Application Insights Agent (SMv2) installation. The below script will load the dll then call TrackTrace 100 times sending 100 telemetry records to the global ingestion endpoint at dc.services.visualstudio.com. + +```shell +# One Parameter: Provide the Instrumentation Key +$iKey = "{replace-with-your-ikey}" + +# Load App Insights dll from local Nuget package if it exists +# Add-Type -Path "c:\users\{useralias}\.nuget\packages\microsoft.applicationinsights\2.17.0\lib\netstandard2.0\Microsoft.ApplicationInsights.dll"; +# Load App Insights dll from Application Insights Agent installation directory +Add-Type -Path "C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\1.1.2\content\PowerShell\Microsoft.ApplicationInsights.dll"; +$client = New-Object Microsoft.ApplicationInsights.TelemetryClient; + +$client.InstrumentationKey=$iKey; +$i = 1; +while ($i -le 100) { + $client.TrackTrace("Sample Trace Message # $i", $null); + $i +=1; +} +$client.Flush(); +read-host “Press ENTER to continue...” + +``` + +### SSL/TLS Troubleshooting + +If you suspect the problem is between the client and our ingestion endpoint due to SSL/TLS configuration, you can adjust how PowerShell participates in the SSL/TLS protocol. Include these snippets if you need to diagnose secure channel as part of the connection between the client VM and our Ingestion endpoints + +First is an option to control which SSL/TLS protocol is used by PowerShell to make a connection to our ingestion endpoint. Add any one of these lines to the top of your PowerShell script to control the protocol used in the test REST request: + +```shell +# Uncomment one or more of these lines to test TLS/SSL protocols other than the machine default option +# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::SSL3 +# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS +# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS11 +[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS12 +# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS13 + +``` + +Second is an option to ignore any SSL Certificate validation issues. If your customer has a firewall or proxy server that may be doing SSL certificate offloading, you can ignore any SSL cert issues by adding this snippet just before the `Invoke-WebRequest` call: + +```shell +# Ignore mismatched SSL certificate +add-type @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ +[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy + +``` + +If the customers application defaults to the system or machine default TLS settings then you can change those default settings within the registry on Windows machines using details found in this article: [Transport Layer Security (TLS) registry settings](/windows-server/security/tls/tls-registry-settings#tls-dtls-and-ssl-protocol-version-settings). + +Alternatively, if you need to change the default TLS/SSL protocol used by a .NET application then you can follow the official guidance here [Transport Layer Security (TLS) best practices with the .NET Framework](/dotnet/framework/network-programming/tls). + +### Next Steps + +If sending telemetry via PowerShell from the customers impacted machine works then you will want to investigate their SDK or Codeless configuration for further troubleshooting. + +If sending telemetry via PowerShell also fails, then continue to isolate where the problem could be: DNS investigations, TCP connection to ingestion endpoint, look for Dropped Metrics on the Ingestion tab within ASC, etc. From cc592714a18d40cefb6e550961cffaa5437fcd2e Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Fri, 5 Aug 2022 12:51:02 -0700 Subject: [PATCH 02/36] Making improvements based on Acrolinx --- .../app-insights/troubleshoot-missing-data.md | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md index 626114c563..f4ff717027 100644 --- a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md +++ b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md @@ -19,29 +19,29 @@ One of the most common problems reported is the 'missing data' or 'not finding s Missing data symptoms can be the result of failures across every single step in the life of a telemetry record. -**SDK/Codeless Agents** → **Networking** → **Ingestion Endpoint** → **App Insights Ingestion Pipeline** → **Kusto Backend** ← **Query API** ← **Azure Portal** +**SDK/Codeless agents** → **Networking** → **Ingestion endpoint** → **App Insights Ingestion pipeline** → **Kusto backend** ← **Query API** ← **Azure portal** 1. The SDK or Agent could be misconfigured and not sending data to our ingestion endpoint 2. The SDK or Agent could be correctly configured but the customer's, or public networking may be blocking calls to the ingestion endpoint 3. The Ingestion Endpoint may be dropping or throttling inbound telemetry -4. The Ingestion Pipeline may possibly dropping or severely slowing down some records as part of its processing (rare) -5. Kusto could be facing some problems saving the telemetry (very rare) +4. The Ingestion Pipeline may be dropping or severely slowing down some records as part of its processing (rare) +5. Kusto could be facing some problems saving the telemetry (rare) 6. The "Draft" or Query API, at api.applicationinsights.io, may have failures querying the data out of Kusto -7. The Azure Portal UI code may have an issue pulling and rendering the records the customer is trying to view. +7. The Azure portal UI code may have an issue pulling and rendering the records the customer is trying to view. -As you can see, 'no telemetry' or 'partial telemetry' symptoms can occur anywhere across the service, and may be tedious to properly diagnose. The goal is to eliminate these layers as fast as possible so that we investigate the correct step within the processing pipeline which is causing the symptoms. One tool that will drastically assist with this isolation is to send a sample telemetry record using PowerShell. +As you can see, 'no telemetry' or 'partial telemetry' symptoms can occur anywhere across the service, and may be tedious to properly diagnose. The goal is to eliminate these layers as fast as possible so that we investigate the correct step within the processing pipeline that is causing the symptoms. One tool that will drastically assist with this isolation is to send a sample telemetry record using PowerShell. ## Troubleshooting with PowerShell -### On-Premises or Azure VM +### On-premises or Azure VM -If you connect to the machine/VM where the customer's web application is running, then you can attempt to send a single telemetry record to the customers Applications Insights service instance using PowerShell. This does not require you to install any other tool, so it's easy to walkthrough and test with the customer. +If you connect to the machine/VM where the web application is running, you can attempt to send a single telemetry record to the Applications Insights service instance using PowerShell. This does not require you to install any other tool. ### Web App -It is possible using the Powershell script outlined here from Kudu's PowerShell Debug Command prompt feature in Web Apps. It is probably a good idea to test from this tool if this where the app is running that is having issues sending telemetry. +If the app which is having issues sending telemetry is running on Kudu one, you can use the PowerShell script outlined here from Kudu's PowerShell Debug Command prompt feature in Web Apps. -The are two caveats to running the operations from Kudu one, prior to executing the Invoke-WebRequest command, issue the Powershell command: ```$ProgressPreference = "SilentlyContinue"``` and two you cannot use -Verbose or -Debug, instead use -UseBasicParsing. This would look like following as opposed to the examples further down: +The are two caveats to running the operations from Kudu one, prior to executing the Invoke-WebRequest command, issue the PowerShell command: `$ProgressPreference = "SilentlyContinue"` and two you cannot use -Verbose or -Debug, instead use -UseBasicParsing. This would look like following as opposed to the examples further down: ```shell $ProgressPreference = "SilentlyContinue" @@ -49,7 +49,7 @@ Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsin ``` -After you send a telemetry record via PowerShell, then you can check to see if the sample telemetry record arrives using the Application Insights Logs tab in the Azure Portal. If you do see the sample record show up, then you have just eliminated a large portion of the processing pipeline: +After you send a telemetry record via PowerShell, then you can check to see if the sample telemetry record arrives using the Application Insights Logs tab in the Azure portal. If you see the sample record showing up, you have eliminated a large portion of the processing pipeline: **A Sample PowerShell Record Correctly Saved and Displayed Suggests:** @@ -57,15 +57,15 @@ After you send a telemetry record via PowerShell, then you can check to see if t - The client/public network delivered the telemetry to our ingestion endpoint without blocking or dropping - Ingestion endpoint accepted that sample payload and processed through the ingestion pipeline - Kusto correctly saved the sample telemetry record -- The Azure Portal Logs tab was able to query our Draft API (api.applicaitoninsights.io) and render that record in the portal UI +- The Azure portal Logs tab was able to query our Draft API (api.applicaitoninsights.io) and render that record in the portal UI If the sample record does show up, then it typically means you just need to troubleshoot the Application Insights SDK or Codeless Agent. You would typically move to collect SDK Logs or PerfView traces, whichever is appropriate for the SDK/Agent version. -There are still small chances that ingestion or the backend pipeline is sampling records, or dropping a specific telemetry types, which may explain why your test record arrives but the customers production telemetry doesn't, but you should always start investigating the SDKs or Agents if the below sample scripts correctly save and return telemetry records. +There is still a small chance that ingestion or the backend pipeline is sampling records, or dropping specific telemetry types, which may explain why your test record arrives but the customer's production telemetry doesn't. You should always start investigating the SDKs or Agents if the below sample scripts correctly save and return telemetry records. **Availability Test Result Telemetry Records** -Availability Web Test Results are the best telemetry type to test with. The main reason is because our ingestion pipeline never samples out Availability Test records. If you were to instead send a Request Telemetry record using PowerShell, then that record could get sampled out with Ingestion Sampling, and not show up when you go to query for it. Start with a sample Availability Test Records first, then try other telemetry types as needed. +Availability Web Test Results are the best telemetry type to test with. The main reason is because our ingestion pipeline never samples out Availability Test records. If you instead send a Request Telemetry record using PowerShell, that record could get sampled out with Ingestion Sampling, and not show up when you go to query for it. Start with a sample Availability Test Records first, then try other telemetry types as needed. ### PowerShell Script To Send an Availability Test Telemetry @@ -75,7 +75,7 @@ This script builds a raw REST request to deliver a single Availability Test Resu - Ikey only: Telemetry sent to global ingestion endpoint - If both Connection String and Ikey parameters are supplied the script sends telemetry to the regional endpoint in the connection string -It is easiest to have customer run this from the PowerShell ISE environment on an IaaS or VMSS instance, you can also copy and paste the script into the App Services Kudu interface PowerShell debug console +It is easiest to run the script from the PowerShell ISE environment on an IaaS or VMSS instance. You can also copy and paste it into the App Services Kudu interface PowerShell debug console. ```shell # Info: Provide either the Connection String or Ikey for your Application Insights Resource @@ -151,7 +151,7 @@ When the above script executes, you want to review the response details. We are ### PowerShell Script To Send a Request Telemetry -If you want to test sending a single Request Telemetry record then the below script will help format a Request telemetry record. Remember, this telemetry type is susceptible to server-side ingestion sampling configuration, so make sure ingestion sampling is turned off to help confirm if these records are getting saved correctly. +If you want to test sending a single Request Telemetry record, the below script will help you format it. This telemetry type is susceptible to server-side ingestion sampling configuration, so make sure ingestion sampling is turned off to help confirm if these records are getting saved correctly. ```shell # Info: Provide either the Connection String or Ikey for your Application Insights Resource @@ -240,13 +240,13 @@ curl -H "Content-Type: application/json" -X POST -d {\"data\":{\"baseData\":{\"v ### PowerShell Script To Send 100 Trace Messages -You may also want to try and send a burst of telemetry records from the client machine to their component. For this approach, you will want to find a version of Microsoft.ApplicationInsights.dll loaded on the customers machine. You can find it as part of Nuget package installation or Application Insights Agent (SMv2) installation. The below script will load the dll then call TrackTrace 100 times sending 100 telemetry records to the global ingestion endpoint at dc.services.visualstudio.com. +You may also want to try and send a burst of telemetry records from the client machine to their component. For this approach, you will want to find a version of Microsoft.ApplicationInsights.dll loaded on the customer's machine. You can find it as part of NuGet package installation or Application Insights Agent (SMv2) installation. The below script will load the dll then call TrackTrace 100 times sending 100 telemetry records to the global ingestion endpoint at dc.services.visualstudio.com. ```shell # One Parameter: Provide the Instrumentation Key $iKey = "{replace-with-your-ikey}" -# Load App Insights dll from local Nuget package if it exists +# Load App Insights dll from local NuGet package if it exists # Add-Type -Path "c:\users\{useralias}\.nuget\packages\microsoft.applicationinsights\2.17.0\lib\netstandard2.0\Microsoft.ApplicationInsights.dll"; # Load App Insights dll from Application Insights Agent installation directory Add-Type -Path "C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\1.1.2\content\PowerShell\Microsoft.ApplicationInsights.dll"; @@ -298,12 +298,12 @@ add-type @" ``` -If the customers application defaults to the system or machine default TLS settings then you can change those default settings within the registry on Windows machines using details found in this article: [Transport Layer Security (TLS) registry settings](/windows-server/security/tls/tls-registry-settings#tls-dtls-and-ssl-protocol-version-settings). +If the customer's application defaults to the system or machine default TLS settings then you can change those default settings within the registry on Windows machines using details found in this article: [Transport Layer Security (TLS) registry settings](/windows-server/security/tls/tls-registry-settings#tls-dtls-and-ssl-protocol-version-settings). Alternatively, if you need to change the default TLS/SSL protocol used by a .NET application then you can follow the official guidance here [Transport Layer Security (TLS) best practices with the .NET Framework](/dotnet/framework/network-programming/tls). ### Next Steps -If sending telemetry via PowerShell from the customers impacted machine works then you will want to investigate their SDK or Codeless configuration for further troubleshooting. +If sending telemetry via PowerShell from the customers impacted machine works, you will want to investigate their SDK or Codeless configuration for further troubleshooting. -If sending telemetry via PowerShell also fails, then continue to isolate where the problem could be: DNS investigations, TCP connection to ingestion endpoint, look for Dropped Metrics on the Ingestion tab within ASC, etc. +If sending telemetry via PowerShell also fails, continue to isolate where the problem could be: DNS investigations, TCP connection to ingestion endpoint, look for Dropped Metrics on the Ingestion tab within ASC, etc. From cdfcc0a2219c9d8a26773c3a49cb92e4d6969160 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Fri, 5 Aug 2022 13:07:03 -0700 Subject: [PATCH 03/36] Making more improvements based on Acrolinx --- .../app-insights/troubleshoot-missing-data.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md index f4ff717027..2d31fd3dca 100644 --- a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md +++ b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md @@ -35,13 +35,16 @@ As you can see, 'no telemetry' or 'partial telemetry' symptoms can occur anywher ### On-premises or Azure VM -If you connect to the machine/VM where the web application is running, you can attempt to send a single telemetry record to the Applications Insights service instance using PowerShell. This does not require you to install any other tool. +If you connect to the machine/VM where the web application is running, you can attempt to send a single telemetry record to the Applications Insights service instance using PowerShell. Doing so will not require any additional tools. ### Web App -If the app which is having issues sending telemetry is running on Kudu one, you can use the PowerShell script outlined here from Kudu's PowerShell Debug Command prompt feature in Web Apps. +If the app that is having issues sending telemetry is running on Kudu, you can use the PowerShell script outlined here from Kudu's PowerShell Debug Command prompt feature in Web Apps. -The are two caveats to running the operations from Kudu one, prior to executing the Invoke-WebRequest command, issue the PowerShell command: `$ProgressPreference = "SilentlyContinue"` and two you cannot use -Verbose or -Debug, instead use -UseBasicParsing. This would look like following as opposed to the examples further down: +The are two caveats to running the operations from Kudu: + +- Prior to executing the Invoke-WebRequest command, issue the PowerShell command: `$ProgressPreference = "SilentlyContinue"` +- You cannot use -Verbose or -Debug. Instead, use -UseBasicParsing. This would look like the following as opposed to the examples further down: ```shell $ProgressPreference = "SilentlyContinue" @@ -75,7 +78,7 @@ This script builds a raw REST request to deliver a single Availability Test Resu - Ikey only: Telemetry sent to global ingestion endpoint - If both Connection String and Ikey parameters are supplied the script sends telemetry to the regional endpoint in the connection string -It is easiest to run the script from the PowerShell ISE environment on an IaaS or VMSS instance. You can also copy and paste it into the App Services Kudu interface PowerShell debug console. +It is easiest to run the script from the PowerShell ISE environment on an IaaS or VMSS (virtual machine scale set) instance. You can also copy and paste it into the App Services Kudu interface PowerShell debug console. ```shell # Info: Provide either the Connection String or Ikey for your Application Insights Resource @@ -145,13 +148,13 @@ Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsin ``` -When the above script executes, you want to review the response details. We are looking for a HTTP 200 response, and as part of the response JSON payload we want to see the **itemsReceived** count **matches** the **itemsAccepted**. This is the ingestion endpoint informing the client, you sent one record, I accepted one record. +When the above script executes, you want to review the response details. We are looking for an HTTP 200 response, and as part of the response JSON payload we want to see the **itemsReceived** count **matches** the **itemsAccepted**. This means that the ingestion endpoint is informing the client: you sent one record, I accepted one record. ![image.png](/.attachments/image-0e46ee4c-d6e4-4605-a73f-e94f3db6c5de.png) ### PowerShell Script To Send a Request Telemetry -If you want to test sending a single Request Telemetry record, the below script will help you format it. This telemetry type is susceptible to server-side ingestion sampling configuration, so make sure ingestion sampling is turned off to help confirm if these records are getting saved correctly. +If you want to test sending a single Request Telemetry record, the below script will help you format it. This telemetry type is susceptible to server-side ingestion sampling configuration. Make sure ingestion sampling is turned off to help confirm if these records are getting saved correctly. ```shell # Info: Provide either the Connection String or Ikey for your Application Insights Resource @@ -240,7 +243,7 @@ curl -H "Content-Type: application/json" -X POST -d {\"data\":{\"baseData\":{\"v ### PowerShell Script To Send 100 Trace Messages -You may also want to try and send a burst of telemetry records from the client machine to their component. For this approach, you will want to find a version of Microsoft.ApplicationInsights.dll loaded on the customer's machine. You can find it as part of NuGet package installation or Application Insights Agent (SMv2) installation. The below script will load the dll then call TrackTrace 100 times sending 100 telemetry records to the global ingestion endpoint at dc.services.visualstudio.com. +You can try to send a burst of telemetry records from the client machine to their component. For this approach, you will want to find a version of Microsoft.ApplicationInsights.dll loaded on the customer's machine. You can find it as part of NuGet package installation or Application Insights Agent (SMv2) installation. The below script will load the dll then call TrackTrace 100 times sending 100 telemetry records to the global ingestion endpoint at dc.services.visualstudio.com. ```shell # One Parameter: Provide the Instrumentation Key From 1559146bafb1d04f1e86dcd1651e1c1a69d68196 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Fri, 5 Aug 2022 14:23:24 -0700 Subject: [PATCH 04/36] Change article to address customers instead of support staff --- .../items-received-matches-items-accepted.png | Bin 0 -> 44687 bytes .../app-insights/troubleshoot-missing-data.md | 46 +++++++++--------- 2 files changed, 23 insertions(+), 23 deletions(-) create mode 100644 support/azure/azure-monitor/app-insights/media/troubleshoot-missing-data/items-received-matches-items-accepted.png diff --git a/support/azure/azure-monitor/app-insights/media/troubleshoot-missing-data/items-received-matches-items-accepted.png b/support/azure/azure-monitor/app-insights/media/troubleshoot-missing-data/items-received-matches-items-accepted.png new file mode 100644 index 0000000000000000000000000000000000000000..a3cee1075e30447d53e3af8616c972b3d222e0a0 GIT binary patch literal 44687 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 Xlr^Srpq2gwfG^FPI%@ehEJFVe=HmNk literal 0 HcmV?d00001 diff --git a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md index 2d31fd3dca..d98f057ba0 100644 --- a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md +++ b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md @@ -15,27 +15,25 @@ ms.subservice: application-insights ## Missing or No Data Symptoms -One of the most common problems reported is the 'missing data' or 'not finding specific telemetry records' symptom. +If data is missing our you cannot find specific telemetry records, it can be the result of failures across every single step in the life of a telemetry record: -Missing data symptoms can be the result of failures across every single step in the life of a telemetry record. +**SDK/Codeless agents** → **Networking** → **Ingestion endpoint** → **Application Insights ingestion pipeline** → **Kusto backend** ← **Query API** ← **Azure portal** -**SDK/Codeless agents** → **Networking** → **Ingestion endpoint** → **App Insights Ingestion pipeline** → **Kusto backend** ← **Query API** ← **Azure portal** +- The SDK or Agent is misconfigured and not sending data to the ingestion endpoint. +- The SDK or Agent is configured correctly but the networking is blocking calls to the ingestion endpoint. +- The ingestion endpoint is dropping or throttling inbound telemetry. +- The ingestion pipeline is dropping or severely slowing down records as part of its processing. (rare) +- Kusto is facing problems saving the telemetry. (rare) +- The "Draft" or Query API, at api.applicationinsights.io, has failures querying the data from Kusto. +- The Azure portal UI code has issues pulling or rendering the records you are trying to view. -1. The SDK or Agent could be misconfigured and not sending data to our ingestion endpoint -2. The SDK or Agent could be correctly configured but the customer's, or public networking may be blocking calls to the ingestion endpoint -3. The Ingestion Endpoint may be dropping or throttling inbound telemetry -4. The Ingestion Pipeline may be dropping or severely slowing down some records as part of its processing (rare) -5. Kusto could be facing some problems saving the telemetry (rare) -6. The "Draft" or Query API, at api.applicationinsights.io, may have failures querying the data out of Kusto -7. The Azure portal UI code may have an issue pulling and rendering the records the customer is trying to view. - -As you can see, 'no telemetry' or 'partial telemetry' symptoms can occur anywhere across the service, and may be tedious to properly diagnose. The goal is to eliminate these layers as fast as possible so that we investigate the correct step within the processing pipeline that is causing the symptoms. One tool that will drastically assist with this isolation is to send a sample telemetry record using PowerShell. +Problems can occur anywhere across the service, and may be tedious to properly diagnose. The goal is to eliminate these layers as fast as possible, so you can investigate the correct step within the processing pipeline that is causing the symptoms. One method that will drastically assist with this isolation is sending a sample telemetry record using PowerShell. ## Troubleshooting with PowerShell ### On-premises or Azure VM -If you connect to the machine/VM where the web application is running, you can attempt to send a single telemetry record to the Applications Insights service instance using PowerShell. Doing so will not require any additional tools. +If you connect to the machine or VM where the web application is running, you can attempt to send a single telemetry record to the Applications Insights service instance using PowerShell. Doing so will not require any additional tools. ### Web App @@ -43,8 +41,10 @@ If the app that is having issues sending telemetry is running on Kudu, you can u The are two caveats to running the operations from Kudu: -- Prior to executing the Invoke-WebRequest command, issue the PowerShell command: `$ProgressPreference = "SilentlyContinue"` -- You cannot use -Verbose or -Debug. Instead, use -UseBasicParsing. This would look like the following as opposed to the examples further down: +- Prior to executing the Invoke-WebRequest command, you have to issue the PowerShell command: `$ProgressPreference = "SilentlyContinue"` +- You cannot use -Verbose or -Debug. Instead, use -UseBasicParsing. + +This would look like the following as opposed to the examples further down: ```shell $ProgressPreference = "SilentlyContinue" @@ -52,17 +52,17 @@ Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsin ``` -After you send a telemetry record via PowerShell, then you can check to see if the sample telemetry record arrives using the Application Insights Logs tab in the Azure portal. If you see the sample record showing up, you have eliminated a large portion of the processing pipeline: +After you send a telemetry record via PowerShell, you can check to see if the sample telemetry record arrives using the Application Insights Logs tab in the Azure portal. If you see the sample record showing up, you have eliminated a large portion of the processing pipeline: **A Sample PowerShell Record Correctly Saved and Displayed Suggests:** -- The client machine/VM has DNS that resolves to correct IP address -- The client/public network delivered the telemetry to our ingestion endpoint without blocking or dropping -- Ingestion endpoint accepted that sample payload and processed through the ingestion pipeline -- Kusto correctly saved the sample telemetry record -- The Azure portal Logs tab was able to query our Draft API (api.applicaitoninsights.io) and render that record in the portal UI +- The machine or VM has DNS that resolves to correct IP address. +- The network delivered the telemetry to the ingestion endpoint without blocking or dropping. +- The ingestion endpoint accepted the sample payload and processed through the ingestion pipeline. +- Kusto correctly saved the sample telemetry record. +- The Azure portal Logs tab was able to query the Draft API (api.applicationinsights.io) and render the record in the portal UI -If the sample record does show up, then it typically means you just need to troubleshoot the Application Insights SDK or Codeless Agent. You would typically move to collect SDK Logs or PerfView traces, whichever is appropriate for the SDK/Agent version. +If the sample record does show up, it typically means you just need to troubleshoot the Application Insights SDK or Codeless Agent. You would typically move to collect SDK Logs or PerfView traces, whichever is appropriate for the SDK/Agent version. There is still a small chance that ingestion or the backend pipeline is sampling records, or dropping specific telemetry types, which may explain why your test record arrives but the customer's production telemetry doesn't. You should always start investigating the SDKs or Agents if the below sample scripts correctly save and return telemetry records. @@ -150,7 +150,7 @@ Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsin When the above script executes, you want to review the response details. We are looking for an HTTP 200 response, and as part of the response JSON payload we want to see the **itemsReceived** count **matches** the **itemsAccepted**. This means that the ingestion endpoint is informing the client: you sent one record, I accepted one record. -![image.png](/.attachments/image-0e46ee4c-d6e4-4605-a73f-e94f3db6c5de.png) +![Items received matches items accepted](/.media/items-received-matches-items-accepted.png) ### PowerShell Script To Send a Request Telemetry From ee18376e77df7076b49ef71991e32822d0eafd32 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Fri, 5 Aug 2022 15:19:02 -0700 Subject: [PATCH 05/36] Fixed image --- .../azure-monitor/app-insights/troubleshoot-missing-data.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md index d98f057ba0..2092b4c184 100644 --- a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md +++ b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md @@ -15,7 +15,7 @@ ms.subservice: application-insights ## Missing or No Data Symptoms -If data is missing our you cannot find specific telemetry records, it can be the result of failures across every single step in the life of a telemetry record: +If data is missing our you cannot find specific telemetry records, it can be the result of failures across every step in the life of a telemetry record: **SDK/Codeless agents** → **Networking** → **Ingestion endpoint** → **Application Insights ingestion pipeline** → **Kusto backend** ← **Query API** ← **Azure portal** @@ -150,7 +150,7 @@ Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsin When the above script executes, you want to review the response details. We are looking for an HTTP 200 response, and as part of the response JSON payload we want to see the **itemsReceived** count **matches** the **itemsAccepted**. This means that the ingestion endpoint is informing the client: you sent one record, I accepted one record. -![Items received matches items accepted](/.media/items-received-matches-items-accepted.png) + ### PowerShell Script To Send a Request Telemetry From 2769697439758b4ae4d545e35462157db39dd3d6 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Mon, 15 Aug 2022 07:51:15 -0700 Subject: [PATCH 06/36] Added grapic --- .../life-of-telemetry-record.png | Bin 0 -> 126963 bytes .../app-insights/troubleshoot-missing-data.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 support/azure/azure-monitor/app-insights/media/troubleshoot-missing-data/life-of-telemetry-record.png diff --git a/support/azure/azure-monitor/app-insights/media/troubleshoot-missing-data/life-of-telemetry-record.png b/support/azure/azure-monitor/app-insights/media/troubleshoot-missing-data/life-of-telemetry-record.png new file mode 100644 index 0000000000000000000000000000000000000000..1ac9f665dc1e886ca9faf2629436b05dfe3006dc GIT binary patch literal 126963 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 literal 0 HcmV?d00001 diff --git a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md index 2092b4c184..6fde0cea18 100644 --- a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md +++ b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md @@ -17,7 +17,7 @@ ms.subservice: application-insights If data is missing our you cannot find specific telemetry records, it can be the result of failures across every step in the life of a telemetry record: -**SDK/Codeless agents** → **Networking** → **Ingestion endpoint** → **Application Insights ingestion pipeline** → **Kusto backend** ← **Query API** ← **Azure portal** + - The SDK or Agent is misconfigured and not sending data to the ingestion endpoint. - The SDK or Agent is configured correctly but the networking is blocking calls to the ingestion endpoint. From f113c0556a2b5a2d107556298aa08d53bfa0b364 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Mon, 15 Aug 2022 07:59:04 -0700 Subject: [PATCH 07/36] Fixed images --- ...ry-record.png => life-of-a-telemetry-record.png} | Bin .../app-insights/troubleshoot-missing-data.md | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) rename support/azure/azure-monitor/app-insights/media/troubleshoot-missing-data/{life-of-telemetry-record.png => life-of-a-telemetry-record.png} (100%) diff --git a/support/azure/azure-monitor/app-insights/media/troubleshoot-missing-data/life-of-telemetry-record.png b/support/azure/azure-monitor/app-insights/media/troubleshoot-missing-data/life-of-a-telemetry-record.png similarity index 100% rename from support/azure/azure-monitor/app-insights/media/troubleshoot-missing-data/life-of-telemetry-record.png rename to support/azure/azure-monitor/app-insights/media/troubleshoot-missing-data/life-of-a-telemetry-record.png diff --git a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md index 6fde0cea18..51e4e85133 100644 --- a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md +++ b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md @@ -17,7 +17,7 @@ ms.subservice: application-insights If data is missing our you cannot find specific telemetry records, it can be the result of failures across every step in the life of a telemetry record: - +![Graphic of where a telemetry record can go missing during ingestion and consumption](./media/life-of-a-telemetry-record.png "Life of telemetry record") - The SDK or Agent is misconfigured and not sending data to the ingestion endpoint. - The SDK or Agent is configured correctly but the networking is blocking calls to the ingestion endpoint. @@ -150,7 +150,7 @@ Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsin When the above script executes, you want to review the response details. We are looking for an HTTP 200 response, and as part of the response JSON payload we want to see the **itemsReceived** count **matches** the **itemsAccepted**. This means that the ingestion endpoint is informing the client: you sent one record, I accepted one record. - +![Code showing the amount of items received and items accepted](./media/items-received-matches-items-accepted.png "Items received matches items accepted") ### PowerShell Script To Send a Request Telemetry From b37733f2ca3cd1d944d1392e24c71636e4005f67 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Mon, 15 Aug 2022 08:13:22 -0700 Subject: [PATCH 08/36] Fixed images - 2nd try --- .../app-insights/troubleshoot-missing-data.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md index 51e4e85133..fba026f8a4 100644 --- a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md +++ b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md @@ -15,16 +15,16 @@ ms.subservice: application-insights ## Missing or No Data Symptoms -If data is missing our you cannot find specific telemetry records, it can be the result of failures across every step in the life of a telemetry record: +If data is missing or you cannot find specific telemetry records, it can be the result of failures across every step in the life of a telemetry record: -![Graphic of where a telemetry record can go missing during ingestion and consumption](./media/life-of-a-telemetry-record.png "Life of telemetry record") +![Graphic of where a telemetry record can go missing during ingestion and consumption](./media/troubleshoot-missing-data/life-of-a-telemetry-record.png "Life of telemetry record") - The SDK or Agent is misconfigured and not sending data to the ingestion endpoint. -- The SDK or Agent is configured correctly but the networking is blocking calls to the ingestion endpoint. +- The SDK or Agent is configured correctly but the network is blocking calls to the ingestion endpoint. - The ingestion endpoint is dropping or throttling inbound telemetry. - The ingestion pipeline is dropping or severely slowing down records as part of its processing. (rare) -- Kusto is facing problems saving the telemetry. (rare) -- The "Draft" or Query API, at api.applicationinsights.io, has failures querying the data from Kusto. +- Log Analytics is facing problems saving the telemetry. (rare) +- The "Draft" or Query API, at api.applicationinsights.io, has failures querying the data from Log Analytics. - The Azure portal UI code has issues pulling or rendering the records you are trying to view. Problems can occur anywhere across the service, and may be tedious to properly diagnose. The goal is to eliminate these layers as fast as possible, so you can investigate the correct step within the processing pipeline that is causing the symptoms. One method that will drastically assist with this isolation is sending a sample telemetry record using PowerShell. @@ -44,7 +44,7 @@ The are two caveats to running the operations from Kudu: - Prior to executing the Invoke-WebRequest command, you have to issue the PowerShell command: `$ProgressPreference = "SilentlyContinue"` - You cannot use -Verbose or -Debug. Instead, use -UseBasicParsing. -This would look like the following as opposed to the examples further down: +This would look like the following: ```shell $ProgressPreference = "SilentlyContinue" @@ -59,16 +59,16 @@ After you send a telemetry record via PowerShell, you can check to see if the sa - The machine or VM has DNS that resolves to correct IP address. - The network delivered the telemetry to the ingestion endpoint without blocking or dropping. - The ingestion endpoint accepted the sample payload and processed through the ingestion pipeline. -- Kusto correctly saved the sample telemetry record. -- The Azure portal Logs tab was able to query the Draft API (api.applicationinsights.io) and render the record in the portal UI +- Log Analytics correctly saved the sample telemetry record. +- The Azure portal **Logs** tab was able to query the Draft API (api.applicationinsights.io) and render the record in the portal UI. -If the sample record does show up, it typically means you just need to troubleshoot the Application Insights SDK or Codeless Agent. You would typically move to collect SDK Logs or PerfView traces, whichever is appropriate for the SDK/Agent version. +If the sample record does show up, it typically means you just need to troubleshoot the Application Insights SDK or codeless agent. You would typically move to collect SDK logs or PerfView traces, whichever is appropriate for the SDK/agent version. -There is still a small chance that ingestion or the backend pipeline is sampling records, or dropping specific telemetry types, which may explain why your test record arrives but the customer's production telemetry doesn't. You should always start investigating the SDKs or Agents if the below sample scripts correctly save and return telemetry records. +There is still a small chance that ingestion or the backend pipeline is sampling records, or dropping specific telemetry types, which may explain why your test record arrives but the customer's production telemetry doesn't. You should always start investigating the SDKs or agents if the below sample scripts correctly save and return telemetry records. **Availability Test Result Telemetry Records** -Availability Web Test Results are the best telemetry type to test with. The main reason is because our ingestion pipeline never samples out Availability Test records. If you instead send a Request Telemetry record using PowerShell, that record could get sampled out with Ingestion Sampling, and not show up when you go to query for it. Start with a sample Availability Test Records first, then try other telemetry types as needed. +Availability Web Test Results are the best telemetry type to test with. The main reason is because the ingestion pipeline never samples out Availability Test records. If you instead send a Request Telemetry record using PowerShell, that record could get sampled out with Ingestion Sampling, and not show up when you go to query for it. Start with a sample Availability Test Records first, then try other telemetry types as needed. ### PowerShell Script To Send an Availability Test Telemetry @@ -150,7 +150,7 @@ Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsin When the above script executes, you want to review the response details. We are looking for an HTTP 200 response, and as part of the response JSON payload we want to see the **itemsReceived** count **matches** the **itemsAccepted**. This means that the ingestion endpoint is informing the client: you sent one record, I accepted one record. -![Code showing the amount of items received and items accepted](./media/items-received-matches-items-accepted.png "Items received matches items accepted") +![Code showing the amount of items received and items accepted](./media/troubleshoot-missing-data/items-received-matches-items-accepted.png "Items received matches items accepted") ### PowerShell Script To Send a Request Telemetry From 7de11eae36a964dde20c8b27e0e767e3652cdd29 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Tue, 16 Aug 2022 20:56:10 -0700 Subject: [PATCH 09/36] More edits to target customer, not support staff --- .../app-insights/troubleshoot-missing-data.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md index fba026f8a4..3b21d03c75 100644 --- a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md +++ b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md @@ -8,19 +8,19 @@ editor: v-kainawroth ms.reviewer: aaronmax ms.service: azure-monitor ms.subservice: application-insights -#Customer intent: As an Application Insights user I want to understand known issues for the Application Insights Agent and how to troubleshoot common issues so I can use Application Insights and the Agent effectively. +#Customer intent: As an Application Insights user I want to understand known issues for the Application Insights agent and how to troubleshoot common issues so I can use Application Insights and the agent effectively. --- # Test connectivity and telemetry ingestion using PowerShell or curl clients -## Missing or No Data Symptoms +## Missing or no data symptoms If data is missing or you cannot find specific telemetry records, it can be the result of failures across every step in the life of a telemetry record: -![Graphic of where a telemetry record can go missing during ingestion and consumption](./media/troubleshoot-missing-data/life-of-a-telemetry-record.png "Life of telemetry record") +![Graphic of where a telemetry record can go missing during ingestion and consumption](./media/troubleshoot-missing-data/life-of-a-telemetry-record.png "Life of a telemetry record") -- The SDK or Agent is misconfigured and not sending data to the ingestion endpoint. -- The SDK or Agent is configured correctly but the network is blocking calls to the ingestion endpoint. +- The SDK or agent is misconfigured and not sending data to the ingestion endpoint. +- The SDK or agent is configured correctly but the network is blocking calls to the ingestion endpoint. - The ingestion endpoint is dropping or throttling inbound telemetry. - The ingestion pipeline is dropping or severely slowing down records as part of its processing. (rare) - Log Analytics is facing problems saving the telemetry. (rare) @@ -52,9 +52,9 @@ Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsin ``` -After you send a telemetry record via PowerShell, you can check to see if the sample telemetry record arrives using the Application Insights Logs tab in the Azure portal. If you see the sample record showing up, you have eliminated a large portion of the processing pipeline: +After you send a sample telemetry record via PowerShell, you can check to see if it arrives using the Application Insights Logs tab in the Azure portal. If you see the sample record showing up, you have eliminated a large portion of the processing pipeline. -**A Sample PowerShell Record Correctly Saved and Displayed Suggests:** +**A sample PowerShell record correctly saved and displayed suggests:** - The machine or VM has DNS that resolves to correct IP address. - The network delivered the telemetry to the ingestion endpoint without blocking or dropping. @@ -64,7 +64,7 @@ After you send a telemetry record via PowerShell, you can check to see if the sa If the sample record does show up, it typically means you just need to troubleshoot the Application Insights SDK or codeless agent. You would typically move to collect SDK logs or PerfView traces, whichever is appropriate for the SDK/agent version. -There is still a small chance that ingestion or the backend pipeline is sampling records, or dropping specific telemetry types, which may explain why your test record arrives but the customer's production telemetry doesn't. You should always start investigating the SDKs or agents if the below sample scripts correctly save and return telemetry records. +There is still a small chance that ingestion or the backend pipeline is sampling records, or dropping specific telemetry types, which may explain why your test record arrives but the production telemetry doesn't. You should always start investigating the SDKs or agents if the below sample scripts correctly save and return telemetry records. **Availability Test Result Telemetry Records** @@ -72,7 +72,7 @@ Availability Web Test Results are the best telemetry type to test with. The main ### PowerShell Script To Send an Availability Test Telemetry -This script builds a raw REST request to deliver a single Availability Test Result record to the customers Application Insights component. You can supply the **ConnectionString** or **InstrumentationKey** parameters. +This script builds a raw REST request to deliver a single Availability Test Result record to the Application Insights component. You can supply the **ConnectionString** or **InstrumentationKey** parameters. - Connection String only: Telemetry sent to regional endpoint in connection string - Ikey only: Telemetry sent to global ingestion endpoint @@ -225,7 +225,7 @@ Invoke-WebRequest -Uri $url -Method POST -Body $requestData -UseBasicParsing ### Curl Client To Send Availability Test Telemetry Record -For customers running Linux VMs, you could rely on Curl client to send a similar REST call instead of PowerShell. Below is a Curl request to send a single Availability Web Test result record. You will need to adjust the ingestion endpoint host, the ikey value and the timestamp values. +If you're running Linux VMs, you could rely on Curl client to send a similar REST call instead of PowerShell. Below is a Curl request to send a single Availability Web Test result record. You will need to adjust the ingestion endpoint host, the iKey value and the timestamp values. Curl command for **Linux/MaxOS**: @@ -243,7 +243,7 @@ curl -H "Content-Type: application/json" -X POST -d {\"data\":{\"baseData\":{\"v ### PowerShell Script To Send 100 Trace Messages -You can try to send a burst of telemetry records from the client machine to their component. For this approach, you will want to find a version of Microsoft.ApplicationInsights.dll loaded on the customer's machine. You can find it as part of NuGet package installation or Application Insights Agent (SMv2) installation. The below script will load the dll then call TrackTrace 100 times sending 100 telemetry records to the global ingestion endpoint at dc.services.visualstudio.com. +You can try to send a burst of telemetry records from the client machine to their component. For this approach, you will want to find a version of Microsoft.ApplicationInsights.dll loaded on the customer's machine. You can find it as part of NuGet package installation or Application Insights agent (SMv2) installation. The below script will load the dll then call TrackTrace 100 times sending 100 telemetry records to the global ingestion endpoint at dc.services.visualstudio.com. ```shell # One Parameter: Provide the Instrumentation Key @@ -251,7 +251,7 @@ $iKey = "{replace-with-your-ikey}" # Load App Insights dll from local NuGet package if it exists # Add-Type -Path "c:\users\{useralias}\.nuget\packages\microsoft.applicationinsights\2.17.0\lib\netstandard2.0\Microsoft.ApplicationInsights.dll"; -# Load App Insights dll from Application Insights Agent installation directory +# Load App Insights dll from Application Insights agent installation directory Add-Type -Path "C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\1.1.2\content\PowerShell\Microsoft.ApplicationInsights.dll"; $client = New-Object Microsoft.ApplicationInsights.TelemetryClient; @@ -282,7 +282,7 @@ First is an option to control which SSL/TLS protocol is used by PowerShell to ma ``` -Second is an option to ignore any SSL Certificate validation issues. If your customer has a firewall or proxy server that may be doing SSL certificate offloading, you can ignore any SSL cert issues by adding this snippet just before the `Invoke-WebRequest` call: +Second is an option to ignore any SSL Certificate validation issues. If you have a firewall or proxy server that may be doing SSL certificate offloading, you can ignore any SSL cert issues by adding this snippet just before the `Invoke-WebRequest` call: ```shell # Ignore mismatched SSL certificate @@ -301,12 +301,12 @@ add-type @" ``` -If the customer's application defaults to the system or machine default TLS settings then you can change those default settings within the registry on Windows machines using details found in this article: [Transport Layer Security (TLS) registry settings](/windows-server/security/tls/tls-registry-settings#tls-dtls-and-ssl-protocol-version-settings). +If the application defaults to the system or machine default TLS settings then you can change those default settings within the registry on Windows machines using details found in this article: [Transport Layer Security (TLS) registry settings](/windows-server/security/tls/tls-registry-settings#tls-dtls-and-ssl-protocol-version-settings). Alternatively, if you need to change the default TLS/SSL protocol used by a .NET application then you can follow the official guidance here [Transport Layer Security (TLS) best practices with the .NET Framework](/dotnet/framework/network-programming/tls). ### Next Steps -If sending telemetry via PowerShell from the customers impacted machine works, you will want to investigate their SDK or Codeless configuration for further troubleshooting. +If sending telemetry via PowerShell from the impacted machine works, you will want to investigate the SDK or codeless configuration for further troubleshooting. If sending telemetry via PowerShell also fails, continue to isolate where the problem could be: DNS investigations, TCP connection to ingestion endpoint, look for Dropped Metrics on the Ingestion tab within ASC, etc. From 946a1131f66b0b1e97bc5dd3b7477d096d1e8a88 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Tue, 16 Aug 2022 21:25:05 -0700 Subject: [PATCH 10/36] Edits to remove 'us'/'our' for Microsoft --- .../app-insights/troubleshoot-missing-data.md | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md index 3b21d03c75..bfa174ec11 100644 --- a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md +++ b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md @@ -52,17 +52,17 @@ Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsin ``` -After you send a sample telemetry record via PowerShell, you can check to see if it arrives using the Application Insights Logs tab in the Azure portal. If you see the sample record showing up, you have eliminated a large portion of the processing pipeline. +After you send a sample telemetry record via PowerShell, you can check to see if it arrives using the Application Insights **Logs** tab in the Azure portal. If you see the sample record showing up, you have eliminated a large portion of the processing pipeline. **A sample PowerShell record correctly saved and displayed suggests:** -- The machine or VM has DNS that resolves to correct IP address. +- The machine or VM has DNS that resolves to the correct IP address. - The network delivered the telemetry to the ingestion endpoint without blocking or dropping. -- The ingestion endpoint accepted the sample payload and processed through the ingestion pipeline. +- The ingestion endpoint accepted the sample payload and processed it through the ingestion pipeline. - Log Analytics correctly saved the sample telemetry record. - The Azure portal **Logs** tab was able to query the Draft API (api.applicationinsights.io) and render the record in the portal UI. -If the sample record does show up, it typically means you just need to troubleshoot the Application Insights SDK or codeless agent. You would typically move to collect SDK logs or PerfView traces, whichever is appropriate for the SDK/agent version. +If the sample record does show up, it usually means you just need to troubleshoot the Application Insights SDK or codeless agent. You would typically move to collect SDK logs or PerfView traces, whichever is appropriate for the SDK/agent version. There is still a small chance that ingestion or the backend pipeline is sampling records, or dropping specific telemetry types, which may explain why your test record arrives but the production telemetry doesn't. You should always start investigating the SDKs or agents if the below sample scripts correctly save and return telemetry records. @@ -76,7 +76,8 @@ This script builds a raw REST request to deliver a single Availability Test Resu - Connection String only: Telemetry sent to regional endpoint in connection string - Ikey only: Telemetry sent to global ingestion endpoint -- If both Connection String and Ikey parameters are supplied the script sends telemetry to the regional endpoint in the connection string + +If both Connection String and Ikey parameters are supplied, the script sends telemetry to the regional endpoint in the connection string It is easiest to run the script from the PowerShell ISE environment on an IaaS or VMSS (virtual machine scale set) instance. You can also copy and paste it into the App Services Kudu interface PowerShell debug console. @@ -225,7 +226,7 @@ Invoke-WebRequest -Uri $url -Method POST -Body $requestData -UseBasicParsing ### Curl Client To Send Availability Test Telemetry Record -If you're running Linux VMs, you could rely on Curl client to send a similar REST call instead of PowerShell. Below is a Curl request to send a single Availability Web Test result record. You will need to adjust the ingestion endpoint host, the iKey value and the timestamp values. +If you're running Linux VMs, you could rely on Curl client to send a similar REST call instead of PowerShell. Below is a Curl request to send a single Availability Web Test result record. You will need to adjust the ingestion endpoint host, the Ikey value, and the timestamp values. Curl command for **Linux/MaxOS**: @@ -243,7 +244,7 @@ curl -H "Content-Type: application/json" -X POST -d {\"data\":{\"baseData\":{\"v ### PowerShell Script To Send 100 Trace Messages -You can try to send a burst of telemetry records from the client machine to their component. For this approach, you will want to find a version of Microsoft.ApplicationInsights.dll loaded on the customer's machine. You can find it as part of NuGet package installation or Application Insights agent (SMv2) installation. The below script will load the dll then call TrackTrace 100 times sending 100 telemetry records to the global ingestion endpoint at dc.services.visualstudio.com. +You can try to send a burst of telemetry records from the machine to the Application Insights component. For this approach, you will want to find a version of Microsoft.ApplicationInsights.dll loaded on the machine. You can find it as part of NuGet package installation or Application Insights agent (SMv2) installation. The below script will load the dll, then call TrackTrace 100 times sending 100 telemetry records to the global ingestion endpoint at dc.services.visualstudio.com. ```shell # One Parameter: Provide the Instrumentation Key @@ -268,9 +269,9 @@ read-host “Press ENTER to continue...” ### SSL/TLS Troubleshooting -If you suspect the problem is between the client and our ingestion endpoint due to SSL/TLS configuration, you can adjust how PowerShell participates in the SSL/TLS protocol. Include these snippets if you need to diagnose secure channel as part of the connection between the client VM and our Ingestion endpoints +If you suspect the problem is between your machine or VM and the ingestion endpoint due to SSL/TLS configuration, you can adjust how PowerShell participates in the SSL/TLS protocol. Include these snippets if you need to diagnose secure channel as part of the connection between the client VM and our Ingestion endpoints. -First is an option to control which SSL/TLS protocol is used by PowerShell to make a connection to our ingestion endpoint. Add any one of these lines to the top of your PowerShell script to control the protocol used in the test REST request: +First is an option to control which SSL/TLS protocol is used by PowerShell to make a connection to the ingestion endpoint. Add any one of these lines to the top of your PowerShell script to control the protocol used in the test REST request: ```shell # Uncomment one or more of these lines to test TLS/SSL protocols other than the machine default option @@ -303,7 +304,7 @@ add-type @" If the application defaults to the system or machine default TLS settings then you can change those default settings within the registry on Windows machines using details found in this article: [Transport Layer Security (TLS) registry settings](/windows-server/security/tls/tls-registry-settings#tls-dtls-and-ssl-protocol-version-settings). -Alternatively, if you need to change the default TLS/SSL protocol used by a .NET application then you can follow the official guidance here [Transport Layer Security (TLS) best practices with the .NET Framework](/dotnet/framework/network-programming/tls). +Alternatively, if you need to change the default TLS/SSL protocol used by a .NET application, you can follow the official guidance here [Transport Layer Security (TLS) best practices with the .NET Framework](/dotnet/framework/network-programming/tls). ### Next Steps From 11a6f474752b6f4ec658fa1ce89e37fa0991bcef Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Wed, 17 Aug 2022 11:39:12 -0700 Subject: [PATCH 11/36] Edits based on Acrolinx --- .../app-insights/troubleshoot-missing-data.md | 141 +++++++++--------- 1 file changed, 70 insertions(+), 71 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md index bfa174ec11..97f3a3aeda 100644 --- a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md +++ b/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md @@ -15,7 +15,7 @@ ms.subservice: application-insights ## Missing or no data symptoms -If data is missing or you cannot find specific telemetry records, it can be the result of failures across every step in the life of a telemetry record: +If data is missing or you can't find specific telemetry records, it can be the result of failures across every step in the life of a telemetry record: ![Graphic of where a telemetry record can go missing during ingestion and consumption](./media/troubleshoot-missing-data/life-of-a-telemetry-record.png "Life of a telemetry record") @@ -24,27 +24,27 @@ If data is missing or you cannot find specific telemetry records, it can be the - The ingestion endpoint is dropping or throttling inbound telemetry. - The ingestion pipeline is dropping or severely slowing down records as part of its processing. (rare) - Log Analytics is facing problems saving the telemetry. (rare) -- The "Draft" or Query API, at api.applicationinsights.io, has failures querying the data from Log Analytics. -- The Azure portal UI code has issues pulling or rendering the records you are trying to view. +- The "draft" or query API, at api.applicationinsights.io, has failures querying the data from Log Analytics. +- The Azure portal UI code has issues pulling or rendering the records you're trying to view. -Problems can occur anywhere across the service, and may be tedious to properly diagnose. The goal is to eliminate these layers as fast as possible, so you can investigate the correct step within the processing pipeline that is causing the symptoms. One method that will drastically assist with this isolation is sending a sample telemetry record using PowerShell. +Problems can occur anywhere across the service, and may be tedious to properly diagnose. The goal is to eliminate these layers, so you can investigate the correct step within the processing pipeline that is causing the symptoms. One method that will assist with this isolation is sending a sample telemetry record using PowerShell. ## Troubleshooting with PowerShell ### On-premises or Azure VM -If you connect to the machine or VM where the web application is running, you can attempt to send a single telemetry record to the Applications Insights service instance using PowerShell. Doing so will not require any additional tools. +If you connect to the machine or VM where the web application is running, you can attempt to send a single telemetry record to the Applications Insights service instance using PowerShell. Doing so won't require any extra tools. -### Web App +### Azure Web Apps -If the app that is having issues sending telemetry is running on Kudu, you can use the PowerShell script outlined here from Kudu's PowerShell Debug Command prompt feature in Web Apps. +If the app that is having issues sending telemetry is running on Kudu, you can use the PowerShell script outlined here from Kudu's PowerShell debug command prompt feature in Azure Web Apps. The are two caveats to running the operations from Kudu: -- Prior to executing the Invoke-WebRequest command, you have to issue the PowerShell command: `$ProgressPreference = "SilentlyContinue"` -- You cannot use -Verbose or -Debug. Instead, use -UseBasicParsing. +- Prior to executing the `Invoke-WebRequest` command, you have to issue the PowerShell command `$ProgressPreference = "SilentlyContinue"` +- You can't use `-Verbose` or `-Debug`. Instead, use `-UseBasicParsing`. -This would look like the following: +This is how the code would look: ```shell $ProgressPreference = "SilentlyContinue" @@ -52,7 +52,7 @@ Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsin ``` -After you send a sample telemetry record via PowerShell, you can check to see if it arrives using the Application Insights **Logs** tab in the Azure portal. If you see the sample record showing up, you have eliminated a large portion of the processing pipeline. +After you send a sample telemetry record via PowerShell, you can check to see if it arrives using the Application Insights **Logs** tab in the Azure portal. If you see the sample record showing up, you've eliminated a large portion of the processing pipeline. **A sample PowerShell record correctly saved and displayed suggests:** @@ -60,29 +60,29 @@ After you send a sample telemetry record via PowerShell, you can check to see if - The network delivered the telemetry to the ingestion endpoint without blocking or dropping. - The ingestion endpoint accepted the sample payload and processed it through the ingestion pipeline. - Log Analytics correctly saved the sample telemetry record. -- The Azure portal **Logs** tab was able to query the Draft API (api.applicationinsights.io) and render the record in the portal UI. +- The Azure portal **Logs** tab was able to query the draft API (api.applicationinsights.io) and render the record in the portal UI. If the sample record does show up, it usually means you just need to troubleshoot the Application Insights SDK or codeless agent. You would typically move to collect SDK logs or PerfView traces, whichever is appropriate for the SDK/agent version. -There is still a small chance that ingestion or the backend pipeline is sampling records, or dropping specific telemetry types, which may explain why your test record arrives but the production telemetry doesn't. You should always start investigating the SDKs or agents if the below sample scripts correctly save and return telemetry records. +There's still a small chance that ingestion or the backend pipeline is sampling records, or dropping specific telemetry types, which may explain why your test record arrives but the production telemetry doesn't. You should always start investigating the SDKs or agents if the below sample scripts correctly save and return telemetry records. -**Availability Test Result Telemetry Records** +#### Availability test result telemetry records -Availability Web Test Results are the best telemetry type to test with. The main reason is because the ingestion pipeline never samples out Availability Test records. If you instead send a Request Telemetry record using PowerShell, that record could get sampled out with Ingestion Sampling, and not show up when you go to query for it. Start with a sample Availability Test Records first, then try other telemetry types as needed. +Availability web test results are the best telemetry type to test with. The main reason is because the ingestion pipeline never samples out availability test records. If you instead send a request telemetry record using PowerShell, it could get sampled out with ingestion sampling, and not show up when you go to query for it. Start with a sample availability test records first, then try other telemetry types as needed. -### PowerShell Script To Send an Availability Test Telemetry +### PowerShell script to send an availability test telemetry -This script builds a raw REST request to deliver a single Availability Test Result record to the Application Insights component. You can supply the **ConnectionString** or **InstrumentationKey** parameters. +This script builds a raw REST request to deliver a single availability test result record to the Application Insights component. You can supply the `$ConnectionString` or `$InstrumentationKey` parameters. - Connection String only: Telemetry sent to regional endpoint in connection string - Ikey only: Telemetry sent to global ingestion endpoint -If both Connection String and Ikey parameters are supplied, the script sends telemetry to the regional endpoint in the connection string +If both connection string and ikey parameters are supplied, the script sends telemetry to the regional endpoint in the connection string. -It is easiest to run the script from the PowerShell ISE environment on an IaaS or VMSS (virtual machine scale set) instance. You can also copy and paste it into the App Services Kudu interface PowerShell debug console. +It's easiest to run the script from the PowerShell ISE environment on an IaaS or virtual machine scale set (VMSS) instance. You can also copy and paste it into the App Services Kudu interface PowerShell debug console. ```shell -# Info: Provide either the Connection String or Ikey for your Application Insights Resource +# Info: Provide either the connection string or ikey for your Application Insights resource $ConnectionString = "" $InstrumentationKey = "" @@ -97,8 +97,7 @@ param ([string]$ConnectionString) return $Map } -# If Ikey is the only parameter supplied, we'll send telemetry to the -# global ingestion endpoint instead of regional endpoint found in connection strings +# If ikey is the only parameter supplied, we'll send telemetry to the global ingestion endpoint instead of regional endpoint found in connection strings If (($InstrumentationKey) -and ("" -eq $ConnectionString)) { $ConnectionString = "InstrumentationKey=$InstrumentationKey;IngestionEndpoint=https://dc.services.visualstudio.com/" } @@ -131,7 +130,7 @@ $availabilityData = @" "name": "Microsoft.ApplicationInsights.Metric", "time": "$time", "sampleRate": 100, - "iKey": "$iKey", + "ikey": "$ikey", "flags": 0 } "@ @@ -149,16 +148,16 @@ Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsin ``` -When the above script executes, you want to review the response details. We are looking for an HTTP 200 response, and as part of the response JSON payload we want to see the **itemsReceived** count **matches** the **itemsAccepted**. This means that the ingestion endpoint is informing the client: you sent one record, I accepted one record. +When the above script executes, you want to review the response details. We're looking for an HTTP 200 response, and as part of the response JSON payload we want to see the `itemsReceived` count **matches** the `itemsAccepted`. This means the ingestion endpoint is informing the client: you sent one record, I accepted one record. ![Code showing the amount of items received and items accepted](./media/troubleshoot-missing-data/items-received-matches-items-accepted.png "Items received matches items accepted") -### PowerShell Script To Send a Request Telemetry +### PowerShell script to send a request telemetry -If you want to test sending a single Request Telemetry record, the below script will help you format it. This telemetry type is susceptible to server-side ingestion sampling configuration. Make sure ingestion sampling is turned off to help confirm if these records are getting saved correctly. +If you want to test sending a single request telemetry record, the below script will help you format it. This telemetry type is susceptible to server-side ingestion sampling configuration. Make sure ingestion sampling is turned off to help confirm if these records are getting saved correctly. ```shell -# Info: Provide either the Connection String or Ikey for your Application Insights Resource +# Info: Provide either the connection string or ikey for your Application Insights resource $ConnectionString = "" $InstrumentationKey = "" @@ -173,8 +172,7 @@ param ([string]$ConnectionString) return $Map } -# If Ikey is the only parameter supplied, we'll send telemetry to the -# global ingestion endpoint instead of regional endpoint found in connection strings +# If ikey is the only parameter supplied, we'll send telemetry to the global ingestion endpoint instead of regional endpoint found in connection strings If (($InstrumentationKey) -and ("" -eq $ConnectionString)) { $ConnectionString = "InstrumentationKey=$InstrumentationKey;IngestionEndpoint=https://dc.services.visualstudio.com/" } @@ -203,7 +201,7 @@ $requestData = @" } }, "ver": 1, - "iKey": "$iKey", + "ikey": "$ikey", "name": "Microsoft.ApplicationInsights.Request", "time": "$time", "sampleRate": 100, @@ -224,39 +222,40 @@ Invoke-WebRequest -Uri $url -Method POST -Body $requestData -UseBasicParsing ``` -### Curl Client To Send Availability Test Telemetry Record +### Curl client to send availability test telemetry record -If you're running Linux VMs, you could rely on Curl client to send a similar REST call instead of PowerShell. Below is a Curl request to send a single Availability Web Test result record. You will need to adjust the ingestion endpoint host, the Ikey value, and the timestamp values. +If you're running Linux VMs, you could rely on the Curl client to send a similar REST call instead of PowerShell. Below is a Curl request to send a single availability web test result record. You'll need to adjust the ingestion endpoint host, the ikey value, and the timestamp values. Curl command for **Linux/MaxOS**: ``` ->curl -H "Content-Type: application/json" -X POST -d '{"data":{"baseData":{"ver":2,"id":"SampleRunId","name":"MicrosoftSupportSampleWebtestResultUsingCurl","duration":"00.00:00:10","success":true,"runLocation":"RegionName","message":"SampleWebtestResult","properties":{"SampleProperty":"SampleValue"}},"baseType":"AvailabilityData"},"ver":1,"name":"Microsoft.ApplicationInsights.Metric","time":"2021-10-05T22:00:00.0000000Z","sampleRate":100,"iKey":"4c529c82-dee8-4723-b030-7b56bae7562a","flags":0}' [https://%3cspan]https://dc.applicationinsights.azure.com/v2.1/track +>curl -H "Content-Type: application/json" -X POST -d '{"data":{"baseData":{"ver":2,"id":"SampleRunId","name":"MicrosoftSupportSampleWebtestResultUsingCurl","duration":"00.00:00:10","success":true,"runLocation":"RegionName","message":"SampleWebtestResult","properties":{"SampleProperty":"SampleValue"}},"baseType":"AvailabilityData"},"ver":1,"name":"Microsoft.ApplicationInsights.Metric","time":"2021-10-05T22:00:00.0000000Z","sampleRate":100,"ikey":"4c529c82-dee8-4723-b030-7b56bae7562a","flags":0}' [https://%3cspan]https://dc.applicationinsights.azure.com/v2.1/track ``` Curl command for **Windows** (adjust timestamp before running): ```shell -curl -H "Content-Type: application/json" -X POST -d {\"data\":{\"baseData\":{\"ver\":2,\"id\":\"SampleRunId\",\"name\":\"MicrosoftSupportSampleWebtestResultUsingCurl\",\"duration\":\"00.00:00:10\",\"success\":true,\"runLocation\":\"RegionName\",\"message\":\"SampleWebtestResult\",\"properties\":{\"SampleProperty\":\"SampleValue\"}},\"baseType\":\"AvailabilityData\"},\"ver\":1,\"name\":\"Microsoft.ApplicationInsights.Metric\",\"time\":\"2021-10-05T22:00:00.0000000Z\",\"sampleRate\":100,\"iKey\":\"4c529c82-dee8-4723-b030-7b56bae7562a\",\"flags\":0} https://dc.applicationinsights.azure.com/v2/track +curl -H "Content-Type: application/json" -X POST -d {\"data\":{\"baseData\":{\"ver\":2,\"id\":\"SampleRunId\",\"name\":\"MicrosoftSupportSampleWebtestResultUsingCurl\",\"duration\":\"00.00:00:10\",\"success\":true,\"runLocation\":\"RegionName\",\"message\":\"SampleWebtestResult\",\"properties\":{\"SampleProperty\":\"SampleValue\"}},\"baseType\":\"AvailabilityData\"},\"ver\":1,\"name\":\"Microsoft.ApplicationInsights.Metric\",\"time\":\"2021-10-05T22:00:00.0000000Z\",\"sampleRate\":100,\"ikey\":\"4c529c82-dee8-4723-b030-7b56bae7562a\",\"flags\":0} https://dc.applicationinsights.azure.com/v2/track ``` -### PowerShell Script To Send 100 Trace Messages +### PowerShell script to send 100 trace messages -You can try to send a burst of telemetry records from the machine to the Application Insights component. For this approach, you will want to find a version of Microsoft.ApplicationInsights.dll loaded on the machine. You can find it as part of NuGet package installation or Application Insights agent (SMv2) installation. The below script will load the dll, then call TrackTrace 100 times sending 100 telemetry records to the global ingestion endpoint at dc.services.visualstudio.com. +You can try to send a burst of telemetry records from the machine to the Application Insights component. For this approach, you'll want to find a version of Microsoft.ApplicationInsights.dll loaded on the machine. You can find it as part of NuGet package installation or Application Insights agent (SMv2) installation. The below script will load the dll, then call `TrackTrace` 100 times sending 100 telemetry records to the global ingestion endpoint at dc.services.visualstudio.com. ```shell -# One Parameter: Provide the Instrumentation Key -$iKey = "{replace-with-your-ikey}" +# One Parameter: Provide the instrumentation key +$ikey = "{replace-with-your-ikey}" -# Load App Insights dll from local NuGet package if it exists +# Load Application Insights dll from local NuGet package if it exists # Add-Type -Path "c:\users\{useralias}\.nuget\packages\microsoft.applicationinsights\2.17.0\lib\netstandard2.0\Microsoft.ApplicationInsights.dll"; -# Load App Insights dll from Application Insights agent installation directory +# Load Application Insights dll from Application Insights agent installation directory + Add-Type -Path "C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\1.1.2\content\PowerShell\Microsoft.ApplicationInsights.dll"; $client = New-Object Microsoft.ApplicationInsights.TelemetryClient; -$client.InstrumentationKey=$iKey; +$client.InstrumentationKey=$ikey; $i = 1; while ($i -le 100) { $client.TrackTrace("Sample Trace Message # $i", $null); @@ -267,46 +266,46 @@ read-host “Press ENTER to continue...” ``` -### SSL/TLS Troubleshooting +### SSL/TLS troubleshooting -If you suspect the problem is between your machine or VM and the ingestion endpoint due to SSL/TLS configuration, you can adjust how PowerShell participates in the SSL/TLS protocol. Include these snippets if you need to diagnose secure channel as part of the connection between the client VM and our Ingestion endpoints. +If you suspect the problem is between your machine or VM and the ingestion endpoint due to SSL/TLS configuration, you can adjust how PowerShell participates in the SSL/TLS protocol. Include these snippets if you need to diagnose secure channel as part of the connection between the client VM and the ingestion endpoints. -First is an option to control which SSL/TLS protocol is used by PowerShell to make a connection to the ingestion endpoint. Add any one of these lines to the top of your PowerShell script to control the protocol used in the test REST request: +- Option 1: Control which SSL/TLS protocol is used by PowerShell to make a connection to the ingestion endpoint. Add any one of these lines to the top of your PowerShell script to control the protocol used in the test REST request: -```shell -# Uncomment one or more of these lines to test TLS/SSL protocols other than the machine default option -# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::SSL3 -# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS -# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS11 -[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS12 -# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS13 + ```shell + # Uncomment one or more of these lines to test TLS/SSL protocols other than the machine default option + # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::SSL3 + # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS + # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS11 + # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS12 + # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS13 -``` + ``` -Second is an option to ignore any SSL Certificate validation issues. If you have a firewall or proxy server that may be doing SSL certificate offloading, you can ignore any SSL cert issues by adding this snippet just before the `Invoke-WebRequest` call: +- Option 2: Ignore any SSL Certificate validation issues. If you have a firewall or proxy server that may be doing SSL certificate offloading, you can ignore any SSL cert issues by adding this snippet just before the `Invoke-WebRequest` call: -```shell -# Ignore mismatched SSL certificate -add-type @" - using System.Net; - using System.Security.Cryptography.X509Certificates; - public class TrustAllCertsPolicy : ICertificatePolicy { - public bool CheckValidationResult( - ServicePoint srvPoint, X509Certificate certificate, - WebRequest request, int certificateProblem) { - return true; - } - } -"@ -[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy + ```shell + # Ignore mismatched SSL certificate + add-type @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } + "@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy -``` + ``` -If the application defaults to the system or machine default TLS settings then you can change those default settings within the registry on Windows machines using details found in this article: [Transport Layer Security (TLS) registry settings](/windows-server/security/tls/tls-registry-settings#tls-dtls-and-ssl-protocol-version-settings). +If the application defaults to the system or machine default TLS settings, you can change those default settings within the registry on Windows machines using details found in [Transport Layer Security (TLS) registry settings](/windows-server/security/tls/tls-registry-settings#tls-dtls-and-ssl-protocol-version-settings). -Alternatively, if you need to change the default TLS/SSL protocol used by a .NET application, you can follow the official guidance here [Transport Layer Security (TLS) best practices with the .NET Framework](/dotnet/framework/network-programming/tls). +Alternatively, if you need to change the default TLS/SSL protocol used by a .NET application, you can follow the official guidance in [Transport Layer Security (TLS) best practices with the .NET Framework](/dotnet/framework/network-programming/tls). -### Next Steps +### Next steps If sending telemetry via PowerShell from the impacted machine works, you will want to investigate the SDK or codeless configuration for further troubleshooting. From e6915a0545414c1e17608ac077f39cb76003bc03 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Wed, 17 Aug 2022 21:56:03 -0700 Subject: [PATCH 12/36] Edits based on feedback --- .../items-received-matches-items-accepted.png | Bin .../life-of-a-telemetry-record.png | Bin ...a.md => troubleshoot-missing-telemetry.md} | 32 ++++++++++-------- 3 files changed, 17 insertions(+), 15 deletions(-) rename support/azure/azure-monitor/app-insights/media/{troubleshoot-missing-data => troubleshoot-missing-telemetry}/items-received-matches-items-accepted.png (100%) rename support/azure/azure-monitor/app-insights/media/{troubleshoot-missing-data => troubleshoot-missing-telemetry}/life-of-a-telemetry-record.png (100%) rename support/azure/azure-monitor/app-insights/{troubleshoot-missing-data.md => troubleshoot-missing-telemetry.md} (89%) diff --git a/support/azure/azure-monitor/app-insights/media/troubleshoot-missing-data/items-received-matches-items-accepted.png b/support/azure/azure-monitor/app-insights/media/troubleshoot-missing-telemetry/items-received-matches-items-accepted.png similarity index 100% rename from support/azure/azure-monitor/app-insights/media/troubleshoot-missing-data/items-received-matches-items-accepted.png rename to support/azure/azure-monitor/app-insights/media/troubleshoot-missing-telemetry/items-received-matches-items-accepted.png diff --git a/support/azure/azure-monitor/app-insights/media/troubleshoot-missing-data/life-of-a-telemetry-record.png b/support/azure/azure-monitor/app-insights/media/troubleshoot-missing-telemetry/life-of-a-telemetry-record.png similarity index 100% rename from support/azure/azure-monitor/app-insights/media/troubleshoot-missing-data/life-of-a-telemetry-record.png rename to support/azure/azure-monitor/app-insights/media/troubleshoot-missing-telemetry/life-of-a-telemetry-record.png diff --git a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md b/support/azure/azure-monitor/app-insights/troubleshoot-missing-telemetry.md similarity index 89% rename from support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md rename to support/azure/azure-monitor/app-insights/troubleshoot-missing-telemetry.md index 97f3a3aeda..ae045489b8 100644 --- a/support/azure/azure-monitor/app-insights/troubleshoot-missing-data.md +++ b/support/azure/azure-monitor/app-insights/troubleshoot-missing-telemetry.md @@ -1,6 +1,6 @@ --- -title: Test connectivity and telemetry ingestion using PowerShell or curl clients -description: Learn how to troubleshoot missing data by using PowerShell or curl clients. +title: Troubleshoot missing telemetry in Application Insights +description: Learn how to test connectivity and telemetry ingestion using PowerShell or curl clients ms.topic: conceptual ms.date: 8/5/2022 ms.author: toddfous @@ -8,26 +8,28 @@ editor: v-kainawroth ms.reviewer: aaronmax ms.service: azure-monitor ms.subservice: application-insights -#Customer intent: As an Application Insights user I want to understand known issues for the Application Insights agent and how to troubleshoot common issues so I can use Application Insights and the agent effectively. +#Customer intent: As an Application Insights user I want to know how to troubleshoot missing telemetry so I can use Application Insights effectively. --- -# Test connectivity and telemetry ingestion using PowerShell or curl clients +# Troubleshoot missing telemetry in Application Insights using PowerShell or curl clients -## Missing or no data symptoms +This article provides troubleshooting information to help resolve issues when telemetry is missing or doesn’t appear in Azure portal. -If data is missing or you can't find specific telemetry records, it can be the result of failures across every step in the life of a telemetry record: +## Steps in the processing pipeline which can cause missing telemetry -![Graphic of where a telemetry record can go missing during ingestion and consumption](./media/troubleshoot-missing-data/life-of-a-telemetry-record.png "Life of a telemetry record") +If telemetry is missing or you can't find specific telemetry records, it can be the result of failures across every step in the life of a telemetry record: -- The SDK or agent is misconfigured and not sending data to the ingestion endpoint. +![Graphic of where a telemetry record can go missing during ingestion and consumption](./media/troubleshoot-missing-telemetry/life-of-a-telemetry-record.png "Life of a telemetry record") + +- The SDK or agent is misconfigured and not sending application telemetry to the ingestion endpoint. - The SDK or agent is configured correctly but the network is blocking calls to the ingestion endpoint. - The ingestion endpoint is dropping or throttling inbound telemetry. -- The ingestion pipeline is dropping or severely slowing down records as part of its processing. (rare) -- Log Analytics is facing problems saving the telemetry. (rare) -- The "draft" or query API, at api.applicationinsights.io, has failures querying the data from Log Analytics. -- The Azure portal UI code has issues pulling or rendering the records you're trying to view. +- The ingestion pipeline is dropping or severely slowing down records as part of its processing due to [service health](https://azure.microsoft.com/get-started/azure-portal/service-health/#overview). (rare) +- Log Analytics is facing problems saving telemetry. (rare) +- The telemetry query API at api.applicationinsights.io has failures querying telemetry from Log Analytics. +- The Azure portal has issues pulling or rendering the records you're trying to view. -Problems can occur anywhere across the service, and may be tedious to properly diagnose. The goal is to eliminate these layers, so you can investigate the correct step within the processing pipeline that is causing the symptoms. One method that will assist with this isolation is sending a sample telemetry record using PowerShell. +Problems can occur anywhere across the service, and may be tedious to properly diagnose. The goal is to eliminate these layers, so you can investigate the correct step within the processing pipeline that is causing the problem. One method that will assist with this isolation is sending a sample telemetry record using PowerShell. ## Troubleshooting with PowerShell @@ -37,7 +39,7 @@ If you connect to the machine or VM where the web application is running, you ca ### Azure Web Apps -If the app that is having issues sending telemetry is running on Kudu, you can use the PowerShell script outlined here from Kudu's PowerShell debug command prompt feature in Azure Web Apps. +If the app that is having issues sending telemetry is [running on Kudu](https://docs.microsoft.com/azure/app-service/resources-kudu), you can use the PowerShell script outlined here from Kudu's PowerShell debug command prompt feature in Azure Web Apps. The are two caveats to running the operations from Kudu: @@ -150,7 +152,7 @@ Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsin When the above script executes, you want to review the response details. We're looking for an HTTP 200 response, and as part of the response JSON payload we want to see the `itemsReceived` count **matches** the `itemsAccepted`. This means the ingestion endpoint is informing the client: you sent one record, I accepted one record. -![Code showing the amount of items received and items accepted](./media/troubleshoot-missing-data/items-received-matches-items-accepted.png "Items received matches items accepted") +![Code showing the amount of items received and items accepted](./media/troubleshoot-missing-telemetry/items-received-matches-items-accepted.png "Items received matches items accepted") ### PowerShell script to send a request telemetry From 91fa02a2f01e8e9c4778f0ac0d20a8514f0eb6c2 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Thu, 18 Aug 2022 14:28:26 -0700 Subject: [PATCH 13/36] More edits based on feedback --- .../troubleshoot-missing-telemetry.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/troubleshoot-missing-telemetry.md b/support/azure/azure-monitor/app-insights/troubleshoot-missing-telemetry.md index ae045489b8..9739625d17 100644 --- a/support/azure/azure-monitor/app-insights/troubleshoot-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/troubleshoot-missing-telemetry.md @@ -1,21 +1,21 @@ --- -title: Troubleshoot missing telemetry in Application Insights -description: Learn how to test connectivity and telemetry ingestion using PowerShell or curl clients +title: Investigating missing telemetry in Application Insights +description: Learn how to test connectivity and telemetry ingestion using PowerShell or curl client to isolate the step in the processing pipeline that causes telemetry to go missing ms.topic: conceptual -ms.date: 8/5/2022 +ms.date: 8/18/2022 ms.author: toddfous editor: v-kainawroth ms.reviewer: aaronmax ms.service: azure-monitor ms.subservice: application-insights -#Customer intent: As an Application Insights user I want to know how to troubleshoot missing telemetry so I can use Application Insights effectively. +#Customer intent: As an Application Insights user I want to know where in the processing pipeline telemetry goes missing so I know where to troubleshoot. --- -# Troubleshoot missing telemetry in Application Insights using PowerShell or curl clients +# Investigating missing telemetry in Application Insights using PowerShell or curl client -This article provides troubleshooting information to help resolve issues when telemetry is missing or doesn’t appear in Azure portal. +This article provides information to help you isolate the step in the processing pipeline that causes telemetry to go missing. -## Steps in the processing pipeline which can cause missing telemetry +## Every step telemetry passes in the processing pipeline If telemetry is missing or you can't find specific telemetry records, it can be the result of failures across every step in the life of a telemetry record: @@ -39,7 +39,7 @@ If you connect to the machine or VM where the web application is running, you ca ### Azure Web Apps -If the app that is having issues sending telemetry is [running on Kudu](https://docs.microsoft.com/azure/app-service/resources-kudu), you can use the PowerShell script outlined here from Kudu's PowerShell debug command prompt feature in Azure Web Apps. +If the app that is having issues sending telemetry is [running on Kudu](/azure/app-service/resources-kudu), you can use the PowerShell script outlined here from Kudu's PowerShell debug command prompt feature in Azure Web Apps. The are two caveats to running the operations from Kudu: @@ -154,7 +154,7 @@ When the above script executes, you want to review the response details. We're l ![Code showing the amount of items received and items accepted](./media/troubleshoot-missing-telemetry/items-received-matches-items-accepted.png "Items received matches items accepted") -### PowerShell script to send a request telemetry +### PowerShell script to send a request telemetry record If you want to test sending a single request telemetry record, the below script will help you format it. This telemetry type is susceptible to server-side ingestion sampling configuration. Make sure ingestion sampling is turned off to help confirm if these records are getting saved correctly. @@ -226,7 +226,7 @@ Invoke-WebRequest -Uri $url -Method POST -Body $requestData -UseBasicParsing ### Curl client to send availability test telemetry record -If you're running Linux VMs, you could rely on the Curl client to send a similar REST call instead of PowerShell. Below is a Curl request to send a single availability web test result record. You'll need to adjust the ingestion endpoint host, the ikey value, and the timestamp values. +If you're running Linux VMs, you could rely on the curl client to send a similar REST call instead of PowerShell. Below is a curl request to send a single availability web test result record. You'll need to adjust the ingestion endpoint host, the ikey value, and the timestamp values. Curl command for **Linux/MaxOS**: @@ -268,7 +268,7 @@ read-host “Press ENTER to continue...” ``` -### SSL/TLS troubleshooting +## SSL/TLS troubleshooting If you suspect the problem is between your machine or VM and the ingestion endpoint due to SSL/TLS configuration, you can adjust how PowerShell participates in the SSL/TLS protocol. Include these snippets if you need to diagnose secure channel as part of the connection between the client VM and the ingestion endpoints. @@ -307,7 +307,7 @@ If the application defaults to the system or machine default TLS settings, you c Alternatively, if you need to change the default TLS/SSL protocol used by a .NET application, you can follow the official guidance in [Transport Layer Security (TLS) best practices with the .NET Framework](/dotnet/framework/network-programming/tls). -### Next steps +## Next steps If sending telemetry via PowerShell from the impacted machine works, you will want to investigate the SDK or codeless configuration for further troubleshooting. From de11220bc8a226a25951febc759c98d4729cf527 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Thu, 18 Aug 2022 15:33:09 -0700 Subject: [PATCH 14/36] More edits plus TOC entry --- ...elemetry.md => investigate-missing-telemetry.md} | 8 ++++---- .../items-received-matches-items-accepted.png | Bin .../life-of-a-telemetry-record.png | Bin support/azure/azure-monitor/toc.yml | 2 ++ 4 files changed, 6 insertions(+), 4 deletions(-) rename support/azure/azure-monitor/app-insights/{troubleshoot-missing-telemetry.md => investigate-missing-telemetry.md} (97%) rename support/azure/azure-monitor/app-insights/media/{troubleshoot-missing-telemetry => investigate-missing-telemetry}/items-received-matches-items-accepted.png (100%) rename support/azure/azure-monitor/app-insights/media/{troubleshoot-missing-telemetry => investigate-missing-telemetry}/life-of-a-telemetry-record.png (100%) diff --git a/support/azure/azure-monitor/app-insights/troubleshoot-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md similarity index 97% rename from support/azure/azure-monitor/app-insights/troubleshoot-missing-telemetry.md rename to support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index 9739625d17..9274e35480 100644 --- a/support/azure/azure-monitor/app-insights/troubleshoot-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -1,5 +1,5 @@ --- -title: Investigating missing telemetry in Application Insights +title: Investigate missing telemetry in Azure Monitor Application Insights description: Learn how to test connectivity and telemetry ingestion using PowerShell or curl client to isolate the step in the processing pipeline that causes telemetry to go missing ms.topic: conceptual ms.date: 8/18/2022 @@ -11,7 +11,7 @@ ms.subservice: application-insights #Customer intent: As an Application Insights user I want to know where in the processing pipeline telemetry goes missing so I know where to troubleshoot. --- -# Investigating missing telemetry in Application Insights using PowerShell or curl client +# Investigate missing telemetry in Azure Monitor Application Insights using PowerShell or curl client This article provides information to help you isolate the step in the processing pipeline that causes telemetry to go missing. @@ -19,7 +19,7 @@ This article provides information to help you isolate the step in the processing If telemetry is missing or you can't find specific telemetry records, it can be the result of failures across every step in the life of a telemetry record: -![Graphic of where a telemetry record can go missing during ingestion and consumption](./media/troubleshoot-missing-telemetry/life-of-a-telemetry-record.png "Life of a telemetry record") +![Graphic of where a telemetry record can go missing during ingestion and consumption](./media/investigate-missing-telemetry/life-of-a-telemetry-record.png "Life of a telemetry record") - The SDK or agent is misconfigured and not sending application telemetry to the ingestion endpoint. - The SDK or agent is configured correctly but the network is blocking calls to the ingestion endpoint. @@ -152,7 +152,7 @@ Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsin When the above script executes, you want to review the response details. We're looking for an HTTP 200 response, and as part of the response JSON payload we want to see the `itemsReceived` count **matches** the `itemsAccepted`. This means the ingestion endpoint is informing the client: you sent one record, I accepted one record. -![Code showing the amount of items received and items accepted](./media/troubleshoot-missing-telemetry/items-received-matches-items-accepted.png "Items received matches items accepted") +![Code showing the amount of items received and items accepted](./media/investigate-missing-telemetry/items-received-matches-items-accepted.png "Items received matches items accepted") ### PowerShell script to send a request telemetry record diff --git a/support/azure/azure-monitor/app-insights/media/troubleshoot-missing-telemetry/items-received-matches-items-accepted.png b/support/azure/azure-monitor/app-insights/media/investigate-missing-telemetry/items-received-matches-items-accepted.png similarity index 100% rename from support/azure/azure-monitor/app-insights/media/troubleshoot-missing-telemetry/items-received-matches-items-accepted.png rename to support/azure/azure-monitor/app-insights/media/investigate-missing-telemetry/items-received-matches-items-accepted.png diff --git a/support/azure/azure-monitor/app-insights/media/troubleshoot-missing-telemetry/life-of-a-telemetry-record.png b/support/azure/azure-monitor/app-insights/media/investigate-missing-telemetry/life-of-a-telemetry-record.png similarity index 100% rename from support/azure/azure-monitor/app-insights/media/troubleshoot-missing-telemetry/life-of-a-telemetry-record.png rename to support/azure/azure-monitor/app-insights/media/investigate-missing-telemetry/life-of-a-telemetry-record.png diff --git a/support/azure/azure-monitor/toc.yml b/support/azure/azure-monitor/toc.yml index 23d4eb8c57..1851d8a702 100644 --- a/support/azure/azure-monitor/toc.yml +++ b/support/azure/azure-monitor/toc.yml @@ -5,6 +5,8 @@ items: items: - name: Application Insights telemetry items: + - name: Investigate missing telemetry in Application Insights + href: app-insights/investigate-missing-telemetry.md - name: Troubleshoot auto-instrumentation issues href: app-insights/auto-instrumentation-troubleshoot.md - name: Troubleshoot Azure Application Insights in a Java web project From d0c80fec6284a5cd420d9a1053433a5c6fe9ede2 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Thu, 18 Aug 2022 15:44:32 -0700 Subject: [PATCH 15/36] Final edits --- .../app-insights/investigate-missing-telemetry.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index 9274e35480..c4bde1144a 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -26,12 +26,12 @@ If telemetry is missing or you can't find specific telemetry records, it can be - The ingestion endpoint is dropping or throttling inbound telemetry. - The ingestion pipeline is dropping or severely slowing down records as part of its processing due to [service health](https://azure.microsoft.com/get-started/azure-portal/service-health/#overview). (rare) - Log Analytics is facing problems saving telemetry. (rare) -- The telemetry query API at api.applicationinsights.io has failures querying telemetry from Log Analytics. +- The telemetry query API at `api.applicationinsights.io` has failures querying telemetry from Log Analytics. - The Azure portal has issues pulling or rendering the records you're trying to view. Problems can occur anywhere across the service, and may be tedious to properly diagnose. The goal is to eliminate these layers, so you can investigate the correct step within the processing pipeline that is causing the problem. One method that will assist with this isolation is sending a sample telemetry record using PowerShell. -## Troubleshooting with PowerShell +## Troubleshoot with PowerShell ### On-premises or Azure VM @@ -62,7 +62,7 @@ After you send a sample telemetry record via PowerShell, you can check to see if - The network delivered the telemetry to the ingestion endpoint without blocking or dropping. - The ingestion endpoint accepted the sample payload and processed it through the ingestion pipeline. - Log Analytics correctly saved the sample telemetry record. -- The Azure portal **Logs** tab was able to query the draft API (api.applicationinsights.io) and render the record in the portal UI. +- The Azure portal **Logs** tab was able to query the API (`api.applicationinsights.io`) and render the record in the portal UI. If the sample record does show up, it usually means you just need to troubleshoot the Application Insights SDK or codeless agent. You would typically move to collect SDK logs or PerfView traces, whichever is appropriate for the SDK/agent version. @@ -312,3 +312,5 @@ Alternatively, if you need to change the default TLS/SSL protocol used by a .NET If sending telemetry via PowerShell from the impacted machine works, you will want to investigate the SDK or codeless configuration for further troubleshooting. If sending telemetry via PowerShell also fails, continue to isolate where the problem could be: DNS investigations, TCP connection to ingestion endpoint, look for Dropped Metrics on the Ingestion tab within ASC, etc. + +[!INCLUDE [Azure Help Support](../../../includes/azure-help-support.md)] From 814b53f68504c334eba80904eb8afb50f7b3b566 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Thu, 18 Aug 2022 21:45:08 -0700 Subject: [PATCH 16/36] More 'final' edits --- .../investigate-missing-telemetry.md | 57 ++++++------------- 1 file changed, 18 insertions(+), 39 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index c4bde1144a..2d509da0a0 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -1,6 +1,6 @@ --- title: Investigate missing telemetry in Azure Monitor Application Insights -description: Learn how to test connectivity and telemetry ingestion using PowerShell or curl client to isolate the step in the processing pipeline that causes telemetry to go missing +description: Learn how to test connectivity and telemetry ingestion using PowerShell or curl to isolate the step in the processing pipeline that causes telemetry to go missing ms.topic: conceptual ms.date: 8/18/2022 ms.author: toddfous @@ -11,9 +11,9 @@ ms.subservice: application-insights #Customer intent: As an Application Insights user I want to know where in the processing pipeline telemetry goes missing so I know where to troubleshoot. --- -# Investigate missing telemetry in Azure Monitor Application Insights using PowerShell or curl client +# Investigate missing telemetry in Azure Monitor Application Insights using PowerShell or curl -This article provides information to help you isolate the step in the processing pipeline that causes telemetry to go missing. +This article provides information to help you isolate the step in the processing pipeline that causes telemetry to go missing by testing connectivity and telemetry ingestion using PowerShell or curl. No extra tools are needed. ## Every step telemetry passes in the processing pipeline @@ -29,13 +29,13 @@ If telemetry is missing or you can't find specific telemetry records, it can be - The telemetry query API at `api.applicationinsights.io` has failures querying telemetry from Log Analytics. - The Azure portal has issues pulling or rendering the records you're trying to view. -Problems can occur anywhere across the service, and may be tedious to properly diagnose. The goal is to eliminate these layers, so you can investigate the correct step within the processing pipeline that is causing the problem. One method that will assist with this isolation is sending a sample telemetry record using PowerShell. +Problems can occur anywhere across the service, and may be tedious to properly diagnose. The goal is to eliminate these layers, so you can investigate the correct step within the processing pipeline that is causing the problem. One method that will assist with this isolation is sending a sample telemetry record using PowerShell or curl. ## Troubleshoot with PowerShell ### On-premises or Azure VM -If you connect to the machine or VM where the web application is running, you can attempt to send a single telemetry record to the Applications Insights service instance using PowerShell. Doing so won't require any extra tools. +If you connect to the machine or VM where the web application is running, you can attempt to send a single telemetry record to the Applications Insights service instance using PowerShell. ### Azure Web Apps @@ -70,11 +70,11 @@ There's still a small chance that ingestion or the backend pipeline is sampling #### Availability test result telemetry records -Availability web test results are the best telemetry type to test with. The main reason is because the ingestion pipeline never samples out availability test records. If you instead send a request telemetry record using PowerShell, it could get sampled out with ingestion sampling, and not show up when you go to query for it. Start with a sample availability test records first, then try other telemetry types as needed. +Availability test results are the best telemetry type to test with. The main reason is because the ingestion pipeline never samples out availability test results. If you instead send a request telemetry record using PowerShell, it could get sampled out with ingestion sampling, and not show up when you go to query for it. Start with a sample availability test result telemetry record first, then try other telemetry types as needed. -### PowerShell script to send an availability test telemetry +### PowerShell script to send an availability test result telemetry record -This script builds a raw REST request to deliver a single availability test result record to the Application Insights component. You can supply the `$ConnectionString` or `$InstrumentationKey` parameters. +This script builds a raw REST request to deliver a single availability test result telemetry record to the Application Insights component. You can supply the `$ConnectionString` or `$InstrumentationKey` parameters. - Connection String only: Telemetry sent to regional endpoint in connection string - Ikey only: Telemetry sent to global ingestion endpoint @@ -224,9 +224,9 @@ Invoke-WebRequest -Uri $url -Method POST -Body $requestData -UseBasicParsing ``` -### Curl client to send availability test telemetry record +### Curl client to send availability test result telemetry record -If you're running Linux VMs, you could rely on the curl client to send a similar REST call instead of PowerShell. Below is a curl request to send a single availability web test result record. You'll need to adjust the ingestion endpoint host, the ikey value, and the timestamp values. +If you're running Linux VMs, you could rely on the curl client to send a similar REST call instead of PowerShell. Below is a curl request to send a single availability test result telemetry record. You'll need to adjust the ingestion endpoint host, the ikey value, and the timestamp values. Curl command for **Linux/MaxOS**: @@ -235,39 +235,13 @@ Curl command for **Linux/MaxOS**: ``` -Curl command for **Windows** (adjust timestamp before running): +Curl command for **Windows**: ```shell curl -H "Content-Type: application/json" -X POST -d {\"data\":{\"baseData\":{\"ver\":2,\"id\":\"SampleRunId\",\"name\":\"MicrosoftSupportSampleWebtestResultUsingCurl\",\"duration\":\"00.00:00:10\",\"success\":true,\"runLocation\":\"RegionName\",\"message\":\"SampleWebtestResult\",\"properties\":{\"SampleProperty\":\"SampleValue\"}},\"baseType\":\"AvailabilityData\"},\"ver\":1,\"name\":\"Microsoft.ApplicationInsights.Metric\",\"time\":\"2021-10-05T22:00:00.0000000Z\",\"sampleRate\":100,\"ikey\":\"4c529c82-dee8-4723-b030-7b56bae7562a\",\"flags\":0} https://dc.applicationinsights.azure.com/v2/track ``` -### PowerShell script to send 100 trace messages - -You can try to send a burst of telemetry records from the machine to the Application Insights component. For this approach, you'll want to find a version of Microsoft.ApplicationInsights.dll loaded on the machine. You can find it as part of NuGet package installation or Application Insights agent (SMv2) installation. The below script will load the dll, then call `TrackTrace` 100 times sending 100 telemetry records to the global ingestion endpoint at dc.services.visualstudio.com. - -```shell -# One Parameter: Provide the instrumentation key -$ikey = "{replace-with-your-ikey}" - -# Load Application Insights dll from local NuGet package if it exists -# Add-Type -Path "c:\users\{useralias}\.nuget\packages\microsoft.applicationinsights\2.17.0\lib\netstandard2.0\Microsoft.ApplicationInsights.dll"; -# Load Application Insights dll from Application Insights agent installation directory - -Add-Type -Path "C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\1.1.2\content\PowerShell\Microsoft.ApplicationInsights.dll"; -$client = New-Object Microsoft.ApplicationInsights.TelemetryClient; - -$client.InstrumentationKey=$ikey; -$i = 1; -while ($i -le 100) { - $client.TrackTrace("Sample Trace Message # $i", $null); - $i +=1; -} -$client.Flush(); -read-host “Press ENTER to continue...” - -``` - ## SSL/TLS troubleshooting If you suspect the problem is between your machine or VM and the ingestion endpoint due to SSL/TLS configuration, you can adjust how PowerShell participates in the SSL/TLS protocol. Include these snippets if you need to diagnose secure channel as part of the connection between the client VM and the ingestion endpoints. @@ -309,8 +283,13 @@ Alternatively, if you need to change the default TLS/SSL protocol used by a .NET ## Next steps -If sending telemetry via PowerShell from the impacted machine works, you will want to investigate the SDK or codeless configuration for further troubleshooting. +If sending telemetry from your application's host machine via PowerShell or curl is successful, missing telemetry is likely due to Application Insights SDK or agent setup or configuration issues. Review official documentation for enabling Application Insights monitoring for your application host and programming language to verify all your configurations or code follow proper guidance and examples. + +If tests using PowerShell or curl also fail to send telemetry to the ingestion endpoint, verify a few common client side related issues that may contribute to the problem: -If sending telemetry via PowerShell also fails, continue to isolate where the problem could be: DNS investigations, TCP connection to ingestion endpoint, look for Dropped Metrics on the Ingestion tab within ASC, etc. +- DNS on your network fails to resolve the public ingestion endpoint to the correct IP address. +- TCP connection from your application server to ingestion endpoint may be blocked by firewalls or gateway devices. +- Your application may default to using TLS 1.0 or TLS 1.1, when the ingestion endpoint the SDK connects to may require TLS 1.2. +- You may have more than one Azure Monitor Private Link impacting your private network, and it may overwrite your DNS entries to resolve to the wrong private IP address where your ingestion endpoint is listening using private endpoints. [!INCLUDE [Azure Help Support](../../../includes/azure-help-support.md)] From 96cd11f02be06baeb91f52154ae770218234bb5d Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Fri, 19 Aug 2022 10:17:28 -0700 Subject: [PATCH 17/36] Even more 'final' edits --- .../investigate-missing-telemetry.md | 40 +++++++++--------- ....png => telemetry-processing-pipeline.png} | Bin 2 files changed, 20 insertions(+), 20 deletions(-) rename support/azure/azure-monitor/app-insights/media/investigate-missing-telemetry/{life-of-a-telemetry-record.png => telemetry-processing-pipeline.png} (100%) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index 2d509da0a0..47261c556e 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -17,16 +17,16 @@ This article provides information to help you isolate the step in the processing ## Every step telemetry passes in the processing pipeline -If telemetry is missing or you can't find specific telemetry records, it can be the result of failures across every step in the life of a telemetry record: +If telemetry is missing or you can't find specific telemetry records, it can be the result of failures across every step in processing pipeline: -![Graphic of where a telemetry record can go missing during ingestion and consumption](./media/investigate-missing-telemetry/life-of-a-telemetry-record.png "Life of a telemetry record") +![Graphic shows where telemetry can go missing during ingestion and consumption](./media/investigate-missing-telemetry/telemetry-processing-pipeline.png "Steps in the processing pipeline") - The SDK or agent is misconfigured and not sending application telemetry to the ingestion endpoint. - The SDK or agent is configured correctly but the network is blocking calls to the ingestion endpoint. - The ingestion endpoint is dropping or throttling inbound telemetry. -- The ingestion pipeline is dropping or severely slowing down records as part of its processing due to [service health](https://azure.microsoft.com/get-started/azure-portal/service-health/#overview). (rare) +- The ingestion pipeline is dropping or severely slowing down telemetry as part of its processing due to [service health](https://azure.microsoft.com/get-started/azure-portal/service-health/#overview). (rare) - Log Analytics is facing problems saving telemetry. (rare) -- The telemetry query API at `api.applicationinsights.io` has failures querying telemetry from Log Analytics. +- The query API at `api.applicationinsights.io` has failures querying records from Log Analytics. - The Azure portal has issues pulling or rendering the records you're trying to view. Problems can occur anywhere across the service, and may be tedious to properly diagnose. The goal is to eliminate these layers, so you can investigate the correct step within the processing pipeline that is causing the problem. One method that will assist with this isolation is sending a sample telemetry record using PowerShell or curl. @@ -35,7 +35,7 @@ Problems can occur anywhere across the service, and may be tedious to properly d ### On-premises or Azure VM -If you connect to the machine or VM where the web application is running, you can attempt to send a single telemetry record to the Applications Insights service instance using PowerShell. +If you connect to the host machine or VM where the web application is running, you can attempt to send a single telemetry record to the Applications Insights service instance using PowerShell. ### Azure Web Apps @@ -56,32 +56,32 @@ Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsin After you send a sample telemetry record via PowerShell, you can check to see if it arrives using the Application Insights **Logs** tab in the Azure portal. If you see the sample record showing up, you've eliminated a large portion of the processing pipeline. -**A sample PowerShell record correctly saved and displayed suggests:** +**A sample telemetry record correctly saved and displayed suggests:** -- The machine or VM has DNS that resolves to the correct IP address. -- The network delivered the telemetry to the ingestion endpoint without blocking or dropping. +- The host machine or VM has DNS that resolves to the correct IP address. +- The network delivered the sample record to the ingestion endpoint without blocking or dropping. - The ingestion endpoint accepted the sample payload and processed it through the ingestion pipeline. -- Log Analytics correctly saved the sample telemetry record. -- The Azure portal **Logs** tab was able to query the API (`api.applicationinsights.io`) and render the record in the portal UI. +- Log Analytics correctly saved the sample record. +- The Azure portal **Logs** tab was able to query the API (`api.applicationinsights.io`) and render the sample record in the portal UI. If the sample record does show up, it usually means you just need to troubleshoot the Application Insights SDK or codeless agent. You would typically move to collect SDK logs or PerfView traces, whichever is appropriate for the SDK/agent version. -There's still a small chance that ingestion or the backend pipeline is sampling records, or dropping specific telemetry types, which may explain why your test record arrives but the production telemetry doesn't. You should always start investigating the SDKs or agents if the below sample scripts correctly save and return telemetry records. +There's still a small chance that ingestion or the backend pipeline is sampling records, or dropping specific telemetry types, which may explain why your test record arrives but the production telemetry doesn't. You should always start investigating the SDKs or agents if the below sample scripts correctly save and return records. -#### Availability test result telemetry records +#### Sending availability test results -Availability test results are the best telemetry type to test with. The main reason is because the ingestion pipeline never samples out availability test results. If you instead send a request telemetry record using PowerShell, it could get sampled out with ingestion sampling, and not show up when you go to query for it. Start with a sample availability test result telemetry record first, then try other telemetry types as needed. +Availability test results are the best telemetry type to test with. The main reason is because the ingestion pipeline never samples out availability test results. If you instead send a request telemetry record using PowerShell, it could get sampled out with ingestion sampling, and not show up when you go to query for it. Start with a sample availability test result first, then try other telemetry types as needed. -### PowerShell script to send an availability test result telemetry record +### PowerShell script to send an availability test result -This script builds a raw REST request to deliver a single availability test result telemetry record to the Application Insights component. You can supply the `$ConnectionString` or `$InstrumentationKey` parameters. +This script builds a raw REST request to deliver a single availability test result to the Application Insights component. You can supply the `$ConnectionString` or `$InstrumentationKey` parameters. - Connection String only: Telemetry sent to regional endpoint in connection string - Ikey only: Telemetry sent to global ingestion endpoint If both connection string and ikey parameters are supplied, the script sends telemetry to the regional endpoint in the connection string. -It's easiest to run the script from the PowerShell ISE environment on an IaaS or virtual machine scale set (VMSS) instance. You can also copy and paste it into the App Services Kudu interface PowerShell debug console. +It's easiest to run the script from the PowerShell ISE environment on an IaaS or VMSS (virtual machine scale set) instance. You can also copy and paste it into the App Services Kudu interface PowerShell debug console. ```shell # Info: Provide either the connection string or ikey for your Application Insights resource @@ -224,9 +224,9 @@ Invoke-WebRequest -Uri $url -Method POST -Body $requestData -UseBasicParsing ``` -### Curl client to send availability test result telemetry record +### Curl to send an availability test result -If you're running Linux VMs, you could rely on the curl client to send a similar REST call instead of PowerShell. Below is a curl request to send a single availability test result telemetry record. You'll need to adjust the ingestion endpoint host, the ikey value, and the timestamp values. +If you're running Linux VMs, you could rely on the curl client to send a similar REST call instead of PowerShell. Below is a curl request to send a single availability test result. You'll need to adjust the ingestion endpoint host, the ikey value, and the timestamp values. Curl command for **Linux/MaxOS**: @@ -244,7 +244,7 @@ curl -H "Content-Type: application/json" -X POST -d {\"data\":{\"baseData\":{\"v ## SSL/TLS troubleshooting -If you suspect the problem is between your machine or VM and the ingestion endpoint due to SSL/TLS configuration, you can adjust how PowerShell participates in the SSL/TLS protocol. Include these snippets if you need to diagnose secure channel as part of the connection between the client VM and the ingestion endpoints. +If you suspect the problem is between your host machine or VM and the ingestion endpoint due to SSL/TLS configuration, you can adjust how PowerShell participates in the SSL/TLS protocol. Include these snippets if you need to diagnose secure channel as part of the connection between the client VM and the ingestion endpoints. - Option 1: Control which SSL/TLS protocol is used by PowerShell to make a connection to the ingestion endpoint. Add any one of these lines to the top of your PowerShell script to control the protocol used in the test REST request: @@ -277,7 +277,7 @@ If you suspect the problem is between your machine or VM and the ingestion endpo ``` -If the application defaults to the system or machine default TLS settings, you can change those default settings within the registry on Windows machines using details found in [Transport Layer Security (TLS) registry settings](/windows-server/security/tls/tls-registry-settings#tls-dtls-and-ssl-protocol-version-settings). +If the application defaults to the system or host machine default TLS settings, you can change those default settings within the registry on Windows machines using details found in [Transport Layer Security (TLS) registry settings](/windows-server/security/tls/tls-registry-settings#tls-dtls-and-ssl-protocol-version-settings). Alternatively, if you need to change the default TLS/SSL protocol used by a .NET application, you can follow the official guidance in [Transport Layer Security (TLS) best practices with the .NET Framework](/dotnet/framework/network-programming/tls). diff --git a/support/azure/azure-monitor/app-insights/media/investigate-missing-telemetry/life-of-a-telemetry-record.png b/support/azure/azure-monitor/app-insights/media/investigate-missing-telemetry/telemetry-processing-pipeline.png similarity index 100% rename from support/azure/azure-monitor/app-insights/media/investigate-missing-telemetry/life-of-a-telemetry-record.png rename to support/azure/azure-monitor/app-insights/media/investigate-missing-telemetry/telemetry-processing-pipeline.png From 6a5841ecaa255855633ef8e88a04dfc1fcdb007a Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Fri, 19 Aug 2022 10:58:56 -0700 Subject: [PATCH 18/36] Actually final edits? --- .../app-insights/investigate-missing-telemetry.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index 47261c556e..f4e60c3d44 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -46,7 +46,7 @@ The are two caveats to running the operations from Kudu: - Prior to executing the `Invoke-WebRequest` command, you have to issue the PowerShell command `$ProgressPreference = "SilentlyContinue"` - You can't use `-Verbose` or `-Debug`. Instead, use `-UseBasicParsing`. -This is how the code would look: +The code will look like the example below: ```shell $ProgressPreference = "SilentlyContinue" @@ -59,14 +59,14 @@ After you send a sample telemetry record via PowerShell, you can check to see if **A sample telemetry record correctly saved and displayed suggests:** - The host machine or VM has DNS that resolves to the correct IP address. -- The network delivered the sample record to the ingestion endpoint without blocking or dropping. +- The network delivered the sample to the ingestion endpoint without blocking or dropping. - The ingestion endpoint accepted the sample payload and processed it through the ingestion pipeline. - Log Analytics correctly saved the sample record. - The Azure portal **Logs** tab was able to query the API (`api.applicationinsights.io`) and render the sample record in the portal UI. If the sample record does show up, it usually means you just need to troubleshoot the Application Insights SDK or codeless agent. You would typically move to collect SDK logs or PerfView traces, whichever is appropriate for the SDK/agent version. -There's still a small chance that ingestion or the backend pipeline is sampling records, or dropping specific telemetry types, which may explain why your test record arrives but the production telemetry doesn't. You should always start investigating the SDKs or agents if the below sample scripts correctly save and return records. +There's still a small chance that ingestion or the backend pipeline is sampling records or dropping specific telemetry types, which may explain why your test record arrives but the production telemetry doesn't. You should always start investigating the SDKs or agents if the below sample scripts correctly save and return records. #### Sending availability test results @@ -150,7 +150,7 @@ Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsin ``` -When the above script executes, you want to review the response details. We're looking for an HTTP 200 response, and as part of the response JSON payload we want to see the `itemsReceived` count **matches** the `itemsAccepted`. This means the ingestion endpoint is informing the client: you sent one record, I accepted one record. +When the above script executes, you want to review the response details. We're looking for an HTTP 200 response, and as part of the response JSON payload we want to see the `itemsReceived` count **matches** the `itemsAccepted`. The ingestion endpoint is informing the client: you sent one record, I accepted one record. ![Code showing the amount of items received and items accepted](./media/investigate-missing-telemetry/items-received-matches-items-accepted.png "Items received matches items accepted") @@ -290,6 +290,6 @@ If tests using PowerShell or curl also fail to send telemetry to the ingestion e - DNS on your network fails to resolve the public ingestion endpoint to the correct IP address. - TCP connection from your application server to ingestion endpoint may be blocked by firewalls or gateway devices. - Your application may default to using TLS 1.0 or TLS 1.1, when the ingestion endpoint the SDK connects to may require TLS 1.2. -- You may have more than one Azure Monitor Private Link impacting your private network, and it may overwrite your DNS entries to resolve to the wrong private IP address where your ingestion endpoint is listening using private endpoints. +- You may have more than one [Azure Monitor Private Link](/azure/azure-monitor/logs/private-link-security) impacting your private network, which may overwrite your DNS entries to resolve to the wrong private IP address. [!INCLUDE [Azure Help Support](../../../includes/azure-help-support.md)] From 3f8a1f7caee7caef4fb57dcb92b69bcd4b91b06a Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Fri, 19 Aug 2022 11:10:49 -0700 Subject: [PATCH 19/36] Done --- .../azure-monitor/app-insights/investigate-missing-telemetry.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index f4e60c3d44..1e45e58fcd 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -13,7 +13,7 @@ ms.subservice: application-insights # Investigate missing telemetry in Azure Monitor Application Insights using PowerShell or curl -This article provides information to help you isolate the step in the processing pipeline that causes telemetry to go missing by testing connectivity and telemetry ingestion using PowerShell or curl. No extra tools are needed. +This article provides information to help you isolate the step in the processing pipeline that causes telemetry to go missing. This will be done by testing connectivity and telemetry ingestion using PowerShell or curl. No extra tools are needed. ## Every step telemetry passes in the processing pipeline From 4af76b4d0538866a29b6c72d866b7798fd2363cc Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Fri, 19 Aug 2022 11:14:21 -0700 Subject: [PATCH 20/36] Done? --- .../azure-monitor/app-insights/investigate-missing-telemetry.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index 1e45e58fcd..f4e60c3d44 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -13,7 +13,7 @@ ms.subservice: application-insights # Investigate missing telemetry in Azure Monitor Application Insights using PowerShell or curl -This article provides information to help you isolate the step in the processing pipeline that causes telemetry to go missing. This will be done by testing connectivity and telemetry ingestion using PowerShell or curl. No extra tools are needed. +This article provides information to help you isolate the step in the processing pipeline that causes telemetry to go missing by testing connectivity and telemetry ingestion using PowerShell or curl. No extra tools are needed. ## Every step telemetry passes in the processing pipeline From 76afeafa30e7f6236650511be3410801b3bb43e4 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Fri, 19 Aug 2022 12:07:18 -0700 Subject: [PATCH 21/36] Done! --- .../investigate-missing-telemetry.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index f4e60c3d44..aa49b757d8 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -1,5 +1,5 @@ --- -title: Investigate missing telemetry in Azure Monitor Application Insights +title: Investigate missing application telemetry in Azure Monitor Application Insights description: Learn how to test connectivity and telemetry ingestion using PowerShell or curl to isolate the step in the processing pipeline that causes telemetry to go missing ms.topic: conceptual ms.date: 8/18/2022 @@ -11,21 +11,21 @@ ms.subservice: application-insights #Customer intent: As an Application Insights user I want to know where in the processing pipeline telemetry goes missing so I know where to troubleshoot. --- -# Investigate missing telemetry in Azure Monitor Application Insights using PowerShell or curl +# Investigate missing application telemetry in Azure Monitor Application Insights This article provides information to help you isolate the step in the processing pipeline that causes telemetry to go missing by testing connectivity and telemetry ingestion using PowerShell or curl. No extra tools are needed. ## Every step telemetry passes in the processing pipeline -If telemetry is missing or you can't find specific telemetry records, it can be the result of failures across every step in processing pipeline: +If application telemetry is not showing in Azure portal, it can be the result of failures across every step in processing pipeline: ![Graphic shows where telemetry can go missing during ingestion and consumption](./media/investigate-missing-telemetry/telemetry-processing-pipeline.png "Steps in the processing pipeline") - The SDK or agent is misconfigured and not sending application telemetry to the ingestion endpoint. - The SDK or agent is configured correctly but the network is blocking calls to the ingestion endpoint. - The ingestion endpoint is dropping or throttling inbound telemetry. -- The ingestion pipeline is dropping or severely slowing down telemetry as part of its processing due to [service health](https://azure.microsoft.com/get-started/azure-portal/service-health/#overview). (rare) -- Log Analytics is facing problems saving telemetry. (rare) +- The ingestion pipeline is dropping or severely slowing down telemetry as part of its processing due to [service health](https://azure.microsoft.com/get-started/azure-portal/service-health/#overview). (This is uncommon) +- Log Analytics is facing service health problems when saving telemetry records. (This is uncommon) - The query API at `api.applicationinsights.io` has failures querying records from Log Analytics. - The Azure portal has issues pulling or rendering the records you're trying to view. @@ -33,9 +33,9 @@ Problems can occur anywhere across the service, and may be tedious to properly d ## Troubleshoot with PowerShell -### On-premises or Azure VM +### On-premises server or Azure VM -If you connect to the host machine or VM where the web application is running, you can attempt to send a single telemetry record to the Applications Insights service instance using PowerShell. +If you connect to the server or VM where the web application is running, you can attempt to send a single telemetry record to the Applications Insights service instance using PowerShell. ### Azure Web Apps @@ -58,7 +58,7 @@ After you send a sample telemetry record via PowerShell, you can check to see if **A sample telemetry record correctly saved and displayed suggests:** -- The host machine or VM has DNS that resolves to the correct IP address. +- The local server or VM has DNS that resolves to the correct IP address. - The network delivered the sample to the ingestion endpoint without blocking or dropping. - The ingestion endpoint accepted the sample payload and processed it through the ingestion pipeline. - Log Analytics correctly saved the sample record. @@ -224,9 +224,9 @@ Invoke-WebRequest -Uri $url -Method POST -Body $requestData -UseBasicParsing ``` -### Curl to send an availability test result +### Using curl to send availability test results -If you're running Linux VMs, you could rely on the curl client to send a similar REST call instead of PowerShell. Below is a curl request to send a single availability test result. You'll need to adjust the ingestion endpoint host, the ikey value, and the timestamp values. +If you're running Linux VMs, you could use curl command to send a similar REST call instead of PowerShell. Below is a curl request to send a single availability test result. You'll need to adjust the ingestion endpoint host, the ikey value, and the timestamp values. Curl command for **Linux/MaxOS**: @@ -244,7 +244,7 @@ curl -H "Content-Type: application/json" -X POST -d {\"data\":{\"baseData\":{\"v ## SSL/TLS troubleshooting -If you suspect the problem is between your host machine or VM and the ingestion endpoint due to SSL/TLS configuration, you can adjust how PowerShell participates in the SSL/TLS protocol. Include these snippets if you need to diagnose secure channel as part of the connection between the client VM and the ingestion endpoints. +If you suspect the problem is between your server or VM and the ingestion endpoint due to SSL/TLS configuration, you can adjust how PowerShell participates in the SSL/TLS protocol. Include these snippets if you need to diagnose secure channel as part of the connection between the client VM and the ingestion endpoints. - Option 1: Control which SSL/TLS protocol is used by PowerShell to make a connection to the ingestion endpoint. Add any one of these lines to the top of your PowerShell script to control the protocol used in the test REST request: @@ -277,7 +277,7 @@ If you suspect the problem is between your host machine or VM and the ingestion ``` -If the application defaults to the system or host machine default TLS settings, you can change those default settings within the registry on Windows machines using details found in [Transport Layer Security (TLS) registry settings](/windows-server/security/tls/tls-registry-settings#tls-dtls-and-ssl-protocol-version-settings). +If the application defaults to the system or server default TLS settings, you can change those default settings within the registry on Windows machines using details found in [Transport Layer Security (TLS) registry settings](/windows-server/security/tls/tls-registry-settings#tls-dtls-and-ssl-protocol-version-settings). Alternatively, if you need to change the default TLS/SSL protocol used by a .NET application, you can follow the official guidance in [Transport Layer Security (TLS) best practices with the .NET Framework](/dotnet/framework/network-programming/tls). From f8c4af986ddb86fae744aa4c1ad948dd6377bd44 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Fri, 19 Aug 2022 15:05:25 -0700 Subject: [PATCH 22/36] Acrolinx to 100 --- .../investigate-missing-telemetry.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index aa49b757d8..0aedde78d8 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -17,15 +17,15 @@ This article provides information to help you isolate the step in the processing ## Every step telemetry passes in the processing pipeline -If application telemetry is not showing in Azure portal, it can be the result of failures across every step in processing pipeline: +If application telemetry isn't showing in Azure portal, it can be the result of failures across every step in processing pipeline: ![Graphic shows where telemetry can go missing during ingestion and consumption](./media/investigate-missing-telemetry/telemetry-processing-pipeline.png "Steps in the processing pipeline") - The SDK or agent is misconfigured and not sending application telemetry to the ingestion endpoint. - The SDK or agent is configured correctly but the network is blocking calls to the ingestion endpoint. - The ingestion endpoint is dropping or throttling inbound telemetry. -- The ingestion pipeline is dropping or severely slowing down telemetry as part of its processing due to [service health](https://azure.microsoft.com/get-started/azure-portal/service-health/#overview). (This is uncommon) -- Log Analytics is facing service health problems when saving telemetry records. (This is uncommon) +- The ingestion pipeline is dropping or severely slowing down telemetry as part of its processing due to [service health](https://azure.microsoft.com/get-started/azure-portal/service-health/#overview). (uncommon) +- Log Analytics is facing service health problems when saving telemetry records. (uncommon) - The query API at `api.applicationinsights.io` has failures querying records from Log Analytics. - The Azure portal has issues pulling or rendering the records you're trying to view. @@ -64,9 +64,9 @@ After you send a sample telemetry record via PowerShell, you can check to see if - Log Analytics correctly saved the sample record. - The Azure portal **Logs** tab was able to query the API (`api.applicationinsights.io`) and render the sample record in the portal UI. -If the sample record does show up, it usually means you just need to troubleshoot the Application Insights SDK or codeless agent. You would typically move to collect SDK logs or PerfView traces, whichever is appropriate for the SDK/agent version. +If the sample record does show up, it usually means you just need to troubleshoot the Application Insights SDK or codeless agent. You would typically move to collect SDK logs or PerfView traces, whichever is appropriate for the SDK or agent version. -There's still a small chance that ingestion or the backend pipeline is sampling records or dropping specific telemetry types, which may explain why your test record arrives but the production telemetry doesn't. You should always start investigating the SDKs or agents if the below sample scripts correctly save and return records. +It is possible that your test record arrives but the production telemetry doesn't, which can happen if ingestion or the backend pipeline is sampling records or dropping specific telemetry types. You should always start investigating the SDK or agent if the below sample scripts correctly save and return records. #### Sending availability test results @@ -244,9 +244,10 @@ curl -H "Content-Type: application/json" -X POST -d {\"data\":{\"baseData\":{\"v ## SSL/TLS troubleshooting -If you suspect the problem is between your server or VM and the ingestion endpoint due to SSL/TLS configuration, you can adjust how PowerShell participates in the SSL/TLS protocol. Include these snippets if you need to diagnose secure channel as part of the connection between the client VM and the ingestion endpoints. +If you suspect the problem to be between your server or VM and the ingestion endpoint, it can be due to SSL or TLS configuration. In this case, you can adjust how PowerShell participates in the SSL or TLS protocol. Include these snippets if you need to diagnose secure channel as part of the connection between the client VM and the ingestion endpoints. -- Option 1: Control which SSL/TLS protocol is used by PowerShell to make a connection to the ingestion endpoint. Add any one of these lines to the top of your PowerShell script to control the protocol used in the test REST request: +- **Option 1**
+Control which SSL or TLS protocol is used by PowerShell to make a connection to the ingestion endpoint. Add any one of these lines to the top of your PowerShell script to control the protocol used in the test REST request: ```shell # Uncomment one or more of these lines to test TLS/SSL protocols other than the machine default option @@ -258,7 +259,8 @@ If you suspect the problem is between your server or VM and the ingestion endpoi ``` -- Option 2: Ignore any SSL Certificate validation issues. If you have a firewall or proxy server that may be doing SSL certificate offloading, you can ignore any SSL cert issues by adding this snippet just before the `Invoke-WebRequest` call: +- **Option 2**
+Ignore any SSL certificate validation issues. If you have a firewall or proxy server that may be doing SSL certificate offloading, you can ignore any SSL cert issues by adding this snippet just before the `Invoke-WebRequest` call: ```shell # Ignore mismatched SSL certificate From b88bbc58eb9280d8251a65343253f773aad08843 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Fri, 19 Aug 2022 15:17:24 -0700 Subject: [PATCH 23/36] Acrolinx to 100 - 2nd try --- .../app-insights/investigate-missing-telemetry.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index 0aedde78d8..332aeb7d24 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -66,7 +66,7 @@ After you send a sample telemetry record via PowerShell, you can check to see if If the sample record does show up, it usually means you just need to troubleshoot the Application Insights SDK or codeless agent. You would typically move to collect SDK logs or PerfView traces, whichever is appropriate for the SDK or agent version. -It is possible that your test record arrives but the production telemetry doesn't, which can happen if ingestion or the backend pipeline is sampling records or dropping specific telemetry types. You should always start investigating the SDK or agent if the below sample scripts correctly save and return records. +It's possible that your test record arrives but the production telemetry doesn't. This can happen if ingestion or the backend pipeline is sampling records or dropping specific telemetry types. You should always start investigating the SDK or agent if the below sample scripts correctly save and return records. #### Sending availability test results @@ -81,7 +81,7 @@ This script builds a raw REST request to deliver a single availability test resu If both connection string and ikey parameters are supplied, the script sends telemetry to the regional endpoint in the connection string. -It's easiest to run the script from the PowerShell ISE environment on an IaaS or VMSS (virtual machine scale set) instance. You can also copy and paste it into the App Services Kudu interface PowerShell debug console. +It's easiest to run the script from the PowerShell ISE environment on an IaaS or [Azure virtual machine scale set](/azure/virtual-machine-scale-sets/overview) instance. You can also copy and paste it into the App Services Kudu interface PowerShell debug console. ```shell # Info: Provide either the connection string or ikey for your Application Insights resource From 8ad9ea6c3108f3026b93ca796d4321fa631ce93e Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Fri, 19 Aug 2022 15:22:32 -0700 Subject: [PATCH 24/36] Acrolinx to 99 to 100? --- .../azure-monitor/app-insights/investigate-missing-telemetry.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index 332aeb7d24..018ce3643d 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -66,7 +66,7 @@ After you send a sample telemetry record via PowerShell, you can check to see if If the sample record does show up, it usually means you just need to troubleshoot the Application Insights SDK or codeless agent. You would typically move to collect SDK logs or PerfView traces, whichever is appropriate for the SDK or agent version. -It's possible that your test record arrives but the production telemetry doesn't. This can happen if ingestion or the backend pipeline is sampling records or dropping specific telemetry types. You should always start investigating the SDK or agent if the below sample scripts correctly save and return records. +It's possible that your test record arrives but the production telemetry doesn't. The problem can be caused by ingestion or the backend pipeline sampling records or dropping specific telemetry types. You should always start investigating the SDK or agent if the below sample scripts correctly save and return records. #### Sending availability test results From 07325fde85451257ef65ca6ab874d7ebdd09c2a4 Mon Sep 17 00:00:00 2001 From: Kai Nawroth Date: Mon, 22 Aug 2022 08:04:01 -0700 Subject: [PATCH 25/36] Removing editor --- .../azure-monitor/app-insights/investigate-missing-telemetry.md | 1 - 1 file changed, 1 deletion(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index 018ce3643d..89c8c1c57d 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -4,7 +4,6 @@ description: Learn how to test connectivity and telemetry ingestion using PowerS ms.topic: conceptual ms.date: 8/18/2022 ms.author: toddfous -editor: v-kainawroth ms.reviewer: aaronmax ms.service: azure-monitor ms.subservice: application-insights From 926aab572612bc3c99b1507f9c3a079f2c491573 Mon Sep 17 00:00:00 2001 From: Amanda Zhu Date: Mon, 5 Sep 2022 17:27:43 +0800 Subject: [PATCH 26/36] editorial changes --- .../investigate-missing-telemetry.md | 245 ++++++++---------- .../items-received-matches-items-accepted.png | Bin 44687 -> 43130 bytes support/azure/azure-monitor/toc.yml | 2 +- 3 files changed, 114 insertions(+), 133 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index 89c8c1c57d..2393e3c598 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -1,115 +1,92 @@ --- -title: Investigate missing application telemetry in Azure Monitor Application Insights -description: Learn how to test connectivity and telemetry ingestion using PowerShell or curl to isolate the step in the processing pipeline that causes telemetry to go missing +title: Troubleshoot missing application telemetry in Azure Monitor Application Insights +description: Describes how to test connectivity and telemetry ingestion by using PowerShell or curl to identify the step in the processing pipeline that causes telemetry to go missing. ms.topic: conceptual -ms.date: 8/18/2022 +ms.date: 09/05/2022 ms.author: toddfous ms.reviewer: aaronmax ms.service: azure-monitor ms.subservice: application-insights #Customer intent: As an Application Insights user I want to know where in the processing pipeline telemetry goes missing so I know where to troubleshoot. --- +# Troubleshoot missing application telemetry in Azure Monitor Application Insights -# Investigate missing application telemetry in Azure Monitor Application Insights +This article helps you to identify the step in the processing pipeline that causes telemetry to be missing by testing connectivity and telemetry ingestion using PowerShell or curl. -This article provides information to help you isolate the step in the processing pipeline that causes telemetry to go missing by testing connectivity and telemetry ingestion using PowerShell or curl. No extra tools are needed. +## Steps that can cause telemetry to be missing -## Every step telemetry passes in the processing pipeline +The following graphic shows steps where telemetry can be missing during ingestion and consumption: -If application telemetry isn't showing in Azure portal, it can be the result of failures across every step in processing pipeline: +:::image type="content" source="media/investigate-missing-telemetry/telemetry-processing-pipeline.png" alt-text="Steps that telemetry passes in processing pipeline."::: -![Graphic shows where telemetry can go missing during ingestion and consumption](./media/investigate-missing-telemetry/telemetry-processing-pipeline.png "Steps in the processing pipeline") +If application telemetry doesn't show in the Azure portal, it can be caused by failures across every step in the processing pipeline: -- The SDK or agent is misconfigured and not sending application telemetry to the ingestion endpoint. -- The SDK or agent is configured correctly but the network is blocking calls to the ingestion endpoint. -- The ingestion endpoint is dropping or throttling inbound telemetry. -- The ingestion pipeline is dropping or severely slowing down telemetry as part of its processing due to [service health](https://azure.microsoft.com/get-started/azure-portal/service-health/#overview). (uncommon) -- Log Analytics is facing service health problems when saving telemetry records. (uncommon) -- The query API at `api.applicationinsights.io` has failures querying records from Log Analytics. -- The Azure portal has issues pulling or rendering the records you're trying to view. +- The Application Insights SDK or agent is misconfigured and doesn't send application telemetry to the ingestion endpoint. +- The SDK or agent is configured correctly but the network blocks calls to the ingestion endpoint. +- The ingestion endpoint drops or throttles inbound telemetry. +- The ingestion pipeline drops or severely slows down telemetry as part of its processing due to [service health](https://azure.microsoft.com/get-started/azure-portal/service-health/#overview). +- (Uncommon) Log Analytics is facing service health problems when saving telemetry records. +- (Uncommon) The query API at `api.applicationinsights.io` fails when querying records from Log Analytics. +- The Azure portal fails to pull or render the records that you're trying to view. -Problems can occur anywhere across the service, and may be tedious to properly diagnose. The goal is to eliminate these layers, so you can investigate the correct step within the processing pipeline that is causing the problem. One method that will assist with this isolation is sending a sample telemetry record using PowerShell or curl. +## Troubleshoot missing telemetry with PowerShell or curl -## Troubleshoot with PowerShell +Configuration problems or transient issues may occur anywhere across the Applications Insights service. To identify the step within the processing pipeline that causes symptoms of no data or missing data, send a sample telemetry record by using PowerShell or curl. -### On-premises server or Azure VM +If the web app runs on an on-premises server or Azure VM, connect to the server or VM and send a single telemetry record to the Applications Insights service instance by using PowerShell. If the web app that has issues sending telemetry [runs on Kudu](/azure/app-service/resources-kudu), run the following script from the Kudu's PowerShell debug console in Azure Web Apps. -If you connect to the server or VM where the web application is running, you can attempt to send a single telemetry record to the Applications Insights service instance using PowerShell. - -### Azure Web Apps - -If the app that is having issues sending telemetry is [running on Kudu](/azure/app-service/resources-kudu), you can use the PowerShell script outlined here from Kudu's PowerShell debug command prompt feature in Azure Web Apps. - -The are two caveats to running the operations from Kudu: - -- Prior to executing the `Invoke-WebRequest` command, you have to issue the PowerShell command `$ProgressPreference = "SilentlyContinue"` -- You can't use `-Verbose` or `-Debug`. Instead, use `-UseBasicParsing`. - -The code will look like the example below: - -```shell +```powershell $ProgressPreference = "SilentlyContinue" Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsing - ``` -After you send a sample telemetry record via PowerShell, you can check to see if it arrives using the Application Insights **Logs** tab in the Azure portal. If you see the sample record showing up, you've eliminated a large portion of the processing pipeline. +> [!NOTE] +> +> - Before running the `Invoke-WebRequest` cmdlet, issue the `$ProgressPreference = "SilentlyContinue"` cmdlet. +> - You can't use `-Verbose` or `-Debug`. Instead, use `-UseBasicParsing`. + +After you send a sample telemetry record by using PowerShell, navigate to the Application Insights **Logs** tab in the Azure portal and check if it arrives. If the sample telemetry record shows, a large portion of the processing pipeline is eliminated. -**A sample telemetry record correctly saved and displayed suggests:** +A sample telemetry record that's correctly saved and displayed means: - The local server or VM has DNS that resolves to the correct IP address. - The network delivered the sample to the ingestion endpoint without blocking or dropping. - The ingestion endpoint accepted the sample payload and processed it through the ingestion pipeline. - Log Analytics correctly saved the sample record. -- The Azure portal **Logs** tab was able to query the API (`api.applicationinsights.io`) and render the sample record in the portal UI. +- The Azure portal **Logs** tab is able to query the API (`api.applicationinsights.io`) and render the sample record in the Azure portal. -If the sample record does show up, it usually means you just need to troubleshoot the Application Insights SDK or codeless agent. You would typically move to collect SDK logs or PerfView traces, whichever is appropriate for the SDK or agent version. +If the generated sample record arrives at your Application Insights instance and you can query for the sample record by using the **Logs resource** menu, [troubleshoot the Application Insights SDK or agent](#troubleshoot-application-insights-sdk-agent). You would proceed with collecting SDK logs, self-diagnostic logs or profiler traces, whichever is appropriate for the SDK or agent version. -It's possible that your test record arrives but the production telemetry doesn't. The problem can be caused by ingestion or the backend pipeline sampling records or dropping specific telemetry types. You should always start investigating the SDK or agent if the below sample scripts correctly save and return records. +The following sections talks about sending a sample telemetry record by using PowerShell or curl. -#### Sending availability test results +### Send availability test results -Availability test results are the best telemetry type to test with. The main reason is because the ingestion pipeline never samples out availability test results. If you instead send a request telemetry record using PowerShell, it could get sampled out with ingestion sampling, and not show up when you go to query for it. Start with a sample availability test result first, then try other telemetry types as needed. +Availability test results are the ideal telemetry type to test with. The reason is because the ingestion pipeline never samples out availability test results. If you send a request telemetry record, it could get sampled out when you have enabled ingestion sampling. Start with a sample availability test result and then try other telemetry types as needed. -### PowerShell script to send an availability test result +#### PowerShell script to send availability test result -This script builds a raw REST request to deliver a single availability test result to the Application Insights component. You can supply the `$ConnectionString` or `$InstrumentationKey` parameters. - -- Connection String only: Telemetry sent to regional endpoint in connection string -- Ikey only: Telemetry sent to global ingestion endpoint - -If both connection string and ikey parameters are supplied, the script sends telemetry to the regional endpoint in the connection string. - -It's easiest to run the script from the PowerShell ISE environment on an IaaS or [Azure virtual machine scale set](/azure/virtual-machine-scale-sets/overview) instance. You can also copy and paste it into the App Services Kudu interface PowerShell debug console. - -```shell +```powershell # Info: Provide either the connection string or ikey for your Application Insights resource $ConnectionString = "" $InstrumentationKey = "" - function ParseConnectionString { param ([string]$ConnectionString) $Map = @{} - foreach ($Part in $ConnectionString.Split(";")) { $KeyValue = $Part.Split("=") $Map.Add($KeyValue[0], $KeyValue[1]) } return $Map } - # If ikey is the only parameter supplied, we'll send telemetry to the global ingestion endpoint instead of regional endpoint found in connection strings If (($InstrumentationKey) -and ("" -eq $ConnectionString)) { $ConnectionString = "InstrumentationKey=$InstrumentationKey;IngestionEndpoint=https://dc.services.visualstudio.com/" } - $map = ParseConnectionString($ConnectionString) $url = $map["IngestionEndpoint"] + "v2/track" $ikey = $map["InstrumentationKey"] $lmUrl = $map["LiveEndpoint"] - $time = (Get-Date).ToUniversalTime().ToString("o") - $availabilityData = @" { "data": { @@ -131,60 +108,86 @@ $availabilityData = @" "name": "Microsoft.ApplicationInsights.Metric", "time": "$time", "sampleRate": 100, - "ikey": "$ikey", + "iKey": "$ikey", "flags": 0 } "@ - - # Uncomment one or more of the following lines to test client TLS/SSL protocols other than the machine default option # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::SSL3 # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS11 # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS12 # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS13 - $ProgressPreference = "SilentlyContinue" Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsing - ``` -When the above script executes, you want to review the response details. We're looking for an HTTP 200 response, and as part of the response JSON payload we want to see the `itemsReceived` count **matches** the `itemsAccepted`. The ingestion endpoint is informing the client: you sent one record, I accepted one record. +This script builds a raw REST request to deliver a single availability test result to the Application Insights component. When you use this script, supply the `$ConnectionString` or `$InstrumentationKey` parameter. + +- If only the connection string parameter is supplied, telemetry will be sent to the regional endpoint in the connection string. +- If only the instrumentation key (ikey) parameter is supplied, telemetry will be sent to the global ingestion endpoint. +- If both connection string and ikey parameters are supplied, the script will send telemetry to the regional endpoint in the connection string. + +> [!NOTE] +> Test the connection made by your application. If you enable Application Insights in the Azure portal, you likely rely on connection strings with regional endpoints, `https://.in.applicationinsights.azure.com`. If your SDK configuration only supplies the ikey, you rely on the global endpoint, `https://dc.application-insights-azure.com`. Make sure to populate the script parameter that matches your web application SDK configuration, either supply the connection string or the Ikey. + +[!INCLUDE [azure-monitor-log-analytics-rebrand](../../../includes/azure-monitor-instrumentation-key-deprecation.md)] + +It's easiest to run this script from the PowerShell ISE environment on an IaaS or [Azure virtual machine scale set](/azure/virtual-machine-scale-sets/overview) instance. You can also copy and paste the script into the App Services Kudu interface PowerShell debug console and then run it. + +When the script is executed, look for an HTTP 200 response and review the response details. As part of the response JSON payload, the following details are expected: + +- The `itemsReceived` count matches the `itemsAccepted`. +- The ingestion endpoint is informing the client: you sent one telemetry record, we accepted one telemetry record. + +Refer to the following screenshot as an example: -![Code showing the amount of items received and items accepted](./media/investigate-missing-telemetry/items-received-matches-items-accepted.png "Items received matches items accepted") +:::image type="content" source="media/investigate-missing-telemetry/items-received-matches-items-accepted.png" alt-text="Code that shows the amount of items received and items accepted."::: -### PowerShell script to send a request telemetry record +#### Curl command to send availability test results -If you want to test sending a single request telemetry record, the below script will help you format it. This telemetry type is susceptible to server-side ingestion sampling configuration. Make sure ingestion sampling is turned off to help confirm if these records are getting saved correctly. +If you're running Linux VMs, use curl instead of PowerShell to send a similar REST request. You need to adjust the **ingestion endpoint hostname**, the `ikey` value, and the `time` values. The Application Insights ingestion endpoint doesn't accept any records that are older than 48 hours. -```shell +Here are sample curl commands that send a single availability test result: + +- Curl command for Linux/MaxOS: + + ```bash + >curl -H "Content-Type: application/json" -X POST -d '{"data":{"baseData":{"ver":2,"id":"SampleRunId","name":"MicrosoftSupportSampleWebtestResultUsingCurl","duration":"00.00:00:10","success":true,"runLocation":"RegionName","message":"SampleWebtestResult","properties":{"SampleProperty":"SampleValue"}},"baseType":"AvailabilityData"},"ver":1,"name":"Microsoft.ApplicationInsights.Metric","time":"2022-09-01T12:00:00.0000000Z","sampleRate":100,"ikey":"########-####-####-####-############","flags":0}' https://dc.applicationinsights.azure.com/v2.1/track + ``` + +- Curl command for Windows: + + ```console + curl -H "Content-Type: application/json" -X POST -d {\"data\":{\"baseData\":{\"ver\":2,\"id\":\"SampleRunId\",\"name\":\"MicrosoftSupportSampleWebtestResultUsingCurl\",\"duration\":\"00.00:00:10\",\"success\":true,\"runLocation\":\"RegionName\",\"message\":\"SampleWebtestResult\",\"properties\":{\"SampleProperty\":\"SampleValue\"}},\"baseType\":\"AvailabilityData\"},\"ver\":1,\"name\":\"Microsoft.ApplicationInsights.Metric\",\"time\":\"2021-10-05T22:00:00.0000000Z\",\"sampleRate\":100,\"ikey\":\"########-####-####-####-############\",\"flags\":0} https://dc.applicationinsights.azure.com/v2/track + ``` + +### Send request telemetry record + +To troubleshoot missing a request telemetry, use the following PowerShell script to test sending a single request telemetry record. This telemetry type is susceptible to the server-side ingestion sampling configuration. Verify that [ingestion sampling](/azure/azure-monitor/app/sampling#ingestion-sampling) is turned off to confirm if the test record is saved correctly. + +```powershell # Info: Provide either the connection string or ikey for your Application Insights resource $ConnectionString = "" $InstrumentationKey = "" - function ParseConnectionString { param ([string]$ConnectionString) $Map = @{} - foreach ($Part in $ConnectionString.Split(";")) { $KeyValue = $Part.Split("=") $Map.Add($KeyValue[0], $KeyValue[1]) } return $Map } - # If ikey is the only parameter supplied, we'll send telemetry to the global ingestion endpoint instead of regional endpoint found in connection strings If (($InstrumentationKey) -and ("" -eq $ConnectionString)) { $ConnectionString = "InstrumentationKey=$InstrumentationKey;IngestionEndpoint=https://dc.services.visualstudio.com/" } - $map = ParseConnectionString($ConnectionString) $url = $map["IngestionEndpoint"] + "v2/track" $ikey = $map["InstrumentationKey"] $lmUrl = $map["LiveEndpoint"] - $time = (Get-Date).ToUniversalTime().ToString("o") - $requestData = @" { "data": { @@ -209,88 +212,66 @@ $requestData = @" "flags": 0 } "@ - - # Uncomment one or more of the following lines to test client TLS/SSL protocols other than the machine default option # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::SSL3 # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS11 # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS12 # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS13 - $ProgressPreference = "SilentlyContinue" Invoke-WebRequest -Uri $url -Method POST -Body $requestData -UseBasicParsing - -``` - -### Using curl to send availability test results - -If you're running Linux VMs, you could use curl command to send a similar REST call instead of PowerShell. Below is a curl request to send a single availability test result. You'll need to adjust the ingestion endpoint host, the ikey value, and the timestamp values. - -Curl command for **Linux/MaxOS**: - -``` ->curl -H "Content-Type: application/json" -X POST -d '{"data":{"baseData":{"ver":2,"id":"SampleRunId","name":"MicrosoftSupportSampleWebtestResultUsingCurl","duration":"00.00:00:10","success":true,"runLocation":"RegionName","message":"SampleWebtestResult","properties":{"SampleProperty":"SampleValue"}},"baseType":"AvailabilityData"},"ver":1,"name":"Microsoft.ApplicationInsights.Metric","time":"2021-10-05T22:00:00.0000000Z","sampleRate":100,"ikey":"4c529c82-dee8-4723-b030-7b56bae7562a","flags":0}' [https://%3cspan]https://dc.applicationinsights.azure.com/v2.1/track - -``` - -Curl command for **Windows**: - -```shell -curl -H "Content-Type: application/json" -X POST -d {\"data\":{\"baseData\":{\"ver\":2,\"id\":\"SampleRunId\",\"name\":\"MicrosoftSupportSampleWebtestResultUsingCurl\",\"duration\":\"00.00:00:10\",\"success\":true,\"runLocation\":\"RegionName\",\"message\":\"SampleWebtestResult\",\"properties\":{\"SampleProperty\":\"SampleValue\"}},\"baseType\":\"AvailabilityData\"},\"ver\":1,\"name\":\"Microsoft.ApplicationInsights.Metric\",\"time\":\"2021-10-05T22:00:00.0000000Z\",\"sampleRate\":100,\"ikey\":\"4c529c82-dee8-4723-b030-7b56bae7562a\",\"flags\":0} https://dc.applicationinsights.azure.com/v2/track - ``` -## SSL/TLS troubleshooting +## Troubleshoot SSL or TLS configuration -If you suspect the problem to be between your server or VM and the ingestion endpoint, it can be due to SSL or TLS configuration. In this case, you can adjust how PowerShell participates in the SSL or TLS protocol. Include these snippets if you need to diagnose secure channel as part of the connection between the client VM and the ingestion endpoints. +If the scripts above to test sending telemetry fail, troubleshoot the SSL or TLS configuration. Most ingestion endpoints require clients to use TLS 1.2 and specific cipher suites. In this case, adjust how PowerShell participates as a client in the SSL or TLS protocol. Include the following snippets if you need to diagnose secure channel as part of the connection between the client VM and the ingestion endpoints. -- **Option 1**
-Control which SSL or TLS protocol is used by PowerShell to make a connection to the ingestion endpoint. Add any one of these lines to the top of your PowerShell script to control the protocol used in the test REST request: +- Option 1: Control which SSL or TLS protocol is used by PowerShell to make a connection to the ingestion endpoint. - ```shell - # Uncomment one or more of these lines to test TLS/SSL protocols other than the machine default option - # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::SSL3 - # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS - # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS11 - # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS12 - # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS13 + Uncomment any of the following lines by removing the `#` character and add them before the `Invoke-WebRequest` cmdlet in your PowerShell script to control the protocol used in the test REST request: - ``` + ```powershell + # Uncomment one or more of these lines to test TLS/SSL protocols other than the machine default option + # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::SSL3 + # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS + # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS11 + # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS12 + # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS13 + ``` -- **Option 2**
-Ignore any SSL certificate validation issues. If you have a firewall or proxy server that may be doing SSL certificate offloading, you can ignore any SSL cert issues by adding this snippet just before the `Invoke-WebRequest` call: +- Option 2: Ignore any SSL certificate validation issues. - ```shell - # Ignore mismatched SSL certificate - add-type @" - using System.Net; - using System.Security.Cryptography.X509Certificates; - public class TrustAllCertsPolicy : ICertificatePolicy { - public bool CheckValidationResult( - ServicePoint srvPoint, X509Certificate certificate, - WebRequest request, int certificateProblem) { - return true; - } - } - "@ - [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy + If you have a firewall or proxy server that participates in SSL certificate offloading, ignore any SSL certificate issues by adding the following snippet just before the `Invoke-WebRequest` cmdlet: - ``` + ```powershell + # Ignore mismatched SSL certificate + add-type @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } + "@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy + ``` -If the application defaults to the system or server default TLS settings, you can change those default settings within the registry on Windows machines using details found in [Transport Layer Security (TLS) registry settings](/windows-server/security/tls/tls-registry-settings#tls-dtls-and-ssl-protocol-version-settings). +If the application defaults to the system or server default TLS settings, change those default settings within the registry on Windows machines. For details, see [Transport Layer Security (TLS) registry settings](/windows-server/security/tls/tls-registry-settings#tls-dtls-and-ssl-protocol-version-settings). -Alternatively, if you need to change the default TLS/SSL protocol used by a .NET application, you can follow the official guidance in [Transport Layer Security (TLS) best practices with the .NET Framework](/dotnet/framework/network-programming/tls). +If you need to change the default TLS/SSL protocol used by a .NET application, follow the guidance in [Transport Layer Security (TLS) best practices with the .NET Framework](/dotnet/framework/network-programming/tls). -## Next steps +## Troubleshoot setup or configuration of Application Insights SDK or agent -If sending telemetry from your application's host machine via PowerShell or curl is successful, missing telemetry is likely due to Application Insights SDK or agent setup or configuration issues. Review official documentation for enabling Application Insights monitoring for your application host and programming language to verify all your configurations or code follow proper guidance and examples. +If sending telemetry from your application's host machine by using PowerShell or curl is successful, missing telemetry is likely due to Application Insights SDK or agent setup or configuration issues. Enable Application Insights monitoring for your application host and programming language to verify that all your configurations or code follow proper guidance and examples. -If tests using PowerShell or curl also fail to send telemetry to the ingestion endpoint, verify a few common client side related issues that may contribute to the problem: +If tests by using PowerShell or curl fail to send telemetry to the ingestion endpoint, verify a few common client side related issues that may contribute to the problem: -- DNS on your network fails to resolve the public ingestion endpoint to the correct IP address. +- DNS on your network fails to resolve the ingestion endpoint to the correct IP address. - TCP connection from your application server to ingestion endpoint may be blocked by firewalls or gateway devices. -- Your application may default to using TLS 1.0 or TLS 1.1, when the ingestion endpoint the SDK connects to may require TLS 1.2. -- You may have more than one [Azure Monitor Private Link](/azure/azure-monitor/logs/private-link-security) impacting your private network, which may overwrite your DNS entries to resolve to the wrong private IP address. +- The ingestion endpoint that the SDK connects to may require TLS 1.2, but your application may default to use TLS 1.0 or TLS 1.1. +- You may have more than one [Azure Monitor Private Link](/azure/azure-monitor/logs/private-link-security) impacting your private network, which may overwrite your DNS entries to resolve the ingestion endpoint to the wrong private IP address. [!INCLUDE [Azure Help Support](../../../includes/azure-help-support.md)] diff --git a/support/azure/azure-monitor/app-insights/media/investigate-missing-telemetry/items-received-matches-items-accepted.png b/support/azure/azure-monitor/app-insights/media/investigate-missing-telemetry/items-received-matches-items-accepted.png index a3cee1075e30447d53e3af8616c972b3d222e0a0..ec495254715cf437858a8c01230bc901b74edd4c 100644 GIT binary patch literal 43130 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 literal 44687 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 Xlr^Srpq2gwfG^FPI%@ehEJFVe=HmNk diff --git a/support/azure/azure-monitor/toc.yml b/support/azure/azure-monitor/toc.yml index 790f97e90a..d9d3ff77e3 100644 --- a/support/azure/azure-monitor/toc.yml +++ b/support/azure/azure-monitor/toc.yml @@ -5,7 +5,7 @@ items: items: - name: Application Insights telemetry items: - - name: Investigate missing telemetry in Application Insights + - name: Troubleshoot missing telemetry in Application Insights href: app-insights/investigate-missing-telemetry.md - name: Troubleshoot auto-instrumentation issues href: app-insights/auto-instrumentation-troubleshoot.md From 2513f88ba1574e0a33113600accc926b405e533c Mon Sep 17 00:00:00 2001 From: Amanda Zhu Date: Mon, 5 Sep 2022 17:33:13 +0800 Subject: [PATCH 27/36] remove the unavailable INCLUDE --- .../azure-monitor/app-insights/investigate-missing-telemetry.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index 2393e3c598..0e5817fcf8 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -131,8 +131,6 @@ This script builds a raw REST request to deliver a single availability test resu > [!NOTE] > Test the connection made by your application. If you enable Application Insights in the Azure portal, you likely rely on connection strings with regional endpoints, `https://.in.applicationinsights.azure.com`. If your SDK configuration only supplies the ikey, you rely on the global endpoint, `https://dc.application-insights-azure.com`. Make sure to populate the script parameter that matches your web application SDK configuration, either supply the connection string or the Ikey. -[!INCLUDE [azure-monitor-log-analytics-rebrand](../../../includes/azure-monitor-instrumentation-key-deprecation.md)] - It's easiest to run this script from the PowerShell ISE environment on an IaaS or [Azure virtual machine scale set](/azure/virtual-machine-scale-sets/overview) instance. You can also copy and paste the script into the App Services Kudu interface PowerShell debug console and then run it. When the script is executed, look for an HTTP 200 response and review the response details. As part of the response JSON payload, the following details are expected: From 6691712d4930b0a7e0fa19b8e0ef53d6fb032709 Mon Sep 17 00:00:00 2001 From: Amanda Zhu Date: Tue, 6 Sep 2022 10:10:20 +0800 Subject: [PATCH 28/36] Update investigate-missing-telemetry.md --- .../app-insights/investigate-missing-telemetry.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index 0e5817fcf8..e8a25e1246 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -129,9 +129,11 @@ This script builds a raw REST request to deliver a single availability test resu - If both connection string and ikey parameters are supplied, the script will send telemetry to the regional endpoint in the connection string. > [!NOTE] -> Test the connection made by your application. If you enable Application Insights in the Azure portal, you likely rely on connection strings with regional endpoints, `https://.in.applicationinsights.azure.com`. If your SDK configuration only supplies the ikey, you rely on the global endpoint, `https://dc.application-insights-azure.com`. Make sure to populate the script parameter that matches your web application SDK configuration, either supply the connection string or the Ikey. +> +> - Test the connection made by your application. If you enable Application Insights in the Azure portal, you likely rely on connection strings with regional endpoints, `https://.in.applicationinsights.azure.com`. If your SDK configuration only supplies the ikey, you rely on the global endpoint, `https://dc.applicationinsights.azure.com`. Make sure to populate the script parameter that matches your web application SDK configuration, either supply the connection string or the Ikey. +> - On March 31, 2025, support for instrumentation key ingestion will end. Instrumentation key ingestion will continue to work, but we'll no longer provide updates or support for the feature. [Transition to connection strings](/azure/azure-monitor/app/migrate-from-instrumentation-keys-to-connection-strings) to take advantage of [new capabilities](/azure/azure-monitor/app/migrate-from-instrumentation-keys-to-connection-strings.md#new-capabilities). -It's easiest to run this script from the PowerShell ISE environment on an IaaS or [Azure virtual machine scale set](/azure/virtual-machine-scale-sets/overview) instance. You can also copy and paste the script into the App Services Kudu interface PowerShell debug console and then run it. +It's easiest to run this script from the PowerShell ISE environment on an IaaS or [Azure virtual machine scale set](/azure/virtual-machine-scale-sets/overview) instance. You can also copy and paste the script into the [App Service Kudu](/azure/app-service/resources-kudu) interface PowerShell debug console and then run it. When the script is executed, look for an HTTP 200 response and review the response details. As part of the response JSON payload, the following details are expected: @@ -198,7 +200,7 @@ $requestData = @" "duration": "00:00:01.0000000", "success": true, "responseCode": "200", - "url": http://localhost:8080/requestData/sampleurl, + "url": "https://localhost:8080/requestData/sampleurl", "httpMethod": "GET" } }, From aea208b8e2850811a8be4ce2bf5e6c25dc3ddeb8 Mon Sep 17 00:00:00 2001 From: Amanda Zhu Date: Tue, 6 Sep 2022 10:43:23 +0800 Subject: [PATCH 29/36] Update investigate-missing-telemetry.md --- .../azure-monitor/app-insights/investigate-missing-telemetry.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index e8a25e1246..5c1be7a4e2 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -131,7 +131,7 @@ This script builds a raw REST request to deliver a single availability test resu > [!NOTE] > > - Test the connection made by your application. If you enable Application Insights in the Azure portal, you likely rely on connection strings with regional endpoints, `https://.in.applicationinsights.azure.com`. If your SDK configuration only supplies the ikey, you rely on the global endpoint, `https://dc.applicationinsights.azure.com`. Make sure to populate the script parameter that matches your web application SDK configuration, either supply the connection string or the Ikey. -> - On March 31, 2025, support for instrumentation key ingestion will end. Instrumentation key ingestion will continue to work, but we'll no longer provide updates or support for the feature. [Transition to connection strings](/azure/azure-monitor/app/migrate-from-instrumentation-keys-to-connection-strings) to take advantage of [new capabilities](/azure/azure-monitor/app/migrate-from-instrumentation-keys-to-connection-strings.md#new-capabilities). +> - On March 31, 2025, support for instrumentation key ingestion will end. Instrumentation key ingestion will continue to work, but we'll no longer provide updates or support for the feature. [Transition to connection strings](/azure/azure-monitor/app/migrate-from-instrumentation-keys-to-connection-strings) to take advantage of [new capabilities](/azure/azure-monitor/app/migrate-from-instrumentation-keys-to-connection-strings#new-capabilities). It's easiest to run this script from the PowerShell ISE environment on an IaaS or [Azure virtual machine scale set](/azure/virtual-machine-scale-sets/overview) instance. You can also copy and paste the script into the [App Service Kudu](/azure/app-service/resources-kudu) interface PowerShell debug console and then run it. From 33ccf1114368f1d59aae9f05b6ace64859715efd Mon Sep 17 00:00:00 2001 From: Amanda Zhu Date: Tue, 6 Sep 2022 11:05:14 +0800 Subject: [PATCH 30/36] Update investigate-missing-telemetry.md --- .../azure-monitor/app-insights/investigate-missing-telemetry.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index 5c1be7a4e2..b07bef3cb0 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -152,7 +152,7 @@ Here are sample curl commands that send a single availability test result: - Curl command for Linux/MaxOS: - ```bash + ``` >curl -H "Content-Type: application/json" -X POST -d '{"data":{"baseData":{"ver":2,"id":"SampleRunId","name":"MicrosoftSupportSampleWebtestResultUsingCurl","duration":"00.00:00:10","success":true,"runLocation":"RegionName","message":"SampleWebtestResult","properties":{"SampleProperty":"SampleValue"}},"baseType":"AvailabilityData"},"ver":1,"name":"Microsoft.ApplicationInsights.Metric","time":"2022-09-01T12:00:00.0000000Z","sampleRate":100,"ikey":"########-####-####-####-############","flags":0}' https://dc.applicationinsights.azure.com/v2.1/track ``` From 56524fb40760abb452314f9a1ce64456b27fe06f Mon Sep 17 00:00:00 2001 From: ChadH81 <95601716+ChadH81@users.noreply.github.com> Date: Tue, 6 Sep 2022 11:50:16 +0800 Subject: [PATCH 31/36] Update investigate-missing-telemetry.md --- .../investigate-missing-telemetry.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index b07bef3cb0..e646539a3d 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -19,21 +19,21 @@ The following graphic shows steps where telemetry can be missing during ingestio :::image type="content" source="media/investigate-missing-telemetry/telemetry-processing-pipeline.png" alt-text="Steps that telemetry passes in processing pipeline."::: -If application telemetry doesn't show in the Azure portal, it can be caused by failures across every step in the processing pipeline: +If application telemetry doesn't show in the Azure portal, failures across steps in the processing pipeline could be the cause: - The Application Insights SDK or agent is misconfigured and doesn't send application telemetry to the ingestion endpoint. -- The SDK or agent is configured correctly but the network blocks calls to the ingestion endpoint. +- The SDK or agent is configured correctly, but the network blocks calls to the ingestion endpoint. - The ingestion endpoint drops or throttles inbound telemetry. - The ingestion pipeline drops or severely slows down telemetry as part of its processing due to [service health](https://azure.microsoft.com/get-started/azure-portal/service-health/#overview). -- (Uncommon) Log Analytics is facing service health problems when saving telemetry records. +- (Uncommon) Log Analytics faces service health problems when saving telemetry records. - (Uncommon) The query API at `api.applicationinsights.io` fails when querying records from Log Analytics. -- The Azure portal fails to pull or render the records that you're trying to view. +- The Azure portal fails to pull or render the records you're trying to view. ## Troubleshoot missing telemetry with PowerShell or curl Configuration problems or transient issues may occur anywhere across the Applications Insights service. To identify the step within the processing pipeline that causes symptoms of no data or missing data, send a sample telemetry record by using PowerShell or curl. -If the web app runs on an on-premises server or Azure VM, connect to the server or VM and send a single telemetry record to the Applications Insights service instance by using PowerShell. If the web app that has issues sending telemetry [runs on Kudu](/azure/app-service/resources-kudu), run the following script from the Kudu's PowerShell debug console in Azure Web Apps. +If the web app runs on an on-premises server or Azure VM, connect to the server or VM and send a single telemetry record to the Applications Insights service instance by using PowerShell. If the web app that has issues sending telemetry [runs on Kudu](/azure/app-service/resources-kudu), run the following script from Kudu's PowerShell debug console in Azure Web Apps. ```powershell $ProgressPreference = "SilentlyContinue" @@ -45,7 +45,7 @@ Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsin > - Before running the `Invoke-WebRequest` cmdlet, issue the `$ProgressPreference = "SilentlyContinue"` cmdlet. > - You can't use `-Verbose` or `-Debug`. Instead, use `-UseBasicParsing`. -After you send a sample telemetry record by using PowerShell, navigate to the Application Insights **Logs** tab in the Azure portal and check if it arrives. If the sample telemetry record shows, a large portion of the processing pipeline is eliminated. +After you send a sample telemetry record by using PowerShell, navigate to the Application Insights **Logs** tab in the Azure portal and check if it arrives. If the sample telemetry record is shown, then a large portion of the processing pipeline is eliminated. A sample telemetry record that's correctly saved and displayed means: @@ -55,13 +55,13 @@ A sample telemetry record that's correctly saved and displayed means: - Log Analytics correctly saved the sample record. - The Azure portal **Logs** tab is able to query the API (`api.applicationinsights.io`) and render the sample record in the Azure portal. -If the generated sample record arrives at your Application Insights instance and you can query for the sample record by using the **Logs resource** menu, [troubleshoot the Application Insights SDK or agent](#troubleshoot-application-insights-sdk-agent). You would proceed with collecting SDK logs, self-diagnostic logs or profiler traces, whichever is appropriate for the SDK or agent version. +If the generated sample record arrives at your Application Insights instance and you can query for the sample record by using the **Logs resource** menu, [troubleshoot the Application Insights SDK or agent](#troubleshoot-application-insights-sdk-agent). You can then proceed with collecting SDK logs, self-diagnostic logs, or profiler traces, whichever is appropriate for the SDK or agent version. -The following sections talks about sending a sample telemetry record by using PowerShell or curl. +The following sections provide information about sending a sample telemetry record using PowerShell or curl. ### Send availability test results -Availability test results are the ideal telemetry type to test with. The reason is because the ingestion pipeline never samples out availability test results. If you send a request telemetry record, it could get sampled out when you have enabled ingestion sampling. Start with a sample availability test result and then try other telemetry types as needed. +Availability test results are the ideal telemetry type to test with. The reason is that the ingestion pipeline never samples out availability test results. If you send a request telemetry record, it could get sampled out when you have enabled ingestion sampling. Start with a sample availability test result and then try other telemetry types as needed. #### PowerShell script to send availability test result @@ -130,7 +130,7 @@ This script builds a raw REST request to deliver a single availability test resu > [!NOTE] > -> - Test the connection made by your application. If you enable Application Insights in the Azure portal, you likely rely on connection strings with regional endpoints, `https://.in.applicationinsights.azure.com`. If your SDK configuration only supplies the ikey, you rely on the global endpoint, `https://dc.applicationinsights.azure.com`. Make sure to populate the script parameter that matches your web application SDK configuration, either supply the connection string or the Ikey. +> - Test the connection made by your application. If you enable Application Insights in the Azure portal, you likely rely on connection strings with regional endpoints, `https://.in.applicationinsights.azure.com`. If your SDK configuration only supplies the ikey, you rely on the global endpoint, `https://dc.applicationinsights.azure.com`. Make sure to populate the script parameter that matches your web application SDK configuration, either supplying the connection string or the Ikey. > - On March 31, 2025, support for instrumentation key ingestion will end. Instrumentation key ingestion will continue to work, but we'll no longer provide updates or support for the feature. [Transition to connection strings](/azure/azure-monitor/app/migrate-from-instrumentation-keys-to-connection-strings) to take advantage of [new capabilities](/azure/azure-monitor/app/migrate-from-instrumentation-keys-to-connection-strings#new-capabilities). It's easiest to run this script from the PowerShell ISE environment on an IaaS or [Azure virtual machine scale set](/azure/virtual-machine-scale-sets/overview) instance. You can also copy and paste the script into the [App Service Kudu](/azure/app-service/resources-kudu) interface PowerShell debug console and then run it. @@ -138,7 +138,7 @@ It's easiest to run this script from the PowerShell ISE environment on an IaaS o When the script is executed, look for an HTTP 200 response and review the response details. As part of the response JSON payload, the following details are expected: - The `itemsReceived` count matches the `itemsAccepted`. -- The ingestion endpoint is informing the client: you sent one telemetry record, we accepted one telemetry record. +- The ingestion endpoint is informs the client: you sent one telemetry record and we accepted one telemetry record. Refer to the following screenshot as an example: From 17b5323d0adcc66323ed8dd9420f1b975d448e1b Mon Sep 17 00:00:00 2001 From: ChadH81 <95601716+ChadH81@users.noreply.github.com> Date: Tue, 6 Sep 2022 13:34:58 +0800 Subject: [PATCH 32/36] Update investigate-missing-telemetry.md --- .../investigate-missing-telemetry.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index e646539a3d..675d793f15 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -146,7 +146,7 @@ Refer to the following screenshot as an example: #### Curl command to send availability test results -If you're running Linux VMs, use curl instead of PowerShell to send a similar REST request. You need to adjust the **ingestion endpoint hostname**, the `ikey` value, and the `time` values. The Application Insights ingestion endpoint doesn't accept any records that are older than 48 hours. +If you're running Linux VMs, use curl instead of PowerShell to send a similar REST request. You need to adjust the **ingestion endpoint hostname**, the `ikey` value, and the `time` values. The Application Insights ingestion endpoint doesn't accept any records older than 48 hours. Here are sample curl commands that send a single availability test result: @@ -164,7 +164,7 @@ Here are sample curl commands that send a single availability test result: ### Send request telemetry record -To troubleshoot missing a request telemetry, use the following PowerShell script to test sending a single request telemetry record. This telemetry type is susceptible to the server-side ingestion sampling configuration. Verify that [ingestion sampling](/azure/azure-monitor/app/sampling#ingestion-sampling) is turned off to confirm if the test record is saved correctly. +To troubleshoot missing request telemetry, use the following PowerShell script to test sending a single request telemetry record. This telemetry type is susceptible to the server-side ingestion sampling configuration. Verify that [ingestion sampling](/azure/azure-monitor/app/sampling#ingestion-sampling) is turned off to confirm if the test record is saved correctly. ```powershell # Info: Provide either the connection string or ikey for your Application Insights resource @@ -224,11 +224,11 @@ Invoke-WebRequest -Uri $url -Method POST -Body $requestData -UseBasicParsing ## Troubleshoot SSL or TLS configuration -If the scripts above to test sending telemetry fail, troubleshoot the SSL or TLS configuration. Most ingestion endpoints require clients to use TLS 1.2 and specific cipher suites. In this case, adjust how PowerShell participates as a client in the SSL or TLS protocol. Include the following snippets if you need to diagnose secure channel as part of the connection between the client VM and the ingestion endpoints. +If the scripts above fail, troubleshoot the SSL or TLS configuration. Most ingestion endpoints require clients to use TLS 1.2 and specific cipher suites. In this case, adjust how PowerShell participates as a client in the SSL or TLS protocol. Include the following snippets if you need to diagnose a secure channel as part of the connection between the client VM and the ingestion endpoints. - Option 1: Control which SSL or TLS protocol is used by PowerShell to make a connection to the ingestion endpoint. - Uncomment any of the following lines by removing the `#` character and add them before the `Invoke-WebRequest` cmdlet in your PowerShell script to control the protocol used in the test REST request: + Uncomment any of the following lines by removing the `#` character and adding them before the `Invoke-WebRequest` cmdlet in your PowerShell script to control the protocol used in the test REST request: ```powershell # Uncomment one or more of these lines to test TLS/SSL protocols other than the machine default option @@ -265,13 +265,13 @@ If you need to change the default TLS/SSL protocol used by a .NET application, f ## Troubleshoot setup or configuration of Application Insights SDK or agent -If sending telemetry from your application's host machine by using PowerShell or curl is successful, missing telemetry is likely due to Application Insights SDK or agent setup or configuration issues. Enable Application Insights monitoring for your application host and programming language to verify that all your configurations or code follow proper guidance and examples. +If sending telemetry from your application's host machine by using PowerShell or curl is successful, missing telemetry is likely due to Application Insights SDK, agent setup, or configuration issues. Enable Application Insights monitoring for your application host and programming language to verify that all your configurations or code follow proper guidance and examples. -If tests by using PowerShell or curl fail to send telemetry to the ingestion endpoint, verify a few common client side related issues that may contribute to the problem: +If tests performed by using PowerShell or curl fail to send telemetry to the ingestion endpoint, verify a few common client-side related issues that may contribute to the problem: - DNS on your network fails to resolve the ingestion endpoint to the correct IP address. -- TCP connection from your application server to ingestion endpoint may be blocked by firewalls or gateway devices. -- The ingestion endpoint that the SDK connects to may require TLS 1.2, but your application may default to use TLS 1.0 or TLS 1.1. +- TCP connection from your application server to the ingestion endpoint may be blocked by firewalls or gateway devices. +- The ingestion endpoint that the SDK connects to may require TLS 1.2, but your application may by default use TLS 1.0 or TLS 1.1. - You may have more than one [Azure Monitor Private Link](/azure/azure-monitor/logs/private-link-security) impacting your private network, which may overwrite your DNS entries to resolve the ingestion endpoint to the wrong private IP address. [!INCLUDE [Azure Help Support](../../../includes/azure-help-support.md)] From 5e63403e6409f43150b39978daf61003a269a743 Mon Sep 17 00:00:00 2001 From: ChadH81 <95601716+ChadH81@users.noreply.github.com> Date: Tue, 6 Sep 2022 14:11:54 +0800 Subject: [PATCH 33/36] Update investigate-missing-telemetry.md --- .../app-insights/investigate-missing-telemetry.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index 675d793f15..2e842bd8a4 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -138,7 +138,7 @@ It's easiest to run this script from the PowerShell ISE environment on an IaaS o When the script is executed, look for an HTTP 200 response and review the response details. As part of the response JSON payload, the following details are expected: - The `itemsReceived` count matches the `itemsAccepted`. -- The ingestion endpoint is informs the client: you sent one telemetry record and we accepted one telemetry record. +- The ingestion endpoint informs the client: you sent one telemetry record, and we accepted one telemetry record. Refer to the following screenshot as an example: @@ -228,7 +228,7 @@ If the scripts above fail, troubleshoot the SSL or TLS configuration. Most inges - Option 1: Control which SSL or TLS protocol is used by PowerShell to make a connection to the ingestion endpoint. - Uncomment any of the following lines by removing the `#` character and adding them before the `Invoke-WebRequest` cmdlet in your PowerShell script to control the protocol used in the test REST request: + Uncomment any of the following lines by removing the `#` character and add them before the `Invoke-WebRequest` cmdlet in your PowerShell script to control the protocol used in the test REST request: ```powershell # Uncomment one or more of these lines to test TLS/SSL protocols other than the machine default option @@ -265,7 +265,7 @@ If you need to change the default TLS/SSL protocol used by a .NET application, f ## Troubleshoot setup or configuration of Application Insights SDK or agent -If sending telemetry from your application's host machine by using PowerShell or curl is successful, missing telemetry is likely due to Application Insights SDK, agent setup, or configuration issues. Enable Application Insights monitoring for your application host and programming language to verify that all your configurations or code follow proper guidance and examples. +If sending telemetry from your application's host machine by using PowerShell or curl is successful, missing telemetry is likely due to setup or configuration issues of the Application Insights SDK or agent. Enable Application Insights monitoring for your application host and programming language to verify that all your configurations or code follow proper guidance and examples. If tests performed by using PowerShell or curl fail to send telemetry to the ingestion endpoint, verify a few common client-side related issues that may contribute to the problem: From 69df6c2b30b69e1daa4a043351fedf518f38dc10 Mon Sep 17 00:00:00 2001 From: Amanda Zhu Date: Thu, 8 Sep 2022 09:03:24 +0800 Subject: [PATCH 34/36] adjust headings and fix curl commands --- .../investigate-missing-telemetry.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index 2e842bd8a4..51c761ccd8 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -29,9 +29,13 @@ If application telemetry doesn't show in the Azure portal, failures across steps - (Uncommon) The query API at `api.applicationinsights.io` fails when querying records from Log Analytics. - The Azure portal fails to pull or render the records you're trying to view. -## Troubleshoot missing telemetry with PowerShell or curl +## Identify step by sending sample telemetry record -Configuration problems or transient issues may occur anywhere across the Applications Insights service. To identify the step within the processing pipeline that causes symptoms of no data or missing data, send a sample telemetry record by using PowerShell or curl. +Configuration problems or transient issues may occur anywhere across the Applications Insights service. To identify the step within the processing pipeline that causes symptoms of no data or missing data, send a sample telemetry record by using PowerShell or curl. For the PowerShell script or curl command, go to the following sections: + +- [PowerShell script to send availability test result](#a-idpowershell-script-send-availability-test-resultapowershell-script-to-send-availability-test-result) +- [Curl command to send availability test result](#a-idcurl-command-send-availability-test-resultacurl-command-to-send-availability-test-result) +- [PowerShell script to send request telemetry record](#a-idpowershell-script-send-request-telemetry-recordapowershell-script-to-send-request-telemetry-record) If the web app runs on an on-premises server or Azure VM, connect to the server or VM and send a single telemetry record to the Applications Insights service instance by using PowerShell. If the web app that has issues sending telemetry [runs on Kudu](/azure/app-service/resources-kudu), run the following script from Kudu's PowerShell debug console in Azure Web Apps. @@ -59,11 +63,11 @@ If the generated sample record arrives at your Application Insights instance and The following sections provide information about sending a sample telemetry record using PowerShell or curl. -### Send availability test results +## PowerShell script to send availability test result Availability test results are the ideal telemetry type to test with. The reason is that the ingestion pipeline never samples out availability test results. If you send a request telemetry record, it could get sampled out when you have enabled ingestion sampling. Start with a sample availability test result and then try other telemetry types as needed. -#### PowerShell script to send availability test result +Here's a sample PowerShell script that sends an availability test result: ```powershell # Info: Provide either the connection string or ikey for your Application Insights resource @@ -144,7 +148,7 @@ Refer to the following screenshot as an example: :::image type="content" source="media/investigate-missing-telemetry/items-received-matches-items-accepted.png" alt-text="Code that shows the amount of items received and items accepted."::: -#### Curl command to send availability test results +## Curl command to send availability test result If you're running Linux VMs, use curl instead of PowerShell to send a similar REST request. You need to adjust the **ingestion endpoint hostname**, the `ikey` value, and the `time` values. The Application Insights ingestion endpoint doesn't accept any records older than 48 hours. @@ -162,7 +166,7 @@ Here are sample curl commands that send a single availability test result: curl -H "Content-Type: application/json" -X POST -d {\"data\":{\"baseData\":{\"ver\":2,\"id\":\"SampleRunId\",\"name\":\"MicrosoftSupportSampleWebtestResultUsingCurl\",\"duration\":\"00.00:00:10\",\"success\":true,\"runLocation\":\"RegionName\",\"message\":\"SampleWebtestResult\",\"properties\":{\"SampleProperty\":\"SampleValue\"}},\"baseType\":\"AvailabilityData\"},\"ver\":1,\"name\":\"Microsoft.ApplicationInsights.Metric\",\"time\":\"2021-10-05T22:00:00.0000000Z\",\"sampleRate\":100,\"ikey\":\"########-####-####-####-############\",\"flags\":0} https://dc.applicationinsights.azure.com/v2/track ``` -### Send request telemetry record +## PowerShell script to send request telemetry record To troubleshoot missing request telemetry, use the following PowerShell script to test sending a single request telemetry record. This telemetry type is susceptible to the server-side ingestion sampling configuration. Verify that [ingestion sampling](/azure/azure-monitor/app/sampling#ingestion-sampling) is turned off to confirm if the test record is saved correctly. From 79abaee7965cb69a8238244df56cbdd0af3703b5 Mon Sep 17 00:00:00 2001 From: Amanda Zhu Date: Thu, 8 Sep 2022 09:07:43 +0800 Subject: [PATCH 35/36] fix bookmark --- .../app-insights/investigate-missing-telemetry.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index 51c761ccd8..4db470a2f4 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -33,9 +33,9 @@ If application telemetry doesn't show in the Azure portal, failures across steps Configuration problems or transient issues may occur anywhere across the Applications Insights service. To identify the step within the processing pipeline that causes symptoms of no data or missing data, send a sample telemetry record by using PowerShell or curl. For the PowerShell script or curl command, go to the following sections: -- [PowerShell script to send availability test result](#a-idpowershell-script-send-availability-test-resultapowershell-script-to-send-availability-test-result) -- [Curl command to send availability test result](#a-idcurl-command-send-availability-test-resultacurl-command-to-send-availability-test-result) -- [PowerShell script to send request telemetry record](#a-idpowershell-script-send-request-telemetry-recordapowershell-script-to-send-request-telemetry-record) +- [PowerShell script to send availability test result](#powershell-script-send-availability-test-result) +- [Curl command to send availability test result](#curl-command-send-availability-test-result) +- [PowerShell script to send request telemetry record](#powershell-script-send-request-telemetry-record) If the web app runs on an on-premises server or Azure VM, connect to the server or VM and send a single telemetry record to the Applications Insights service instance by using PowerShell. If the web app that has issues sending telemetry [runs on Kudu](/azure/app-service/resources-kudu), run the following script from Kudu's PowerShell debug console in Azure Web Apps. From 9d6dbc8fa0bad7b2b0553f90c934044a1431b02f Mon Sep 17 00:00:00 2001 From: Amanda Zhu Date: Thu, 8 Sep 2022 09:16:02 +0800 Subject: [PATCH 36/36] Update investigate-missing-telemetry.md --- .../app-insights/investigate-missing-telemetry.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md index 4db470a2f4..ef753fe734 100644 --- a/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md +++ b/support/azure/azure-monitor/app-insights/investigate-missing-telemetry.md @@ -154,10 +154,10 @@ If you're running Linux VMs, use curl instead of PowerShell to send a similar RE Here are sample curl commands that send a single availability test result: -- Curl command for Linux/MaxOS: +- Curl command for Linux/MacOS: ``` - >curl -H "Content-Type: application/json" -X POST -d '{"data":{"baseData":{"ver":2,"id":"SampleRunId","name":"MicrosoftSupportSampleWebtestResultUsingCurl","duration":"00.00:00:10","success":true,"runLocation":"RegionName","message":"SampleWebtestResult","properties":{"SampleProperty":"SampleValue"}},"baseType":"AvailabilityData"},"ver":1,"name":"Microsoft.ApplicationInsights.Metric","time":"2022-09-01T12:00:00.0000000Z","sampleRate":100,"ikey":"########-####-####-####-############","flags":0}' https://dc.applicationinsights.azure.com/v2.1/track + curl -H "Content-Type: application/json" -X POST -d '{"data":{"baseData":{"ver":2,"id":"SampleRunId","name":"MicrosoftSupportSampleWebtestResultUsingCurl","duration":"00.00:00:10","success":true,"runLocation":"RegionName","message":"SampleWebtestResult","properties":{"SampleProperty":"SampleValue"}},"baseType":"AvailabilityData"},"ver":1,"name":"Microsoft.ApplicationInsights.Metric","time":"2022-09-01T12:00:00.0000000Z","sampleRate":100,"ikey":"########-####-####-####-############","flags":0}' https://dc.applicationinsights.azure.com/v2.1/track ``` - Curl command for Windows: