【发布时间】:2019-05-15 13:28:19
【问题描述】:
我的 dotnet 核心应用程序设置为使用 SeriLog,它记录到 ElasticSearch Sink。当使用 ElasticSearch 和 Kibana 在本地运行我的 dotnet 核心应用程序时,我有两个单独的容器,我可以将应用程序中的内容记录到 Elastic 中,并且还可以在 Kibana 中看到这些日志消息。
当我在 docker-compose.yml 文件中包含我的 dotnet 核心应用程序并导航到应用程序所在的端点时,我希望它会向 Elasticsearch 记录几条消息,但事实并非如此。我怀疑我的应用程序在容器化时不了解如何与Elasticsearch 通信。我的docker-compose.yml 看起来像这样:
版本:'3.0'
services:
db:
image: mysql:5.7
environment:
MYSQL_RANDOM_ROOT_PASSWORD: 1
MYSQL_DATABASE: chtr
MYSQL_USER: dbuser
MYSQL_PASSWORD: dbuserpassword
volumes:
- dbdata:/var/lib/mysql
- ./_MySQL_Init_Script:/docker-entrypoint-initdb.d
restart: always
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.2.4
container_name: elasticsearch
ports:
- "9200:9200"
volumes:
- elasticsearch-data:/usr/share/elasticsearch/data
kibana:
image: docker.elastic.co/kibana/kibana:6.2.4
container_name: kibana
ports:
- "5601:5601"
depends_on:
- elasticsearch
chtr.server:
depends_on:
- db
- kibana
image: trebias/chtr.server
build:
context: .
ports:
- "8080:80"
- "56:5601"
volumes:
dbdata:
elasticsearch-data:
chtr.server 是我从 docker hub 拉取的图像。
转到我的 dotnet 核心应用程序中的 appsettings.json:
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Information",
"System": "Information",
"Microsoft": "Information"
}
},
"ElasticConfiguration": {
"Uri": "http://[::]:9200/"
}
}
我在Startup.cs 文件中创建这样的记录器:
var elasticSearch = Configuration["ElasticConfiguration:Uri"];
Log.Logger = new LoggerConfiguration().Enrich.FromLogContext().WriteTo.Elasticsearch(new ElasticsearchSinkOptions(
new Uri(elasticSearch)) { AutoRegisterTemplate = true }).CreateLogger();
就像我在本文开头所说的那样;当我在容器和本地应用程序中运行 Kibana 和 Elasticsearch 时,它可以工作,但当所有三个应用程序都在容器中时,它就不行了。
有什么建议吗?
【问题讨论】:
标签: c# docker elasticsearch asp.net-core .net-core