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官网

https://www.elastic.co/guide/index.htmlLogback+ELK+SpringMVC搭建日志收集服务器

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搭建日志收集服务器

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搭建日志收集服务器
看到如上的界面就代表启动成功。
注意:安装过程中出现一些问题。在这篇文章中已经都给我们解决了。 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搭建日志收集服务器
这是时候,我们在控制台随便输入都可以被收集
  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搭建日志收集服务器
基本ELK的环境的搭建就ok了,我们接下来学习logback-ELK整合来收集JavaEE中的日志。

4.6 logback-ELK整合

4.6.1 本案列采用maven管理

pom.xml
  1. <dependency>
  2.    <groupId>net.logstash.logback</groupId>
  3.    <artifactId>logstash-logback-encoder</artifactId>
  4.    <version>4.11</version>
  5. </dependency>
  6.        <!--实现slf4j接口并整合-->
  7.    <dependency>
  8.      <groupId>ch.qos.logback</groupId>
  9.      <artifactId>logback-classic</artifactId>
  10.      <version>1.2.3</version>
  11.    </dependency>
  12.    <dependency>
  13. <groupId>net.logstash.log4j</groupId>
  14. <artifactId>jsonevent-layout</artifactId>
  15. <version>1.7</version>
  16. </dependency>

4.6.2配置logaback的配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configurationdebug="false">
  3. <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
  4.    <propertyname="LOG_HOME"value="E:/logs"/>
  5.    <!-- 控制台输出 -->
  6.    <appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender">
  7.        <encoderclass="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  8.            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  9.            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  10.        </encoder>
  11.    </appender>
  12.    <!-- 按照每天生成日志文件 -->
  13.    <appendername="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
  14.        <rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  15.            <!--日志文件输出的文件名-->
  16.            <FileNamePattern>${LOG_HOME}/TestWeb.log_%d{yyyy-MM-dd}.log</FileNamePattern>
  17.            <!--日志文件保留天数-->
  18.            <MaxHistory>30</MaxHistory>
  19.        </rollingPolicy>
  20.        <encoderclass="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  21.            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  22.            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  23.        </encoder>
  24.        <!--日志文件最大的大小-->
  25.        <triggeringPolicyclass="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
  26.            <MaxFileSize>10MB</MaxFileSize>
  27.        </triggeringPolicy>
  28.    </appender>
  29.    <!-- show parameters for hibernate sql 专为 Hibernate 定制 -->
  30.    <loggername="org.hibernate.type.descriptor.sql.BasicBinder"  level="TRACE"/>
  31.    <loggername="org.hibernate.type.descriptor.sql.BasicExtractor"  level="DEBUG"/>
  32.    <loggername="org.hibernate.SQL"level="DEBUG"/>
  33.    <loggername="org.hibernate.engine.QueryParameters"level="DEBUG"/>
  34.    <loggername="org.hibernate.engine.query.HQLQueryPlan"level="DEBUG"/>
  35.    <!--myibatis log configure-->
  36.    <loggername="com.apache.ibatis"level="TRACE"/>
  37.    <loggername="java.sql.Connection"level="DEBUG"/>
  38.    <loggername="java.sql.Statement"level="DEBUG"/>
  39.    <loggername="java.sql.PreparedStatement"level="DEBUG"/>
  40.    <appendername="stash"class="net.logstash.logback.appender.LogstashTcpSocketAppender">
  41.        <destination>192.168.10.200:8082</destination>
  42.        <!-- encoder is required -->
  43.        <encodercharset="UTF-8"class="net.logstash.logback.encoder.LogstashEncoder"/>
  44.    </appender>
  45.    <!-- 日志输出级别 -->
  46.    <rootlevel="INFO">
  47.         <!-- 只有添加stash关联才会被收集-->
  48.        <appender-refref="stash"/>
  49.        <appender-refref="STDOUT"/>
  50.        <appender-refref="FILE"/>
  51.    </root>
  52. </configuration>
注意: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. publicclassTestEndpoints {
  9.    privatefinalstaticLogger logger = LoggerFactory.getLogger(TestEndpoints.class);
  10.    @GetMapping("/product/{id}")
  11.    publicString getProduct(@PathVariableString id) {
  12.        String data = "{"name":"李东"}";
  13.        logger.info(data);
  14.        return"product id : " + id;
  15.    }
  16.    @GetMapping("/order/{id}")
  17.    publicString getOrder(@PathVariableString id) {
  18.        return"order id : " + id;
  19.    }
  20. }
请求调用之后控制台的log
Logback+ELK+SpringMVC搭建日志收集服务器
之后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.  ]
  25. }
Logback+ELK+SpringMVC搭建日志收集服务器
基本上就这些步骤,希望看完之后,动手实践一下,谢谢阅读。

本站所有文章均来自互联网,如有侵权,请联系站长删除。极客文库 » Logback+ELK+SpringMVC搭建日志收集服务器
分享到:
赞(0)

评论抢沙发

评论前必须登录!