Arganzheng's Blog

stay hungry, stay foolish

nginx URL rewrite自动增加请求参数问题

我们需要将一个URL在服务端进行重定向。比如请求: http://study.arganzheng.me/goto?targetUrl=http%3A%2F%2Freading.arganzheng.me%2Fbook%2Fshare&xxx=yyy,将重定向到targetUrl去:http://reading.arganzheng.me/book/share 去。 那么使用ngi...

应用如何记录集中日志

对于分布式系统,提供一个集中式的日志监控平台是非常有必要的,具体参见笔者前面的一片文章:日志监控系统。这里介绍一下客户端要怎么使用。 首先需要配置pom.xml,引入logging-client包: <dependency> <groupId>com.baidu.global.mobile.server.logging.client</groupId>...

kibana学习笔记

配置链接ElasticSearch数据源 If Kibana and Elasticsearch are on the same host, and you’re using the default Elasticsearch port, then you’re all set. Kibana is configured to use that setup by default! If ...

ElasticSearch如何实现按天翻滚索引

最近在做集中式日志,将应用的日志保存到Elasticsearch中,结合kibana实现集中化日志监控和报警。在设计ES存储的时候。考虑到日志的特殊性,打算采用Daily Indices方式。名称为:log-${application}-YYYY.MM.DD。每天会自动创建一个新的索引,类似于log4j的DailyRollingFileAppender,一来减少活跃索引的大小,二来方便存档和...

Spring MVC的异常处理机制

Spring MVC在找到你的handler之后,会通过反射调用handler的方法: public class InvocableHandlerMethod extends HandlerMethod { /** * Invoke the handler method with the given argument values. */ private Object inv...

如何防止表单重复提交

因为安全扫描的问题,它会把线上真实的访问流量进行重放,而且重发时间间隔比较短,导致一个请求变成多次请求,也就是重复提交了。那么怎样解决这个问题呢? 一般来说是通过request token来防止重复提交的。具体实现机制是: 当客户端请求页面时,服务器会通过token标签生成一个随机token,并且将该token放置到全局session当中,然后将该随机数发向客户端;如果客户第一次提交,那...

配置tomcat的access_log

一般应用都是跑在nginx后面,nginx本身就有access_log了,不需要重复配置tomcat的access_log。不过在测试环境,可能是直接访问tomcat。特别是一些别有用心的程序,比如安全扫描程序。 今天就发现一个tomcat应用有很多莫名其妙的请求。看了一下nginx的access_log,没有发现请求日志,但是应用配置的log4j日志确实很多异常的请求日志。于是配置了一下...

分布式RPC框架如何进行服务寻址和分发

所谓分布式,就是一个服务可能分布在多个Server上。另外,一个Server往往有多个Service,而每个Service有多个方法(服务)。为了对业务透明,服务框架一般会屏蔽远程分布式调用的细节,让用户觉得这就是一个本地服务,也就是说客户端可能就是这样一个调用: String result = HelloService.sayHello(); 至于这个HelloService的say...

Quartz突然停止执行问题

现象 线上的API监控系统有一段时间没有发报警邮件了,觉得有点异常,测试同学特意写了一个抛出错误的python校验器,结果发现也是没有收到邮件。 原因 表面现象是没有收到报警邮件,那么有可能是: job没有执行 校验器没有错误:根据前面的验证,可以直接排除。 邮件没有发送 通过在job执行前后打日志,发现一个问题: 有些job只有start日志,没有end日志,也...

Java文件读取支持timeout

我们知道系统的IO操作一般分为阻塞IO和异步IO两种。对于Java来说,1.4之前的IO是Blocking IO,1.4引入的NIO其实也是,但是它有两个好处: select可以同时监听多个文件描述符,而这些文件描述符其中的任意一个进入读就绪状态,select()函数就可以返回。这也是它被称为IO复用的原因。 如果select返回的时候,调用相应的Blocking IO操作一般不会...