Serilog + serilog-sinks-elasticsearch +ElasticSearch Auth
I struggled to find a good solution for this too. Adding the username/password to the url definitely does work but somehow doesnt feel right.
This worked for me:
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("https://your-deployment.westeurope.azure.elastic-cloud.com:9243")){ ..., ModifyConnectionSettings = x => x.BasicAuthentication("elastic", "your-password"),})
Good question....
You might try supplying them as part of the Elasticsearch server/stack URL.
Example:
.WriteTo.Sink(new ElasticsearchSink(new ElasticsearchSinkOptions(new Uri(url)){ AutoRegisterTemplate = true}
where
url = "https://user:password@stack-server:port"
If you want to stick with your configuration file (appsettings.json), knowing that you can use the argument connectionGlobalHeaders to specify the login/password, because Elasticsearch use Basic Authentication to authenticate the user.
Something like this:
"Serilog": { "WriteTo": [ { "Name": "Elasticsearch", "Args": { "nodeUris": "https://your-uri", "connectionGlobalHeaders": "Authorization=Basic dXNlcm5hbWU6cGFzc3dvcmQ=", "indexFormat": "application-log-{0:yyyy.MM}", "autoRegisterTemplate": true, "autoRegisterTemplateVersion": "ESv7" } } ] }
where the part after "Authorization=Basic" is the Base64 string of your "login:password".