This commit is contained in:
by931
2022-09-06 22:30:37 +08:00
parent 66970f3e38
commit 3d6528675a
796 changed files with 3382 additions and 3382 deletions

View File

@@ -173,7 +173,7 @@ function hide_canvas() {
<p>阿里云提供的 ARMS 就是包含上述功能的一套云观测系统,除了以上 4 点,它还提供了很多特有的功能,让你更方便地观测数据。</p>
<h4>提供功能</h4>
<p>ARMS 提供的功能主要分为 6 个部分前端监控、App 监控、应用监控、自定义监控、大盘展示、报警。我们依次来看。</p>
<p><img src="assets/CgqCHl9y50CAXyttAAEVMU02lVM306.png" alt="Lark20200929-154947.png" /></p>
<p><img src="assets/CgqCHl9y50CAXyttAAEVMU02lVM306.png" alt="png" /></p>
<p><strong>前端监控</strong>
<strong>前端监控指的是通过在页面中埋入脚本的形式,让阿里云接管前端的数据上报</strong>。其中就包含我们比较常见的脚本错误次数、接口请求次数、PV、UV 等统计数据也包含页面中脚本错误、API 访问等数据信息。通过统计数据你能快速了解前端用户的访问情况脚本错误、API 访问等数据,则可以帮助你了解页面出现错误或者接口访问时的详细信息。</p>
<p><strong>App 监控</strong>
@@ -205,7 +205,7 @@ ARMS 的应用监控和我之前讲的链路追踪的内容十分相似,其中
<p>在页面中,通过 script 标签引入一个 JavaScript 文件来进行任务处理,然后通过 pid 参数设定的应用 ID保证数据只会上传到你的服务中。</p>
<p><strong>网页运行时就会自动下载 bl.js 文件,下载完成后,代码会自动执行</strong>。当页面处理各种事件时,会通过异步的形式,上报当前的事件信息,从而实现对前端运行环境、执行情况的监控。常见的事件有:页面启动加载、页面加载完成、用户操作行为、页面执行时出现错误、离开页面。</p>
<p><strong>页面加载完成之后,会发送 HEAD 请求来上报数据</strong>。其中我们可以清楚的看到,在请求参数中包含 DNS、TCP、SSL、DOM、LOAD 等信息,分别代表 DNS 寻找、TCP 建立连接、SSL 握手这类,我在“<strong>05 | 监控指标:如何通过分析数据快速定位系统隐患?(上)</strong>”中讲到的通用指标,也包含 DOM 元素加载时间这类网页中的统计指标信息。如下所示:</p>
<p><img src="assets/CgqCHl9xdOCAJwMaAAFLBfVQzpI118.png" alt="1.png" /></p>
<p><img src="assets/CgqCHl9xdOCAJwMaAAFLBfVQzpI118.png" alt="png" /></p>
<p>数据上报后ARMS 就会接收到相对应事件中的完整数据信息,从而通过聚合的方式,存储和展示数据。在 ARMS 中针对应用有访问速度、JS 错误、API 请求这些统计指标和错误信息的数据ARMS 可以依据不同维度的数据了解到更详细的内容,包含页面、地理、终端、网络这 4 类。通过不同的数据维度,你也可以更有针对性地了解问题。</p>
<p><strong>App 监控</strong>
App 的监控方式与前端监控十分类似,都需要通过增加代码的方式进行。以 iOS 为例,如果我们想要接入性能分析功能,除了要引入相关依赖,还需要在代码中进行如下的声明:</p>
@@ -217,24 +217,24 @@ App 的监控方式与前端监控十分类似,都需要通过增加代码的
对于服务端监控来说ARMS 支持目前主流的 Java、PHP、Go 等语言,这里我以 Java 语言为例说明。</p>
<p>在 Java 中,主要通过字节码增强的形式采集数据。项目启动后,会采集机器中 JVM 中的统计指标、链路数据等信息,然后结合链路,分析出统计指标、拓扑图的信息,以及应用与各个组件之间的交互细节,比如数据库查询、消息 MQ 发送量等数据信息。</p>
<p>在服务端监控中,我们可以看到请求链路中的数据,在 ARMS 的显示中都是基于应用的维度,以树形进行展示的。比如我们有 2 个应用程序,上游服务通过“/first”接口地址对外提供服务同时又调用了下游服务的“/second”接口。如下图所示</p>
<p><img src="assets/Ciqc1F9xdSaAFrAgAACCWZpq9Zk452.png" alt="1.png" /></p>
<p><img src="assets/Ciqc1F9xdSaAFrAgAACCWZpq9Zk452.png" alt="png" /></p>
<p>这张图中展示了对应的上下游服务、发生时间、实例地址、调用方式、服务名称和时间轴信息。并且我们可以通过点击其中单个服务的“方法栈”按钮,查看其链路中关键方法的执行流程。点开之后的页面如下:</p>
<p><img src="assets/CgqCHl9xdTaAZPFUAADXO6lzCSY138.png" alt="1.png" /></p>
<p><img src="assets/CgqCHl9xdTaAZPFUAADXO6lzCSY138.png" alt="png" /></p>
<p><strong>在 ARMS 中服务端监控的功能中,最常用的是应用诊断部分,其中包含了实时诊断、异常分析、线程分析这 3 部分重点功能。</strong></p>
<ul>
<li><strong>实时诊断</strong>:默认情况下,服务端监控会通过采样的形式采集链路数据,以此来保证尽可能地减少对线上服务造成性能损耗。大多数情况下,指标数据都能快速体现出运行情况。在实时诊断中,会临时采取 100%采集,将所有的请求链路进行采集并上报,此时则可以看到指定时间段内的所有链路信息。</li>
</ul>
<p><img src="assets/Ciqc1F9xdZWAKUZzAAFEFkYvTqk447.png" alt="1.png" /></p>
<p><img src="assets/Ciqc1F9xdZWAKUZzAAFEFkYvTqk447.png" alt="png" /></p>
<ul>
<li><strong>异常分析</strong>:汇总当前应用下存在的各种异常信息,你可以了解你的应用中哪些异常信息是相对较多的。有限优化占比较多的错误信息,有利于提升服务整体的成功率。</li>
</ul>
<p>下图中汇总了服务中出现错误的异常信息,我们可以通过点击具体的接口名称,找到对应的接口,更细致地查看接口细则。</p>
<p><img src="assets/Ciqc1F9xdbGAB7dKAAFsqvOFvIM738.png" alt="1.png" /></p>
<p><img src="assets/Ciqc1F9xdbGAB7dKAAFsqvOFvIM738.png" alt="png" /></p>
<ul>
<li><strong>线程分析</strong>:列出当前应用实例中具体的线程或者线程池列表。我们可以根据线程数或者 CPU 耗时信息来对线程进行排序,更直观地看出哪个线程池中创建的线程比较多,或者具体哪个线程消耗 CPU 资源较多。</li>
</ul>
<p>如果程序出现执行缓慢的情况,我们可以通过 CPU 资源消耗来寻找原因。还可以通过点击每个线程中右侧的方法栈,来快速查看指定线程的执行方法栈信息。查询到问题的原因后,我们再结合具体的业务场景处理问题。</p>
<p><img src="assets/Ciqc1F9xdc6AJYAaAAGwMophZgc898.png" alt="1.png" /></p>
<p><img src="assets/Ciqc1F9xdc6AJYAaAAGwMophZgc898.png" alt="png" /></p>
<h3>总结</h3>
<p>以上,我介绍了云端观测的作用以及在阿里云的 ARMS 系统中的实践。如果你的系统部署在云端,那么云端观测就是你进行系统观测的不二选择。你通过云端观测解决过哪些问题呢?欢迎你在留言区分享。</p>
<p>下一节,我将带你了解如何将可观测系统与 OSS 系统相结合。</p>