Application Insights Телеметрия отсутствует. Net Приложение Core 3, работающее в Docker контейнере - PullRequest
2 голосов
/ 13 февраля 2020

У нас есть небольшой API, размещенный в AKS, который был написан с использованием. Net core 2.2. Он работал нормально, и мы видели всю нашу телеметрию App Insights на портале Azure, как в Live Metrics, так и в Log Analytics, как и ожидалось. Недавно мы столкнулись с проблемой во время длительного процесса, который дал нам бесполезное сообщение об ошибке, но кажется, что обновление до. Net core 3 или выше предоставляет больше информации, когда это происходит, поэтому мы приступили к обновлению. Мы пошли прямо к 3.1, обновили все пакеты (включая пакет AI), чтобы убедиться, что они все совместимы с 3.1, и исправили все внесенные критические изменения. При запуске в Visual Studio мы видим нашу телеметрию в Live Metrics и журналах, как и ожидалось, но в тот момент, когда мы встраиваем ее в контейнер docker и запускаем ее там, мы теряем эту телеметрию. Однако исключения все еще регистрируются.

В нашем startup.cs мы настраиваем AI следующим образом:

services.AddSingleton(typeof(ITelemetryChannel),
                            new InMemoryChannel() { MaxTelemetryBufferCapacity = 10000 });

services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions
{
    EnableAdaptiveSampling = false,
    InstrumentationKey = Configuration.GetValue<string>("ApplicationInsights:InstrumentationKey")
});

Я попытался увеличить и уменьшить размер буфера, я опустил его до . Net core 3, я пытался понизить пакет Microsoft.ApplicationInsights.AspNetCore до 2.8.0 (минимум для ядра 3), поскольку это было то, что мы использовали с 2.2, но все безрезультатно.

У меня есть также посмотрел, что выходит из контейнера и VS с помощью Fiddler. В обоих случаях вы можете видеть множество чатов с QuickPulseService (Live Metrics), но при использовании VS или версии 2.2, размещенной в Docker, я вижу такие вещи:

"Documents": [
    {
        "Timestamp": "2020-02-13T11:28:17Z",
        "SequenceNumber": 34,    
        "Content": {
            "__type": "TraceTelemetryDocument:#Microsoft.ManagementServices.RealTimeDataProcessing.QuickPulseService",
            "CloudRoleInstance": "XXXXXXXX",
            "DocumentStreamIds": [
                 "all-types-default"
             ],
             "DocumentType": "Trace",
             "Id": "fc840f65-29a8-48dc-a425-e5b7aacd03a5",
             "InternalNodeName": "XXXXXXXX",
             "Message": "Finished processing 159 of 159 events in 3.29 seconds",
             "OperationName": "POST Publish/Publish",
             "Properties": [
                 {
                     "key": "totalEvents",
                     "value": "159"
                 },
                 {
                     "key": "ActionId",
                     "value": "a825bb45-a286-4f85-95f8-64cd88871f8d"
                 },
                 {
                     "key": "RequestPath",
                     "value": "/api/publish"
                 }
             ],
             "SeverityLevel": "Information",
             "Timestamp": {
                 "DateTime": "2020-02-13T11:28:15.309Z",
                 "OffsetMinutes": 0
             },
             "Version": "1.1"
         },
         "Instance": "XXXXXX",
         "DocumentStreamIds": [
             "all-types-default"
         ]
     }]

сообщения, которые я ожидаю увидеть в AI, при мониторинге версии core 3 в docker вызовы QuickPulseService вообще не содержат документов.

Не следует этого делать при работе в VS или при локальном использовании Docker Настольный компьютер, у нас установлен уровень ведения журнала Debug, такой же, как мы привыкли к. Net core 2.2.

В случае, если это уместно, вот также dockerfile

FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0

WORKDIR /app

COPY --from=build-env /app/out .

CMD ["dotnet", "MyApp.dll"]

Я чувствую, что, должно быть, я пропустил какой-то маленький кусочек критической конфигурации, но прочитав многократный список изменений. Net core 3, я не могу понять, что это может быть.

Есть кто-нибудь еще испытал это, и если да, удалось ли вам решить проблему? Или у вас есть идеи / указатели для меня, потому что я в тупике.

1 Ответ

0 голосов
/ 28 апреля 2020

Я недавно столкнулся с этой проблемой при обновлении нашего. NET Core 2.2 Web API до 3.1. В то же время я обновил все вспомогательные библиотеки, включая Microsoft.ApplicationInsights.AspNetCore, обновив его с 2.12.1 до 2.14.0. После этого я перестал получать SQL утверждений в Application Insights. Когда я понизил Microsoft.ApplicationInsights.AspNetCore до 2.12.1 (но оставив все то же самое), в Application Insights снова появились операторы SQL.

...