Logback+ELK+SpringMVC搭建日志收集服务器

今天给大家带来的是logback+ELK+SpringMVC 日志收集服务器搭建。接下来我会介绍ELK是什么?logback是什么?以及搭建的流程。

1.ELK是什么?

ELK是由Elasticsearch、Logstash、Kibana这3个软件的缩写。

  • Elasticsearch是一个分布式搜索分析引擎,稳定、可水平扩展、易于管理是它的主要设计初衷

  • Logstash是一个灵活的数据收集、加工和传输的管道软件

  • Kibana是一个数据可视化平台,可以通过将数据转化为酷炫而强大的图像而实现与数据的交互将三者的收集加工,存储分析和可视转化整合在一起就形成了 ELK 。

2.ELK流程

ELK的流程应该是这样的:Logback->Logstash->(Elasticsearch<->Kibana)

  1. 应用程序产生出日志,由logback日志框架进行处理。

  2. 将日志数据输出到Logstash中

  3. Logstash再将数据输出到Elasticsearch中

  4. Elasticsearch再与Kibana相结合展示给用户

3.ELK官网

Logback+ELK+SpringMVC搭建日志收集服务器_第1张图片

https://www.elastic.co/guide/index.html

4. 环境配置

4.1 基础环境

  • jdk 1.8

  • Centos 7.0 X86-64 注意:ELK服务不能在root用户开启。需要重新创建用户。 下载ELK相关服务压缩包 创建ELK用户和目录并赋予权限,方便统一管理。

   
   
   
   
  1. [root@localhost /]# mkdir elsearch

  2. [root@localhost /]# groupadd  elsearch

  3. [root@localhost /]# useradd -g elsearch elsearch

  4. [root@localhost /]# chown -R elsearch:elsearch /elsearch

  5. [root@localhost /]# su elsearch

  6. [elk@localhost /]$ cd elsearch

4.2 下载,然你也可以去官网找最新版的

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.2.tar.gz wget https://artifacts.elastic.co/downloads/logstash/logstash-5.2.2.tar.gz wget https://artifacts.elastic.co/downloads/kibana/kibana-5.2.2-linux-x86_64.tar.gz

我这里是以5.2.2为例来实现。

Logback+ELK+SpringMVC搭建日志收集服务器_第2张图片

4.3 配置Elasticsearch

Elasticsearch是可以搭建集群,我这边只是解压后直接修改配置文件

elasticsearch.yml

   
   
   
   
  1. cluster.name: es_cluster_1

  2. node.name: node-1

  3. path.data: /usr/local/services/elasticsearch-5.2.2/data              

  4. path.logs:/usr/local/services/elasticsearch-5.2.2/logs

  5. network.host: 192.168.10.200

  6. http.port: 9200

启动ElasticSearch,访问http://192.168.10.200:9200/

Logback+ELK+SpringMVC搭建日志收集服务器_第3张图片

看到如上的界面就代表启动成功。

注意:安装过程中出现一些问题。在这篇文章中已经都给我们解决了。 http://www.cnblogs.com/sloveling/p/elasticsearch.html

4.4 配置logstash

解压

   
   
   
   
  1. tar -zxvf /usr/local/services/logstash-5.2.2.tar.gz

测试配置,只是测试服务是否启动。还有这个文件是没有的,启动时加上这个路径就是以这个配置启动 vi /usr/local/services/logstash-5.2.2/config/logstash.conf

   
   
   
   
  1. input {

  2. stdin { }

  3. }

  4. output {

  5. stdout {

  6. codec => rubydebug {}

  7. }

  8. }

logstash以配置文件方式启动有两种:

  1. 列表内容 logstash -f logstash-test.conf //普通方式启动

  2. logstash agent -f logstash-test.conf --debug//开启debug模式

   
   
   
   
  1. ./bin/logstash -f config/logstash.conf --debug

启动成功会看到如下的结果:


Logback+ELK+SpringMVC搭建日志收集服务器_第4张图片

这是时候,我们在控制台随便输入都可以被收集

   
   
   
   
  1. n"=>"1", "host"=>"localhost", "message"=>"我们都是好好"}}

  2. {

  3.    "@timestamp" => 2017-08-18T05:45:25.340Z,

  4.      "@version" => "1",

  5.          "host" => "localhost",

  6.       "message" => "我们都是好好"

  7. }

  8. [2017-08-18T13:45:26,933][DEBUG][logstash.pipeline        ] Pushing flush onto pipeline

  9. [2017-08-18T13:45:31,934][DEBUG][logstash.pipeline        ] Pushing flush onto pipeline

4.5 配置logstash

配置kibana

  • 解压

[elsearch@localhost root]$ tar -zxvf /usr/local/services/kibana-5.2.2-linux-x86_64.tar.gz

打开配置 [elsearch@localhost root]$ vim /usr/local/services/kibana-5.2.2-linux-x86_64/config/kibana.yml

修改配置,最后最加

   
   
   
   
  1. server.port: 8888

  2. server.host: "192.168.10.200"

  3. elasticsearch.url: "http://192.168.10.200:9200"

