一篇文章快速搞懂 Apache SkyWalking 的 OAL

简介: 在流模式(Streaming mode)下,SkyWalking 提供了 观测分析语言(Observability Analysis Language,OAL) 来分析流入的数据。OAL 聚焦于服务,服务实例以及端点的度量指标,因此 OAL 非常易于学习和使用。6.3版本以后,OAL引擎嵌入在OAP服务器运行时中,称为oal-rt(OAL运行时)。OAL脚本现在位于/config文件夹,用户可以简单地改变和重新启动服务器,使其有效。

OAL简介

在流模式(Streaming mode)下,SkyWalking 提供了 观测分析语言(Observability Analysis Language,OAL) 来分析流入的数据。

OAL 聚焦于服务,服务实例以及端点的度量指标,因此 OAL 非常易于学习和使用。

6.3版本以后,OAL引擎嵌入在OAP服务器运行时中,称为oal-rt(OAL运行时)。
OAL脚本现在位于/config文件夹,用户可以简单地改变和重新启动服务器,使其有效。

但是,OAL脚本仍然是编译语言,OAL运行时动态生成Java代码。
您可以在系统环境上设置SW_OAL_ENGINE_DEBUG=Y,查看生成了哪些类。

OAL语法

OAL 脚本文件应该以 .oal 为后缀。

// Declare the metrics.
METRICS_NAME = from(SCOPE.(* | [FIELD][,FIELD ...]))
[.filter(FIELD OP [INT | STRING])]
.FUNCTION([PARAM][, PARAM ...])

// Disable hard code 
disable(METRICS_NAME);

域(Scope)

域包括全局(All)、服务(Service)、服务实例(Service Instance)、端点(Endpoint)、服务关系(Service Relation)、服务实例关系(Service Instance Relation)端点关系(Endpoint Relation)。

当然还有一些字段,他们都属于以上某个域。

过滤器(Filter)

使用在使用过滤器的时候,通过指定字段名或表达式来构建字段值的过滤条件。

表达式可以使用 andor() 进行组合。
操作符包含==!=><>=<=in [...]like %...like ...%like %...%,他们可以基于字段类型进行类型检测,
如果类型不兼容会在编译/代码生成期间报错。

聚合函数(Aggregation Function)

默认的聚合函数由 SkyWalking OAP 核心实现。并可自由扩展更多函数。

提供的函数:

  • longAvg:某个域实体所有输入的平均值,输入字段必须是 long 类型。
instance_jvm_memory_max = from(ServiceInstanceJVMMemory.max).longAvg();

在上面的例子中,输入是 ServiceInstanceJVMMemory 域的每个请求,平均值是基于字段 max 进行求值的。

  • doubleAvg:某个域实体的所有输入的平均值,输入的字段必须是 double 类型。
instance_jvm_cpu = from(ServiceInstanceJVMCPU.usePercent).doubleAvg();

在上面的例子中,输入是 ServiceInstanceJVMCPU 域的每个请求,平均值是基于 usePercent 字段进行求值的。

  • percent:对于输入中匹配指定条件的百分比数.
endpoint_percent = from(Endpoint.*).percent(status == true);

在上面的例子中,输入是每个端点的请求,条件是 endpoint.status == true

  • rate:对于条件匹配的输入,比率以100的分数表示。
browser_app_error_rate = from(BrowserAppTraffic.*).rate(trafficCategory == BrowserAppTrafficCategory.FIRST_ERROR, trafficCategory == BrowserAppTrafficCategory.NORMAL);

在上面的例子中,所有的输入都是每个浏览器应用流量的请求,
分子的条件是trafficCategory == BrowserAppTrafficCategory.FIRST_ERROR
分母的条件是trafficCategory == BrowserAppTrafficCategory.NORMAL
其中,第一个参数是分子的条件,第二个参数是分母的条件。

  • sum:某个域实体的调用总数。
service_calls_sum = from(Service.*).sum();

在上面的例子中,统计每个服务的调用数。

all_heatmap = from(All.latency).histogram(100, 20);

在上面的例子中,计算了所有传入请求的热力学热图。
第一个参数是计算延迟的精度,在上面的例子中,在101-200ms组中,113ms和193ms被认为是相同的.
第二个参数是分组数量,在上面的例子中,一共有21组数据分别为0-100ms,101-200ms......1901-2000ms,2000ms以上.

  • apdex:应用性能指数(Application Performance Index),更多详见Apdex in WIKI
service_apdex = from(Service.latency).apdex(name, status);

在上面的例子中,计算了所有服务的应用性能指数。
第一个参数是服务名称,该名称的Apdex阈值在配置文件service-apdex-threshold.yml中定义。
第二个参数是请求状态,状态(成功或失败)影响Apdex的计算。

百分位是自7.0版本引入的第一个多值度量。由于有多个值,可以通过getMultipleLinearIntValuesGraphQL查询进行查询。

all_percentile = from(All.latency).percentile(10);

在上面的例子中,计算了所有传入请求的 P99P95P90P75P50。参数是百分位计算的精度,在上例中120ms和124被认为是相同的。

度量指标名称(Metrics Name)

存储实现,告警以及查询模块的度量指标名称,SkyWalking 内核支持自动类型推断。

组(Group)

所有度量指标数据都会使用 Scope.ID 和最小时间桶(min-level time bucket) 进行分组.

  • 在端点的域中,Scope.ID 为端点的 ID(基于服务及其端点的唯一标志)。

