您的位置:首页 > 数据库 > Redis

架构师之路----一步步搭建日志监控系统(Spring+SpringMVC+Redis+ELK)

2017-02-23 00:00 836 查看
摘要: 对于一个优秀的软件架构而言,软件初期的技术选型,开发过程中的系统分割(服务化,SOA,微服务),以及系统上线之后的监控运维,这三方面都是非常重要的。这一篇主要记录对一个线上项目进行监控,通过日志的采集与记录可以有效的观察程序的瓶颈和异常信息,对线上bug的排除有着极其重要的作用。

原文地址

https://my.oschina.net/u/1000241/blog/844651

技术选型

spring

spring mvc

redis

logback

ELK

开发web工程搭建

通过maven创建一个基于spring mvc的web工程,启动之后成功显示hello world(过程略)。

pom文件

<!--spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>

<!--Spring Web + Spring MVC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>

构建成功



引入logback进行日志输出

本次日志组件使用的是logback;

pom文件

<!--logback-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-spring</artifactId>
<version>0.1.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.12</version>
</dependency>

<!--logstash begin -->
<dependency>
<groupId>com.cwbase</groupId>
<artifactId>logback-redis-appender</artifactId>
<version>1.1.5</version>
</dependency>

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="LOGSTASH" class="com.cwbase.logback.RedisAppender">
<source>SpringELK</source>
<type>dev-type</type>
<tags>dev</tags>
<host>127.0.0.1</host>
<port>6379</port>
<key>logstash</key>
</appender>

<logger name="com.zcj.springELK" level="DEBUG"/>

<root level="DEBUG">
<appender-ref ref="LOGSTASH" />
</root>
</configuration>


由于项目比较小,采用了日志写入redis,大型项目可参考将redis替换为kafka。
商业项目可用logstash监听nginx access log,定时将日志上传kafka集群。

如log4j将日志发送到logstash:
#输出日志到logstash
log4j.appender.logstash=org.apache.log4j.net.SocketAppender
log4j.appender.logstash.RemoteHost=127.0.0.1
log4j.appender.logstash.port=4560
log4j.appender.logstash.ReconnectionDelay=60000
log4j.appender.logstash.LocationInfo=true

logstash input配置:
input {
log4j {
host => "127.0.0.1"
port => 4560
}
}

logstash有两个作用:

前端logstash做日志收集代理,作用同flume;

后端logstash做解析日志,连接es建立索引;

日志输出

private Logger log = LoggerFactory.getLogger(HomeController.class);

@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
log.error("Main错误");
return "/home/hello";
}

安装redis,并启动

(过程略)



下载并配置ELK

由于新版本的elasticsearch支持是jdk 1.8,我的jdk是1.7所以要谨慎选择elk版本。

logstash会通过redis读取日志,导入es中进行存储和索引操作。





将logstash,kibana配置为windows服务



启动web项目,并观察kibana日志状况



观察kibana



彩蛋



可以完整的看到spring mvc对应一个http请求的生命周期;

至此一个简单的基于spring+spring mvc+redis+elk的日志系统搭建成功了!

code 完整地址:https://github.com/zhangcj/springELK
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  架构师 Spring MVC ELK