SRE:可观察性:Metric命名空间与结构(一)

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
简介: > 原文:https://medium.com/dm03514-tech-blog/sre-observability-metric-namespaces-and-structures-12ffcf5a5bdc 结构化的metric命名空间对于需要快速获取信息的故障场景非常重要。为了能支持广泛的查询和扩展场景,需要仔细考虑metric名称和维度。我发现其中一种为灵活metric建模的方式就是

原文:https://medium.com/dm03514-tech-blog/sre-observability-metric-namespaces-and-structures-12ffcf5a5bdc

结构化的metric命名空间对于需要快速获取信息的故障场景非常重要。为了能支持广泛的查询和扩展场景,需要仔细考虑metric名称和维度。我发现其中一种为灵活metric建模的方式就是将他们认为是树。将metric想象成树可以有以下好处:查看特定子集的数据,根据其子集定义度量基准与设定阈值。这些度量命名空间的属性可以进一步回答更多具体的问题并可以下钻到数据的子集并像看度量指标一样观察度量指标的组成部分。这些概念很熟悉,因为他们是想Prometheus与DogStatsD这种云原生监控解决方案的第一级想法。

什么

度量空间是概念意义上的度量指标活着的空间。他们的边界通常是一个数据库或一个账号:
image.png
度量空间不只是度量指标存活的地方,也包含度量空间的结构。正确的命名与结构可以有很大的好处。以上图的度量命名空间没有明显的结构。每个度量指标都是浮在这个空间上的。他们除了表示他们存在相同的度量空间中外,没有任何其他内容。在没有结构化的设置里每个度量指标都要单独使用。如果要看一个服务的http请求的频率需要直接单独访问 service_N_http_requests_total。

假设看到请求通过服务所有实例的总量很有用。在以下的例子中如果建了一个新服务会怎么样?

image.png

如果加和是在service_1和service_2计算的,当增加service_3时,他们之间没有什么联系;没有可度量的结构。请求总数没有反应真实的请求总量,只有service_3_http_requests_total被手工加上去后才行。下图表示了这个过程:

image.png

度量树

一个对于无结构空间的可用方式是用metric命名空间组成一种显式的结构,以下图标说明了这种树的结构:

image.png

在Prometheus和Datadog度量结构可以使用Label和tags创建。使用tag,可以动态扩展总请求量;当一个新的service增加时,他可以通过树指向到主度量指标。

在prometheus,得到通过所有服务的每秒的频率可以看下图:

image.png

通过结构化的命名空间可以动态计算通过树根节点的总量(在这个例子计算了每个单独服务作为一个度量指标)。

用它的子指标来定义度量指标

用一个树,每一个度量的维度(比如"service"标签)包含了节点独立的请求频率。使用一个度量命名空间,不只是它的总频率可以观察,每个子服务实例都可以被可视化:

image.png

对命名空间的数据建模,可以通过对所选维度的组合来组合父数据。

增加数据的子集
命名空间也支持将数据的特定子集的明细。树可以回答这种问题: 在灰度机器上所有成功http请求的p99(译者: p99, p95都是术语,p99表示过去的10秒内最慢的1%请求)延迟是多少?

image.png

上面这个树对概念空间进行了建模同时没有对度量指标如何存储在磁盘上建模。使用一种良好定义的度量空间可以对任何维度进行扩展。

以下图展示了这个树的p99与p50的图形化:

image.png

通过以上技术可以拿到任意度量维度更具体的数据: 在灰度部署的每一个机器上所有成功http请求的p99延迟是多少?

image.png

以下展示了prometheus对于扩展这个机器指标machine_id的支持:

image.png

由于这个指标在顶层指标上有结构化的定义所以可以使用machine_id进行动态扩展。

比例(Ratio)规则

比例是另一种在一个非结构化空间中将数据建立联系的方式。这十分有用,并且是由于google SRE而备受欢迎的计算SLO可用率与错误率的基础。 比例让用户可以显式的关联指标,完成一个度量指标结构。这些连接经常被表示为百分比,例如可用性可以被计算成 成功请求数/总请求书,而错误率可以计算成错误请求数/总请求数。其他重要的比率是多种状态中的一种状态出现了多少。

