当前位置: 首页 > 知识库问答 >
问题:

从本地service fabric将日志写入应用程序洞察

司马项明
2023-03-14

我正在尝试将Azure App insights service集成到service fabric App中,用于日志记录和检测。我正在本地VM上运行fabric代码。我完全遵循了这里的文档[场景2]。docs.microsoft.com上的其他资源似乎也指明了相同的步骤。[例如:https://docs.microsoft.com/en-us/Azure/service-fabric/service-fabric-diagnostics-event-aggregation-eventflow出于某种原因,我在App Insights中看不到任何事件条目。执行此操作时,代码中没有错误:

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 in fabric stateful service”添加诊断管道代码

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);
            }

共有1个答案

叶稳
2023-03-14

事件源是一个棘手的技术,我已经使用它一段时间了,总是有问题。配置看起来不错,没有访问环境就很难调查,所以我会提出我的建议。

你必须注意以下几点:

>

  • 如果您正在侦听来自其他进程的etw事件,则您的进程必须使用具有“性能日志用户”权限的用户运行。检查您的服务在哪个标识上运行,以及如果它是性能日志用户的一部分,则检查谁有权创建事件会话以侦听这些事件。

  •  类似资料:
    • 是否有写入此事件日志的方法: 或者至少是其他一些Windows默认日志,在那里我不必注册事件源?

    • Azure应用程序洞察或日志分析的用例是什么? 我正在使用APIM和Azure函数,并希望对请求执行日志记录。应用洞察和日志分析哪一个最合适? https://docs.microsoft.com/en-gb/Azure/Azure-monitor/overview 更新 特别是关于APIM使用的Azure应用程序洞察与日志分析的任何信息?

    • 我想有一个共享的应用程序insights实例,将保存来自不同微服务运行的所有日志。 或者说,共享应用程序insights实例并将所有日志和遥测都放在一堆中是不是一个坏主意?

    • 我有一个java web应用程序(springboot应用程序),我想在其中将日志推送到Azure中的应用程序insights。我使用logback作为我的日志框架,因为它是由SpringBoot本地支持的。我关注了下面的博客,以便为我的web应用程序集成applicationInsights。 https://github.com/azurecat-gsi/devcamp/tree/master

    • 在Azure Portal上,在我的App Insights/Logs视图中,我可以这样查询App数据: 函数在文章app()expression in Azure Monitor Query中进行了描述。 kusto.explorer不理解函数,这似乎是因为它是Azure Monitor中的附加操作符之一。 我如何用kusto.explorer查询我的应用程序洞察/日志?我不能使用,因为它是Az

    • 唯一可以解决这一问题的方法是在startup.configure()中添加下面一行代码: 上面的解决方案是不可取的,因为我们希望根据环境不同地配置日志级别,因此基于配置的解决方案将是首选的。此外,我猜测问题是配置相关的,因为它在本地运行良好。在Azure中没有特殊的配置。 下面是整个startup.configure():