嘉宾 | 万凯 整理 | 朱宝
出品 | CSDN云原生
2022年5月10日,在CSDN云原生系列在线峰会第4期“Apache SkyWalking峰会”上,Tetrate工程师、Apache SkyWalking PMC成员万凯介绍了Apache SkyWalking的仪表分析语言MAL,并结合具体场景,分享了监控虚拟机和Kubernetes的实践。
要点简述:
SkyWalking可观测性分析平台涵盖三个可观察性领域,包括跟踪(Tracing)、指标(Metrics)和日志记录(Logging),对应三种语言可观测性分析语言(OAL)、仪表分析语言(MAL)和日志分析语言(LAL)。
仪表分析语言(MAL)负责原生仪表数据的度量计算,采用稳定且广泛使用的度量系统
戳👇观看万凯分享视频
包罗万象SkyWalking,涵盖了三个可观察性领域
面向三个可观察性领域,可观测性分析语言(OAL)用于处理SkyWalking原生追踪和服务网格数据;仪表分析语言(MAL)负责原生仪表数据的度量计算,采用稳定且广泛使用的度量系统,例如Prometheus、OpenTelemetry;日志分析语言(LAL)则专注日志内容处理,并与仪表分析语言协作。
仪表分析语言允许用户在可观测性分析平台(OAP)流式系统中分析和聚合仪表数据,在 SkyWalking中应用场景很多,包括:
服务网格数据平面度量分析 Service Mesh Data Plane Metrics Analysis(Envoy)
服务网格控制平面度量分析Service Mesh Control Plane Metrics Analysis(Istio)
SkyWalking OAP服务器自度量分析SkyWalking OAP Server self Metrics Analysis
SkyWalking卫星度量分析SkyWalking Satellite Metrics Analysis
线程池度量分析ThreadPool Metrics Analysis
数据源度量分析DataSource Metrics Analysis
Spring Sleuth度量分析Spring Sleuth Metrics Analysis
日志提取/生成度量分析Logs extracts / generates Metrics Analysis
续集匿迹(Linux)度量分析VMs(Linux)Metrics Analysis
K8s度量分析Kubernetes Metrics Analysis
上图是基于仪表分析语言分析的数据流,左边是监控分析的对象,这些监控对象会提供各自不同数据格式的指标。
这么多不同格式的数据,SkyWalking通过可观测性分析平台插件(OAP Plugins)里不同的接收器(Receiver)进行接收并处理成统一的指标格式,再送入仪表分析语言引擎(MAL Engine)进行规则计算分析,最后将分析结果发送给仪表系统(Meter System)。
仪表分析语言的基本语法
仪表分析语言的基本语法具体包括:
标签过滤器(Tag filter)
值过滤器(Value filter)
标签操作(Tag manipulator)
数学计算(Arithmetic operators)
聚合计算(Aggregation)
函数(Function)
K8s(Kubernetes)
下采样操作(Down Sampling Operation)
度量级函数(Metric level function)
下面是SkyWalking指标格式的样本数据,我们称之为“样本族”。它是一组不同区域的同一指标数据,前面数据流介绍中所说的所有监控对象的不同格式都会统一成这样的格式。
- instance_trace_count{region="us-west",az="az-1"} 100
- instance_trace_count{region="us-east",az="az-3"} 20
- instance_trace_count{region="asia-north",az="az-1"} 33
标签过滤器(Tag Filter)
对上面的样本数据进行分析,仪表分析语言提供了多种方法和函数,如使用标签过滤器(Tag filter)过滤一组指标的内容,其中包括精确的匹配、模糊匹配和正则表达式匹配。
MAL支持四种类型的操作来过滤样本系列中的样本:
tagEqual:过滤与提供的字符串完全相等的标签
tagNotEqual:过滤器不等于提供的字符串的标签
tagMatch:过滤与提供的字符串匹配的正则表达式标签
tagNotMatch:过滤与提供的字符串不匹配的正则表达式标签
例如,过滤美国西部和亚洲北部地区以及az-1的所有instance_trace_count样本,结果是标签匹配到两条结果:
值过滤器(Value Filter)
MAL支持六种类型的操作来按值过滤样本系列中的样本:
valueEqual:筛选与提供的值完全相等的值
valueNotEqual:筛选与提供的值相等的值
valueGreater:过滤大于所提供值的值
valueGreaterEqual:过滤大于或等于提供的值的值
valueLess:过滤小于所提供值的值。
valueLessEqual:过滤小于或等于提供的值的值
例如,过滤所有instance_trace_count样本的值>=33的,那么可以看到过滤出来的就是100和33这两条数据。
标签操作器(Tag Manipulator)
仪表分析语言允许使用者对tag进行增加、删除或修改。比如,在区域标签前面加一个前缀,就可以通过下面的表达式进行操作,最后的结果可以看到所有的区域指标前面加了前缀。
数学运算器(Arithmetic Operators)
在MAL中可用以下四种数学运算符:
+(添加)
-(减法)
*(乘法)
/(司)
数学运算符定义在标量/标量、SampleFamily/标量和SampleFamily/SampleFamily值对之间。
在两个标量之间,它们计算到另一个标量,该标量是运算符应用于两个标量操作数的结果。
聚合计算(Aggregation)
样本族支持以下聚合操作,这些操作可用于聚合单个样本族的样本,从而导致具有聚合值的新样本族具有更少的样本(有时仅具有单个样本):
sum(计算尺寸上的和)
min(选择最小尺寸)
max(选择最大尺寸)
avg(计算尺寸上的平均值)
这些操作可用于聚合整体标签尺寸或通过参数输入保留不同的尺寸。
函数(Function)
K8s(Kubernetes)
MAL支持使用K8s的元数据来操作标签及其值。此功能需要授权OAP服务器访问K8s的API服务器。
下采样操作(Down Sampling Operation)
MAL指导计量系统如何下采样度量。它不仅指将原始样本聚合到分钟级别,还将分钟的数据表示在更高级别。
下采样函数在MAL中称为下采样,它接受以下类型:
AVG
SUM
LATEST
MIN (TODO)
MAX (TODO)
MEAN (TODO)
COUNT (TODO)
度量级函数(Metric Level Function)
度量级函数从度量标签中提取级别相关标签,然后通知度量系统该度量所属的级别和层。
结果数据类型和展示
通过MAL的基本语法计算之后会得到一些结果,包括Value、Labeled Value及Histogram Percentile。
Value是最基本的结果类型,它是根据时间序列的连续指标数据。不同时间对应不同的值,因此Value最基本的展现形式是折线图。
Labeled Value是带标签的值,不同的Label其指标的值是不一样的。如上图中Aggregation是每分钟聚合的数量值。
Histogram Percentile是一个比率,不同的Ranks对应一组不同的值。如上图中Ranks分别为50、70、90、99,那么最终展现出来的结果是根据不同的Ranks指引不同时间点的数据。
仪表分析语言配置结构
下图是配置完整的MAL。首先需找到Receiver对应的文件夹,MAL的配置是一个YAML格式的文件,不同的Receiver处理的数据格式不同,所以配置文件的目录也是不同的。例如K8s Cluster的配置文件是“K8s-cluster.yaml”,它需要通过类otel-oc进入数据,该配置文件放在Otel-oc-rules对应的文件夹下。
全局的过滤器(Filter)用来过滤数据源,如果当前是K8s的Receiver,则要通过过滤器先将K8s数据过滤出来。全局表达式后缀(ExpSuffix)用于过滤处监控对象设置的标签数据,进行分组。全局指标前缀名(MetricPrefix)的作用类似于Filter,当前台配置带Ball的时候,可以直接用全称的指标名获取指标数据。
总之,使用MAL分析的步骤如下:
监控目标:判断目标数据是否适应MAL分析的特性
采集:为目标选择合适的指标采集客户端
接收:根据采集的数据形式选择开启OAP相应的Receiver
指标分析:选取Metrics,配置MAL表达式进行分析
展现:配置前端展示页面
通过MAL可以监控虚拟机的指标,它提供了CPU、内存使用率、内存交换、各种模式下的负载、文件系统使用率等。
在虚拟机监控的整个数据流程中,首先需要客户端抓取虚拟机指标,这里选取Prometheus的Node Exporter, 由于它不能直接推送出数据,所以中间需选取一个Collector对Node Exporter数据进行抓取,最后再推送给SkyWalking。
SkyWalking同样需要开启Otl的Receiver,将数据直接发送给MAL引擎,配合MAL的表达式对指标进行分析。
那么我们看一下虚拟机如何让采集指标。通过Exporter采集基于操作系统硬件和内核相关的指标信息,它默认开启9100的端口,我们可以通过地址直接看到指标信息。
MAL表达式中有一个全局过滤器,它根据Job内容进行过滤,每10秒抓取一次。静态的目标配置较简单,需要抓取VMS,服务的是Node Exporter的地址和端口。
Otl的配置需要打开Otl Receiver,同样需要Otl Receiver下面配置MAL的表达式或规则文件,配置完后,若想要进行自定义,还需要将原本默认关闭的UI Dashboard可编辑开关打开,随后就可以去配置自定义的UI Dashboard指标并保存。
Kubernetes的监控包含两方面,一个是Kubernetes集群(Cluster)本身,另外一个是在集群上部署的节点(Node)、服务(Service)的状态和性能指标。
Kubernetes监控数据流,首先取出数据,这一步需要额外使用组件,其中Kube-state-mertrics(KSM)与K8s API Server需单独安装,此外还可使用cAdvisor,它目前已集成在Kubernetes中,无需额外安装。随后通过OpenTelemetry抓取暴露指标推送给SkyWalking,最后发送给MAL Engine。
Kube-state-metrics(KSM)采集Kubernetes集群中各种对象的状态指标和资源分配信息指标,如Deployments、Nodes和Pods等。
cAdvisor(Container Advisor)、Kubectl Proxy采集基于容器的各种资源使用信息指标,如CPU使用、内存使用、网络等。
对于Kubernetes监控指标抓取配置,下图中只展示抓取部分的完整Config配置。若不想自己写具体的详细配置,可以去Showcase中复制基本配置,再进行修改。
以上只是对Skywalking MAL监控虚拟机及Kubernetes进行了简单分享,希望可以对大家的学习有所帮助。
聚焦云原生新技术、新实践,帮助开发者群体赢在开发范式转移的新时代。欢迎关注CSDN云原生微信公众号~
扫这里↓↓↓加入CSDN云原生交流群