我进行了一些测试,以使用我们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",
也许我错过了一些东西,或者我不了解容器之间的交互。
答案 0 :(得分:0)
(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的作者