我认为这是一个非常常见的问题,我们如何轻松地将服务器信息添加到EventFlow事件中?
我的方案是我正在部署一个具有自己特定于环境的EventFlowConfig.json的应用程序,但是服务器场中的每个服务器都将获得相同的json文件。那么......如何判断服务器场中的哪个服务器将事件发送给ElasticSearch?
一种选择是使用.net获取servername并将其作为列发送,这需要我为每个事件添加服务器名称。这似乎有点过分,但它会完成这项工作。我希望有一个更简单的方法,除了必须实际编码到一个事件。
谢谢你的时间, 格雷格
编辑4 - Karol一直很好帮助我让这个工作实例启动并运行,谢谢KAROL!尝试添加创建自定义过滤器作为扩展程序:
然后参考EventFlowConfig.json的扩展区域中的自定义过滤器 一个。该类别是filterFactory
湾类型是您的类的名称。
℃。限定类型名称位于“type-name,assembly-name”中。例如(假设您将过滤器工厂命名为“MyCustomFilterFactory”):“My.Application.Logging.MyCustomFilterFactory,My.Application.Assembly.WhereCustomFilterAndItsFactoreLive”
添加对C#代码所在的Microsoft.Extensions.Configuration的引用。
然后您可以在任何需要的地方引用自定义过滤器,这里我们使用全局过滤器
工作示例:
class CustomGlobalFilter : IFilter
{
private IHealthReporter HealthReporter;
private string MachineName;
public CustomGlobalFilter(string ServerName, IHealthReporter HealthReporter)
{
MachineName = ServerName;
this.HealthReporter = HealthReporter;
}
FilterResult IFilter.Evaluate(EventData eventData)
{
eventData.AddPayloadProperty("ServerName", MachineName, HealthReporter, "CustomGlobalFilter");
return FilterResult.KeepEvent;
}
}
class CustomGlobalFilterFactory : IPipelineItemFactory<CustomGlobalFilter>
{
public CustomGlobalFilter CreateItem(IConfiguration configuration, IHealthReporter healthReporter)
{
CustomGlobalFilter GlobalFilter = new CustomGlobalFilter(System.Environment.MachineName, healthReporter);
return GlobalFilter;
}
}
然后在EventFlow配置中:
"filters": [
{
"type": "drop",
"include": "Level == Verbose"
},
{
"type": "CustomGlobalFilter"
}
],
...
"extensions": [
{
"category": "filterFactory",
"type": "CustomGlobalFilter",
"qualifiedTypeName": "My.Company.Presentation.App.CustomGlobalFilter, My.Company.Presentation.App"
}
答案 0 :(得分:2)
今天不是内置在EventFlow中的东西,但至少有几个选项: