通过定时SQL提取阿里云API网关访问日志指标
简介: 阿里云API网关服务提供API托管服务,提供了强大的适配和集成能力,可以将各种不同的业务系统API实现统一管理。API网关同时支持将API访问日志一键存储到日志服务,通过日志服务强大的查询分析能力,用户可以针对访问日志自定义计算多种指标,监测服务运行情况。继而通过定时SQL将结果指标直接存储到时序库,直接查询API网关指标,而且可以通过较低成本长期存储指标数据。 下面我们一步步从头开始,学习如何利用日志服务监测API网关及其代理的服务。
背景
阿里云API网关服务提供API托管服务,提供了强大的适配和集成能力,可以将各种不同的业务系统API实现统一管理。API网关同时支持将API访问日志一键存储到日志服务,通过日志服务强大的查询分析能力,用户可以针对访问日志自定义计算多种指标,监测服务运行情况。继而通过定时SQL将结果指标直接存储到时序库,直接查询API网关指标,而且可以通过较低成本长期存储指标数据。 下面我们一步步从头开始,学习如何利用日志服务监测API网关及其代理的服务。
数据采集
数据采集一直是让开发运维比较头疼的事情,要学习各种不同的采集工具,适配形形色色的环境,解析各式各样的数据格式,在不断试错的情况下,才能够完成第一次的数据采集。而在此之后,还需要不断地完善优化,耗费大量的经历。下面简单介绍下数据采集以及采集到的日志格式,详情可以参考官方文档。
一键采集
阿里云API网关已经很好的集成了日志服务,用户只需要在API网关的日志管理界面关联日志服务,即可完成API访问日志的一键采集,极其方便。
- 在API网关的日志管理界面点击创建日志配置;
- 在弹出窗中选择日志服务的Project/Logstore;
- 点击确认,完成数据采集;
日志格式
下面是采集到的API访问日志示例,
{
"exception": " ",
"apiName": "getbill",
"apiStageName": "stage3",
"__tag__:__receive_time__": "1667222540",
"httpMethod": "POST",
"path": "/request/path-1/file-6",
"__pack_meta__": "1|MTY2NzIwNzcxMTIyMzU0Mzc1Ng==|1094|1093",
"requestHandleTime": "31/Oct/2022:13:02:49",
"requestId": "d6b86756-83c2-e5a8-63f6-da39045f6595",
"appId": "9fb195bd-3d39-be83-ca8c-44a6e85262eb",
"__time__": 1667221369,
"__topic__": "apigateway_log",
"apiStageUid": "e5c13606-f96e-5653-26b1-750d766dd3ae",
"appName": "app3",
"__source__": "127.0.0.1",
"apiGroupUid": "3a51584d-20de-2da1-3095-7f82aa7022dc",
"errorMessage": " ",
"responseSize": "472",
"serviceLatency": "967",
"providerAliUid": "9e21f8dc-54bd-7ad0-5fb4-a898614bc41c",
"apiGroupName": "group4",
"apiUid": "316af01f-8f8f-e2f9-17d7-ac0ea3b28518",
"domain": "www.qt.mock.com",
"clientIp": "123.161.24.126",
"__tag__:__receive_time___0": "1667222540",
"region": "cn-chengdu",
"requestSize": "945",
"statusCode": "200"
}
关于各字段的含义,可以查看下表,也可以参考官方文档。访问日志的字段也会随着API网关能力的增强进行补充,不需要用户手动增删,极大的减轻了维护负担。
日志项 |
描述 |
apiGroupUid |
API的分组ID |
apiGroupName |
API分组名称 |
apiUid |
API的ID |
apiName |
API名称 |
apiStageUid |
API环境ID |
apiStageName |
API环境名称 |
httpMethod |
调用的HTTP方法 |
path |
请求的PATH |
domain |
调用的域名 |
statusCode |
HttpStatusCode |
errorMessage |
错误信息 |
appId |
调用者应用ID |
appName |
调用者应用名称 |
clientIp |
调用者客户端IP |
exception |
后端返回的具体错信息 |
providerAliUid |
API提供者帐户ID |
region |
区域,如:cn-hangzhou |
requestHandleTime |
请求时间,UTC |
requestId |
请求ID,全局唯一 |
requestSize |
请求大小,单位:字节 |
responseSize |
返回数据大小,单位:字节 |
serviceLatency |
访问后端资源耗时总和,包括申请连接资源耗时,建立连接耗时,调用后端服务耗时,单位:毫秒 |
errorCode |
错误码code,如:X500ER |
requestProtocol |
客户端请求协议:HTTP/HTTPS/WS |
instanceId |
API服务所在的网关实例ID |
initialRequestId |
API网关自调用时,例如API-1调用API-2 ,那么API-2的日志中会用initialRequestId来记录API-1的requestid。 |
clientNonce |
客户端X-Ca-Nonce头 |
requestQueryString |
客户端请求的queryString |
requestHeaders |
客户端请求的header内容 |
requestBody |
客户端请求的body内容,最多1024个字节 |
responseHeaders |
API响应的header内容 |
responseBody |
API响应的response内容,最多1024个 |
consumerAppKey |
API请求的appKey |
totalLatency |
API请求的总延迟,单位毫秒 |
customTraceId |
全链路日志的traceId |
jwtClaims |
从JWT中解析出来的Claim,可以在分组上配置 |
plugin |
API请求命中的插件列表及相关上下文 |
查询分析
有了日志,就可以针对访问日志进行简单的查询分析,查看自己感兴趣的指标。日志服务即支持简单的查询,也支持复杂的聚合分析,下面进行简单的介绍。
简单过滤
最常见的情况是查看错误请求,可以通过查询语句: * not statusCode: 200
来查看所有的异常请求。
当然还可以通过更多的字段进行过滤,详情可以参考官方文档。
聚合分析
对于更复杂的分析,例如不同错误码的的错误数量,不同api的平均响应时间,就需要用到聚合分析。下面以平均响应时间为例,介绍下如何使用聚合分析。
在查询框中输入过滤以及分析语句:
* and statusCode: 200 | select avg(serviceLatency) as rt, (__time__ - __time__ % 300) as ts from log group by ts order by ts limit 10000
其中* and statusCode: 200
用来过滤出正常请求,其余的sql语句则用来计算过滤后的数据,并通过图表展示出来,如下图所示。可以清楚地看到平均请求延迟的变化曲线。
确认指标
了解了如何进行基本的查询分析,我们能做的事情就非常多了。可以根据自己的需求以及业务场景,自定义多种不同的业务指标,满足自己的日常运维、监测需求。下面列出一些常用的指标,以及对应指标的查询分析语句。
请求延迟
在查询分析中,本文已经介绍过简单的平均延迟计算方法,下面介绍下更完整的请求延迟指标:平均延迟、P99延迟、P95延迟、P90延迟、P50延迟、最大延迟以及最小延迟。
*| select approx_percentile(serviceLatency, 0.99) as p99_latency, approx_percentile(serviceLatency, 0.95) as p95_latency, approx_percentile(serviceLatency, 0.90) as p90_latency, approx_percentile(serviceLatency, 0.50) as p50_latency, min(serviceLatency) as min_latency, min(serviceLatency) as max_latency, avg(serviceLatency) as avg_latency, (__time__ - __time__ % 60) as ts from log group by ts order by ts limit 1000000
错误码分布
*| select count(1) as cnt, statusCode, (__time__ - __time__ % 60) as ts from log group by statusCode, ts order by ts limit 1000000
请求/响应大小
*| select approx_percentile(requestSize, 0.99) as p99_req_size, approx_percentile(requestSize, 0.95) as p95_req_size, approx_percentile(requestSize, 0.90) as p90_req_size, approx_percentile(requestSize, 0.50) as p50_req_size, min(requestSize) as min_req_size, min(requestSize) as max_req_size, avg(requestSize) as avg_req_size, approx_percentile(responseSize, 0.99) as p99_resp_size, approx_percentile(responseSize, 0.95) as p95_resp_size, approx_percentile(responseSize, 0.90) as p90_resp_size, approx_percentile(responseSize, 0.50) as p50_resp_size, min(responseSize) as min_resp_size, min(responseSize) as max_resp_size, avg(responseSize) as avg_resp_size, (__time__ - __time__ % 60) as ts from log group by ts order by ts limit 1000000
地域分布
* | select region, count(1) as cnt , (__time__ - __time__ % 60) as ts from log group by region, ts order by ts
定时任务
可以看到,日志服务强大的查询分析能力允许用户多网关日志进行多种查询分析,得到期望的结果。如果需要把上一小节计算的定时保存下来,就要用到定时任务。下面介绍如何将上一小节中计算的请求/响应大小指标,定时保存到时序库中,从而可以快速获取指标。
创建时序库
点击左侧边栏的时序存储按钮,在时序库管理界面点击+号,填入名称即可创建一个时序库,用来存储希望保存的时序指标。
保存定时任务
创建好时序库,就可以创建任务定时保存分析结果,以供实时查看。下面简单介绍下定时任务配置步骤,详情可以参考官方文档。
点击创建任务
在查询分析界面点击定时保存分析结果,即可弹出任务创建窗口。
选择存储格式
在弹出窗口中选择日志库导入时序库,确定数据存储格式。
确定存储指标
在sql配置中选择期望保存的指标列,以及指标对应的时间列,即完成了指标配置。
配置任务调度
点击下一步,调度间隔选择15分钟,开始时间选择当前时间, SQL时间窗口同样选择15分钟即完成了调度配置。当然,用户也可以根据自己的场景自行选择。最后点击确认完成任务配置。
查看结果指标
点击刚刚创建的时序存储,在Metrics一行点击刷新,即可查看该时序存储包含的所有指标。选择max_resp_size,点击预览,即可查看该指标,无需编写查询分析语句。
添加报表
有了指标,就可以使用这些指标构建监控大盘,查看整体指标,构建自己的专属监控大盘。在指标查询界面点击添加到仪表盘,在弹出窗中选择新建仪表盘,填入名称点击确认,即完成了仪表盘的创建。
点开仪表盘,即可看到刚刚创建的图标。
结语
API网关是服务的入口,通过网关日志可以计算出丰富的服务监控指标。本文以部分常用指标为例,介绍了从数据接入到定时任务创建的整个流程,供用户参考。可以看出,日志服务提供了及其简便的日志采集入口,丰富的查询分析功能,简便的定时任务,帮助用户简单快速的建立起一个完整的日志采集、指标分析、大盘查看系统,减轻了运维负担。
原文链接:https://click.aliyun.com/m/1000364087/
本文为阿里云原创内容,未经允许不得转载。
通过定时SQL提取阿里云API网关访问日志指标的更多相关文章
- 阿里云API网关(11)外网访问 阿里云API网关内定义的API步骤:
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- 阿里云API网关(9)常见问题
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- 阿里云API网关!
API 网关(API Gateway)提供高性能.高可用的 API 托管服务,帮助用户对外开放其部署在 ECS.容器服务等阿里云产品上的应用,提供完整的 API 发布.管理.维护生命周期管理.用户只需 ...
- 浅析阿里云API网关的产品架构和常见应用场景
自上世纪60年代计算机网络发展开始,API(Application Programming Interface )随之诞生,API即应用程序接口,是实现系统间衔接的桥梁.时至今日,API市场已经形成了 ...
- 阿里云API网关(13)请求身份识别:客户端请求签名和服务网关请求签名
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- 阿里云API网关(12)为员工创建子账号,实现分权管理API:使用RAM管理API
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- 阿里云API网关(11)API的三种安全认证方式
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- 阿里云API网关(8)开发指南-SDK下载
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- 阿里云API网关(7)开发指南-API参考
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- 阿里云API网关(6)用户指南(开放 API )
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
随机推荐
- FreeRTOS教程4 消息队列
1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) Keil µVision5 IDE(MDK-Arm) 野火DAP仿真器 XCO ...
- P2602 [ZJOI2010] 数字计数:数位DP
https://www.luogu.com.cn/problem/P2602 // #include <iostream> // #include <iomanip> // # ...
- C++小细节
cin不仅遇到EOF会返回无效状态(通常用来终止循环),遇到无效输入的时候也会返回无效状态,比如向整型变量输入字符. char类型的大小和机器有关,最小8位,大多数机器字节(byte)是8位,byte ...
- Miracast技术详解(四):Sink源码解析
目录 简介 Sink端源码 RTSP通讯 RTP通讯 播放阶段 MPEG2-TS解析 总结 简介 在<Android Studio导入Android 4.2.2的WiFi-Display系统源码 ...
- Linux环境下Minio的安装部署与启动教程(完整版)
1.概述 MinIO是一个开源.分布式的对象存储系统,专为云原生环境设计.它提供了一个基于标准的Amazon S3兼容接口,使得开发者可以使用熟悉的API在私有云或边缘环境中部署和管理大规模非结构化数 ...
- linux查看域名对应的解析ip
方法1-直接使用ping 方法2-nslookup 方法3-dig
- 灰狼优化算法(MOGWO)
灰狼优化算法(MOGWO) 摘要 固定大小的外部档案用来保存帕累托优化解 在多目标搜索空间中,这个档案被用来定义狼群社会等级和捕猎行为 这个算法在10个多目标测试集进行测试,并与MOEA/D和MOPS ...
- hdfs开启回收站(废纸篓)
1.背景 我们知道,在mac系统上删除文件,一般情况下是可以进入 废纸篓里的,如果此时我们误删除了,还可以从 废纸篓中恢复过来.那么在hdfs中是否存在类似mac上的废纸篓这个功能呢?答案是存在的. ...
- dotNet符号文件(pdb),符号包(snupkg)和SourceLink
前言 本文的主题是 Visual Studio 调试 NuGet 包,以及符号包的概念,如何去发布一个 NuGet 包,让我们的 NuGet 包支持 SouceLink,这些都是我们开发中比较容易忽视 ...
- ImageSharp 一个全新的、功能齐全的、完全托管的、跨平台的 2D 图形库
ImageSharp 是一个全新的.功能齐全的.完全托管的.跨平台的 2D 图形库.ImageSharp 旨在简化图像处理,为您带来了一个功能强大而又非常简单的 API. 可以实现很多功能,如:缩放, ...