一、ELK是什么

“ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一个搜索和分析引擎。Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。

SpringBoot可以通过集成logstash-logback-encoder插件收集日志并写入到ELK中。当然如果你使用的是log4j2或其他日志框架,只需要集成对应插件即可。

二、ELK搭建

本文采用docker-compose方式部署ES+Logstash+Kibana

新建项目目录

$ mkdir elk-demo

创建docker-compose文件,内容如下:

version: '3.5'

services:
elasticsearch:
container_name: elk-es
image: elasticsearch:6.5.0
restart: always
ports:
- 9200:9200
- 9300:9300
environment:
- TZ=Asia/Shanghai
volumes:
- ./es/data:/usr/share/elasticsearch/data
- ./es/es-single.yml:/usr/share/elasticsearch/config/elasticsearch.yml
kibana:
container_name: elk-kibana
image: kibana:6.5.0
restart: always
ports:
- 5601:5601
environment:
- elasticsearch.hosts=http://elasticsearch:9200
depends_on:
- elasticsearch
logstash:
container_name: elk-logstash
image: logstash:6.5.0
restart: always
ports:
- 5044:5044
- 9600:9600

新建elasticsearch目录

$ mkdir -p es/data

将elasticsearch配置文件放在es文件夹中,es-single.yml文件内容如下:

cluster.name: elasticsearch-single
node.name: es-single-node-1
network.bind_host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
action.auto_create_index: true

完成之后回到项目根目录启动ELK

$ docker-compose up -d

安装ik分词器

$ docker exec -it elk-es /bin/bash
$ cd plugins/
# 根据elasticsearch选择插件版本,当前使用6.5.0版本
$ wget http://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.5.0/elasticsearch-analysis-ik-6.5.0.zip

安装过程由于网络原因可能会比较慢或者安装失败,可以参考手动安装文档,采用本地打包安装方式。如果无法正常克隆git仓库的话,可以选择使用码云极速下载

下载完成之后,解压到指定目录

$ mkdir elasticsearch-analysis-ik
$ unzip elasticsearch-analysis-ik-6.5.0.zip -d elasticsearch-analysis-ik

其他插件可以根据实际需要安装,然后重启容器,观察是否加载ik分词器

$ docker restart elk-es
$ docker logs elk-es | grep ik

配置logstash

$ docker exec -it elk-logstash /bin/bash
$ cd /usr/share/logstash/config/
# 修改xpack.monitoring.elasticsearch.url值为http://elasticsearch:9200
$ vi logstash.yml
# 修改logstash.conf
$ cd /usr/share/logstash/pipeline/
$ vi logstash.conf

logstash.conf

input {
tcp {
port => 5044
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "log-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
}
}

重启logstash

$ docker restart elk-logstash
# 观察日志是否连接es正常
$ docker logs -f elk-logstash

elasticsearch启动可能较慢,kibana刚启动的时候连接不上,只需要等待几分钟,等elasticsearch完全启动之后即可。

三、SpringBoot接入

在pom文件中引入logstash-logback-encoder

<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.3</version>
</dependency>

添加日志配置文件logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" /> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>localhost:5044</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
</appender> <root level="INFO">
<appender-ref ref="LOGSTASH" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>

配置文件中的destination值根据实际环境修改,然后启动SpringBoot项目,通过kibana查看日志。

首先通过Management创建index pattern,通过logstash.conf文件知道,日志收集格式是log-%{+YYYY.MM.dd},index patter即为log-*,创建好之后通过Discover菜单查看日志。

至此SpringBoot+ELK环境搭建完成。

