相对于传统的软件运行环境,云数据分布式托管环境虽然解决了很多应用业务在基础设施搭建、运维管理等方面的问题和成本困难,使得应用服务搭建的门槛降低,但是其复杂的云环境,也大大增加了对其监控、诊断和故障排查的难度。
若要成功管理运行在云环境中应用程序,需要主动监视其行为,并熟悉如何诊断和排查自己的应用程序及其依赖的云服务技术的所有方面的问题。而OSS存储服务为用户提供了可以简化监控、诊断和排查基于云的应用程序中关于存储问题的过程。作为OSS的用户,你可以利用OSS提供的监控服务(即将上线)持续监视应用程序所用的存储服务是否出现任何异常的行为,并通过报警服务(即将上线)及时发现。另外,配合使用logging设置功能收集更详细的数据并深入地分析问题。从监控和日志记录获取的诊断信息将有助于确定应用业务所遇到问题的根本原因。然后,可以排查该问题,并确定解决问题的相应执行步骤。
因为OSS监控服务功能即将上线,所以,这里先抛砖引玉介绍介绍如何能够更好的利用我们的监控服务和现有工具来为你服务!
这里主要描述如何使用OSS监控服务、logging日志记录功能以及其他第三方工具来监控、诊断和排查与应用业务使用OSS存储服务时遇到相关的问题,帮助用户达到如下目标:
本章内容组织如下:
这是系统有关系统稳定性和用户是否正确使用系统的最重要指标,任何小于100%的情况说明某些请求出现失败的情况。
当然,可用性也可能因为一些系统优化因素出现暂时性的低于100%,比如为了负载均衡而出现分区迁移,此时OSS的SDK能够提供相关的重试机制无缝处理这类间歇性的失败情况,使得业务端无感知。
另外,对于有效请求率低于100%的情况,用户需要根据自己的使用情况进行分析,可以通过请求分布统计或者请求状态详情确定错误请求的具体类型,跟踪诊断确定原因,并故障排除。当然,对于一些业务场景,出现有效请求率低于100%是符合预期的,比如,用户需要先check访问的object是否存在,然后根据object的存在性采取一定的操作,如果object不存在,检测object存在性的读取请求必然会收到404错误(资源不存在错误)那么必然会导致该指标项低于100%。
对于系统可用性指标要求较高的业务,可以设置其报警规则,当低于预期阈值时,进行报警。
该指标从总访问量角度来反应系统运行状态。当有效请求数不等于总请求数时表明某些请求出现失败的状况。
用户可以关注总请求数或者有效请求数的波动状况,特别是突然上升或者下降的情况,需要进行跟进调查,可以通过设置报警规则进行及时通知,对于存在周期性状况的业务,可以设置为环比报警规则。
当可用性或者有效请求率低于100%(或者有效请求数不等于总请求数时),可以通过查看请求状态分布统计快速确定请求的错误类型。
请求状态详情在请求状态分布统计的基础上进一步细化请求监控状态,可以更加深入、具体的监视某类请求。
监控服务提供了以下几个监控项用来监控性能相关的指标。
以上各个监控项(除流量)都分别从API操作类型进行分类监控:
延时指标显示API操作类型处理请求所需的平均和最大时间。其中E2E延时是端到端延迟指标,除了包括处理请求所需的时间外,还包括读取请求和发送响应所需的时间还有请求在网络上传输的延迟;而服务器延时只是请求在服务器端被处理的时间,不包括与客户端通信的网络延时。所以当出现E2E延时突然升高的情况下,如果服务器延时并没有很大的变化,那么可以判定是网络的不稳定因素造成的性能问题,排除OSS系统内部故障。
成功请求操作分类除了以上提到的API之外,还提供以下两个API操作类型请求数量的监控:
流量指标从用户或者具体的Bucket层级的总体情况进行监控,关注公网、内网、cdn回源以及跨域复制等场景中的网络资源占用状况。
对于性能类指标项,我们需要重点关注其突发的异常变化,例如,平均延时突然出现尖峰,或者长时间处于高出正常请求延时的基线上方等等。用户可以通过对性能指标设置对应的报警规则,对于低于或者超过阈值时及时通知到相关人员。对于有业务周期性的业务,可以设置环比报警规则(环比一周、环比一天或者环比一个小时)。
攥写本文档时,OSS监控服务只支持监控存储大小、公网流出流量、Put类请求数和Get类请求数(不包括跨区域复制流出流量和cdn流出流量),而且不支持对计量数据的报警设置和OpenAPI的读取。
OSS监控服务对Bucket层级的计量监控数据进行小时级别的粒度采集,可以在具体的Bucket监控视图中查看其持续的监控趋势图。用户可以根据监控视图分析其业务的存储服务资源使用趋势并且进行成本的预估等。
OSS监控服务还提供了用户层级和Bucket层级两个不同维度的当月消费的资源数统计,即从当月1号开始到目前的账户或者某个Bucket所消耗的OSS资源总量,每小时更新。能帮助用户实时了解本月使用资源的情况并计算消费。
注: 监控服务中提供的计量数据是尽最大可能推送的,可能会与实际消费账单中产生差异,请以费用中心的数据为准。
对于应用程序的性能判断多带有主观因素,用户需要根据具体的业务场景确定满足业务需求的基准线,来判定性能问题。另外,从客户端发起的请求,能引起性能问题的因素贯穿整个请求链路。比如OSS存储服务load过大、客户端tcp配置问题或网络基础结构中存在流量瓶颈等。
因此诊断性能问题首先需要设置合理的基准线,然后通过监控服务提供的性能指标确定性能问题可能的根源位置,然后根据日志查到详细的信息以便进一步诊断并且排除故障。
在下文“故障排除”中例举了很多常见的性能问题和排查措施,可以参考。
客户端应用程序会在请求发生错误是接收到服务端返回的相关错误信息,监控服务也会记录并显示各种错误类型请求的计数和占比。用户也可以通过检查服务器端日志、客户端日志和网络日志来获取相关单个请求的详细信息。通常,响应中返回的HTTP状态代码和OSS错误码以及OSS错误信息都指示请求失败的原因。
相关错误响应信息参考OSS错误响应。
OSS存储服务为用户的请求提供服务端日志记录功能,能帮助用户记录端到端的详细请求日志跟踪。
有关如何开启并使用logging功能,请参考日志设置。
有关日志服务的命名规则以及记录格式等详细信息,参见访问日志记录。
在许多情况下,通过logging功能能够记录的存储日志和客户端应用程序的日志数据已足以诊断问题,但在某些情况下,可能需要更详细的信息,这时我们需要使用网络日志记录工具。
因为,捕获客户端和服务器之间的流量,可以更详细地获取客户端和服务器之间交换的数据以及底层网络状况的详细信息,帮助问题的调查,例如,在某些情况下,用户请求可能会报告一个错误,而服务器端日志中却看不到任何该请求的访问情况,这时就可以使用OSS的日志服务功能记录的日志记录来调查该问题的原因是否出在客户端上,或者使用网络监视工具来调查网络问题。
最常用的网络日志分析工具之一应该是Wireshark。该免费的协议分析器运行在数据包级别,能够查看各种网络协议的详细数据包信息,从而可以排查丢失的数据包和连接问题。
WireShark使用参考WireShark安装使用。
更详细的WireShark操作参见WireShark用户指南。
请求从客户端应用进程发起,通过网络环境,进入OSS服务端被处理,然后响应从服务端回到网络环境,被客户端接收。整个过程,是一个端到端的跟踪过程。关联客户端应用程序日志、网络跟踪日志、和服务端日志,有助于排查问题的详细信息根源,发现潜在的问题。
在OSS存储服务中,提供了RequestID作为关联各处日志信息的标识符。另外,通过日志的时间戳,不仅可以迅速查找和定位日志范围,还能够了解在请求发生时间点范围内,客户端应用、网络或者服务系统发生的其他事件,有利于问题的分析和调查。
OSS服务始会为接收的每个请求分配唯一的服务器请求ID,即RequestID。在不同的日志中,RequestID位于不同的字段中:
使用时间戳来查找相关日志项,需要注意客户端和服务器之间可能存在的时钟偏差。在客户端上基于时间戳搜索logging功能记录的服务器端日志条目时,应加/减15分钟。
通过前面的介绍,平均E2E延时与平均服务器延时的区别。所以,产生高E2E延时、低服务器延时可能的原因有两个:
客户端应用程序响应速度慢的可能原因包括:
通常,因网络导致的高端到端延迟是由暂时状况导致的。可以使用Wireshark调查临时和持久网络问题,例如数据包丢失问题。
WireShark使用参考WireShark安装使用。
客户端出现请求延时高的情况,最可能的原因是请求还未达到服务端就出现了延时。所以应该调查来自客户端的请求为什么未到达服务器。
客户端延迟发送请求可能的客户端原因有两个:
[Server]Unable to execute HTTP request:
或者
[Client]Unable to execute HTTP request:
Retrying on
如果客户端没有问题,则应调查潜在的网络问题,例如数据包丢失。可以使用工具(如 Wireshark )调查网络问题。
WireShark使用参考WireShark安装使用。
对于系统内部或者不能通过优化方式解决问题,请提供客户端日志或者loggging功能记录的日志信息中的RequestID,联系系统工作人员协助解决。
对于服务端错误的增加,可以分为两个场景考虑:
对于这一类问题,用户需要调整客户端程序中的重试策略,采用退让机制,这样不仅可以有效避免因为优化或者升级等系统操作(如为了系统负载均衡进行分区迁移等)暂时导致的服务不可用问题,还可以避开业务峰值的压力。
如果服务端错误持续在一个较高的水平,那么需要提供客户端日志或者logging功能记录的RequestID,联系后台工作人员协助调查。
对于网络错误请求的增加,原因是客户端在存储服务超时到期之前断开了连接。对于这样的问题,需要调查客户端中的代码,了解客户端断开与存储服务连接的原因和时间。
用户可以使用工具(如Wireshark)调查客户端的网络连接问题。
WireShark使用参考WireShark安装使用。
当监控中的客户端授权错误请求数增加,或者客户端程序接收到大量的403请求错误,那么最常见的可能原因有如下几个:
客户端收到404错误说明用户试图访问不存在的资源信息。当看到监控服务上资源不存在错误请求增加,那么最大可能是以下问题导致的:
有效请求率为请求返回的HTTP状态码为2xx/3xx的请求数占总请求的比例。状态码为4XX和5XX范围内的请求将计为失败并降低该比例。
客户端其他错误请求是指除服务端错误请求(5xx)、网络错误请求(499)、客户端授权错误请求(403)、客户端资源不存在错误请求(404)和客户端超时错误请求(408或者OSS错误码为RequestTimeout的400请求)这些错误请求之外的请求。
可以通过查看logging功能记录的服务端日志确定这些错误的具体类型,可以在OSS错误响应上找到存储服务返回的常见错误码的列表,然后检查客户端代码中查找具体原因进行解决。
储存大小异常增加,如果不是上载类请求量增多,一般常见的原因应该是清理操作出现了问题,可以根据下面两个方面进行调查:
如果前面的故障排除章节未包括你遇到的存储服务问题,则可以采用以下方法来诊断和排查你的问题。
首先,查看OSS监控服务,了解与预期的基准行为相比是否存在任何更改。监控视图,可能能够确定此问题是暂时的还是永久性的,并可确定此问题影响哪些存储操作。
然后,可以使用监控信息来帮助你搜索logging功能记录的服务端日志数据,以获取相关时间点发生的任何错误信息。此信息可能会帮助你排查和解决该问题。
如果服务器端日志中的信息不足以成功排查此问题,则可以使用客户端日志来调查客户端应用程序,或者配合使用网络工具(Wireshark等)调查你的网络问题。