首页 > 解决方案 > Serilog + ElasticSearch 接收器连接问题(.net 核心)

问题描述

我已经将 Serilog 写入滚动文件,并开始实现与基于 Docker 的 ElasticSearch 实例的连接。但是,我遇到了连接问题。

首先,我的应用程序在本地运行,有两个重要的收获:

但是,当我查看 的输出时Serilog.Debugging.SelfLog.Enable(msg => Debug.WriteLine(msg));,我发现 Elastic 存在某种连接问题:

在对 Elasticsearch 执行批量操作时捕获异常:Elasticsearch.Net.ElasticsearchClientException:重试请求时达到最大超时

调试输出

我的 appsettings.json(是的,我通过 json 而不是代码进行配置):

"Serilog": {
    "Using": ["Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.ElasticSearch"],
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "Enrich": ["FromLogContext", "WithExceptionDetails"],
    "WriteTo": [
      { "Name": "Console" },
      { "Name": "Debug" },
      {
        "Name": "File",
        "Args": {
          "path": "%LogDir%\\someserverpath.xyz.com\\log-.txt",
          "rollingInterval": "Day",
          "shared": true
        }
      },
      {
        "Name":  "Elasticsearch",
        "Args": {
          "nodeUris": "http://sxdockertst1:9200",
          "indexFormat": "imaging4cast-index-{0:yyyy.MM}",
          "emitEventFailure": "WriteToSelfLog",
          "autoRegisterTemplate": true
        } 
      }
    ],
    "Properties": {
      "Application":  "xyz.yyy.Imaging4CastApi" 
    } 
  },

我觉得它正在建立基本的联系,否则,索引将如何创建?弹性服务器上也没有身份验证。但实际上推送日志消息似乎不起作用......

我在这里不知所措...

标签: c#elasticsearchlogging.net-coreserilog

解决方案


好的,所以我想通了。

它没有发布消息的原因是硬盘驱动器(从技术上讲,var在 docker 主机上)已满。我不得不清理var.

然后,我需要运行这个命令来让 Elastic 退出只读模式(我很快遇到了一个问题,我无法在 Kibana 中为仪表板创建索引,这是因为 Elastic 进入了 RO 模式):

curl -XPUT -H "Content-Type: application/json" http://sxdockertst1:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'

推荐阅读