zoukankan      html  css  js  c++  java
  • ELK Stack

    简介

    1. 引言
    • 在排查线上异常的过程中,查询日志总是必不可缺的一部分。现今大多采用的微服务架构,日志被分散在不同的机器上,使得日志的查询变得异常困难。
    • 工欲善其事,必先利其器。如果此时有一个统一的实时日志分析平台,那可谓是雪中送碳,必定能够提高我们排查线上问题的效率。本文带您了解一下开源的实时日志分析平台 ELK 的搭建及使用。

    1. 介绍
    • ElasticSearch:分布式,RESTful风格的搜索和分析
      • 全文搜索;提供搜集、分析、存储数据三大功能,是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
    • Logstash:采集、转换、充实、然后输出
      • 是服务器端数据处理管道,能够同时从多个来源采集、转换数据,然后将数据发送到诸如 Elasticsearch 等"存储库"中。
    • Kibana:实现数据可视化,在Elastic Stack中进行导航
      • 让运维同学在PC端使用图形和图表对数据进行可视化。
    1. 三者关系
    • Logstash把数据从"NGINX"、"SpringBoot"中取出, 并保存到ES中,然后由Kibana在在ES中取出数据在页面上展示。

    1. 介绍三大组件
    • E

    • L

    • K


    1. ELK 实现方案


    1. ELK 的大致工作流程


    操作使用

    1. 在 Spring Boot 中使用 ELK
    • 首先我们需要创建一个 Spring Boot 的项目,之前我写过一篇文章介绍 如何使用 AOP 来统一处理 Spring Boot 的 Web 日志 ,本文的 Spring Boot 项目就建立在这篇文章的基础之上。
    • 修改并部署 Spring Boot 项目
    • 在项目 resources 目录下创建 spring-logback.xml 配置文件。
    <?xml version="1.0" encoding="UTF-8"?>  
    <configuration debug="false">  
        <contextName>Logback For demo Mobile</contextName>  
        <property name="LOG_HOME" value="/log" />  
        <springProperty scope="context" name="appName" source="spring.application.name"  
                        defaultValue="localhost" />  
        ...  
      
        <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">  
            ...  
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">  
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{25} ${appName} -%msg%n</pattern>  
            </encoder>  
            ...  
        </appender>  
        ...  
    </configuration>   
    

    1. 打包并部署 Spring Boot 项目
    # 打包命令  
    mvn package -Dmaven.test.skip=true  
    # 部署命令  
    java -jar sb-elk-start-0.0.1-SNAPSHOT.jar 
    

    1. 生成日志
    • logback 配置文件中我将日志存放在 /log/sb-log.log 文件中,执行 more /log/sb-log.log 命令,出现以下结果表示部署成功。

    1. Shipper 角色的 Logstash 的配置
    input {  
        file {  
            path => [  
                # 这里填写需要监控的文件  
                "/log/sb-log.log"  
            ]  
        }  
    }  
      
    output {  
        # 输出到redis  
        redis {  
            host => "10.140.45.190"   # redis主机地址  
            port => 6379              # redis端口号  
            db => 8                   # redis数据库编号  
            data_type => "channel"    # 使用发布/订阅模式  
            key => "logstash_list_0"  # 发布通道名称  
        }  
    }  
    

    1. Indexer 角色的 Logstash 的配置
    input {  
        redis {  
            host      => "192.168.142.131"    # redis主机地址  
            port      => 6379               # redis端口号  
            db        => 8                  # redis数据库编号  
            data_type => "channel"          # 使用发布/订阅模式  
            key       => "sb-logback"  # 发布通道名称  
        }  
    }  
      
    filter {  
         #定义数据的格式  
         grok {  
           match => { "message" => "%{TIMESTAMP_ISO8601:time} [%{NOTSPACE:threadName}] %{LOGLEVEL:level}  %{DATA:logger} %{NOTSPACE:applicationName} -(?:.*=%{NUMBER:timetaken}ms|)"}  
         }  
    }  
      
    output {  
        stdout {}  
        elasticsearch {  
            hosts => "localhost:9200"  
            index => "logback"  
       }  
    }  
    

    1. ELK 后台启动
    [program:elasticsearch]  
    environment=JAVA_HOME="/usr/java/jdk1.8.0_221/"  
    directory=/home/elk/elk/elasticsearch  
    user=elk  
    command=/home/elk/elk/elasticsearch/bin/elasticsearch  
      
    [program:logstash]  
    environment=JAVA_HOME="/usr/java/jdk1.8.0_221/"  
    directory=/home/elk/elk/logstash  
    user=elk  
    command=/home/elk/elk/logstash/bin/logstash -f /home/elk/elk/logstash/indexer-logstash.conf  
      
    [program:kibana]  
    environment=LS_HEAP_SIZE=5000m  
    directory=/home/elk/elk/kibana  
    user=elk  
    command=/home/elk/elk/kibana/bin/kibana  
    
    1. 转载出处:https://mp.weixin.qq.com/s/nOVQAZWKzMhGJDOayVuiPA 文章出自: [微信公众号_Java笔记虾]的博客
  • 相关阅读:
    EntityFramework进阶(二)- DbContext预热
    EntityFramework进阶(一)- DbContext与ObjectContext互转
    ambari集成impala
    搭建私有npm私库(使用verdaccio)
    Vue中的slot,slot-scope,v-slot
    Vue 中如何利用watch 监听对象中每一个属性的变化
    css3的counter的用法
    http请求整理
    带有过渡效果的下拉列表,下拉的内容高度不一致且不确定如何办?
    用js通过url传参把数据从一个页面传到另一个页面
  • 原文地址:https://www.cnblogs.com/Twittery/p/14987887.html
Copyright © 2011-2022 走看看