概要
现代互联网服务通常被实现为复杂的、大规模的分布式系统。
这些应用程序是由软件模块的集合构建的,这些模块可能由不同的团队使用不同的编程语言开发,并且可以跨越多个物理设施的数千台机器。
在这样的环境中,有助于理解系统行为和推理性能问题的工具是非常宝贵的。
在这里,我们介绍了 Google 的生产分布式系统跟踪基础设施 Dapper 的设计,并描述了如何满足我们的低开销、应用程序级透明性以及在超大规模系统上普遍部署的设计目标。
分布式系统跟踪工具,如何设计 span
在分布式系统跟踪工具中,"Span" 是一个核心概念,它代表着一个跟踪单元或操作的一部分。
Span 是分布式系统中的一个时间跨度,用于表示一个请求或操作在分布式系统中的起始点和结束点。
Jaeger、Zipkin 中的 spanId 是如何生成的?
在 Jaeger 和 Zipkin 这两个分布式跟踪系统中,Span ID 是通过不同的方法生成的。
下面分别介绍它们的生成方式:
Jaeger 中的 Span ID 生成:
目前许多系统项目之间的调用,有基于微服务的,有通过HTTP请求的,还有通过mq的。
那么在处理一次请求的时候,可能会调用多个服务或者调用多个其他系统功能,这样就会产生很多的日志,此时,如果想查看这一次调用的完整的请求链路的日志时,就会变得比较困难,虽然我们有一些集中的日志收集工具比如ELK,我们需要把这一些日志串联起来,这个问题很关键,因为如果没有串联起来,排查日志就是一件很困难的事情。
2、解决办法
一般来说,系统之间的调用不外乎两种:http和dubbo。当然还有通过中间件mq的形式(SpringCloud也是基于MVC容器调用),系统内部有task定时任务等。
我们希望实现全链路信息,但是代码中一般都会异步的线程处理。
MDC介绍
简介:
MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 、logback及log4j2 提供的一种方便在多线程条件下记录日志的功能。
MDC 可以看成是一个与当前线程绑定的哈希表,可以往其中添加键值对。MDC 中包含的内容可以被同一线程中执行的代码所访问。
当前线程的子线程会继承其父线程中的 MDC 的内容。当需要记录日志时,只需要从 MDC 中获取所需的信息即可。
MDC 的内容则由程序在适当的时候保存进去。对于一个 Web 应用来说,通常是在请求被处理的最开始保存这些数据
我们希望实现全链路信息,但是代码中一般都会异步的线程处理。
解决思路
我们可以对以前的 Runable 和 Callable 进行增强。
可以使用 ali 已经存在的实现方式。
核心的实现思路如下:
日志组件与 slf4j 整合之后,使用的是 slf4j 的 MDC。
快速实现
跨线程时,实现方式。
log4j2
您可以将 log4j2.component.properties 文件放在类路径中来控制 Log4j 2 行为的各个方面。
例如log4j2.component.properties的内容:
# https://logging.apache.org/log4j/2.x/manual/configuration.html#SystemProperties
# If true use an InheritableThreadLocal to implement the ThreadContext map.
# Otherwise, use a plain ThreadLocal.
# (Maybe ignored if a custom ThreadContext map is specified.)
# Default is false
# Modern 2.10+
log4j2.isThreadContextMapInheritable=true
# Legacy for pre-2.10
isThreadContextMapInheritable=true
日志管理包含日志数据存储、处理、分析和可视化,通过利用日志管理工具,可以监控性能趋势、解决问题、检测异常并优化整体系统性能。
近年来,开源日志管理解决方案在大家寻求灵活且经济有效的方式来管理现代系统典型的大量日志数据时,获得了显著的关注。
这些工具为商业产品提供了有力的替代方案,使各种规模的企业都能有效地管理日志数据。
在这篇文章中,我们将讨论六种开源日志管理工具,这些工具为在生产环境中有效管理日志数据提供了灵活且经济有效的解决方案。
我们将探讨它们的能力以及优缺点,以便你可以为自己的业务选择合适的解决方案。
1. OpenObserve
日志采集是整个日志基础设施中最基础最关键的组件之一,影响着企业内部数据的完整性以及实时性。
采集器作为数据链路的前置环节,其可靠性、扩展性、灵活性以及资源(CPU 和内存)消耗等,往往是最被关注的核心技术点。
目前开源的日志采集器比较多。各采集器官网上关于其产品特性的描述也都比较相似,基本上都包括日志搜集、转换、路由等功能,并且无一例外都会突出其为高性能而设计。如果单纯看产品文档,其实很难在前面提到的核心技术点上得出有区分度的结论,若直接在生产环境上使用,则无疑是高压线上走钢丝。
我所在的公司作为一家通信与信息服务类公司,线上存在海量日志采集的场景,对于采集效率要求极高。