我将我的 dotnet 核心应用程序设置为使用SeriLog
哪些日志到ElasticSearch Sink
. 在本地运行我的 dotnet 核心应用程序时ElasticSearch
,Kibana
我有两个单独的容器,我可以将应用程序中的内容记录到 Elastic 中,并且还可以在Kibana
.
当我在文件中包含我的 dotnet 核心应用程序时docker-compose.yml
,导航到应用程序所在的端点时,我希望它会记录几条消息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 中提取的吗?
转到appsettings.json
我的 dotnet 核心应用程序中:
{
"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
在容器和我的应用程序中运行时,它可以工作,但当所有三个应用程序都在容器中时,它就不行了。
有什么建议么?