禁用(Disable)

Disable是OAL中的高级语句,只在特定情况下使用。
一些聚合和度量是通过核心硬代码定义的,这个Disable语句是设计用来让它们停止活动的,
比如segment, top_n_database_statement
在默认情况下,没有被禁用的。

示例

// 计算每个端点的响应平均时长
endpoint_avg = from(Endpoint.latency).avg()

// 计算每个端点 p50,p75,p90,p95 and p99 的延迟柱状图,每隔 50 毫秒一条柱
endpoint_percentile = from(Endpoint.latency).percentile(10)

// 统计每个服务响应状态为 true 的百分比
endpoint_success = from(Endpoint.*).filter(status == true).percent()

// 计算每个服务的响应码为[404, 500, 503]的总和
endpoint_abnormal = from(Endpoint.*).filter(responseCode in [404, 500, 503]).sum()

// 计算每个服务的请求类型为[PRC, gRPC]的总和
endpoint_rpc_calls_sum = from(Endpoint.*).filter(type in [RequestType.PRC, RequestType.gRPC]).sum()

// 计算每个端点的端点名称为["/v1", "/v2"]的总和
endpoint_url_sum = from(Endpoint.*).filter(endpointName in ["/v1", "/v2"]).sum()

// 统计每个服务的调用总量
endpoint_calls = from(Endpoint.*).sum()

disable(segment);
disable(endpoint_relation_server_side);
disable(top_n_database_statement);
注:本文以SkyWalking的8.2.0版本为例进行介绍,如果版本不同会略有差异。
相关文章
|
监控 Java API
图解 Apache SkyWalking UI 的使用
Apache SkyWalking的UI界面主要分为以下几个区域: 功能选择区:这里列出了主要的UI功能,包括仪表盘、拓扑图、追踪、性能刨析、告警等功能 重新加载区:控制重新加载机制,包括定期重新加载或手动重新加载。 时间选择器:控制时区和时间范围。这里有一个中文/英文切换按钮,默认,UI使用浏览器语言设置。 下面逐一介绍功能选择区的各个功能:
1658 0
图解 Apache SkyWalking UI 的使用
|
存储 SQL 缓存
详解 Apache SkyWalking OAP 的分布式计算
SkyWalking的OAP(Observability Analysis Platform,观测分析平台)是一个用于链路数据的分布式计算系统。 因为它巧妙的设计,使得在链路数据计算和聚合过程中,不需要考虑数据的一致性,也没有事务、分布式锁等概念。 在极端情况下,可能出现链路数据的丢失,但会最大限度保障OAP集群的可用性。咱们来看一下,它是如何设计的,为以后的系统设计和架构提供一些思路。
527 0
|
7月前
|
SQL OLAP Apache
年度合集!Apache Hudi 技术文章一次看个够
年度合集!Apache Hudi 技术文章一次看个够
183 3
|
消息中间件 监控 数据可视化
基于Apache SkyWalking构建企业级APM(Application Performance Monitoring)监控系统
基于Apache SkyWalking构建企业级APM(Application Performance Monitoring)监控系统
586 1
基于Apache SkyWalking构建企业级APM(Application Performance Monitoring)监控系统
|
Apache
详解 Apache SkyWalking 的跨进程传播协议
SkyWalking 跨进程传播协议是用于上下文的传播,本文介绍的版本是3.0,也被称为为sw8协议。
773 0
详解 Apache SkyWalking 的跨进程传播协议
|
Prometheus 监控 Cloud Native
如何开启Apache SkyWalking的自监控?
1. 开启Prometheus遥测数据 默认情况下, 遥测功能(telemetry)是关闭的(selector 为 none),像这样:
460 0
如何开启Apache SkyWalking的自监控?
|
前端开发 JavaScript 网络协议
速查列表:Apache SkyWalking OAL 的 域(Scopes)
在流模式(Streaming mode)下,SkyWalking 提供了 观测分析语言(Observability Analysis Language,OAL) 来分析流入的数据。 OAL脚本现在位于/config文件夹,用户可以简单地改变和重新启动服务器,使其有效。 但是,OAL脚本仍然是编译语言,OAL运行时动态生成Java代码。可以在系统环境上设置SW_OAL_ENGINE_DEBUG=Y,查看生成了哪些类。
299 0
|
Apache
Apache SkyWalking 告警动态配置源码简析
AlarmModuleProvider实现了ModuleProvider接口,通过SPI的方式被加载进来。AlarmModuleProvider的prepare方法先被调用,做一些预处理:
309 0
|
JSON Kubernetes Cloud Native
Apache SkyWalking 告警配置指南
Apache SkyWalking是分布式系统的应用程序性能监视工具(Application Performance Management,APM),专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。 它提供了分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
1378 0
|
9天前
|
存储 人工智能 大数据
The Past, Present and Future of Apache Flink
本文整理自阿里云开源大数据负责人王峰(莫问)在 Flink Forward Asia 2024 上海站主论坛开场的分享,今年正值 Flink 开源项目诞生的第 10 周年,借此时机,王峰回顾了 Flink 在过去 10 年的发展历程以及 Flink社区当前最新的技术成果,最后展望下一个十年 Flink 路向何方。
276 33
The Past, Present and Future of Apache Flink

推荐镜像

更多
下一篇
DataWorks