• 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笔记虾]的博客
  • 相关阅读:
    Windows上使用“LogView”打开大文件
    windows CMD命令查看局域网内所有主机名及IP
    解决Sqlserver 2008 R2在创建登录名出错"此版本的 Microsoft Windows 不支持 MUST_CHANGE 选项。 (Microsoft SQL Server,错误: 15195)"
    解决 ASP.NET 编辑错误"CS0006: 未能找到元数据文件C:WINDOWSassemblyGAC_32System.EnterpriseServices2.0.0.0__b03f5f7f11d50a3aSystem.EnterpriseServices.dll"
    ASP 未结束的字符串常量
    Godaddy ssl续费更新问题总结
    [转]How to query posts filtered by custom field values
    SqlServer 在查询结果中如何过滤掉重复数据
    [UE4]C++的const类成员函数
    [UE4]C++三种继承方式
  • 原文地址:https://www.cnblogs.com/Twittery/p/14987887.html
Copyright © 2020-2023  润新知