【问题标题】:Elasticsearch, Kibana, dotnet core and dockerElasticsearch、Kibana、dotnet core 和 docker
【发布时间】:2019-05-15 13:28:19
【问题描述】:

我的 dotnet 核心应用程序设置为使用 SeriLog,它记录到 ElasticSearch Sink。当使用 ElasticSearchKibana 在本地运行我的 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();

就像我在本文开头所说的那样;当我在容器和本地应用程序中运行 KibanaElasticsearch 时,它可以工作,但当所有三个应用程序都在容器中时,它就不行了。

有什么建议吗?

【问题讨论】:

    标签: c# docker elasticsearch asp.net-core .net-core


    【解决方案1】:

    服务在容器下运行,因此您应该使用容器名称来编写日志,如下所示:

    Appsettings.Development.json:

    {
      "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
          "Default": "Information",
          "System": "Information",
          "Microsoft": "Information"
        }
      },
      "ElasticConfiguration": {
        "Uri": "http://elasticsearch:9200/"
      }
    }
    

    您可以在此处找到一个完整示例,展示如何设置 Serilog、Seq、elasticsearch 和 kibana 以在 Docker 容器解决方案下协同工作。

    structure logging with serilog seq and elastic search under docker

    【讨论】:

      猜你喜欢
      • 2022-10-24
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      • 2018-05-09
      相关资源
      最近更新 更多