我假設這是一個很常見的問題,我們如何輕鬆地將Server信息添加到EventFlow事件?EventFlow - 創建自定義過濾器以附加源服務器信息
我的場景是我正在部署一個應用程序,該應用程序將具有自己的環境特定的EventFlowConfig.json,但服務器場中的每個服務器都將獲得相同的json文件。那麼......我如何知道服務器場中的哪臺服務器將事件發送給ElasticSearch?
一個選擇是使用.net獲取服務器名稱並將其作爲列發送,這需要我將服務器名稱添加到每個事件中。這似乎有點過分,但它會完成這項工作。我希望除了必須將其編碼成事件之外,還有一種更簡單的方法。
感謝您的時間, 格雷格
編輯4 - 卡羅爾得到了很大的幫助我得到這個工作,例如建立和運行,謝謝!KAROL嘗試添加創建自定義過濾器作爲擴展:
- 我們需要創建一個新的類自定義過濾器工廠
- 然後,我們需要創建一個第二個新的類,並把它落實的IFilter接口。爲了從工廠傳遞健康監視器,我們使用了一個構造函數。
- 使用評估功能爲我們的區域添加
然後參考定製過濾器在我們EventFlowConfig.json的擴展區域中的數據(eventData.AddPayloadProperty)。
a。該類別是過濾器工廠b。該類型是你班級的名字。
c。例如(假設您將過濾器工廠命名爲「MyCustomFilterFactory」):「My.Application.Logging.MyCustomFilterFactory,My.Application.Assembly.WhereCustomFilterAndItsFactoreLive」
添加一個引用到Microsoft.Extensions.Configuration所在的C#代碼的生活。
然後,你可以參考你的自定義過濾器你需要的地方,在這裏我們使用的是全局過濾
工作例如:
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"
}
感謝, 格雷格
只是一個註釋,你的EventFlow配置工作示例顯示不正確的QualifiedTypeName。它應該是: 「qualifiedTypeName」:「My.Company.Presentation.App.CustomGlobalFilter ** Factory **,My.Company.Presentation.App」 – James