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笔记虾]的博客
  • 相关阅读:
    Openstack API 开发 快速入门
    virtualBox虚拟机到vmware虚拟机转换
    使用Blogilo 发布博客到cnblogs
    Openstack Troubleshooting
    hdoj 1051 Wooden Sticks(上升子序列个数问题)
    sdut 2430 pillars (dp)
    hdoj 1058 Humble Numbers(dp)
    uva 10815 Andy's First Dictionary(快排、字符串)
    sdut 2317 Homogeneous squares
    hdoj 1025 Constructing Roads In JGShining's Kingdom(最长上升子序列+二分)
  • 原文地址:https://www.cnblogs.com/Twittery/p/14987887.html
Copyright © 2011-2022 走看看