背景
用户使用 CLS 仪表盘时,偶尔会遇到检索超时,导致图表绘制失败的问题,这个时候,可以考虑将日志转为指标(Metric)数据,然后使用 PromQL 对指标进行计算分析,其分析性能比日志高,可以有效的解决仪表盘超时的问题。
概述
下述内容以示例的形式来说明如何使用定时 SQL 转 Metric。其业务场景是:从 Nginx 日志中提取3个指标(PV、失败请求数、P99_请求时间)。指标维度是 URL,按照 PV 的大小取 TOP10。
我们将使用定时 SQL,完成日志转指标。
操作步骤
1. 登录 CLS 控制台,选择重庆地域,打开 Nginx Demo 日志主题(免费的体验主题)检索分析页面,Demo 日志主题请参见 使用 Demo 日志快速体验 CLS。
单条的原始日志如下:
{"remote_addr":"124.78.124.112""method":"GET""upstream_addr":"169.254.128.14:60002""upstream_response_length":"48""body_bytes_sent":"59""time_local":"2021-12-03T17:16:58+00:00""version":"HTTP/1.1""url":"/""http_user_agent":"-""remote_user":"-""req_id":"e3d1ae06b30344539bc7e28314d542fa""upstream_status":"400""request_time":"0.002""sys_address":"11.149.155.219""request_length":"40""http_referer":"-""sys_datasource":"gz.1.1.v1.2.19""proxy_upstream_name":"default-kubernetes-443""upstream_response_time":"0.000""time":"1702542388004""timestamp":"2023-12-14T16:26:28+08:00""status":"400"}
2. 根据上述业务场景,在控制台配置统计分析中,输入SQL语句进行验证,语句如下:
select count(*)as pv, count_if(status>=400)as bad_request_count, approx_percentile(request_time,0.99) as P99_request_time,url group by url order by pv desc limit 10
结果如下图,确认了检索语句的准确性:
3. 在统计图表 TAB 页面的右上方,点击存为定时SQL分析。完成以下配置项,点击确定。
任务名称 | Log2Metric |
写入目标 | 选择指标主题,提前新建好,示例中的名称为 NginxMetric |
调度周期 | 1分钟,意为每1分钟发起一次查询,并将结果保存到指标主题 |
SQL 时间窗口 | @m-1m,@m ,意为查询的时间范围近1分钟 |
SQL 语句 | * | select count(*)as pv, count_if(status>=400)as bad_request_count, approx_percentile(request_time,0.99) as P99_request_time,url group by url order by pv desc limit 10 |
指标名称 | pv,bad_request_count,P99_request_time,一般为数值 |
指标维度 | url,一般都是 group by 后面的字段,例子中是按照 URL 去分组统计的意思。 |
自定义维度 | {"Author","Coder"}。添加您自己的维度,实际生产中可能是您所在的开发组、应用、或者集群、命名空间之类的。 |
4. 查看定时 SQL 分析
可以查看每分钟会调度一次我们配置的 SQL 语句,并将查询结果输出至指标主题。
5. 在定时 SQL 分析任务详情中找到目标主题 NginxMetric,点击跳转至指标主题页面,点击浏览指标,从指标列表中选择一个指标进行查看。
6. 使用 指标检索 对指标数据进行计算分析,并将分析结果添加至仪表盘。