我是Fabric的新手,并尝试将我的Windows服务应用程序集成到服务结构中。对于日志记录信息,我们计划使用Application Insights。但如果我通过我的SF应用程序发送事件,则不会记录事件。同时,通过普通的控制台/ Windows应用程序,我可以将消息记录到applicationinsights,并可以从那里查看。
然后我尝试在azure环境中创建一个VM,并在那里创建SF应用程序并将日志信息发送到AI并且它成功运行。我将相同的代码库复制到我的本地计算机并运行它,它无法正常工作。我不确定它是否与任何防火墙或代理设置有关。任何人都可以帮忙吗?
我已经使用nuget包在我的机器上安装了Microsoft.ApplicationInsights dll。我使用的版本是2.2.0。我正在使用.Net framework 4.6.1
答案 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)。
当您运行Azure Service Fabric群集时,这是一个好主意 从中心位置的所有节点收集日志。有 中央位置的日志可帮助您进行分析和排除故障 群集中的问题,或应用程序和服务中的问题 在该集群中运行。上传和收集日志的一种方法是使用 Windows Azure诊断(WAD)扩展,用于上载日志 Azure存储,还可以选择将日志发送到Azure 应用程序见解或事件中心。您也可以使用外部 从存储中读取事件并将其置于分析中的过程 平台产品,例如OMS Log Analytics或其他日志解析 溶液
云服务,虚拟机,虚拟机规模集和 Service Fabric都使用Azure Diagnostics扩展来收集 数据。 Azure诊断将数据发送到Azure存储表。然而, 您还可以使用将所有或部分数据传输到其他位置 Azure诊断扩展1.5或更高版本。本文介绍了如何操作 将数据从Azure诊断扩展发送到应用程序 的见解。
它的优点在于它完全由Azure管理,您不需要更改项目中的任何内容。
答案 2 :(得分:1)
您可以调整Microsoft Samples中的监视程序服务。监视程序服务是一种通用的独立服务结构状态服务,它将数据记录到Application Insights中。
代码:
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);
}
}
}
那应该是它!它可选择使用Azure存储。我没有必要实现这一点,以使看门狗启动并运行。
以下是链接:https://github.com/Azure-Samples/service-fabric-watchdog-service
答案 3 :(得分:0)
要向Application Insights发送应用程序/服务遥测,强烈建议您查看App Insights Service Fabric。它非常适合:
然而,上述解决方案无法解决的一件事就是提供总体集群运行状况信息-例如节点何时上/下/上运行的频率,各个节点上消耗了多少CPU /内存和磁盘IO。
在Azure中运行时,以上内容应该非常简单,建议您开始here。
在内部进行此操作并不那么简单。为此,您可以尝试使用MS EventFlow或上面已经提到的其他一些解决方案。
我个人最终创建了一个简单/自定义的windows service,该{/ 3}使用标准的App Insights nuget包来报告以下信息: