我正在尝试设置Serilog,以便将日志从ASP.NET Core WebAPI发送到Amazon OpenSearch的本地示例。我在控制台上看到日志,但OpenSearch中没有显示任何内容。
已安装的第三方库:
- 串行接口AspNetCore(6.0.0-开发-00265)
- 系列富集器环境(2.2.1-dev-00787)
- 系列日志.汇.ElasticSearch(9.0.0-beta7)
OpenSearch通过Development Docker Compose运行(无安全插件):
https://opensearch.org/docs/2.0/opensearch/install/docker/#sample-docker-compose-file-for-development
Program.cs
var logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200"))
{
AutoRegisterTemplate = true,
MinimumLogEventLevel = LogEventLevel.Information,
FailureCallback = FailureCallback,
EmitEventFailure = EmitEventFailureHandling.RaiseCallback | EmitEventFailureHandling.ThrowException
})
.CreateLogger();
builder.Logging.ClearProviders();
builder.Logging.AddSerilog(logger);
控制器类别:
_logger.LogWarning("Example warning");
_logger.LogError("Example error");
FailureCallback
为空OpenSearch控制台未显示任何问题
可能出了什么问题?
2条答案
按热度按时间lb3vh1jj1#
我已经尝试了您的设置,下面是一些结果(注意仅使用稳定版本的软件):
使用的停靠合成:
Program.cs
有几件事应该有助于故障排除
Serilog.Debugging.SelfLog.Enable(msg => Console.WriteLine(msg));
-将显示来自Serilog的真实的错误(很可能会看到SSL)ServicePointManager.ServerCertificateValidationCallback = (source, certificate, chain, sslPolicyErrors) => true;
-暂时停止任何SSL问题(您可以稍后修复它们)1.我发现的下一件事是Serilog生成的[_type]字段的问题,它不被Elastic〉v8.2接受,这很可能是因为您的缓冲区保留了旧记录。
1.虽然Serilog的最新测试版采用了TypeName="_doc”,但AWS Opensearch 2.0.1在“compatibility.override_main_response_version=true”设置(请参阅此处的详细信息)https://github.com/opensearch-project/OpenSearch/pull/3530方面存在另一个漏洞-基本上,我建议将AWS OpenSearch回滚到v2。
之后,希望它应该工作:)
n1bvdmb62#
对我来说,问题是我没有提供IndexFormat属性的值(在
ElasticSearchSinkOptions
对象中)。我把它放在端点中,就像通过REST插入数据时应该做的那样。总而言之,下面的代码为我解决了这个问题:当然,您还需要正确地设置OpenSearch,以便它可以自动将策略应用到您的索引等。