ELK(Elasticsearch + Logstash + Kibana)简单实现

  • 1. ES的安装
    • 1.1 安装Elasticsearch-Head插件
  • 2. 安装Logstash
  • 3. Springboot集成logstash
  • 4. Logstash输出数据到ES
  • 5. Kibana安装

 

该ELK框架是自己自学ELK的例子,运行环境为windows,简单的跑通Elasticsearch,Kibana,logstash

Elasticsearch和Kibana版本一定要保持一致,最好不搞高版本的,高版本的需要适配JDK11,我用的版本是6.3.0

1. ES的安装

ES是什么?

es是一个高扩展、开源的全文检索和分析引擎,它可以准实时地快速存储、搜索、分析海量的数据。

Elasticsearch在windows环境下的安装,即去官网下载安装包解压到本地的目录即可
官网下载地址:https://www.elastic.co/cn/downloads/elasticsearch
官网地址下载太太太太慢了,国内镜像下载地址:https://learnku.com/articles/33403

  1. 下载解压zip文件,进入bin目录,点击elasticsearch.bat文件启动
    ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术

  2. 接着浏览器访问9200默认端口,返回类似如下数据即为启动成功
    ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术_02

    1.1 安装Elasticsearch-Head插件

    ElasticSearch-head就是一款能连接ElasticSearch搜索引擎,并提供可视化的操作页面对ElasticSearch搜索引擎进行各种设置和数据检索功能的管理插件,如在head插件页面编写RESTful接口风格的请求,就可以对ElasticSearch中的数据进行增删改查、创建或者删除索引等操作。

    1. 安装node环境
      head插件是基于Node的,所以安装head插件首先需要在机器上安装Node环境
      网址:https://nodejs.org/en/download/ 下载Windows版msi的,下载完直接安装
      安装完成命令行查看:
      ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术_03
    2. grunt安装
      grunt是一个很方便的构建工具,可以进行打包压缩、测试、执行等等的工作,5.x里之后的head插件就是通过grunt启动的。因此需要安装grunt.
      安装命令:
      npm install -g grunt-cli
      
      安装完成之后查看版本号
      grunt -version
      

ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术_04

  1. 下载Elasticsearch-Head插件
    下载地址:
    解压,进入head解压的文件夹下,执行安装pathomjs的命令:
    npm install
    
    或者国内的镜像安装
    npm config set registry https://registry.npm.taobao.org
    
    4 . 安装完成之后,启动head插件
    npm run start  或者 grunt server
    

ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术_05

访问浏览器head的9100默认端口,出现如下图:head插件启动成功,因为此时该插件还没有寻找到ES,需要修改ES的配置文件
ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术_06
进入es解压目录,找到config目录下的elasticsearch.yml文件
ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术_07
增加两个配置项:

http.cors.enabled: true 
http.cors.allow-origin: "*"

该配置作用可以使head插件访问到es
修改完配置重启动ES,访问head启动的页面http://localhost:9100/
ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术_08
出现如上图,则head插件已经和ES集成成功

2. 安装Logstash

Logstash是什么?

ogstash 是一个轻量级、开源的服务器端数据处理管道,允许您从各种来源收集数据,进行动态转换,并将数据发送到您希望的目标。它最常用作 Elasticsearch 的数据管道,Elasticsearch 是一个开源分析和搜索引擎。由于它与 Elasticsearch 紧密集成,具备强大的日志处理功能并提供 200 多个预构建的开源插件来帮助您轻松地索引数据,因此 Logstash 是将数据加载到 Elasticsearch 的常用工具。

  1. 官网下载地址:略(太慢了),这里贴一个国内镜像:https://www.newbe.pro/Mirrors/Mirrors-Logstash/
  2. 下载后解压zip文件,进入bin目录下创建 logstash.conf 配置文件
    ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术_09
    3.配置logstash.conf
    主要配置logstash的输入源和输出源
input {
    stdin{
    }
} 

input {
	tcp {
		host => "127.0.0.1"
		port => 9600
		codec => json_lines
	}
}
 
output {
    stdout{
		codec => rubydebug
    }
}
  1. 进入bin目录,使用windows命令行启动logstash
