Ведение журнала Elasticsearch с NLog завершается с ошибкой в ​​ASP Net Core API - PullRequest
0 голосов
/ 20 января 2020

Я провел несколько тестов для входа в экземпляр Elasticsearch с использованием NLog в нашем API. Экземпляр Elasticsearch выполняется внутри Docker, если API выполняется с использованием IIS Express, я могу без проблем войти в Elasticsearch и посмотреть на созданный индекс «logsta sh», но если я запустите API внутри контейнера Docker журналы никогда не доходят до 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>

И в моих настройках приложения. json:

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

Возможно, я что-то упускаю или не понимаю взаимодействия между контейнерами.

1 Ответ

0 голосов
/ 28 марта 2020

(1) Ваш вопрос не содержит никаких подробностей о конфигурации двух контейнеров (один работает с вашим приложением, другой работает с Elasticsearch).

У меня есть пример регистрации в Elasticsearch, настроенной с помощью Kibana для просмотреть результаты, хотя он использует другого поставщика регистратора (Essential.LoggerProvider.Elasticsearch), однако у него есть docker -компонентный файл, который показывает соединение между 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, например, командную строку, которую вы используете. un, чтобы запустить их, или docker создать файл, et c. выяснить, почему они не могут видеть друг друга.

(2) Возможно, вы захотите проверить, действительно ли он работает из IIS, поскольку кажется необычным, что NLog создаст индекс "logsta sh - "... обычно Logsta sh создает этот индекс, а NLog должен создавать его собственный, например, log 4net создает индекс" log- ", Essential.LoggerProvider.Elasticsearch использует" do tnet - ", et c .

Отказ от ответственности: я являюсь автором Essential.LoggerProvider.Elasticsearch

...