首页 文章

服务架构和应用洞察

提问于
浏览
2

我是服务Fabric的新手,并尝试将我的Windows服务应用程序集成到服务结构中 . 对于日志记录信息,我们计划使用Application Insights . 但如果我通过我的SF应用程序发送事件,则不会记录事件 . 同时,通过普通的控制台/ Windows应用程序,我可以将消息记录到applicationinsights,并可以从那里查看 .

然后我尝试在azure环境中创建一个VM,并在那里创建SF应用程序并将日志信息发送给AI,并且它成功运行 . 我将相同的代码库复制到我的本地机器并运行它,它无法正常工作 . 我不确定它是否与任何防火墙或代理设置有关 . 任何人都可以帮忙吗?

我已经使用nuget包在我的机器上安装了Microsoft.ApplicationInsights dll . 我使用的版本是2.2.0 . 我正在使用.Net framework 4.6.1

3 回答

  • 5

    您可以查看EventFlow以帮助您从SF服务捕获Service Fabric ETW事件并将它们发送到Application Insights .

    设置起来非常简单,只需将 Microsoft.Diagnostics.EventFlow.ServiceFabric NuGet添加到您的Service Fabric服务项目即可then setup a pipline

    public static void Main(string[] args)
    {
        try
        {
            using (var diagnosticsPipeline = ServiceFabricDiagnosticPipelineFactory.CreatePipeline("MyApplication-MyService-DiagnosticsPipeline"))
            {
                ServiceRuntime.RegisterServiceAsync("MyServiceType", ctx => new MyService(ctx)).Wait();
    
                ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(MyService).Name);
    
                Thread.Sleep(Timeout.Infinite);
            }
        }
        catch (Exception e)
        {
            ServiceEventSource.Current.ServiceHostInitializationFailed(e.ToString());
            throw;
        }
    }
    

    eventflow.config 中,您可以setup Application Insights作为输出:

    {
        "inputs": [
            {
                "type": "EventSource",
                "sources": [
                     { "providerName": "Your-Service-EventSource" }
               ]
            },
        ],
        "filters": [
            {
                "type": "drop",
                "include": "Level == Verbose"
            }
        ],
        "outputs": [
            // Please update the instrumentationKey.
            {
                "type": "ApplicationInsights",
                "instrumentationKey": "00000000-0000-0000-0000-000000000000"
            }
        ],
        "schemaVersion": "2016-08-11",
        "extensions": []
    }
    
  • 1

    您可以调整Microsoft Samples中的监视程序服务 . 监视程序服务是一种通用的独立服务结构状态服务,它将数据记录到Application Insights中 .

    • 将监视程序应用程序和监视程序服务添加到您的解决方案中 .

    • 在WatchDogService -PackageRoot / Config / ServiceManifest.xml中添加Azure App ID

    • 在需要监视的服务中,在“运行异步”命令中,添加以下行(示例位于以下链接中提供的“测试无状态服务”中)

    码:

    protected override async Task RunAsync(CancellationToken cancellationToken)
        {
            // Register the health check and metrics with the watchdog.
            bool healthRegistered = await this.RegisterHealthCheckAsync(cancellationToken);
            bool metricsRegistered = await this.RegisterMetricsAsync(cancellationToken);
    
            while (true)
            {
                // Report some fake metrics to Service Fabric.
                this.ReportFakeMetrics(cancellationToken);
                await Task.Delay(TimeSpan.FromSeconds(30), cancellationToken);
    
                // Check that registration was successful. Could also query the watchdog for additional safety.
                if (false == healthRegistered)
                {
                    healthRegistered = await this.RegisterHealthCheckAsync(cancellationToken);
                }
                if (false == metricsRegistered)
                {
                    metricsRegistered = await this.RegisterMetricsAsync(cancellationToken);
                }
            }
        }
    
    • 将RegisterHealthCheckAsync,RegisterMetricsAsync和ReportFakeMetrics方法按原样复制到service.cs文件中 .

    那应该是它!它可选择使用Azure存储 . 我没有必要实现它以使监视器启动并运行 .

    这是链接:https://github.com/Azure-Samples/service-fabric-watchdog-service

  • 1

    yoape建议的EventFlow方法的替代方案是Azure诊断(WAD) .

    Setup WAD in SF VMSS

    当您运行Azure Service Fabric群集时,最好从中心位置的所有节点收集日志 . 将日志放在中央位置可帮助您分析和解决群集中的问题,或者在群集中运行的应用程序和服务中的问题 . 上载和收集日志的一种方法是使用Windows Azure诊断(WAD)扩展,将日志上载到Azure存储,还可以选择将日志发送到Azure Application Insights或事件中心 . 您还可以使用外部流程从存储中读取事件,并将它们放在分析平台产品中,例如OMS Log Analytics或其他日志解析解决方案 .

    Setup AI upload in WAD

    Cloud 服务,虚拟机,虚拟机规模集和服务结构都使用Azure诊断扩展来收集数据 . Azure诊断将数据发送到Azure存储表 . 但是,您也可以使用Azure诊断扩展1.5或更高版本将所有或部分数据传输到其他位置 . 本文介绍如何将数据从Azure诊断扩展发送到Application Insights .

    它的优点在于它完全由Azure管理,您无需更改项目中的任何内容 .

相关问题