美文网首页Spring-Boot
Spring Boot 集成 ELK + logback 实现日

Spring Boot 集成 ELK + logback 实现日

作者: 老亚瑟程序猿 | 来源:发表于2019-08-09 13:47 被阅读31次

    ELK简介

    ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。

    Elasticsearch:是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

    Logstash:主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

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

    环境

    1、jdk8

    2、elasticsearch-6.4.2.tar.gz 地址:https://www.elastic.co/downloads/elasticsearch

    3、logstash-6.4.2.tar.gz 地址:https://www.elastic.co/downloads/logstash

    4、kibana-6.4.2-linux-x86_64.tar.gz 地址:https://www.elastic.co/downloads/kibana

    一、部署+配置ELK

    安装 jdk

    linux 如何安装 jdk1.8 可参照其他网友贡献的文档 https://blog.csdn.net/qq250782929/article/details/51603276

    配置 jdk 环境变量

    export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_31 
    export JRE_HOME=${JAVA_HOME}/jre 
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH 
    

    source /etc/profile 配置环境变量升效

    安装 elasticsearch

    elasticsearch 不能用root账户启动,因此,需要增加一个账户es

        useradd -m es
        passwd es 
        es
    
    root# tar -xvf elasticsearch-6.4.2.tar.gz
    
    root# cp -rf elasticsearch-6.4.2 /home/es
    
    root# chown -R es.es /home/es/elasticsearch-6.4.2
    
    es$  nohup /home/es/elasticsearch-6.4.2/bin/elasticsearch &
    

    启动过程遇到下问题

    `[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

    `[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

    请参照网友提供的解决方案:
    https://blog.csdn.net/feinifi/article/details/73633235?utm_source=itdadao&utm_medium=referral

    `[3]: max number of threads [3895] for user [elk] is too low, increase to at least [4096]

    修改/etc/security/limits.conf文件,添加或修改如下行:

    *        hard    nproc           4096
    *        soft    nproc           4096
    

    重新启动

    es$  nohup /home/es/elasticsearch-6.4.2/bin/elasticsearch &
    

    更多elasticsearch配置
    https://www.elastic.co/guide/en/elasticsearch/reference/current/logging.html

    安装 logstash

    useradd -m elk
    passwd elk 
    elk
    
     root# tar -zxvf logstash-6.1.0.tar.gz
     root# cp -rf logstash-6.1.0/home/elk
     root# chown -R elk.elk /home/elk/logstash-6.1.0
     elk$  touch /home/elk/logstash-6.1.0/config/logstash-simple.conf
     elk$ ./bin/logstash -f ./config/logstash-simple.conf
     
    

    在config 下配置一个simple.conf配置文件

    
    input {
      tcp {
        mode => "server"
        host => "本机ip"
        port => 9250
      }
      stdin {}
    }
    
    filter {
     
    }
    
    output {
      elasticsearch {
        action => "index"         
        hosts  => "ip:9200"   
        index => "logstash-demo"
      }
      stdout {
        codec => rubydebug  
      }
    }
    

    安装 kinbana

    使用命令解压(根据自己的文件名称进行解压):
    tar -zxvf kibana-6.4.2-linux-x86_64.tar.gz

    修改配置文件:
    cd /kibana/kibana-6.4.2-linux-x86_64/config/kibana.yml

    【修改标注的这三个参数即可】
    server.port: 5601 端口
    server.host: (linux对应的ip地址)
    elasticsearch.url: "http://xxx.xxx.xxx.xxx:9200"(根据es配置地址和端口进行配置)

    启动:返回解压后
    cd /kibana/kibana-6.4.2-linux-x86_64/bin

    执行:
    ./kibana //不能关闭终端
    nohup ./kibana > /nohub.out & //可关闭终端,在nohup.out中查看log

    备注:如果不能正常访问则使用firewall开放linux端口

    1、执行如下命令命令:firewall-cmd --zone=public --add-port=5601/tcp --permanent

    2、重启防火墙,运行命令:firewall-cmd --reload

    3、查看端口号是否开启,运行命令:firewall-cmd --query-port=5601/tcp

    如何在Logback.xml中集成logstash

    1、在pom文件中引入jar包

         <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.5.RELEASE</version>
            <relativePath/>
        </parent>
        <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>5.2</version>
        </dependency>
    

    2、在logback-spring.xml中配置

    <configuration>
        <!-- 使用下方日志输出格式必须引入默认的xml -->
        <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
        <springProperty scope="context" name="springAppName" source="spring.application.name"/>
        
        <!-- 控制台的日志输出样式 -->
        <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="console" class="ch.qos.logback.core.ConsoleAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>INFO</level>
            </filter>
            <!-- 日志输出编码 -->
            <encoder>
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            </encoder>
        </appender>
    
        <appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender">
            <target>System.err</target>
            <encoder>
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            </encoder>
        </appender>
    
        <!-- This is the kafkaAppender -->
        <appender name="kafkaAppender" class="com.github.danielwegener.logback.kafka.KafkaAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>INFO</level>
            </filter>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>
                    {
                    "severity": "%level",
                    "service": "${springAppName:-}",
                    "trace": "%X{X-B3-TraceId:-}",
                    "span": "%X{X-B3-SpanId:-}",
                    "exportable": "%X{X-Span-Export:-}",
                    "pid": "${PID:-}",
                    "thread": "%thread",
                    "class": "%logger{40}",
                    "message": "%message"
                    }
                </pattern>
            </encoder>
            <topic>topic-logback</topic>
            <keyingStrategy class="com.github.danielwegener.logback.kafka.keying.NoKeyKeyingStrategy" />
            <deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy" />
            <!-- Optional parameter to use a fixed partition -->
            <!-- <partition>0</partition> -->
            <!-- Optional parameter to include log timestamps into the kafka message -->
            <!-- <appendTimestamp>true</appendTimestamp> -->
            <!-- bootstrap.servers is the only mandatory producerConfig -->
            <producerConfig>bootstrap.servers=ip:9092</producerConfig>
            <!-- this is the fallback appender if kafka is not available. -->
            <appender-ref ref="STDERR" />
        </appender>
    
        <root level="INFO">
            <appender-ref ref="console"/>
            <appender-ref ref="kafkaAppender"/>
        </root>
    </configuration>
    

    注意:配置文件中的<topic></topic>必须在logstash配置文件topic或topic-pattern能够匹配到才会从kafka读取到消息

    配置完成后启动

    1、启动elk:elasticsearch -> logstash -> kibana 必须根据启动顺序进行启动

    2、测试发送日志

    推荐阅读:
    Spring Security系列教程

    相关文章

      网友评论

        本文标题:Spring Boot 集成 ELK + logback 实现日

        本文链接:https://www.haomeiwen.com/subject/jsntjctx.html