后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)

win10下elk的安装、集成、使用

  • 简介
  • 安装
    • elasticsearch的安装
    • kibana的安装
    • logstash的安装
  • 集成
    • 1,添加pom依赖:
    • 2,添加logback.xml配置文件:
  • 使用
    • 1,日志定位
    • 2,日志分析
      • 1:查看索引管理
      • 2:创建索引模式
      • 3:创建视图
  • 总结

简介

elk日志框架是elasticsearch、logstash、kibana的这三个技术的简称。elasticsearch是一个搜索引擎,logstash是日志管理平台,kibana是elasticsearch的gui。elk日志框架就是将日志按照我们的要求显示在网页上,并且可以进行聚合查询、筛选分析。不用再登录服务器grep匹配,也不用在日志文件中慢慢的挑error。先看效果图:

如下为:日志的定位
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第1张图片
如下为:日志的分析
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第2张图片

安装

这三个程序可以官网下载(需要_微_皮_嗯),为了方便我这里已经打包好了,可直接下载,
链接: https://download.csdn.net/download/nienianzhi1744/13192854

解压后文件夹如下:

后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第3张图片

elasticsearch的安装

1,【配置文件修改】:修改elasticsearch-6.8.1/config目录下的elasticsearch.yml文件,添加如下配置:

#允许跨域请求
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,Content-Type
#开启安全校验
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.authc.accept_default_password: true

如下图:
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第4张图片
2,【设置登录密码】:cmd命令进入到elasticsearch-6.8.1/bin目录,输入如下命令,设置登录密码:

elasticsearch-setup-passwords auto

回车后按y执行完,会自动设置密码,如下图:
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第5张图片
将用户名和密码复制粘贴记录一下,以后会用到。
(此处有一个坑:windows下输入自动设置密码的命令不会报错,但输入手动设置密码的命令elasticsearch-setup-passwords interactive就会报错:Connection failure to: http://127.0.0.1:9200/_xpack/security/_authenticate?pretty failed: Connection refused: connect。以后有空再来研究为什么)

3,【安装elasticsearch分词器】:上一步的命令执行结束后,不要关闭窗口,继续在bin目录下执行命令安装分词器,这一步耗时稍长,中途会自动输出命令确认是否继续,我们按y继续,安装完成后窗口会自动变成可输入状态:

elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.1/elasticsearch-analysis-ik-6.8.1.zip

(这里必须要安装,否则后续集成的时候会报错:analyzer [xxx] not found for field [xxx]])

4,【启动elasticsearch】:双击elasticsearch.bat启动elasticsearch。如下图:
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第6张图片
启动后弹出来elasticsearch的命令窗,不要关闭,如下图:
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第7张图片
5:【浏览器访问elasticsearch】:此时在浏览器中输入:http://localhost:9200/
在弹窗中输入第2步自动设置的用户名和密码:
用户名:elastic
密码:xxx
出来下图界面表示elasticsearch启动成功,这个localhost:9200 网页可以关掉了,暂时用不上它了。
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第8张图片

kibana的安装

1,【配置文件修改】:修改kibana-6.8.1-windows-x86_64\config目录下的kibana.yml文件,添加如下配置:

#中文汉化
i18n.locale: "zh-CN"
server.host: "0.0.0.0"
# ES的访问端口号
elasticsearch.url: "http://localhost:9200"
# ES的用户名和密码
elasticsearch.username: "elastic"
elasticsearch.password: "gJRr45HLoRVzoqyRaWxO"

如下图:
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第9张图片
2:【浏览器访问kibana】:点击bin目录下的kibana.bat文件,启动成功后cmd窗口如下图所示,不要关闭窗口。
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第10张图片
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第11张图片
http://localhost:5601/。输入账户名和密码:账户名和密码是上面自动设置时提到过的
username: “elastic”
password: “xxx”
登录成功如下图所示:
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第12张图片

logstash的安装

