elasticsearch - 调整 SeriLog 中的 ElasticsearchSinkOptions.NumberOfShards 在 .Net 核心中不起作用
问题描述
我在通过 SeriLog 写入日志时为 ElasticSearch 设置 NumberOfShards 时遇到问题。我在 .Net Core 中像这样为 Serilog 进行配置
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(config.ElasticConnectionUrl))
{
AutoRegisterTemplate = true,
IndexFormat = config.ElasticIndex + "-{0:yyyy.MM.dd}",
NumberOfShards = 2,
NumberOfReplicas = 0
}));
但是当我在 Kibana 中查询创建的 Index 的设置时,numberOfShards 仍然是 5(默认值)。即使对于 NumberOfReplicas 也不会影响。
我正在使用 ELK 堆栈来跟踪日志。
有人知道为什么吗?
解决方案
您可以在代码中或 appSettings.json 配置中进行 Serilog 配置。如果你这样做:
var loggerConfiguration = new LoggerConfiguration()
.ReadFrom.Configuration(configuration) // <= this reads from config
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(config.ElasticConnectionUrl))
{
AutoRegisterTemplate = true,
IndexFormat = config.ElasticIndex + "-{0:yyyy.MM.dd}",
NumberOfShards = 2,
NumberOfReplicas = 0
})); // this gets partially ignored
你有以下配置文件:
"Serilog": {
"MinimumLevel": "Debug",
"WriteTo": [
{
"Name": "Elasticsearch",
"Args": {
"nodeUris": "http://localhost:9100"
}
}
]
}
如果您在 JSON 文件中将索引格式留空,那么您可能会有一个名为“log-stash-{0:YYYY-MM-DD}”的索引,但您也将拥有一个在代码中添加。URI 也是如此。如果您在 JSON 接收器WriteTo
和ElasticsearchSinkOptions
in 代码中添加了一个,则可能有两个。
配置为 JSON 或代码。选择一个(遗憾)。有关更多信息,请参见:https ://github.com/serilog/serilog-sinks-elasticsearch/issues/180
我一直在寻找一种方法来在代码中进行默认配置,这可能会被配置文件覆盖,因为我正在尝试为我们公司的各种 API 创建一个通用的固执己见的 IHostBuilder,但 Serilog 运行良好。我的解决方案是将Sinks配置移出Serilog配置部分,并单独定义,然后自己加载(格式相同-字符串名称,Args Dictionary<string,string>),然后手动创建配置代码。
推荐阅读
- javascript - JavaScript:计算机猜我的数字游戏,不能重复猜错的数字
- python - 尽管满足条件但未调用函数(即字符串值符合预期)
- recursion - 递归 - 打印 uniq 子组
- sql - 选择昨天的日期时间和今天的日期和时间之间的所有行
- r - 数据框名称作为R中的变量
- r - R - 我可以使用种子在我停止的地方继续生成更多数字吗?
- spring - 使用 Spring Data JDBC 和 CrudRepository 接口的多个数据源
- python - Kivy - 如何获取 TextInput 的内容
- javascript - 计数复选框:选中
- mongodb - MongoDB聚合 - 如何生成两个唯一的随机数?