存储在日志主题中的原始日志可通过 SQL 进行统计,获取其中的指标。例如通过以下 SQL 获取错误请求数,错误请求数 errorRequestCount 即为一个指标:
status:>=400 | select count(*) as errorRequestCount
这种获取指标的方式非常灵活,可通过调整检索条件和 SQL 语句随时获取新的指标或更改指标计算规则,但其依赖原始日志完整存储于日志主题 标准存储 中,如果需要查询最近60天的指标变化趋势,则原始日志至少需存储60天,带来较大的数据存储成本。
当指标比较固定时,可将原始日志转换为指标进行存储,降低原始日志存储天数(也可以使用 日志沉降 及 投递到 COS 来低成本保存历史日志),进而降低整体成本。除此之外,由于转换后指标的数据条数一般远小于原始日志条数,指标主题也针对时序类型的数据查询进行了专门的优化,对转换后的指标进行查询时性能往往更好,可以更快的查询指标、绘制仪表盘。
转换逻辑
原始日志:
{"requestTime":"2020/12/30 15:35:46","method":"POST","handler":"/messages","timeCost":"45","status":"200"}{"requestTime":"2020/12/30 15:35:46","method":"POST","handler":"/users","timeCost":"23","status":"200"}{"requestTime":"2020/12/30 15:35:47","method":"POST","handler":"/messages","timeCost":"57","status":"200"}{"requestTime":"2020/12/30 15:35:47","method":"POST","handler":"/users","timeCost":"25","status":"200"}{"requestTime":"2020/12/30 15:35:47","method":"POST","handler":"/users","timeCost":"689","status":"200"}{"requestTime":"2020/12/30 15:35:48","method":"POST","handler":"/users","timeCost":"87","status":"200"}{"requestTime":"2020/12/30 15:35:48","method":"POST","handler":"/users","timeCost":"34","status":"200"}{"requestTime":"2020/12/30 15:35:48","method":"POST","handler":"/users","timeCost":"698","status":"200"}{"requestTime":"2020/12/30 15:35:48","method":"POST","handler":"/messages","timeCost":"25","status":"200"}{"requestTime":"2020/12/30 15:35:48","method":"POST","handler":"/messages","timeCost":"78","status":"200"}
定时SQL:
* | select count(*) as requests_total,method,handler group by method,handler order by requests_total desc limit 10000
转换为如下指标:
requests_total{method="POST", handler="/messages"} 4requests_total{method="POST", handler="/users"} 6
定时 SQL 任务可周期性执行,例如每分钟执行一次,每次对最近一分钟的原始日志进行转换,即可自动的将原始日志转换为分钟粒度的指标。
前提条件
已上报日志至日志主题,且采用标准存储,低频存储因为不支持 SQL 所以无法转换为指标。
该日志主题已 配置索引。
操作步骤
步骤1:添加定时 SQL 分析
1. 登录 日志服务控制台。
2. 在左侧导航栏中,选择定时 SQL 分析,单击新建,新建任务。
3. 在页面中填写配置,主要信息如下:
配置项 | 说明 |
源日志主题 | 定时 SQL 任务的输入,即需要转换为指标的原始日志所在的日志主题。 |
写入目标 | |
执行语句 | * | select count(*) as requests_total,method,handler group by method,handler order by requests_total desc limit 10000 |
指标名称 | 从 SQL 语句结果中选择需要作为指标名称的字段,例如上面的例中 requests_total 为指标名称,其值为指标值。 |
指标维度 | 从 SQL 语句结果中选择需要作为指标维度的字段,例如上面的例中 method 及handler 为指标维度。 |
调度范围 | 查询日志的时间范围,例如需要查询2023年1月1日 00:00:00-2023年3月31日00:00:00的日志数据,结束时间为空意为任务将持续运行。 推荐使用将结束时间设为空,持续将新采集的日志转换为指标。 |
调度周期 | 周期性查询,取值范围1-1440分钟,意为每 X 分钟会查询一次日志。 推荐每1分钟执行一次,更加及时的将日志转化为指标。 |
查询时间范围 | 指定查询语句的时间窗口。 推荐使用【@m-1m ~ @m】,即最近1分钟,结合调度周期的【1分钟】,相当于每分钟将这一分钟的日志转化为指标。 |
高级设置 | 查询延迟的时间,在控制台【高级设置】中,取值范围60-120秒。日志生成索引一般会有延迟,在索引生成之前,不可查询,因此设置60秒延迟查询,此时索引已生成(99.9%的索引数据将在5秒内生成)。 |
4. 单击确定,保存配置。
步骤2:查询生成的指标
1. 在左侧导航栏中,选择检索分析,在顶部选择指标主题所在的地域,主题类型选择“指标主题”,然后选择需要的指标主题。
2. 在输入框中输入指标名称查询指标。