.NET应用中Elastic.Serilog.Sinks配置Serilog至Elasticsearch的问题
.NET中Serilog Elasticsearch接收器配置指南
1. 配置用户名和密码
给Elasticsearch接收器传入认证信息,可通过ConnectionSettings的BasicAuthentication方法实现,支持代码硬编码或配置文件两种方式:
代码配置示例
Log.Logger = new LoggerConfiguration() .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://your-es-host:9200")) { ConnectionSettings = new ConnectionSettings(new Uri("http://your-es-host:9200")) .BasicAuthentication("your-username", "your-password"), // 其他接收器配置项 }) .CreateLogger();
配置文件(appsettings.json)示例
{ "Serilog": { "WriteTo": [ { "Name": "Elasticsearch", "Args": { "nodeUris": "http://your-es-host:9200", "connectionSettings": { "basicAuthentication": "your-username:your-password" } } } ] } }
2. 指定日志索引名
官方示例未提及是因为默认会使用serilog-{yyyy.MM.dd}格式的动态索引,你可以通过IndexFormat属性自定义索引命名规则:
代码配置指定索引
Log.Logger = new LoggerConfiguration() .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://your-es-host:9200")) { IndexFormat = "my-app-logs-{yyyy.MM.dd}", // 自定义按日期滚动的索引名 ConnectionSettings = new ConnectionSettings(new Uri("http://your-es-host:9200")) .BasicAuthentication("user", "pass"), }) .CreateLogger();
配置文件指定索引
{ "Serilog": { "WriteTo": [ { "Name": "Elasticsearch", "Args": { "nodeUris": "http://your-es-host:9200", "indexFormat": "my-app-logs-{yyyy.MM.dd}", "connectionSettings": { "basicAuthentication": "user:pass" } } } ] } }
3. 索引名与数据流名的区别
两者不相同:
- 索引是Elasticsearch存储数据的基础静态单元,需手动管理生命周期(如滚动、删除),适合归档历史数据。
- 数据流是Elasticsearch 7.10+推出的特性,由多个后台索引组成的序列,自动处理索引滚动和生命周期,更适合持续写入的时序数据(如日志)。
如果要写入数据流,无需设置IndexFormat,而是指定DataStreamName,同时需启用API版本头:
Log.Logger = new LoggerConfiguration() .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://your-es-host:9200")) { DataStreamName = "my-app-logs", // 目标数据流名 ConnectionSettings = new ConnectionSettings(new Uri("http://your-es-host:9200")) .BasicAuthentication("user", "pass") .EnableApiVersioningHeader(), // 写入数据流必须启用此配置 }) .CreateLogger();
注意:使用数据流前需确保Elasticsearch已创建对应数据流(可通过索引模板自动生成)。
内容的提问来源于stack exchange,提问作者AjinkyaBhagwat
相关产品推荐
相关产品推荐

