摘要:本文将就Observability中的日志聚合、分布式跟踪及具体应用中结合使用进行展开说明。html
Observability是一个最近几年开始在监控社区流行的术语。本文将Observability视为一种理念,一种监控的超集,包括监控、日志聚合、分布式跟踪,能够实时更深刻地观察系统。本文将就其中的日志聚合、分布式跟踪及具体应用中结合使用进行展开说明。前端
微服务、云和容器化架构的出现,改变了咱们构建系统的方式。应用程序是分布式的,并且瞬息万变。加之底层的基础设施和网络服务越发健壮,平常系统运维的大部分工做未来自应用程序层或者是不一样应用程序之间的复杂交互调用。git
对于复杂的跨系统调用,一次请求可能须要后台几台或上百台节点的支持。此时具体到一次请求已经很难经过人力确认其处理的完整流程,此时最能反映每次请求处理过程的应该是分布式追踪(下文简称调用链)。github
调用链是从一次具体请求的全局角度看待问题,当细粒具体到一个节点时,应用系统自身打印的日志最能说明当前节点处理逻辑。web
下面经过一张简图来讲明调用链和日志聚合作的事情:tomcat
调用链的做用是将一次请求所通过的全部节点和关键操做进行记录并汇总展现出来,就像图中绿色箭头,可以提供一个全局的视角去看待一次请求。服务器
日志聚合的做用是将全部节点和系统产生的日志进行汇总整理,并提供给用户一个有效并友好的查询能力。网络
可是咱们在具体使用过程当中每每是这样的:架构
从调用链进来之后发现了一个问题,而后切换到日志聚合去根据特定属性查询对应的日志信息,经过排查日志信息发现还须要再次去查询与之关联的调用链信息……如此往返屡次。框架
日志与调用链的探索式查询对于这种经典场景提供了一种新的闭环处理问题模式:
从调用链入口进入,能够根据调用链关联到具体应用的与当前调用链相关的日志,根据日志也能够关联到具体一条调用链;从日志入口进入,能够根据日志关联到与当前日志相关的具体一条调用链,根据一条调用链又能够关联到与当前调用链相关联的日志。并且两种模式能够相互切换。
用户小明经过日志聚合搜索发现有A系统一段日志有异常信息,此时他能够经过此条日志关联找出对应的调用过程a。经过观察a这条调用链小明发现,是因为a上的节点a[2]超时致使。此时小明能够从调用链关联到与节点a[2]相关的日志内容从而肯定问题所在(具体效果见下文)。
应用集群中的机器上部署的agent用于数据收集和上送,探针内嵌在容器(tomcat等)用于为应用画像和收集应用信息
agent将处理事后的日志经过mq上送到监控服务器
监控服务器将采集上来的数据进行处理并将其存入ES,方便用户经过特定特征快速定位
将数据进行可视化展现,并提供方便的可视化自定义查询服务
在介绍调用链和日志聚合具体实现以前须要明确的几个概念:
经过在中间件启动时动态将咱们本身的代码行为植入到中间件的各类行为中的技术。好比在tomcat启动时动态在tomcat处理请求的开始位置添加代码劫持,则可以实如今tomcat执行处理请求逻辑以前进行服务调用画像等功能。更多能力和实现方式能够参考:chuansong.me/n/603660351…
经过中间件劫持技术在服务调用最前端产生且可以惟一肯定一条调用链的id。
主要实现逻辑:
核心逻辑以下图:
调用链部分分为:模型设计、服务端信息收集(轻/重)、方法级信息收集(轻/重)、客户端信息收集(轻/重)、调用链协议设计(轻/重)、调用链上下文传递、调用信息记录及传递、调用数据统计处理几个关键过程。关键技术为中间件劫持加强框架、调用模型设计和调用链上下文传递。
应用日志部分分为:日志归集,日志内容处理传输,服务端日志处理及存储等几个关键步骤。关键技术为:服务画像技术、日志归集。
经过特定条件搜素出关心的具体一次调用过程,点击进入调用的详细过程界面。
点击右侧的关联按钮可快速定位到与之相关联日志。
经过特定特征(图中为按照Hello关键字进行搜索)搜索出符合条件的日志。
经过点击具体日志便可进入对应的调用过程。
更多详情:uavorg.github.io/documents/u…
下载UAVStack的源码(github.com/uavorg)
下载AllInOne开发演示版(uavorg.github.io/main/)
做者:李崇
来源:宜信技术学院