从Infra&应用中采集指标
我们首先讨论一个流行的框架,用于确定要跟踪的最关键指标。 然后,将介绍如何将这些指标应用于整个部署中的组件。 这个过程将首先关注单个服务器的基础资源,然后调整范围以覆盖越来越大的关注领域。
SRE 监控的四个黄金度量指标
Latency
Latency是完成操作所需时间的度量。 测量方式的具体情况取决于组件,但一些常见的类似物是处理时间、响应时间或行程时间。
测量Latency可以让您具体衡量完成特定任务或操作所需的时间。 捕获各种组件的延迟使您可以构建系统不同性能特征的整体模型。 这可以帮助您找到瓶颈,了解哪些资源需要最多的时间来访问,并注意何时操作突然需要比预期更长的时间。 SRE书的作者强调在计算延迟时区分成功和不成功请求的重要性,因为它们可能具有非常不同的配置文件,可能会影响服务的平均值。
Traffic
Traffic衡量组件和系统的“繁忙程度”。 这可以捕获服务的负载或需求,以便您可以了解系统当前正在执行多少工作。
持续的高或低流量数字可能表明服务可能需要更多资源,或者存在问题导致流量无法正确路由。 然而,在大多数情况下,Traffic速率对于帮助理解通过其他信号出现的问题最为有用。 例如,如果Latency增加超出可接受的水平,则能够将该时间范围与流量峰值关联起来会很有帮助。Traffic可用于了解可处理的最大流量以及服务在不同负载阶段如何降级或失败。
Errors
跟踪Errors以了解组件的运行状况以及它们未能正确响应请求的频率非常重要。 某些应用程序或服务会在干净、现成的界面中暴露错误,但可能需要额外的工作才能从其他程序收集数据。
区分不同类型的Errors可以更轻松地查明影响应用程序的问题的确切性质。 这也提供了警报方面的灵活性。 如果出现一种类型的Errors,你可能需要立即收到警报,但对于另一种类型的Errors,只要错误率低于可接受的阈值
Saturation
饱和度(Saturation)衡量给定资源的使用量。 对于具有明确总容量的资源,经常使用百分比或分数,但对于最大容量定义不太明确的资源,可能需要更具创造性的测量。
饱和度数据提供有关服务或应用程序有效运行所依赖的资源的信息。由于一个组件提供的服务可能会被另一个组件使用,因此饱和度是揭示底层系统容量问题的粘合指标之一。
监控的应用环境
- Individual server components
- Applications and services
- Collections of servers
- Environmental dependencies
- End-to-end experience
Metrics to Collect for Individual server components
由于 USE 方法和四个黄金指标之间存在显着重叠,因此我们可以使用他的一些建议作为基础来确定要从服务器收集哪些数据。
USE (utilization, saturation, and errors)一种性能分析方法
CPU
- Latency: Average or maximum delay in CPU scheduler
- Traffic: CPU utilization
- Errors: Processor specific error events, faulted CPUs
- Saturation: Run queue length
Memory
- Latency: (none - difficult to find a good method of measuring and not actionable)
- Traffic: Amount of memory being used
- Errors: Out of memory errors
- Saturation: OOM killer events, swap usage
Storage Devices
- Latency: average wait time (await) for reads and writes
- Traffic: read and write I/O levels
- Errors: filesystem errors, disk errors in /sys/devices
- Saturation: I/O queue depth
Networking
- Latency: Network driver queue
- Traffic: Incoming and outgoing bytes or packets per second
- Errors: Network device errors, dropped packets
- Saturation: overruns, dropped packets, retransmitted segments
注意,容器技术栈下,还应该包括Container/Pod 的采集
Metrics to Collect for Applications and Services
这里使用SRE的四个黄金度量指标(client-server加购)
- Latency: The time to complete requests
- Traffic: Number of requests per second served
- Errors: Application errors that occur when processing client requests or accessing resources
- Saturation: The percentage or amount of resources currently being used
Metrics to Measure Collections of Servers and Their Communication
大多数服务,尤其是在生产环境中运行时,将跨越多个服务器实例以提高性能和可用性
在分布式服务中,除了网络本身,服务器组的健康和性能比应用于任何单个主机的相同措施更为重要。冗余的多主机服务依赖于多个主机的资源,同时不直接依赖于任何一个Server
- Latency: Time for the pool to respond to requests, time to coordinate or synchronize with peers
- Traffic: Number of requests processed by the pool per second
- Errors: Application errors that occur when processing client requests, accessing resources, or reaching peers
- Saturation: The amount of resources currently being used, the number of servers currently operating at capacity, the number of servers available.
Metrics Related to External Dependencies and the Deployment Environment
还有一些有价值的指标超出了你的系统控制范围。外部依赖项包括与托管提供商相关的内容以及你的应用程序构建的任何服务。这些代表着你无法直接管理的资源,但可能影响你保证自己服务的能力。例如支付服务、物流服务等
由于外部依赖项代表着关键的资源,在完全停机的情况下唯一的解决策略之一是切换操作到另一个提供商。即使在切换困难的情况下,了解影响你的应用程序的外部事件是非常有价值的。
- Latency: Time it takes to receive a response from the service or to provision new resources from a provider
- Traffic: Amount of work being pushed to an external service, the number of requests being made to an external API
- Errors: Error rates for service requests
- Saturation: Amount of account-restricted resources used (instances, API requests, acceptable cost, etc.)
Metrics that Track Overall Functionality and End-to-End Experience
用户体验维度的采集和监控,如用户下单、支付等经过多个服务完成一个业务操作。这些指标通常设置的报警都非常重要,直接反应用户交互体验和质量。在国内我们一般把这类指标成为“业务监控”。
相比上面的几项监控,这里的监控可以有效减低报警疲劳的问题
- Latency: The time to complete user requests
- Traffic: Number of user requests per second
- Errors: Errors that occur when processing client requests or accessing resources
- Saturation: The percentage or amount of resources currently being used