zoukankan      html  css  js  c++  java
  • .netcore3.1使用ELK日志中心(使用NLog数据传输)

    1、ELK部署

    ELK是elasticsearch、kibana、Logstash组合而成的整套解决方案,前面我们使用skywalking时候已经部署好elasticsearch(参见上一篇随笔),接下来只需要安装Logstash和kibana即可

    1.1、安装kibana

    前面使用的elasticsearch是7.5.0版本,这里kibana选择相同版本:

     运行:

    docker run -d --restart=always --name kibana -e ELASTICSEARCH_URL=http://192.168.56.10:9200 -p 5601:5601 kibana:7.5.0

    浏览器访问:

    进入容器查看配置文件:

    docker exec -it kibana /bin/bash

    将配置文件中的http://elasticsearch:9200改为http://192.168.56.10:9200

    重启容器: 

    docker restart  kibana

    还是出现问题则稍等1分钟,重试,页面正常加载:

    1.2、安装Logstash

    同样选择7.5.0版本:

    sudo docker pull logstash:7.5.0

    1.2.1、启动

    docker run -d --name=logstash -p 5044:5044 logstash:7.5.0

    查看日志:

    docker logs -f logstash

    进入容器

    docker exec -it logstash /bin/bash

    修改配置文件:

    vi config/logstash.yml
    http.host: "0.0.0.0"
    xpack.monitoring.elasticsearch.hosts: [ "http://192.168.56.10:9200" ]
    View Code
    vi pipeline/logstash.conf
    input {
      tcp {
        port => 5044
      }
    }
    
    filter {
      grok {
        match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
      }
    }
    
    output {
      elasticsearch {
        hosts => "192.168.56.10:9200"
        index => "sample"
      }
      stdout {
        codec => rubydebug
      }
    }
    View Code

    重启:

    docker restart logstash

    2、NetCore 使用 ELK

    2.1、添加NLog、NLog.Web.AspNetCore nuget包

    2.2、根目录添加配置文件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"
          autoReload="true"
          internalLogLevel="Warn"
          internalLogFile="internal-nlog.txt">
    
        <extensions>
            <!--enable NLog.Web for ASP.NET Core-->
            <add assembly="NLog.Web.AspNetCore"/>
        </extensions>
    
        <!-- define various log targets -->
        <!--定义日志文件目录-->
        <variable name="logDirectory" value="${basedir}/logs/${shortdate}"/>
        <variable name="nodeName" value="node1"/>
    
        <targets async="true">
            <!-- 全部日志target -->
            <target xsi:type="File"
                    name="allfile"
                    fileName="${logDirectory}/nlog-all/${shortdate}.log"
                    layout="#node1#${longdate}#${logger}#${uppercase:${level}}#${callsite}#${callsite-linenumber}#${aspnet-request-url}#${aspnet-request-method}#${aspnet-mvc-controller}#${aspnet-mvc-action}#${message}#${exception:format=ToString}#"
                    keepFileOpen="false"
                />
    
            <!-- 本地文件日志target -->
            <target xsi:type="File"
                    name="ownLog-file"
                    fileName="${logDirectory}/nlog-${level}/${shortdate}.log"
                    layout="#${longdate}#${nodeName}#${logger}#${uppercase:${level}}#${callsite}#${callsite-linenumber}#${aspnet-request-url}#${aspnet-request-method}#${aspnet-mvc-controller}#${aspnet-mvc-action}#${message}#${exception:format=ToString}#"
                    keepFileOpen="false"
                />
    
            <!-- Tcp日志target -->
            <target xsi:type="Network"
                    name="ownLog-tcp"
                    keepConnection="false"
                    address ="tcp://192.168.56.10:5044"
                    layout="#${longdate}#${nodeName}#${logger}#${uppercase:${level}}#${callsite}#${callsite-linenumber}#${aspnet-request-url}#${aspnet-request-method}#${aspnet-mvc-controller}#${aspnet-mvc-action}#${message}#${exception:format=ToString}#"
                />
            <!--grok 规则-->
            <!--%#{DATA:request_time}#%{DATA:node_name}#%{DATA:class_name}#%{DATA:log_level}#%{DATA:call_site}#%{DATA:line_number}#%{DATA:request_url}#%{DATA:request_method}#%{DATA:container_name}#%{DATA:action_name}#%{DATA:log_info}#%{DATA:exception_msg}#-->
            <!--空白-->
            <target xsi:type="Null" name="blackhole" />
        </targets>
    
        <!--日志级别 Trace -》Debug-》 Info -》Warn-》 Error-》 Fatal-->
        <!--日志规则-->
        <rules>
            <!--全部日志, 包括Microsoft日志-->
            <logger name="*" minlevel="Trace" writeTo="allfile" />
    
            <!--自定义日志,排除Microsoft日志-->
            <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
            <logger name="*" minlevel="Debug" writeTo="ownLog-file" />
            <logger name="*" minlevel="Info" writeTo="ownLog-tcp" />
        </rules>
    </nlog>
    View Code

    2.3、修改Program

    在最后增加配置

    ConfigureLogging(logging =>
    {
        logging.ClearProviders();
        logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
    }).UseNLog();

    2.4、修改Startup

    var currentClassLogger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
    services.AddSingleton(currentClassLogger);

    2.5、写入测试(接口必须访问几遍,不然下面Kibana面板上无数据)

    public class HealthCheckController : ControllerBase
        {
            private readonly ILogger<HealthCheckController> _logger;
    
            public HealthCheckController(ILogger<HealthCheckController> logger)
            {
                _logger = logger;
            }
    
            [HttpGet]
            public IActionResult GetHealthCheck()
            {
                _logger.LogInformation("这是一条测试消息Information");
    
                _logger.LogError("这是一条测试消息Erro");
    
                _logger.LogDebug("这是一条测试消息Debug");
    
                return Ok("连接正常");
            }
        }
    View Code

    3、Kibana查看数据

    先看结果:

    3.1、首先创建索引模板:

    Logstatsh配置文件logstash.conf中配置的output属性:

    Index patterns这里同样输入sample*

     

    其他输入项目前还没搞清楚是干嘛的,反正是可选项,直接下一步,完成创建即可。

    3.2、根据索引模板查看数据

    首页即会提示创建,或者点击最左上角图标到主页,再点击

     配置页,输入sample*,直接下一步即可(全部按默认创建,显示所有字段即可)

    3.3、点击Discover

    可以看到上面写入的日志记录了

    到这里,基本的日志写入和呈现就完成了。

    参考:

    https://blog.csdn.net/xiaozm1223/article/details/89475003

    https://www.cnblogs.com/chongyao/p/14098197.html

    https://www.cnblogs.com/Leo_wl/p/11796634.html

  • 相关阅读:
    sql server 2008 express 安装的时提示“重启计算机失败"
    100个MySQL 的调节和优化的提示
    C#访问MySQL数据库的方法
    应用程序默认安装在C盘后启动时提示权限不足想起的。。。
    Visual Studio开发工具升级注意事项
    WPF:理解ContentControl——动态添加控件和查找控件
    django报错:django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
    不错的后台模板
    allure官方文档
    Python requests.post方法中data与json参数区别
  • 原文地址:https://www.cnblogs.com/wanggang2016/p/14121095.html
Copyright © 2011-2022 走看看