为了解释这个,我们假设一个应用执行的一个请求可以产生多种状态,例如 cache_hit:true与cache_miss:false。要看缓存的命中率我们按如下方式结构化数据:

image.png

这个图标示了缓存命中率与失败率的例子。每个请求要么命中要么失败。而每秒大约有160个请求:

image.png

下图关联了总请求频率与缓存命中频率,展示了50%的缓存命中率:

image.png

这建立了一种逻辑关
系,而他么不是直接或者有具体关系的,在datadog与prometheus可以表示为算术运算。用这种方式在查询级别任何两种度量都可以被关联上。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
目录
相关文章
|
5月前
|
监控 Kubernetes Cloud Native
kubevela可观测体系问题之将可观测基础设施的能力变成声明式的问题如何解决
kubevela可观测体系问题之将可观测基础设施的能力变成声明式的问题如何解决
|
4月前
|
监控 Java
分布式链路监控系统问题之Span在OpenTracing规范中的定义是什么
分布式链路监控系统问题之Span在OpenTracing规范中的定义是什么
|
Prometheus 监控 Kubernetes
PrometheusOperator云原生监控:基于operator部署的资源内部链路分析
PrometheusOperator云原生监控:基于operator部署的资源内部链路分析
217 0
|
数据可视化 Java 数据挖掘
微服务实践04--DevOps07--度量指标00--度量指标(Metrics)
微服务实践04--DevOps07--度量指标00--度量指标(Metrics)
457 0
微服务实践04--DevOps07--度量指标00--度量指标(Metrics)
|
数据采集 Kubernetes 网络协议
eBPF 实践 -- 网络可观测
观测云采集器,是一款开源、一体式的数据采集 Agent,它提供全平台操作系统支持,拥有全面数据采集能力,涵盖基础设施、指标、日志、应用性能、用户访问以及安全巡检等各种场景。通过 eBPF 技术的引入,观测云采集器实践了网络传输层和应用层的部分协议的可观测。
531 0
eBPF 实践 -- 网络可观测
|
存储 运维 Kubernetes
【KubeVela】追踪和可视化多集群 Kubernetes 资源拓扑
在应用交付中另一个很大的诉求是对资源交付流程的透明化管理,比如社区里很多用户喜欢使用 Helm Chart ,把一大堆复杂的 YAML 打包在一起,但是一旦部署出现问题,如底层存储未正常提供、关联资源未正常创建、底层配置不正确等,即使是一个很小的问题也会因为整体黑盒化而难以排查。尤其是在现代混合的多集群混合环境下,资源类型众多、错综复杂,如何从中获取到有效信息并解决问题是一个非常大的难题。如上图所
686 0
|
存储 自然语言处理 监控
Kindling项目目标:利用eBPF技术带来的可观测性的上帝视角 ——关联内核可观测数据的trace
当前可观测性领域存在三大痛点:1. 探针自动化覆盖依赖人工;2. 探针难以覆盖多语言的微服务业务;3. APM trace缺少内核可观测数据。针对三大痛点,Kindling分别是如何解决的呢?
548 0
|
存储 运维 自然语言处理
深度解析|基于 eBPF 的 Kubernetes 一站式可观测性系统
阿里云 Kubernetes 可观测性是一套针对 Kubernetes 集群开发的一站式可观测性产品。基于 Kubernetes 集群下的指标、应用链路、日志和事件,阿里云 Kubernetes 可观测性旨在为 IT 开发运维人员提供整体的可观测性方案。
深度解析|基于 eBPF 的 Kubernetes 一站式可观测性系统
|
Prometheus Kubernetes 监控
k8s 集群下微服务 pod 的各种指标信息监控
本文主要介绍基于K8s的容器化服务的pod的各项数据指标
下一篇
DataWorks