SpringBoot+ELK日志系统搭建的更多相关文章

  1. ELK 日志系统搭建配置

    logstash是一个数据分析软件,主要目的是分析log日志.整一套软件可以当作一个MVC模型,logstash是controller层,Elasticsearch是一个model层,kibana是v ...

  2. 【7.1.1】ELK日志系统单体搭建

    ELK是什么? 一般来说,为了提高服务可用性,服务器需要部署多个实例,每个实例都是负载均衡转发的后的,如果还用老办法登录服务器去tail -f xxx.log,有很大可能错误日志未出现在当前服务器中, ...

  3. 03篇ELK日志系统——升级版集群之ELK日志系统整合springboot项目

    [ 前言:整个ELK日志系统已经搭建好了,接下来的流程就是: springboot项目中的logback日志配置通过tcp传输,把springboot项目中所有日志数据传到————>logsta ...

  4. 02篇ELK日志系统——升级版集群之kibana和logstash的搭建整合

    [ 前言:01篇LK日志系统已经把es集群搭建好了,接下来02篇搭建kibana和logstash,并整合完成整个ELK日志系统的初步搭建. ] 1.安装kibana 3台服务器: 192.168.2 ...

  5. ELK日志系统:Elasticsearch+Logstash+Kibana+Filebeat搭建教程

    ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程 系统架构 安装配置JDK环境 JDK安装(不能安装JRE) JDK下载地址:http://www.orac ...

  6. 01篇ELK日志系统——升级版集群之elasticsearch集群的搭建

    [ 前言:以前搭了个简单的ELK日志系统,以我个人的感觉来说,ELK日志系统还是非常好用的.以前没有弄这个ELK日志系统的时候,线上的项目出了bug,报错了,要定位错误是什么,错误出现在哪个java代 ...

  7. 创业公司做数据分析(四)ELK日志系统 (转)

    http://blog.csdn.net/zwgdft/article/details/53842574 作为系列文章的第四篇,本文将重点探讨数据采集层中的ELK日志系统.日志,指的是后台服务中产生的 ...

  8. ELK日志系统之通用应用程序日志接入方案

    前边有两篇ELK的文章分别介绍了MySQL慢日志收集和Nginx访问日志收集,那么各种不同类型应用程序的日志该如何方便的进行收集呢?且看本文我们是如何高效处理这个问题的 日志规范 规范的日志存放路径和 ...

  9. 创业公司做数据分析(四)ELK日志系统

      作为系列文章的第四篇.本文将重点探讨数据採集层中的ELK日志系统.日志.指的是后台服务中产生的log信息,一般会输入到不同的文件里.比方Django服务下,一般会有nginx日志和uWSGI日志. ...

随机推荐

  1. 【NX二次开发】按层查找工作部件中的对象 UF_LAYER_cycle_by_layer

    第一次调用 :返回第一个启用层中的第一个对象. 第二次调用 :返回下一个已启用层中的下一个对象. 最后一次调用:当所有对象都被耗尽时,将返回object_tag = NULL_TAG. 在循环数据库时 ...

  2. 【NX二次开发】创建有界平面UF_MODL_create_bplane

    先准备几条曲线如下图所示,我们用这几条线来创建一个有界平面: 效果:  源码: //有界平面 extern DllExport void ufusr(char *param, int *returnC ...

  3. 旁路电容的PCB布局布线透彻详解(4)

    原文地址点击这里: 前面使用了较多的篇幅介绍旁路电容的工作原理及其选择依据,我们已经能够为电路系统中相应的数字集成芯片选择合适的旁路电容,在实际应用过程中,旁路电容的PCB布局布线也会影响到高频噪声旁 ...

  4. 10、mysql增量恢复实战

    10.1.实验数据: mysql> select * from test; +----+------+------+ | id | name | age | +----+------+----- ...

  5. 使用VS2017开发APP中使用VUE.js开发遇到打包出来的android文件 在低版本的android(4.3)中无法正常使用

    使用VS2017开发VUE的APP应用遇到的问题集合 1,  打包出来的apk文件在Android 6.0版本以上手机可以正常打开,在Android 4.3版本手机上无法打开 原因:一开始猜测是不是V ...

  6. 树莓派4B-SPI读写flash-FM25CL16B(同时支持FM25CL64等其它系列Flash)

    1.树莓派SPI介绍 4B的引脚如下图所示: 其中Pin19.21.23是SPI0,接口定义如下所示: 时钟(SPI CLK, SCLK) 主机输出.从机输入(MOSI) 主机输入.从机输出(MISO ...

  7. Spring中这么重要的AnnotationAwareAspectJAutoProxyCreator类是干嘛的?

    大家好,我是冰河~~ 停更了很久的[Spring注解系列]专题,终于重新更新了,我们还是接着之前的文章继续往下更新.在<[Spring注解驱动开发]二狗子让我给他讲讲@EnableAspectJ ...

  8. RabbitMQ交换机

    RabbitMQ中,生产者并不是直接将消息发送给queue,而是先将消息发送给exchange,再由exchange通过不同的路由规则将消息路由到绑定的队列中进行存储,那么为什么要先将消息发送给exc ...

  9. 资源:Git快速下载路径

    Git快速下载地址: 地址:https://npm.taobao.org/mirrors/git-for-windows/

  10. HCNA Routing&Switching之动态路由基本概念

    前文我们了解了静态路由的相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14965433.html:今天我们来聊一聊动态路由相关概念: 首先我们要清楚什 ...