logging - 应用日志.NET Core和Docker

标签 logging docker logstash .net-core-rc2

我试图将一组以.net-core编写并在docker中运行的服务放在一起。我正在寻找对潜在生产系统至关重要的各个方面。目前,我正在查看日志记录,并遇到了这篇文章:Automating Docker Logging: ElasticSearch, Logstash, Kibana, and Logspout

这可以正常工作,并可以从Windows计算机上的容器内部运行的Web api监视系统和容器的 Activity ,但是我找不到任何有关如何记录应用程序信息的指南,因此与该应用程序的使用方法相同。容器日志是(例如,记录内部异常)。

在Windows世界中,我将Log4Net与滚动文件附加程序一起使用,并在app.config中定义了日志位置。我也希望它在Docker容器中也一样容易(请记住,在我当前的设置中,logsprout会将容器日志发送到logstash),但是如果是这样,我不知道要定义哪个位置。

所以我有两个问题要解决:

  • 将输出记录到容器
  • 的默认日志目录中
  • 发现用于logstash集成的最佳格式

  • 有人对此有见识吗?

    最佳答案

    如果您希望.NET Core应用程序将日志写入Elasticsearch,并可以通过Kibana进行查询,则可以将记录器提供程序添加到标准Microsoft.Extensions.Logging中。

    log4net有一个接收器,如果您最熟悉它,它会写入Elasticsearch,现在还有一个独立的记录器提供程序,它将按照Elasticsearch通用模式(ECS)字段规范https://github.com/sgryphon/essential-logging/tree/master/src/Essential.LoggerProvider.Elasticsearch直接将.NET Core日志记录写入Elasticsearch。

    免责声明:我是Essential.LoggerProvider.Elasticsearch的作者

    要在您的.NET Core应用程序中使用它,请添加对Essential.LoggerProvider.Elasticsearch包的引用:

    dotnet add package Essential.LoggerProvider.Elasticsearch
    

    然后,使用提供的扩展方法在主机构建过程中将提供程序添加到loggingBuilder中。
    using Essential.LoggerProvider;
    // ...
        .ConfigureLogging((hostContext, loggingBuilder) =>
        {
            loggingBuilder.AddElasticsearch();
        })
    

    默认配置将写入运行在http://localhost:9200/的本地Elasticsearch。您可以在appsettings.json中将此配置更改为运行Elasticsearch的位置:
    {
      "Logging": {
        "Elasticsearch": {
          "NodeUris": [ "https://elastic-staging.example.com:9200" ],
          "Tags": [ "Staging" ]
        }
      }
    }
    

    发送一些日志事件后,请打开Kibana(例如http://localhost:5601/),并使用时间过滤器“@timestamp”为“dotnet- *”定义一个索引模式。

    日志事件是根据Elasticsearch通用架构(ECS)约定编写的,因此应与从其他来源(例如节拍。

    关于logging - 应用日志.NET Core和Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39487740/

    相关文章:

    python - 如何使用 Python 日志库写入 CSV?

    logging - 如何在 Laravel 中注册 ServiceProvide 时记录消息?

    elasticsearch - 从浏览器执行时,kibana安装错误

    mysql - Logstash:无法使用logstash 连接mysql?

    elasticsearch - Filebeat 多行过滤器不起作用?

    database - 如何读取 Apache Derby 数据库日志?

    java - 有没有办法使用Log4j2中的RoutingAppender基于Marker路由日志

    python - 在dockerfile中安装mysql?

    linux - Ubuntu 16.04 : Error "Could not connect to archive.ubuntu.com:80 (91.189.88.152)" while running "apt-get update " command in a dockerfile

    docker - 无法通过网络访问带有--net = host的Docker容器