logback MDC(Mapped Diagnostic Context)与分布式系统的跟踪系统
logback MDC(Mapped Diagnostic Context)与分布式系统的跟踪系统
logback官方文档中第8章Mapped Diagnostic Context给我们提供了一些分布式系统的跟踪系统实现的方法。
logback设计的一个目标之中的一个是对分布式应用系统的审计和调试。现实世界的分布式系统须要同一时候处理非常多client的请求。
在这样一个典型的多线程应用系统,不同的线程处理不同的client请求。
那我们怎样跟踪这些请求呢。目地想要知道请求响应的时间、请求成功与否、跟踪异常失败信息等等。
要做到这些功能,我们必须给每一个请求盖一个唯一的“邮戳”。
这个“邮戳”必须尾随着请求线程的前行而存放一些实用的信息。
logback框架中的MDC就是用来存放这些“邮戳”的。这个MDC的实现有点太普通,毕竟底层是个
<span style="font-size:18px;"> final InheritableThreadLocal<Map<String, String>> copyOnInheritThreadLocal = new InheritableThreadLocal<Map<String, String>>();
</span>
(类:ch.qos.logback.classic.util.LogbackMDCAdapter)
我们依据logback这个代码。我们能够用ThreadLocal保存我们自己定义的一个object类。这个类保存了一些调用过程中重要的信息(当然依据是否须要跟踪应用内部线程中还有线程处理业务的信息,能够选择InheritableThreadLocal)。
大多情况下。我们的应用要么是RPC服务。要么就是web应用。前端展示给用户的网页是应用请求的最開始端,当然这个普通情况下调用的是java web MVC框架服务。这个web MVC框架的主要任务那就是每当有请求时,必须自己主动保存我们想要保存的信息,logback这章文档也给出了最好的答案:servlet Filter。
ThreadLocal
public class UserServletFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//这里要保存一些信息到我们<strong>ThreadLocal</strong>内。是否打印日志信息
try {
chain.doFilter(request, response);
} finally {
if (successful ) {
//保存成功信息等等
}
//失败信息是否须要保存,是否打印日志信息
}
}
public void init(FilterConfig arg0) throws ServletException {
}
}
我们主要做的是保存什么信息到ThreadLocal。或者从请求信息那里得到什么信息然后保存在ThreadLocal里面。及日志的信息输出(日志的目的是收集日志进行分析)。
普通情况下,我们的web不只一个filter,所以我们要确保配置的这个filter一定要在其他之前声明。
那另一种应用。那就是提供RPC服务的应用,事实上质也是web应用,仅仅只是是代理模式封装了网络请求。
我们主要做的就是在封装的网络请求那里要传递这个ThreadLocal对象信息,RPC服务端再解析出来。
像Dubbo这个框架,自身实现了类似web的filter,非常easy让你扩展,但类似Hessian框架,那就可能必须改动源代码,自己实现了。
事实上,一些大公司已经有了这种分布式跟踪应用,比方:
- http://bigbully.github.io/Dapper-translation/
- http://www.cnblogs.com/zhengyun_ustc/p/55solution2.html
- http://htrace.incubator.apache.org/
Hydra - 京东开源的基于Dubbo的调用分布跟踪系统
你能够看看它们的思想。毕竟大公司的应用调用关系非常复杂,应对情况也比較多。本文仅仅是依据MDC提出的非常easy的实现思想。
logback MDC(Mapped Diagnostic Context)与分布式系统的跟踪系统的更多相关文章
- Dapper,大规模分布式系统的跟踪系统--转
原文地址:http://bigbully.github.io/Dapper-translation/ 概述 当代的互联网的服务,通常都是用复杂的.大规模分布式集群来实现的.互联网应用构建在不同的软件模 ...
- Dapper,大规模分布式系统的跟踪系统
概述 当代的互联网的服务,通常都是用复杂的.大规模分布式集群来实现的.互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发.可能使用不同的编程语言来实现.有可能布在了几千台服务器 ...
- MDC的使用(Mapped Diagnostic Context)的使用
通常我们可能会有大量的任务需要提交提交到线程池执行,但是此时如果不对日志添加唯一标识进行区分的话回到错乱一坨无法进行查看.因此可以对每一天日志添加唯一的标识,例如使用userid作为日志的唯一标志.这 ...
- logback MDC 使用
有时候想在logback日志中打印请求IP.流水号这些信息,可以通过MDC(Mapped Diagnostic Contexts)实现: MDC.put("requestNo", ...
- Logback MDC
Mapped Diagnostic Contexts (MDC) (译:诊断上下文映射) Logback的设计目标之一是审计和调试复杂的分布式应用程序.大多数实际的分布式系统需要同时处理来自多个客 ...
- 基于spring boot 和MDC实现 同一笔记录的日志跟踪实现--1.filter
同一个项目中,一般包含controller/servlet.service.dao等.1笔记录的日志贯穿于controller.service.dao中,在并发情况下,那如何找出该笔日志? 可通过以下 ...
- Net分布式系统之一:系统整体框架介绍
一.设计目的 从事.Net平台开发系统已有8年多了,一直思考搭建.Net分布式系统架构.基于window平台搭建的大型分布式系统不多,之前了解过myspace.stackoverflow等大型网站.搭 ...
- DLT(Diagnostic Log and Trace)嵌入式系统程序运行记录
http://blog.csdn.net/yanlinembed/article/details/49837975 DLT的使用有属于Application范畴与Context范畴.在使用DLT时,需 ...
- Log4j 与 Logback的ConversionPattern对比
为了能将log4j的配置无缝转到logback,需要了解其中ConversionPattern的差异,以下是对比表格,内容来自: log4j官网 logback官网 其中可能需要转换的地方主要有两块: ...
随机推荐
- hnust 聚宝盆
问题 A: 聚宝盆 时间限制: 1 Sec 内存限制: 128 MB提交: 663 解决: 282[提交][状态][讨论版] 题目描述 Grace是个善良的同学,他经常帮助同学解决问题.这天,他正 ...
- Spring框架配置beans.xml扩展
Spring学习笔记(二) 续Spring 学习笔记(一)之后,对Spring框架XML的操作进行整理 1 什么是IOC(DI) IOC = inversion of control 控制反转 D ...
- EasyUi DataGrid 获取选中行的checkbox
EasyUi DataGrid 获取选中行的checkbox var checked = $(":checkbox[name=ID]:checked"); console.log( ...
- 删除ARCSDE表空间和用户后,新建时出现error -1:O的解决办法
对于刚开始使用arcsde的用户,可能会出现各种问题,慢慢来就会找到解决办法 当我们删除用户和表空间时,在服务器本地还保留这sde.dbf文件(删除时选择了删除本地文件,不知道为什么), 我们可以换一 ...
- mysql查看语句执行状态的常见函数
row_count() 返回上一个insert.update.delete语句的影响行数 found_rows() 返回上一个select查到的记录条数 last_insert_id() 返回上一次插 ...
- 前端构建工具gulpjs的使用介绍及技巧(转)
http://www.cnblogs.com/2050/p/4198792.html gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学 ...
- SolrCloud在linux上的搭建
SolrCloud在linux上的搭建 1.环境准备 三台虚拟机的环境准备: 1. 更改主机名 2. 关闭selinux 3. 关闭防火墙 4. 更改主机名与ip地址的映射 5. 时钟同步 6. ss ...
- sql 学习相关问题
---恢复内容开始--- 1.sql上面改变列的数据类型是 ALTER TABLE table_nameALTER COLUMN column_name datatype mysql上面是ALTER ...
- mac 常用操作
1. 快速获取文件夹的位置: 打开文本 terminal 程序,将文件拖进去,路径会自己主动打印出来 2. 移动文件夹: 选中目标文件,然后使用 Command+C 复制,然后用 Command +O ...
- 线程池基础 ThreadPool基础
原文发布时间为:2010-10-27 -- 来源于本人的百度文章 [由搬家工具导入] 池(Pool)是一个很常见的提高性能的方式。比如线程池连接池等,之所以有这些池是因为线程和数据库连接的创建和关闭是 ...