Tengo mi aplicación dotnet core configurada para usar SeriLog que inicia sesión en un ElasticSearch Sink . Cuando ejecuto mi aplicación dotnet core localmente con ElasticSearch y Kibana , tengo dos contenedores separados, puedo registrar cosas de mi aplicación en Elastic y también puedo ver estos mensajes de registro en Kibana .
Cuando incluyo mi aplicación dotnet core en el archivo docker-compose.yml hasta el punto final donde se encuentra la aplicación, espero que registre varios mensajes en Elasticsearch , pero no lo hace. Sospecho que mi aplicación no entiende cómo comunicarse con Elasticsearch cuando está en contenedores. Mi docker-compose.yml se ve así:
versión: '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 es mi imagen que se extrae de mi centro acoplable.
A appsettings.json dentro de mi aplicación dotnet core:
{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Information", "System": "Information", "Microsoft": "Information" } }, "ElasticConfiguration": { "Uri": "http://[::]:9200/" } } Donde creo el registrador como este en mi archivo Startup.cs :
var elasticSearch = Configuration["ElasticConfiguration:Uri"]; Log.Logger = new LoggerConfiguration().Enrich.FromLogContext().WriteTo.Elasticsearch(new ElasticsearchSinkOptions( new Uri(elasticSearch)) { AutoRegisterTemplate = true }).CreateLogger(); Como dije al principio de este post; Funciona cuando ejecuto Kibana y Elasticsearch en contenedores y mi aplicación localmente, pero no cuando las tres aplicaciones están en contenedores.
¿Alguna sugerencia?
El servicio se ejecuta en un contenedor, por eso debe escribir su registro usando el nombre del contenedor como se muestra a continuación:
Configuración de aplicaciones.Desarrollo.json:
{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Information", "System": "Information", "Microsoft": "Information" } }, "ElasticConfiguration": { "Uri": "http://elasticsearch:9200/" } }Puede encontrar aquí un ejemplo completo que muestra cómo configurar Serilog, Seq, elasticsearch y kibana para trabajar juntos en la solución de contenedores Docker.
registro de estructura con serilog seq y búsqueda elástica en docker