SkyWalking–OAL–使用/教程/示例

简介

说明

本文介绍SkyWalking的OAL语法的用法。

官网

OAL介绍

​​https://github.com/apache/skywalking/blob/master/docs/en/guides/backend-系统运维主要做什么oal-scripts.md​​

OAL规则语法:​​https://github.com/alinux重启命令pache/skywalkinglinux系统/blob/master/docs/en/concepts-and-designs/oal.md​​

范围和字段:​​https://github.com/apache/skywalking字段宽度/blob/master字段是什么意思/docs/en强制转换/co系统运维包括哪些内容ncepts-and-designs/scope-definitions.md​​OAL简介

SkyWalkilinux操作系统基础知识ng从8.0.0开始支持OAL脚本,它所在路径为apache和nginx的区别:/config数据/oal/*.oal。我们可以修改它,比如:添加过滤条件或者新的衡量标准,重启OAP生效。

Apache SkyWalking告警是由一组规则驱动,这些规则定义在config/alarm-settings.yml文件中,其默认 oal是:\config\oal\core.oal。endpoapacheii评分方法及意义int 规则相比 slinux必学的60个命令ervice、instance 规则耗费更多内存及资源。

OAL(Observability Analysis Language):观测分析语言。

在流模式(Streaming mode)下,SkyWalking 提供了OAL来分析流入的数据。OAL 聚焦于服务,服务实例以及端点的度量指标,因此 OAL 非常易于学习和使强制转换用。

6.3版本以后,OAL引擎嵌入linux在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)、服务实例(Servi字段英文ce Instance)、端点(Endpoint)、服务关系(Service Relation)、服务实例关系(Slinux删除文件命令ervice Instance Relation)、端点关系(Endpoint Relation)。

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

过滤器(Filter)

使用在使用过滤器的时候,通过指定字段名或表达式来apacheii评分方法及意义构建字段值的过滤条件。

表达式可以使用 and,or 和 () 进行组合。

操作符包Apache含==,!=,&系统运维包括哪些内容gt;,<,>=,<数据恢复=,in [...],like %...,数据漫游like ...%,like %...%,他们可以基于字段类型进行类型检测,

如果类型不兼容会在编译/代码生成期间报错。

聚合函数(Aggregation Function)

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

提供的函数:

longAvg:某个域实体所有输入的平均值,输入系统运维工作内容字段必须是 long 类型。

instance_jvm_memory_max = from(ServiceInstanceJVMMemory.max).longAvg();

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

doubleAvg:某个域实字段限制检索体的所有输入的平均值,输入的字段必须是 double 类型。

instance_jvm_cpu = from(ServiceInstanceJVMCPU.usePercent).doubleAvg();

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

percent:对于apache和nginx的区别输入中匹配指定条件的百分比数.

endpoint_percent = from(Endpoint.*).percent(status == true);

在上面的例子中,输入是每个端点的请求,条件是 end系统运维面试题及答案point.status == true。

rate:对于条件匹配的输入,比率以100的分数表示。

browser_app_error_rate = from(BrowserAppTraffic.*).rate(trafficCategory == BrowserAppTrafficCategory.FIRST_ERROR, trafficCategory == BrowserAppTrafficCategory.NORMAL);

在上面的例子中,所有的输强制转换类型入都是每个浏览器应用流量的请求。分子的条件是tr数据透视表afficCategory == BrowserAppTrafficCategory.FIRST_ERROR,分母的条件是trafficCategory == BrowserAppTrafficCategory.NORMAL。

其中,第一个参数是分子的条件,第二个参数是分母的条件。

sum:某个域实体的调用总数。

service_calls_sum = from(Service.*).sum();

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

histogram:热力图 更多详见​​Heatmap in WIKI​​。

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

在上面的例子中系统运维面试题及答案,计算了所有传入请求的热linux系统力学热图。

第一个参数是计算延迟的精度,在上面的例子linux创建文件中,在101-200ms组中,113ms和193ms被认为是相同的。

第二个参数是分组数量,在上面的例子中,一共有21组数据分别数据恢复为0-数据科学与大数据技术100ms,101-200ms......1901系统运维面试题及答案-2000ms,2000ms以上.

apdex:应用性能指数(Application Performance Index)

service_apdex = from(Service.latency).apdex(name, status);

apache服务器上面的例子中,计算了所有服务的应用性能指数。

第一个参数是服务名称,该名称系统运维主要做什么的Apdex阈值在配置文件service-apdex-threshold.yml中定义。

第二个参数是请求状态,状态(成功或失败)影响Apdex的计算。

P99,P95,P90,P75,P5字段0:百分位 更多详见​​Percentile in WIKI​​

百分位是自7.0版apache安装与配置本引入的第一个字段是什么意思多值度量。由于有多个值,可以通过linux命令getMultipleLinearIntValuesGraphQL查询进行查询。

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

在上面的字段是什么意思例子中,计算了所有传入linux创建文件请求的 P99,P95,P90,P75,P50。参数是百分位计算的精度,在上例中120ms和124被认为是相同的。

度量指标名称(Metricslinux Namelinux创建文件)

存储实现,强制转换成int类型怎么使用告警以及查询模块的度apache是干嘛用的量指标名称,linux常用命令SkyWalking 内核支持自动类型推断。

组(Group)

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

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

强制转换(Cast)

源的字段是静态类型。在一些情况下,过滤语句和聚合语句所需要的字系统运维工程师面试问题及答案段类型和源的字段类型不匹配,例如:源的tag的值是Stapache服务器ring字段检索类型,大部分的聚合计算需要是数字类型。强制转换表达式就是用来解决这个的。

用法

  • (str->long) or (long), cast str字段值ing type into long.
  • (str->int) or (int), calinux必学的60个命令st string type into int.

    示例:

    mq_consume_latency = from((str->long)Service.tag["transmission.latency"]).longAvg(); // the value of tag is string type.

    强制转换表数据废土达式支持如下位置:

    • From statement. fr系统运维面试题及答案om((cast)source.attre).
    • Filtelinux操作系统基础知识r expr系统/运维ession. .filter((cast)tag["transmission.latency"] > 0)c#强制转换
    • A字段英文ggregation fc#强制转换unction parameter. .longAvg((cast)stapache是干嘛用的rField1== 1, (cast)strFi系统运维主要做什么eld2)

      禁用(Disable)

      Disable是OAL中的高级语句,只在特定情况下使用。

      一些聚合和度量是通过核心硬代码定义的,这个Dapache怎么读isable语句是设计用来让它们停止活动的,

      比如segment, top_n_database_statemelinux必学的60个命令nt。

      在默认情况下,没有被禁用的。示例

      // 计算Endpoint1 和 Endpoint2 的p99。

      endpoint_p99 = from(Endpoinlinux系统t.latency).filter(name in ("Endpoint1", "Endpoint2")).summapacheii评分方法及意义ary(0.99)

      // 计算以“serv”开头的端点数据漫游是什么意思名字的p99。

      serv_Endpoin系统运维主要做什么t_p99 = from(Eskywalkingndpoint.latency).filter(name like "serv%").summary(0.99)系统/运维

      //linux必学的60个命令 计算每个端点的c#强制转换响应平均时长

      endpoint_avg = from(Endpoint.latency).avg()

      // 计算每个端点 p50,p75,p90,p95 and p99 的延linux必学的60个命令迟柱状图,每隔 50 毫秒一条柱

      e数据恢复ndpoint_percentile = from(Endpoint.latency).percentile(10)

      /Apache/ 统计每个服务响应状态为 tru字段值e 的百分比

      endpoint_success = from(Endpoint.*).filter(status == true).pelinux常用命令rcent()

      // 计算每个服务的响应码为[404, 500, 503]的总和

      end强制转换数据类型point_alinuxbnormal = from(Endpoint.*).filt数据恢复er(responseCode in [404, 500, 503]).sum()

      //linux命令 计算每个服务的请求类型为[PRC, gRPC]的总和

      endpoint_rpc_calls_sum = from(apache怎么读Endpoint.*强制转换符怎么用).filter(type in [RequestType.PRC, RequestType.gRPC]).sum()

      // 计算每个端点的端点名称为["/v1", "/v2"]的总c#强制转换

      endpoint_url_sum = from(Endpoint.*).filter(endpointName in ["/v1", "/v2"]).sum()

      // 统计每个服务的调用总量

      endpoint_calls = from(Endpoint.*).count()

      // 计算每个服务的GE强制转换数据类型T方法的CPM。值的组成为:Apache`tagKey:tagValue`.

      // 方案1, 使用`tags contain`.

      service_cpm_http_get = frlinux命令om(S数据库ervice.*).filter(tags contain "htt强制转换成int类型p.method:GET").cpm()

      // 方案2, 使用`tag[key]`.

      serviapache是干嘛用的ce_cpm_http_get = from(Service.*).filter(tag["http.method"] == "GET").cpm();

      // // 计算每个服务的除了GET的方法的CPM。值的组成为:`tagKey:tagValue`.

      service_cpm_http_other = from(Service.*).filter(tags not contain "http.method:GET").cpm()apache安装与配置

      disable(se系统运维面试题及答案gment);

      disable(endpointapache下载_relation_server_side);

      disable(top_n_database_st强制转换成int类型ate数据ment);