1,【配置文件修改】:在logstash-6.3.0\bin目录下,新建配置文件logstash.conf,并添加如下配置(以下有两种配置,选取一种就好了):

第一种配置为读取控制台日志(我用的就是这第一种):如下:

#读取控制台日志
input { stdin { } }

input {
  tcp {
    host => "127.0.0.1"
    port => 9250
    mode => "server"
#    tags => ["tags"]
    codec => json_lines
    }
}

# output { stdout { codec => rubydebug } }
output {
  stdout{codec =>rubydebug}
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "logback-%{+YYYY.MM.dd}"
    user => "elastic"
    password => "xxx"
  }
}

第二种是读取文件中的日志:如下

input {
    file {
        path => "c:/opt/logs/java-contract-info.log" # 日志文件
        type => "elasticsearch"
        discover_interval => 3		  #心跳监听日志文件是否改变
        start_position => "beginning" #从文件开始处读写
    }
}

output {
 stdout{
  codec => rubydebug
 }
  elasticsearch {
   hosts => "localhost:9200"
   index => "logstash-%{+YYYY.MM.dd}"
   user => "elastic"
   password => "xxx"
  }
}

(这里要讲解一下,上面配置中最值得注意的是:output.elasticsearch.index:“logstash-%{+YYYY.MM.dd}”
这里默认创建了一个名为"logstash-日期"的索引,在kibana中会用到

后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第13张图片
2,【启动logstash】:cmd进入到logstash-6.3.0\bin目录下,执行命令

logstash -f logstash.conf

后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第14张图片
执行命令后看到:Successfully started Logstash API endpoint {:port=>9600}的输出表示Logstash 启动完成,不要关闭这个窗口,因为Logstash 会一直监听我们的idea控制台,这个cmd窗口也是不可编辑状态,如果idea控制台有能匹配上的日志(注意并非控制台所有日志都会在这个窗口打印出来,只有格式能匹配上的才会打印),会在这里按照格式输出。

集成

经过上面繁琐的配置后,在springboot中集成就比较简单了。将控制台的日志输出到kibana中进行可视化查询和分析,不需要写代码(ElasticsearchConfig、EKLController、ESRepository、ESData什么的都不需要),只需要添加依赖并做一个配置xml文件。如下步骤:

1,添加pom依赖:

先看一下我的项目结构。在模块的pom文件中添加以下配置文件。(添加之前:如果pom文件中已经有spring-boot-starter-web这个依赖,要添加exclusion排除重复的log包引用,没有就不用管。)

排除重复包的语句:

<exclusions>
     <exclusion>
          <groupId>org.springframework.bootgroupId>
          <artifactId>spring-boot-starter-loggingartifactId>
     exclusion>
exclusions>

后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第15张图片
在需要搭建日志系统的模块添加pom依赖的语句:


        
        
        
        <dependency>
            <groupId>net.logstash.logbackgroupId>
            <artifactId>logstash-logback-encoderartifactId>
            <version>5.2version>
        dependency>
        <dependency>
            <groupId>net.logstash.log4jgroupId>
            <artifactId>jsonevent-layoutartifactId>
            <version>1.6version>
        dependency>
        <dependency>
            <groupId>ch.qos.logbackgroupId>
            <artifactId>logback-classicartifactId>
            <exclusions>
                <exclusion>
                    <groupId>ch.qos.logbackgroupId>
                    <artifactId>logback-coreartifactId>
                exclusion>
            exclusions>
            <version>1.1.8version>
        dependency>
        <dependency>
            <groupId>ch.qos.logbackgroupId>
            <artifactId>logback-coreartifactId>
            <version>1.1.8version>
        dependency>

PS:上面的几个依赖为什么要注释掉呢,因为只做日志的定位和分析似乎用不上 上面注释掉的jar包。

2,添加logback.xml配置文件:

从上面的项目目录结构图中不难看出,我将日志的配置文件logback.xml与springboot的配置文件放在了同一个目录下。
具体的logback.xml的内容如下:


<configuration>
    
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    
    <appender name="deliver_log_appender"
              class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        
        <destination>127.0.0.1:9250destination>
        
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <charset>utf8charset>
            
            <Pattern>%msg%nPattern>
        encoder>
    appender>

    
    <logger name="deliver_log" additivity="false" level="INFO">
        
        <appender-ref ref="deliver_log_appender"/>
    logger>
configuration>

后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第16张图片
springboot方面就以上的配置就OK了,不需要写其他的代码了。配置完成后启动springboot

使用

我们访问:localhost:5601后进入到kibana主页面。
点击右侧最上面的菜单Discover,系统中的名为“deliver_log”输出的日志会展示在这里,注意得有日志了才会展示在下面。如下
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第17张图片

1,日志定位

在discover上方的命令输入栏中:输入条件即可查询到相关的日志,多条件查询可以使用and ,or等连接符。跟sql语句很相似
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第18张图片

2,日志分析

1:查看索引管理

日志分析之前需要创建索引模式,只有创建了索引模式,索引中的字段才能进行聚合的统计或其他操作。

点击:管理》索引管理可以看到我们的索引,后面有一列文档数。创建索引后,如果索引对应的log没有日志的输出,那么文档数就是0,文档数为0的索引是无法创建索引模式的。也就是说,在创建说有模式之前,一定要现有日志输出(无论时输出在控制台还是输出在文件中。)

ps:可能有同学会有疑问,为什么索引管理中的名称是logback-2020.11.24。这是因为我们在前几步中,logstash-6.3.0\bin\logstash.conf中配置的,这个名称是自定义的,可更改的。
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第19张图片

2:创建索引模式

索引名称前缀+通配符。(如果匹配不到值,但是在索引管理中又能看到那个索引名称,那肯定索引没数据,这时候咱们需要先进行日志输出,把程序业务逻辑的日志输出出来,才能匹配上。)点击下一步
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第20张图片
时间筛选字段名称选择下图所示,然后点击创建索引模式。
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第21张图片

创建完成后,我们鼠标下拉,可以看见索引模式中包含了我们的实体自定义的字段名,也包含了几个elk系统自带的字段名。这些我们实体自定义的字段名就可以用来创建可视化的图表。

后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第22张图片
ps:如果创建索引后,字段后面没有“可搜索、可聚合的”绿色小点点,那么需要点击一下刷新,随后按确定。
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第23张图片

3:创建视图

如下操作:可视化》点击+号》需要哪种视图(自定义,我这里选择的是表格)
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第24张图片
上一步操作我选择的是表格。所以视图会在右边的表格显示出来。
左边是配置聚合函数的。当然聚合函数不用手写,直接在左边的下拉框可以点出来。
比如我选择目前的elk收集了6条打印出来的实体日志,每个日志中都有我的实体中的message字段,那我想查询一下每个message的数量并且展示出来,类似:message,count(message)。就可以进行如下选择:
1:指标选:计数
2:点击存储桶,点击拆分行。字段选择message,排序依据选择指标:计数
3:点击上面的绿色三角形 运行按钮,就可以得到查询结果了
后端——》springboot整合elk日志框架的超详细解析(elasticsearch+logstash+kibana)_第25张图片

总结

之前的日志统计一直用的阿里云的日志服务,跟这个功能差不多,但是阿里云的日志服务是收费的,所以自个在研究这个elk,还是挺实用的。这次研究elk, 周同学的博客给了我很大启发,大家可以去看看。
时间不充足,博客中难免有疏漏错误之处,欢迎指正。elk是一个很庞大的系统,只学会怎么用还是不够的,以后我也会多来更新学习体会,欢迎互相交流

你可能感兴趣的:(后端,elk日志框架,logstash+kibana,springboot集成elk,win10集成elk,java)