Я пытаюсь интегрировать службу Azure App Insights в приложение Service Fabric для ведения журналов и инструментовки. Я запускаю код фабрики на своей локальной виртуальной машине. Я точно следил за документом здесь [сценарий 2]. Другие ресурсы на docs.microsoft.com, похоже, также указывают на те же шаги. [пример: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-diagnostics-event-aggregation-eventflow По какой-то причине я не вижу записей о событиях в Аналитике приложений. Никаких ошибок в коде, когда я делаю это:
ServiceEventSource.Current.ProcessedCountMetric("synced",sw.ElapsedMilliseconds, crc.DataTable.Rows.Count);
содержимое eventflowconfig.json
{ "inputs": [ { "type": "EventSource", "sources": [ { "providerName": "Microsoft-ServiceFabric-Services" }, { "providerName": "Microsoft-ServiceFabric-Actors" }, { "providerName": "mystatefulservice" } ] } ], "filters": [ { "type": "drop", "include": "Level == Verbose" } ], "outputs": [ { "type": "ApplicationInsights", // (replace the following value with your AI resource's instrumentation key) "instrumentationKey": "XXXXXXXXXXXXXXXXXXXXXX", "filters": [ { "type": "metadata", "metadata": "metric", "include": "ProviderName == mystatefulservice && EventName == ProcessedCountMetric", "operationProperty": "operation", "elapsedMilliSecondsProperty": "elapsedMilliSeconds", "recordCountProperty": "recordCount" } ] } ], "schemaVersion": "2016-08-11" }
В ServiceEventSource.cs
[Event(ProcessedCountMetricEventId, Level = EventLevel.Informational)]
public void ProcessedCountMetric(string operation, long elapsedMilliSeconds, int recordCount)
{
if (IsEnabled())
WriteEvent(ProcessedCountMetricEventId, operation, elapsedMilliSeconds, recordCount);
}
ИЗМЕНИТЬ Добавление кода конвейера диагностики из "Program.cs в службу с отслеживанием состояния структуры"
using (var diagnosticsPipeline =
ServiceFabricDiagnosticPipelineFactory.CreatePipeline($"{ServiceFabricGlobalConstants.AppName}-mystatefulservice-DiagnosticsPipeline")
)
{
ServiceRuntime.RegisterServiceAsync("mystatefulserviceType",
context => new mystatefulservice(context)).GetAwaiter().GetResult();
ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id,
typeof(mystatefulservice).Name);
// Prevents this host process from terminating so services keep running.
Thread.Sleep(Timeout.Infinite);
}