zoukankan      html  css  js  c++  java
  • 【Docker】.Net Core 结合Nlog集成ELK框架(Elasticsearch , Logstash, Kibana) (五)

    之前有项目有用过ELK做过日志架构,不过是非docker形式安装的,今天来探究一下ELK的容器化技术

    Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

    Logstash 是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用。

    kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

    NLog 一个普普通通的.Net日志记录框架,类似log4net的作用。

    一、Docker 安装 Elasticsearch

    # 下载镜像 
    docker pull elasticsearch:7.1.1

    # 创建容器
    docker run -d --name elasticsearch -v "/home/es":/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 elasticsearch:7.1.1

    容器启动以后验证一下,发现容器启动失败,错误Exited(137)

     于是查看一下此docker的log日志,排查问题

    提示是JDK版本不够高,但是经过网上搜索答案后,发现真实原因其实是服务器内存不够,导致没有创建成功

    如果用的不是docker,直接打开/usr/local/es_cluster/node03/config/jvm.options 修改配置文件中的 -Xms 内存大小

    docker可以使用 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" 参数

    # 创建容器
    docker run -d -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" --name elasticsearch -v "/home/es":/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 elasticsearch:7.10.1

    查看是否正在运行

     最后发现此es容器运行半分钟后就自动关闭了,查看各种原因,发现es开启之后,服务器的CPU使用率一直在100%,

     此服务器是1核2G,最后借用了公司的服务器继续完成以上步骤。

    二、Docker 安装 Kibana 

    安装镜像

    docker pull kibana:7.10.1

    创建容器

    docker run -d --name kibana -e ELASTICSEARCH_URL=http://localhost:9200 -p 5601:5601 kibana:7.10.1

    查看容器运行状态

    访问http://120.24.145.210:5601/ 出现以下图示,表示运行成功

     

    三、Docker 安装 :Logstash 

    安装镜像

    docker pull logstash:7.10.1

    将文件挂载在宿主机/home/logstash下,创建相关文件夹

    /home/logstash 目录下创建配置文件:logstash.yml 

    path.config: /homne/logstash/conf.d/*.conf
    path.logs: /var/log/logstash

    /home/logstash/conf.d 目录下创建启动文件:test.conf

    input {
        tcp {
            port => 4560
            mode => "server"
            tags => ["tags"]
            codec => json_lines
        }
    }
    output {
        elasticsearch {
            hosts => "{服务器地址}:9200"
            index => "boot-demo-%{+YYYY.MM.dd}"
        }
    }

    启动Logstash,挂载目录

    docker run -it -d --name=logstash -p 9600:9600 -p 4560:4560 
    -v /home/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml
    -v /home/logstash/conf.d/conf.d/:/usr/share/logstash/conf.d/ logstash:7.10.1

    查看容器,正常启动。

    四、.Net Core项目中引用Nlog 

    添加Nuget 包 NLog.Web.AspNetCore和NLog.Targets.ElasticSearch

     新增nlog.config配置文件,并设置属性生成操作为内容,复制到输出目录为始终复制,内容如下。

    <?xml version="1.0" encoding="utf-8" ?>
    <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          internalLogToConsole="true">
      <extensions>
        <add assembly="NLog.Targets.ElasticSearch"/>
      </extensions>
    
      <targets>
        <!--ElasticSearch保存日志信息-->
        <target name="ElasticSearch" xsi:type="ElasticSearch" ConnectionStringName="ElasticSearchServerAddress"  
                index="userapi-${date:format=yyyy.MM.dd}" documentType="doc" includeAllProperties="true"
                     layout="[${date:format=yyyy-MM-dd HH:mm:ss}][${level}] ${logger} ${message} ${exception:format=toString}">
          <field name="MachineName" layout="${machinename}" />
          <field name="Time" layout="${longdate}" />
          <field name="level" layout="${level:uppercase=true}" />
          <field name="logger" layout=" ${logger}" />
          <field name="message" layout=" ${message}" />
          <field name="exception" layout=" ${exception:format=toString}" />
          <field name="processid" layout=" ${processid}" />
          <field name="threadname" layout=" ${threadname}" />
          <field name="stacktrace" layout=" ${stacktrace}" />
          <field name="Properties" layout="${machinename} ${longdate} ${level:uppercase=true} ${logger} ${message} ${exception}|${processid}|${stacktrace}|${threadname}" />
        </target>
      </targets>
      <rules>
        <logger name="*" minlevel="INFO" writeTo="ElasticSearch" />
      </rules>
    </nlog>

       修改appsettings.json

    "ConnectionStrings": {
        "ElasticSearchServerAddress": "http://{服务器地址}:9200"
    }

    修改Program.cs文件

    public class Program
        {
            public static void Main(string[] args)
            {
                NLogBuilder.ConfigureNLog("nlog.config");
                CreateHostBuilder(args).Build().Run();
            }
    
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>().UseUrls("http://*:8001;").UseNLog();
                    });
        }

    修改Startup.cs文件:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
       loggerFactory.AddNLog();
    }

     注入nlog对象进行测试

     去kinaba里查看结果

  • 相关阅读:
    Photoshop色阶、曲线命令图解和编程实现(附源码)
    苹果Mac OS X快捷键大全
    lucene Field部分参数设置含义
    图片管理下载逻辑
    Lucene.Net无障碍学习和使用:索引篇 (转)
    Firebug 调试器开发中的12个技巧
    Lucene.Net 多线程操作建议(转)
    如何在ASP.NET中下载文件
    Lucene.Net 2.3.1开发介绍 —— 简介 (转)
    JS打开图片另存为对话框 (转)
  • 原文地址:https://www.cnblogs.com/simawenbo/p/14574511.html
Copyright © 2011-2022 走看看