【问题标题】:Elasticsearch logging with NLog fails in ASP Net Core API在 ASP Net Core API 中使用 NLog 进行 Elasticsearch 日志记录失败
【发布时间】:2020-01-20 20:37:53
【问题描述】:

我在我们的 API 中使用 NLog 进行了一些测试以登录到 Elasticsearch 实例。 Elasticsearch 实例在 Docker 中运行,如果使用 IIS Express 执行 API,我可以毫无问题地登录 Elasticsearch,并且可以查看创建的“logstash”索引,但如果我在 Docker 容器中运行 API,则日志永远不会到达 Elasticsearch 并且永远不会创建索引。

我的 NLog 配置:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      throwConfigExceptions="true"
      internalLogLevel="info"
      internalLogFile="c:\temp\internal-nlog-AspNetCore3.txt">

  <extensions>
    <add assembly="NLog.Targets.ElasticSearch"/>
  </extensions>

  <targets>
    <target name="ElasticSearch" xsi:type="BufferingWrapper" flushTimeout="5000">
      <target xsi:type="ElasticSearch"/>
    </target>
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="ElasticSearch" />
    <logger name="Microsoft.*" maxlevel="Info" final="true" />
  </rules>
</nlog>

在我的 appsettings.json 中:

"ElasticsearchUrl": "http://192.168.0.9:9200",

也许我遗漏了什么,或者我不了解容器之间的交互。

【问题讨论】:

标签: api docker elasticsearch asp.net-core nlog


【解决方案1】:

(1) 您的问题没有提供有关两个容器配置的任何详细信息(一个运行您的应用程序,一个运行 Elasticsearch)。

我有一个示例记录到 Elasticsearch,配置了 Kibana 以查看结果,尽管它使用不同的记录器提供程序 (Essential.LoggerProvider.Elasticsearch),但是它有一个 docker-compose 文件显示 Elasticsearch 和 Kibana 之间的连接, https://github.com/sgryphon/essential-logging/tree/master/examples/HelloElasticsearch

# Docker Compose file for E-K stack
# Run with:
# docker-compose up -d

version: '3.7'

services:

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.6.1
    ...
    networks:
      - elastic-network

  kibana:
    image: docker.elastic.co/kibana/kibana-oss:7.6.1
    ...
    environment:
      ELASTICSEARCH_URL: http://elasticsearch:9200
    networks:
      - elastic-network

networks:
  elastic-network:
    driver: bridge

相关部分显示在两台docker机器之间建立网桥,然后它们之间的连接。

虽然“http://192.168.0.9:9200”可能是从外部(您的 IIS)到 Elasticsearch 的正确连接,但您必须检查它是否是您的 API docker 看到 Elasticsearch 机器的方式,例如Kibana 如何在上面的示例中看到 Elasticsearch 是“http://elasticsearch:9200

您需要使用 docker 配置的详细信息更新问题,例如你运行的命令行来启动它们,或者一个 docker compose 文件等来找出它们为什么看不到对方。

(2) 您可能想检查它是否真的在 IIS 上工作,因为 NLog 会创建索引“logstash-”似乎不寻常......通常 Logstash 会创建该索引,而 NLog 应该创建它自己的索引,例如log4net 创建索引“log-”,Essential.LoggerProvider.Elasticsearch 使用“dotnet-”等

免责声明:我是 Essential.LoggerProvider.Elasticsearch 的作者

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多