logstash -f logstash_conf

如下启动成功并监听到端口号:
ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术_10

3. Springboot集成logstash

ES和logstash服务全都已经开启,接下来开始搭建测试的Java项目,用来测试日志是否能通过logstash输出到ES中

  1. 创建springboot项目(简单的springboot web模块即可)
    springboot项目添加logstash依赖
 <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>6.4</version>
        </dependency>
  1. 在resources目录下创建logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_HOME" value="D:/MyELKlog/" />
    <!--控制台输出-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--生成日志文件配置-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_HOME}/TestEkl.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志保留天数-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日志文件的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!--输出到logstash中-->
    <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>127.0.0.1:9600</destination>
        <encoder  class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
                <pattern>
                    <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}",
                        "rest": "%message"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
    </appender>

    <!--日志输出级别-->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="logstash"/>
    </root>

</configuration>
  1. 创建测试controller,生成日志
@RestController
public class ControllerTest {
    private static final Logger LOGGER = LoggerFactory.getLogger(ControllerTest.class);
    
    @GetMapping("/loginfo")
    public String hello(){
        LOGGER.info("进入-----访问到当前接口:");
        LOGGER.info("当前时间{}:", System.currentTimeMillis());
        LOGGER.info("结束-----访问结束接口:");
        return "this is a test controller method";
    }
    @GetMapping("/loginfo1")
    public String hello1(){
        LOGGER.info("进入----loginfo1接口");
        LOGGER.info("当前时间戳:{}", System.currentTimeMillis());
        LOGGER.info("进入----loginfo1接口结束");
        return "loginfo1";
    }
}
  1. 启动springboot项目,请求controller接口
    查看logstash启动服务窗口,发现logstash通过监听获取到了数据
    ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术_11
    到这儿,项目中的日志已经可以输入到logstash中,接下来就是将logstash中的日志输出到Elasticsearch中
4. Logstash输出数据到ES
  1. 修改logstash的配置文件
    input {
        stdin{
        }
    } 
    
    input {
    	tcp {
    		host => "127.0.0.1"
    		port => 9600
    		codec => json_lines
    	}
    }
     
    output {
        stdout{
    		codec => rubydebug
        }
    	elasticsearch { hosts => ["127.0.0.1:9200"] }
    }
    
    重启logstash服务,再次点击项目的测试接口产生日志,然后通过head插件查看ES索引的情况
    ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术_12
    会发现多一个logstash索引,然后查看数据:
    ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术_13
    发现索引中多了三个文档,也就是对应着logstash中获取Springboot项目中打印的三条日志数据:
    ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术_14

至此,elasticsearch 和 logstash的通道打通,接下里将es中的数据通过可视化Kibana来进行展示

5. Kibana安装

什么是Kibana?

Kibana 是一个设计出来用于和 Elasticsearch 一起使用的开源的分析与可视化平台,可以用 kibana 搜索、查看、交互存放在Elasticsearch 索引里的数据,使用各种不同的图表、表格、地图等展示高级数据分析与可视化,基于浏览器的接口使你能快速创建和分享实时展现Elasticsearch查询变化的动态仪表盘,让大量数据变得简单,容易理解。

  1. 安装注意事项
    确保安装JDK
    确保安装Elasticsearch
    确保安装Node
    安装的Kibana和Elasticsearch的版本号要一直,尽量精确到小版本号

  2. Kibana下载 官网下载太慢,国内加速下载地址:https://www.newbe.pro/Mirrors/Mirrors-Kibana/

  3. 配置ES地址
    下载后解压,进入config目录,打开kibana.yml配置文件
    配置ES的地址
    ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术_15
    点击bin目录下的kibana.bat 文件启动kibana服务
    ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术_16
    访问kibana默认地址:
    ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术_17

    可以看到日志已经显示到kibana可视化界面上了
    接下来可以查看数据和创建各种可视化图标了
    ELK(Elasticsearch + Logstash + Kibana)windows环境下的简单实现_架构技术_18
    kibana具体的使用请参考Kibana官方文档

以上只是ELK框架的简单搭建,纯纯纯入门的例子,希望能够帮助到大家