У нас есть небольшой 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, я не могу понять, что это может быть.
Есть кто-нибудь еще испытал это, и если да, удалось ли вам решить проблему? Или у вас есть идеи / указатели для меня, потому что я в тупике.