今天给大家带来的是logback+ELK+SpringMVC 日志收集服务器搭建。接下来我会介绍ELK是什么?logback是什么?以及搭建的流程。
ELK是由Elasticsearch、Logstash、Kibana这3个软件的缩写。
Elasticsearch是一个分布式搜索分析引擎,稳定、可水平扩展、易于管理是它的主要设计初衷
Logstash是一个灵活的数据收集、加工和传输的管道软件
Kibana是一个数据可视化平台,可以通过将数据转化为酷炫而强大的图像而实现与数据的交互将三者的收集加工,存储分析和可视转化整合在一起就形成了 ELK 。
ELK的流程应该是这样的:Logback->Logstash->(Elasticsearch<->Kibana)
应用程序产生出日志,由logback日志框架进行处理。
将日志数据输出到Logstash中
Logstash再将数据输出到Elasticsearch中
Elasticsearch再与Kibana相结合展示给用户
https://www.elastic.co/guide/index.html
jdk 1.8
Centos 7.0 X86-64 注意:ELK服务不能在root用户开启。需要重新创建用户。 下载ELK相关服务压缩包 创建ELK用户和目录并赋予权限,方便统一管理。
[root@localhost /]# mkdir elsearch
[root@localhost /]# groupadd elsearch
[root@localhost /]# useradd -g elsearch elsearch
[root@localhost /]# chown -R elsearch:elsearch /elsearch
[root@localhost /]# su elsearch
[elk@localhost /]$ cd elsearch
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为例来实现。
Elasticsearch是可以搭建集群,我这边只是解压后直接修改配置文件
elasticsearch.yml
cluster.name: es_cluster_1
node.name: node-1
path.data: /usr/local/services/elasticsearch-5.2.2/data
path.logs:/usr/local/services/elasticsearch-5.2.2/logs
network.host: 192.168.10.200
http.port: 9200
启动ElasticSearch,访问http://192.168.10.200:9200/
看到如上的界面就代表启动成功。
注意:安装过程中出现一些问题。在这篇文章中已经都给我们解决了。 http://www.cnblogs.com/sloveling/p/elasticsearch.html
解压
tar -zxvf /usr/local/services/logstash-5.2.2.tar.gz
测试配置,只是测试服务是否启动。还有这个文件是没有的,启动时加上这个路径就是以这个配置启动 vi /usr/local/services/logstash-5.2.2/config/logstash.conf
input {
stdin { }
}
output {
stdout {
codec => rubydebug {}
}
}
logstash以配置文件方式启动有两种:
列表内容 logstash -f logstash-test.conf //普通方式启动
logstash agent -f logstash-test.conf --debug//开启debug模式
./bin/logstash -f config/logstash.conf --debug
启动成功会看到如下的结果:
这是时候,我们在控制台随便输入都可以被收集
n"=>"1", "host"=>"localhost", "message"=>"我们都是好好"}}
{
"@timestamp" => 2017-08-18T05:45:25.340Z,
"@version" => "1",
"host" => "localhost",
"message" => "我们都是好好"
}
[2017-08-18T13:45:26,933][DEBUG][logstash.pipeline ] Pushing flush onto pipeline
[2017-08-18T13:45:31,934][DEBUG][logstash.pipeline ] Pushing flush onto pipeline
配置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
修改配置,最后最加
server.port: 8888
server.host: "192.168.10.200"
elasticsearch.url: "http://192.168.10.200:9200"
启动
[elsearch@localhost root]$ /usr/local/services/kibana-5.2.2-linux-x86_64/bin/kibana &
访问地址 http://192.168.10.200:8888
基本ELK的环境的搭建就ok了,我们接下来学习logback-ELK整合来收集JavaEE中的日志。
pom.xml
net.logstash.logback
logstash-logback-encoder
4.11
ch.qos.logback
logback-classic
1.2.3
net.logstash.log4j
jsonevent-layout
1.7
"1.0" encoding="UTF-8"?>
debug="false">
name="LOG_HOME" value="E:/logs" />
name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
${LOG_HOME}/TestWeb.log_%d{yyyy-MM-dd}.log
30
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
10MB
name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
name="org.hibernate.SQL" level="DEBUG" />
name="org.hibernate.engine.QueryParameters" level="DEBUG" />
name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
name="com.apache.ibatis" level="TRACE"/>
name="java.sql.Connection" level="DEBUG"/>
name="java.sql.Statement" level="DEBUG"/>
name="java.sql.PreparedStatement" level="DEBUG"/>
name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
192.168.10.200:8082
charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
level="INFO">
ref="stash" />
ref="STDOUT" />
ref="FILE" />
注意:logstash接收日志的地址192.168.10.200:8082
vi logstash-test.conf
input {
tcp {
host => "192.168.10.200"
port => 8082
mode => "server"
ssl_enable => false
codec => json {
charset => "UTF-8"
}
}
}
output {
elasticsearch {
hosts => "192.168.10.200:9200"
index => "logstash-test"
}
stdout { codec => rubydebug {} }
}
启动收集
./bin/logstash -f config/logstash-test.conf --debug
package com.example.demo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestEndpoints {
private final static Logger logger = LoggerFactory.getLogger(TestEndpoints.class);
@GetMapping("/product/{id}")
public String getProduct(@PathVariable String id) {
String data = "{\"name\":\"李东\"}";
logger.info(data);
return "product id : " + id;
}
@GetMapping("/order/{id}")
public String getOrder(@PathVariable String id) {
return "order id : " + id;
}
}
请求调用之后控制台的log
之后Kibana中就可以收集到log
{
"_index": "logstash-test",
"_type": "logs",
"_id": "AV3zu4jiJKLF9tWSjmZj",
"_score": null,
"_source": {
"@timestamp": "2017-08-18T05:04:51.698Z",
"level": "INFO",
"port": 56525,
"thread_name": "http-nio-8081-exec-10",
"level_value": 20000,
"@version": 1,
"host": "192.168.10.165",
"logger_name": "com.example.demo.TestEndpoints",
"message": "{\"name\":\"李东\"}"
},
"fields": {
"@timestamp": [
1503032691698
]
},
"sort": [
1503032691698
]
基本上就这些步骤,希望看完之后,动手实践一下,谢谢阅读。