服务架构和应用洞察

时间:2017-03-07 03:29:02

标签: azure-service-fabric azure-application-insights

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

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

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

4 个答案:

答案 0 :(得分:6)

您可以查看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 :(得分:1)

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

Setup WAD in SF VMSS

  

当您运行Azure Service Fabric群集时,这是一个好主意   从中心位置的所有节点收集日志。有   中央位置的日志可帮助您进行分析和排除故障   群集中的问题,或应用程序和服务中的问题   在该集群中运行。上传和收集日志的一种方法是使用   Windows Azure诊断(WAD)扩展,用于上载日志   Azure存储,还可以选择将日志发送到Azure   应用程序见解或事件中心。您也可以使用外部   从存储中读取事件并将其置于分析中的过程   平台产品,例如OMS Log Analytics或其他日志解析   溶液

Setup AI upload in WAD

  

云服务,虚拟机,虚拟机规模集和   Service Fabric都使用Azure Diagnostics扩展来收集   数据。 Azure诊断将数据发送到Azure存储表。然而,   您还可以使用将所有或部分数据传输到其他位置   Azure诊断扩展1.5或更高版本。本文介绍了如何操作   将数据从Azure诊断扩展发送到应用程序   的见解。

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

答案 2 :(得分:1)

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

  1. 将监视程序应用程序和监视程序服务添加到您的解决方案中。
  2. 在WatchDogService -PackageRoot / Config / ServiceManifest.xml中添加Azure App ID
  3. 在您需要监控的服务中,在Run Async命令中添加以下行(示例位于以下链接中提供的Test Stateless Service中)
  4. 代码:

     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);
                }
            }
        }
    
    1. 将RegisterHealthCheckAsync,RegisterMetricsAsync和ReportFakeMetrics方法按原样复制到service.cs文件中。
    2. 那应该是它!它可选择使用Azure存储。我没有必要实现这一点,以使看门狗启动并运行。

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

答案 3 :(得分:0)

要向Application Insights发送应用程序/服务遥测,强烈建议您查看App Insights Service Fabric。它非常适合:

  • 发送错误和异常信息
  • 使用所有服务及其依赖项(包括数据库)填充应用程序映射
  • 报告应用程序性能指标以及
  • 端到端跟踪服务调用依赖性,
  • 与本地和非本地SF应用程序集成

然而,上述解决方案无法解决的一件事就是提供总体集群运行状况信息-例如节点何时上/下/上运行的频率,各个节点上消耗了多少CPU /内存和磁盘IO。

在Azure中运行时,以上内容应该非常简单,建议您开始here

在内部进行此操作并不那么简单。为此,您可以尝试使用MS EventFlow或上面已经提到的其他一些解决方案。

我个人最终创建了一个简单/自定义的windows service,该{/ 3}使用标准的App Insights nuget包来报告以下信息:

    来自服务结构运营ETW频道的
  • Cluster and Node ETW事件
  • 性能计数器(可通过应用数据洞察配置文件进行配置)