Serilog + serilog-sinks-elasticsearch + ElasticSearch Auth

时间:2016-09-05 21:12:10

标签: .net logging elasticsearch serilog

我远没有成为具有任何.net经验的Dev,但是工作中的开发团队希望使用Serilog和serilog-sinks-elasticsearch将日志推送到我的ELK堆栈中。

查看serilog-sinks-elasticsearch的配置,似乎没有任何方式可以发送要求写入ElasticSearch集群的信誉。

这只是一个愚蠢的操作人员问题还是我错过了某个地方的配置?

谢谢

3 个答案:

答案 0 :(得分:5)

我也在努力寻找一个好的解决方案。将用户名/密码添加到url确实可以,但是感觉不正确。

这对我有用:

.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("https://your-deployment.westeurope.azure.elastic-cloud.com:9243"))
{
  ...,
  ModifyConnectionSettings = x => x.BasicAuthentication("elastic", "your-password"),
})

答案 1 :(得分:2)

好问题....

您可以尝试将它们作为Elasticsearch服务器/堆栈URL的一部分提供。

示例:

.WriteTo.Sink(new ElasticsearchSink(new ElasticsearchSinkOptions(new Uri(url))
{
    AutoRegisterTemplate = true
}

其中

url = "https://user:password@stack-server:port"

答案 2 :(得分:0)

如果你想坚持你的配置文件 (appsettings.json),知道你可以使用参数 connectionGlobalHeaders 来指定登录名/密码,因为 Elasticsearch 使用基本身份验证来验证用户。

像这样:

"Serilog": {
    "WriteTo": [
      {
        "Name": "Elasticsearch",
        "Args": {
          "nodeUris": "https://your-uri",
          "connectionGlobalHeaders": "Authorization=Basic dXNlcm5hbWU6cGFzc3dvcmQ=",
          "indexFormat": "application-log-{0:yyyy.MM}",
          "autoRegisterTemplate": true,
          "autoRegisterTemplateVersion": "ESv7"
        }
      }
    ]
  }

其中“Authorization=Basic”之后的部分是“登录:密码”的 Base64 字符串。