Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Service Fabric and Application Insights

I am new to service Fabric and trying to integrate my windows service application into service fabric. For logging information, we are planning to use Application Insights. But the events are not logged if i send it through my SF application. At the same time, through a normal console/windows application, I can able to log the message to applicationinsights and can be viewed from there.

Then I tried to create a VM in azure environment, and create SF application there and send the log information to AI and its worked successfully. I copied the same codebase into my local machine and run it, its not working. I am not sure whether its related to any firewall or proxy settings. Can anyone help on this?

I have used the nuget package to install Microsoft.ApplicationInsights dll in my machine. The version that I used is 2.2.0. And I am using .Net framework 4.6.1

like image 341
Divya S Avatar asked Mar 07 '17 03:03

Divya S


People also ask

What is service Fabric application?

Azure Service Fabric is a distributed systems platform that makes it easy to package, deploy, and manage scalable and reliable microservices and containers. Service Fabric also addresses the significant challenges in developing and managing cloud native applications.

What is application Insights for?

Application Insights is a feature of Azure Monitor that provides extensible application performance management (APM) and monitoring for live web apps. Developers and DevOps professionals can use Application Insights to: Automatically detect performance anomalies. Help diagnose issues by using powerful analytics tools.

What is difference between Kubernetes and service Fabric?

Service Fabric addresses the significant challenges in developing and managing cloud apps. On the other hand, Kubernetes is detailed as "Manage a cluster of Linux containers as a single system to accelerate Dev and simplify Ops". Kubernetes is an open source orchestration system for Docker containers.

Why do we use service Fabric?

Using Service Fabric allows your developers to focus on building features that add business value to your application. Service Fabric understands the available infrastructure and the resource needs of applications, enabling automatic scale, rolling upgrades and self-healing from faults.


3 Answers

You could look at EventFlow to help you capture Service Fabric ETW Events from your SF services and send them to Application Insights.

It's easy enough to setup, simply add Microsoft.Diagnostics.EventFlow.ServiceFabric NuGet to your Service Fabric service project and 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;
    }
}

In your eventflow.config you can then setup Application Insights as an output:

{
    "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": []
}
like image 66
yoape Avatar answered Oct 20 '22 06:10

yoape


An alternative to the EventFlow approach suggested by yoape would be Azure Diagnostics (WAD).

Setup WAD in SF VMSS

When you're running an Azure Service Fabric cluster, it's a good idea to collect the logs from all the nodes in a central location. Having the logs in a central location helps you analyze and troubleshoot issues in your cluster, or issues in the applications and services running in that cluster. One way to upload and collect logs is to use the Windows Azure Diagnostics (WAD) extension, which uploads logs to Azure Storage, and also has the option to send logs to Azure Application Insights or Event Hubs. You can also use an external process to read the events from storage and place them in an analysis platform product, such as OMS Log Analytics or another log-parsing solution.

Setup AI upload in WAD

Cloud services, Virtual Machines, Virtual Machine Scale Sets and Service Fabric all use the Azure Diagnostics extension to collect data. Azure diagnostics sends data to Azure Storage tables. However, you can also pipe all or a subset of the data to other locations using Azure Diagnostics extension 1.5 or later. This article describes how to send data from the Azure Diagnostics extension to Application Insights.

The nice thing about it is that it's completely managed by Azure, and you don't need to change anything in your project.

like image 20
Ohad Schneider Avatar answered Oct 20 '22 05:10

Ohad Schneider


You can adapt the watchdog Service from Microsoft Samples. The watchdog Service is a generic standalone Service Fabric Stateful Service that will log data into Application Insights.

  1. Add the watchdog app and watchdog service into your solution.
  2. Add your Azure App ID in the WatchDogService -PackageRoot/Config/ServiceManifest.xml
  3. In the service that you need monitored, in the Run Async command, add the following lines (Example is in the Test Stateless Service provided in the link below)

Code:

 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. Copy the RegisterHealthCheckAsync, RegisterMetricsAsync and ReportFakeMetrics methods, as is, into your service.cs file.

That should be it! It uses Azure Storage optionally. I did not have to implement that to get the watchdog up and running.

Here is the link : https://github.com/Azure-Samples/service-fabric-watchdog-service

like image 1
Jersey_Guy Avatar answered Oct 20 '22 05:10

Jersey_Guy