启动

   
   
   
   
  1. [elsearch@localhost root]$ /usr/local/services/kibana-5.2.2-linux-x86_64/bin/kibana &

访问地址 http://192.168.10.200:8888


Logback+ELK+SpringMVC搭建日志收集服务器_第5张图片

基本ELK的环境的搭建就ok了,我们接下来学习logback-ELK整合来收集JavaEE中的日志。

4.6 logback-ELK整合

4.6.1 本案列采用maven管理

pom.xml

   
   
   
   
  1.    net.logstash.logback

  2.    logstash-logback-encoder

  3.    4.11

  4.        

  5.    

  6.      ch.qos.logback

  7.      logback-classic

  8.      1.2.3

  9.    

  10.    

  11. net.logstash.log4j

  12. jsonevent-layout

  13. 1.7

4.6.2配置logaback的配置文件

   
   
   
   
  1. "1.0" encoding="UTF-8"?>

  2. debug="false">

  3.     name="LOG_HOME" value="E:/logs" />

  4.    

  5.     name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

  6.         class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">

  7.            

  8.            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

  9.        

  10.    

  11.    

  12.     name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">

  13.         class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

  14.            

  15.            ${LOG_HOME}/TestWeb.log_%d{yyyy-MM-dd}.log

  16.            

  17.            30

  18.        

  19.         class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">

  20.            

  21.            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

  22.        

  23.        

  24.         class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">

  25.            10MB

  26.        

  27.    

  28.    

  29.     name="org.hibernate.type.descriptor.sql.BasicBinder"  level="TRACE" />

  30.     name="org.hibernate.type.descriptor.sql.BasicExtractor"  level="DEBUG" />

  31.     name="org.hibernate.SQL" level="DEBUG" />

  32.     name="org.hibernate.engine.QueryParameters" level="DEBUG" />

  33.     name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />

  34.    

  35.     name="com.apache.ibatis" level="TRACE"/>

  36.     name="java.sql.Connection" level="DEBUG"/>

  37.     name="java.sql.Statement" level="DEBUG"/>

  38.     name="java.sql.PreparedStatement" level="DEBUG"/>

  39.     name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">

  40.        192.168.10.200:8082

  41.        

  42.         charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />

  43.    

  44.    

  45.     level="INFO">

  46.        

  47.         ref="stash" />

  48.         ref="STDOUT" />

  49.         ref="FILE" />

  50.    

注意:logstash接收日志的地址192.168.10.200:8082

4.6.3配置logstash-test.conf

vi logstash-test.conf

   
   
   
   
  1. input {

  2. tcp {

  3.        host => "192.168.10.200"

  4.        port => 8082

  5.        mode => "server"

  6.        ssl_enable => false

  7.        codec => json {

  8.            charset => "UTF-8"

  9.        }

  10.    }

  11. }

  12. output {

  13.    elasticsearch {

  14.    hosts => "192.168.10.200:9200"

  15.    index => "logstash-test"

  16.    }

  17.  stdout { codec => rubydebug {} }

  18. }

启动收集

./bin/logstash -f config/logstash-test.conf --debug

4.6.4配置Controller添加日志输出

   
   
   
   
  1. package com.example.demo;

  2. import org.slf4j.Logger;

  3. import org.slf4j.LoggerFactory;

  4. import org.springframework.web.bind.annotation.GetMapping;

  5. import org.springframework.web.bind.annotation.PathVariable;

  6. import org.springframework.web.bind.annotation.RestController;

  7. @RestController

  8. public class TestEndpoints {

  9.    private final static Logger logger = LoggerFactory.getLogger(TestEndpoints.class);

  10.    @GetMapping("/product/{id}")

  11.    public String getProduct(@PathVariable String id) {

  12.        String data = "{\"name\":\"李东\"}";

  13.        logger.info(data);

  14.        return "product id : " + id;

  15.    }

  16.    @GetMapping("/order/{id}")

  17.    public String getOrder(@PathVariable String id) {

  18.        return "order id : " + id;

  19.    }

  20. }

请求调用之后控制台的log


Logback+ELK+SpringMVC搭建日志收集服务器_第6张图片

之后Kibana中就可以收集到log

   
   
   
   
  1. {

  2.  "_index": "logstash-test",

  3.  "_type": "logs",

  4.  "_id": "AV3zu4jiJKLF9tWSjmZj",

  5.  "_score": null,

  6.  "_source": {

  7.    "@timestamp": "2017-08-18T05:04:51.698Z",

  8.    "level": "INFO",

  9.    "port": 56525,

  10.    "thread_name": "http-nio-8081-exec-10",

  11.    "level_value": 20000,

  12.    "@version": 1,

  13.    "host": "192.168.10.165",

  14.    "logger_name": "com.example.demo.TestEndpoints",

  15.    "message": "{\"name\":\"李东\"}"

  16.  },

  17.  "fields": {

  18.    "@timestamp": [

  19.      1503032691698

  20.    ]

  21.  },

  22.  "sort": [

  23.    1503032691698

  24.  ]


Logback+ELK+SpringMVC搭建日志收集服务器_第7张图片

基本上就这些步骤,希望看完之后,动手实践一下,谢谢阅读。

你可能感兴趣的:(springmvc)