Logback+ELK+SpringMVC搭建日志收集服务器
(转)
1.ELK是什么?
ELK是由Elasticsearch、Logstash、Kibana这3个软件的缩写。
- Elasticsearch是一个分布式搜索分析引擎,稳定、可水平扩展、易于管理是它的主要设计初衷
- Logstash是一个灵活的数据收集、加工和传输的管道软件
- Kibana是一个数据可视化平台,可以通过将数据转化为酷炫而强大的图像而实现与数据的交互将三者的收集加工,存储分析和可视转化整合在一起就形成了 ELK 。
2.ELK流程
ELK的流程应该是这样的:Logback->Logstash->(Elasticsearch<->Kibana)
- 应用程序产生出日志,由logback日志框架进行处理。
- 将日志数据输出到Logstash中
- Logstash再将数据输出到Elasticsearch中
- Elasticsearch再与Kibana相结合展示给用户
3.ELK官网
https://www.elastic.co/guide/index.html
4. 环境配置
4.1 基础环境
- 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
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为例来实现。
4.3 配置Elasticsearch
Elasticsearch是可以搭建集群,我这边只是解压后直接修改配置文件
elasticsearch.yml
cluster.name: es_cluster_1node.name: node-1path.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
这里有个问题:jvm.option.这个里面设置的-xms和-xmx一定要注意,我自定义的都是512m。
启动ElasticSearch,访问http://192.168.10.200:9200/
看到如上的界面就代表启动成功。
注意:安装过程中出现一些问题。在这篇文章中已经都给我们解决了。
http://www.cnblogs.com/sloveling/p/elasticsearch.html
4.4 配置logstash
解压
tar -zxvf /usr/local/services/logstash-5.2.2.tar.gz
- 1
测试配置,只是测试服务是否启动。还有这个文件是没有的,启动时加上这个路径就是以这个配置启动
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
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
修改配置,最后最加
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中的日志。
4.6 logback-ELK整合
4.6.1 本案列采用maven管理
pom.xml
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.11</version>
</dependency>
<!--实现slf4j接口并整合-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>net.logstash.log4j</groupId>
<artifactId>jsonevent-layout</artifactId>
<version>1.7</version>
</dependency>
4.6.2配置logaback的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="E:/logs" />
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/TestWeb.log_%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- show parameters for hibernate sql 专为 Hibernate 定制 -->
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
<logger name="org.hibernate.SQL" level="DEBUG" />
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
<!--myibatis log configure-->
<logger name="com.apache.ibatis" level="TRACE"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.10.200:8082</destination>
<!-- encoder is required -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<!-- 只有添加stash关联才会被收集-->
<appender-ref ref="stash" />
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
注意:logstash接收日志的地址 192.168.10.200:8082
4.6.3配置logstash-test.conf
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
4.6.4配置Controller添加日志输出
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
]
}
Logback+ELK+SpringMVC搭建日志收集服务器的更多相关文章
- ELK+kafka构建日志收集系统
ELK+kafka构建日志收集系统 原文 http://lx.wxqrcode.com/index.php/post/101.html 背景: 最近线上上了ELK,但是只用了一台Redis在 ...
- linux下利用elk+redis 搭建日志分析平台教程
linux下利用elk+redis 搭建日志分析平台教程 http://www.alliedjeep.com/18084.htm elk 日志分析+redis数据库可以创建一个不错的日志分析平台了 ...
- ELK+Kafka 企业日志收集平台(一)
背景: 最近线上上了ELK,但是只用了一台Redis在中间作为消息队列,以减轻前端es集群的压力,Redis的集群解决方案暂时没有接触过,并且Redis作为消息队列并不是它的强项:所以最近将Redis ...
- 基于Centos 7.4 搭建ELK整合SpringBoot日志收集
基于Centos 7.4搭建es7.12.0+logstash-7.12.0+kibana-7.12.0(ELK)整合SpringBoot日志收集 注:Skywalking和logstash可共用一个 ...
- springmvc项目 logback.xml配置 logstash日志收集
配置logback,需要一个转接的Appender,可以通过Maven依赖加到项目中: <dependency> <groupId>com.cwbase</groupId ...
- ELK快速搭建日志平台
1. 抛砖引入 <Elasticsearch> <Logstash> <Filebeat> <Filebeat模块与配置> <Kibana> ...
- 【ELK】5.spring boot日志集成ELK,搭建日志系统
阅读前必看: ELK在docker下搭建步骤 spring boot集成es,CRUD操作完整版 ============================================== 本章集成 ...
- 转: 基于elk 实现nginx日志收集与数据分析
原文链接:https://www.cnblogs.com/wenchengxiaopenyou/p/9034213.html 一.背景 前端web服务器为nginx,采用filebeat + logs ...
- ELK之生产日志收集构架(filebeat-logstash-redis-logstash-elasticsearch-kibana)
本次构架图如下 说明: 1,前端服务器只启动轻量级日志收集工具filebeat(不需要JDK环境) 2,收集的日志不进过处理直接发送到redis消息队列 3,redis消息队列只是暂时存储日志数据,不 ...
随机推荐
- es6学习2:变量的解构赋值
一:数组的解构赋值 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构 let [foo, [[bar], baz]] = [1, [[2], 3]]; foo bar ba ...
- 移动端 - adb shell常用命令
一.文件操作相关命令 //进入设备 adb shell //进入指定目录"/data/local/tmp" cd /data/local/tmp //查看目录 ls //进入根目录 ...
- Res-DenseNetSegmentation模型调试记录
参考:https://blog.csdn.net/AbstractSky/article/details/76769202 https://blog.csdn.net/jsliuqun/article ...
- 安装关系型数据库MySQL 安装大数据处理框架Hadoop
作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3161 1.Hadoop的介绍 Hadoop最早起源于Nutch.Nut ...
- 实验与作业(Python)-03 Python程序实例解析(函数、循环、range、turtle)
截止日期: 要求: 下周实验课前上交,做好后在实验课上检查可获取平时分. 做出进阶或选做的的请用清晰的标致标识出来,方便老师批改 本次作业:可提交也可不提交.作业算平时成绩. 本次作业内容量较大,请组 ...
- Tensorflow r1.12及tensorflow serving r1.12 GPU版本编译遇到的问题
1.git clone tensorflow serving 及tensorflow代码 2. ERROR: /root/.cache/bazel/_bazel_root/f71d782da17fd8 ...
- C# 获取文件扩展信息-应用名称/作者等
方案一:使用微乳封装的Shell包 添加nuget包:Microsoft.WindowsAPICodePack.Shell using Microsoft.WindowsAPICodePack.She ...
- 008 @Import作用
一: 1.说明 在应用中,有时没有把某个类注入到IOC容器中,但在运用的时候需要获取该类对应的bean,此时就需要用到@Import注解. 二:示例一 1.说明 基于007接着做的测试. 2.Bean ...
- JMeter压测“java.net.SocketException: Socket closed”解决方法 - Andrea-Pirlo
报错详情: 引起 java.net.SocketException: Socket closed 错误的原因通常是 未设置连接的超时时间. 解决方法: 该问题可以尝试通过以下方法解决. 如果在 HTT ...
- 仿log4j 写 log 代码
log4j 一直有个问题无法满足我,有可能我还不知道怎么去使用它. 就是他会把项目中所有的日志信息都记到一个文件里面,而业务系统往往需要根据某个业务流程查看日志分析. public class Bus ...