zoukankan      html  css  js  c++  java
  • Mac下ELK日志中心环境的搭建以及spring boot集成logback与ELK对接

              最近由于的公司业务系统出现问题,而排查问题只能从生产服务器拷贝日志到测试机,然后我们再去测试机上查看生成服务器的日志,排查问题,有时

    由于日志的量太大,生产环境报错了,常常等拷贝完成就要十几分钟,到查到问题就要半小时以上,还好这段时间没有什么人用,要不然早就有人投诉了,所

    以就想升级一下日志系统。  

            于是先调研了ELK,并且是用logback传输json的数据到logstash, 再给elasticsearch处理后,最后统计好交给kibana展示。具体架构图如

             ELK的下载地址  https://www.elastic.co/downloads

        默认本机装好java的环境,查看java的版本,

              下载好了三个安装包,本次安装的ELK的版本都是是6.0.0版本,

             首先,在 logstash-6.0.0 的目录下,新建一个文件名为 logstash.conf,然后写入以下配置:

    input {
       tcp {
        host => "localhost"
        port => 4560
        mode => "server"
        tags => ["tags"]
        codec => json_lines
      }
    }
    
    output {
       elasticsearch {
            hosts => "localhost:9200"
            index => "%{[appname]}"
            user => "elastic"
            password => "@hvL9ni2Eu8^ohv0^gTD"
        }
        stdout{
            codec=>rubydebug
        }
    }

               然后用命令:

     logstash -f logstash.conf 

           启动 logstash, 启动截图如下:

       接下来进入elasticsearch目录,安装安全控制的插件x-pack,通过命令:

       bin/elasticsearch-plugin install x-pack 

             安装完后,输入以下命令:

    bin/x-pack/setup-passwords auto

           会出现如下截图:

           这样生成了三个用户的随机密码,只用elastic的用户是超级用户,这里生成的elastic用户名和密码在logstash里logstash.conf配置文件中user和password,这样logstash才能将数据写入

    到 elasticsearch. 这里注意一下,我之前在网上找到的都是默认用户名是elastic,密码: changeme,总是不对,最后在官网找到的命令,生成的默认的以个密码。

           接下启动elasticsearch, 使用命令: 

    bin/elasticsearch

               接下来安装kibana的x-pack,使用以下命令:

        bin/kibana-plugin install x-pack

             这个过程需要时间长一点。安装完后 ,用vim打开kibana的配置文件,

       vim config/kibana.yml   

            加入以下配置:

    elasticsearch.username: "kibana"
    elasticsearch.password: "#qP6~Q@ow#jzWMgfy3PT"

             接下启动kibana,进入kibana目录后,使用命令 bin/kibana, 启动截图如下

                  完成后,访问本地的 http://localhost:5601  ,进入如下图:              

                

         使用再安装elasticsearch初始化的账号和密码, 就可以登录了。这时候,我们还看不奥日志,因为我使用的 logback 以tcp方式的传送json日志到 logstash. 那么接下来

      在ideal中会创建一个maven工程。本demo是基于spring boot的,首先在pom.xml中添加一下依赖。

    <dependencies>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>net.logstash.logback</groupId>
                <artifactId>logstash-logback-encoder</artifactId>
                <version>4.11</version>
            </dependency>
        </dependencies>

              然后新建的一个配置文件application.yml, 添加一个配置

    logging:
      config: classpath:logback.xml

             再新建一个logback.xml的文件,添加以下配置

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
        <logger name="org.springframework" level="WARN"/>
    
        <logger name="org.hibernate.validator" level="INFO"/>
    
        <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
            <destination>127.0.0.1:4560</destination>
            <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
                <customFields>{"appname":"gateway-service"}</customFields>
            </encoder>
        </appender>
    
        <!-- 彩色日志依赖的渲染类 -->
        <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
        <conversionRule conversionWord="wex"
                        converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
        <conversionRule conversionWord="wEx"
                        converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
        <!-- 彩色日志格式 -->
        <property name="CONSOLE_LOG_PATTERN"
                  value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    
        <!-- 控制台输出  -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>DEBUG</level>
            </filter>
            <encoder>
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
                <charset>utf8</charset>
            </encoder>
        </appender>
        
        <root level="INFO">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="LOGSTASH" />
        </root>
    
    </configuration>

             然后新建一个java启动类Application。

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class LogApplication implements CommandLineRunner{
    
        private final static Logger logger= LoggerFactory.getLogger(LogApplication.class);
    
    
        public static void main(String[] args) {
            SpringApplication.run(LogApplication.class, args);
        }
    
        @Override
        public void run(String... arg0) throws Exception {
            logger.error("=========hello World========");
    
            logger.debug("=========hello World========");
        }
    }

    然后启动该项目后,具体代码也可以直接参考这里的:https://github.com/xjz1842/spring-cloud-learning/tree/master/logback

             然后再返回kibana页面,新建一个index-pattern为gateway-service, 注意:这个是在 logback.xml中配置的 <customFields>{"appname":"gateway-service"}</customFields> 而这个是个变量,要和logstash.conf的配置文件中 index => "%{[appname]}"的key对应, 

             这样就可以看到如下图,

                如果多个系统需要搜集日志,我们只需要改变的logback的配置的文件的 <customFields>{"appname":"gateway-service"}</customFields>里面的gateway-service,改为xxx-service,

    就可以将各个系统的日志分开,如下图点击你要的index-pattern,就可以看到你想要的配置。

              到此,日志系统算是搭建完了,但是还要很多优化的点,比如日志要存储多久,打日志配置成异步的,等等。如果上生产了,有问题再写出来,再交流下。

  • 相关阅读:
    Fiddler 简介
    jQuery 属性操作
    Win7的虚拟Wi-Fi
    接口与内部类
    继承(二)
    J2EE框架(Struts&Hibernate&Spring)的理解
    继承(一)
    对象与类
    控制流程
    数据类型
  • 原文地址:https://www.cnblogs.com/xjz1842/p/8038037.html
Copyright © 2011-2022 走看看