1分钟构建API网关日志解决方案
访问日志(Acccess Log)是由web服务生成的日志,每一次api请求都对应一条访问记录,内容包括调用者IP、请求的URL、响应延迟、返回状态码、请求和响应字节数等重要信息。
阿里云API网关提供API托管服务,在微服务聚合、前后端分离、系统集成上为用户提供诸多便利。
访问日志对于API网关的意义尤为重要,它可以帮助使用者打破黑盒,了解其web服务的运行状况。但实际上,云服务厂商为其用户提供访问日志确实存在不小的挑战:
- 日志分发到用户空间的实时性:从用户访问服务产生日志到日志对用户可见,业界不少的方案是“T+1”时效的;做到秒级延迟对于用户有非常的意义,使得异常告警、快速问题修复成为可能。
- 日志的ad-hoc查询能力:对于trouble shooting场景,工程师在个人经验和业务知识的基础上,不断缩小问题范围以致最终定位解决,这个过程中对于日志的分析和查询需求是不断变化的,即时查询的价值由此得到体现。
- 海量日志的快速分析能力:访问日志和请求PV是对应的,拥有百万级用户的服务每天甚至可以达到TB级别的访问日志规模,秒级延迟下满足常见的日志分析场景是一个重要能力。
在今天,API网关新支持了日志功能,基于日志服务为用户提供实时、自助分析访问日志的能力。
提到功能你可能会关心日志分析的费用,在这一点上,日志服务本身的价格对比业界方案(例如ELK)优势非常明显,且提供每月500MB额度的Free Tier,大部分用户只需要花很少的钱就可以用起来。
访问日志可以搞些什么事情
开通API网关日志功能后,你可以在日志服务上实时获取所有访问日志记录。日志服务对于访问日志的常见使用场景都提供了支持:
- 报表分析:通过ad-hoc分析语法实时计算结果,并对结果提供丰富的可视化展示
- 实时查询:业界有竞争力的访问日志查询体验,用户API被调用后可以秒级(1分钟,90%情况下15秒内)延迟获取对应的请求日志,查询语法支持全文关键词、Key-Value、Range查询,可以在1秒内处理千万级别日志
- 异常告警:借助分析语法对日志内容做个性化统计,对于统计结果支持阈值报警,对接阿里云通知中心、短信、钉钉进行告警
- 日志投递:一键配置数据投递OSS(低成本归档、数仓计算)、MaxCompute(数仓计算)等云产品,全托管运行
- 其它:更多个性化需求,可以通过函数计算、消费组、EMR等方式处理访问日志
阿里云API网关的访问日志格式如下:
字段名 | 字段含义 |
---|---|
requestId | 每次请求的唯一ID |
apiGroupUid | 分组ID |
apiGroupName | 分组名称 |
apiStageUid | 环境ID |
apiStageName | 环境名称 |
apiUid | API的唯一ID |
apiName | API名称 |
clientIp | 调用者IP |
appId | 调用者的应用ID |
appName | 调用者应用名称 |
domain | 请求的域名 |
httpMethod | 请求方法 |
path | 请求path |
statusCode | HTTP状态码 |
errorMessage | 错误信息 |
exception | 异常信息 |
providerAliUid | API提供者阿里云ID |
region | regionId |
requestHandleTime | 请求处理时间 |
requestSize | 请求大小 |
responseSize | 响应大小 |
serviceLatancy | 服务端延时(单位毫秒) |
玩转API网关访问日志
本节为大家介绍在日志服务控制台上如何对API网关访问日志做分析。
1. 报表分析
基于灵活的分析语法,你可以按照自己的思路写出分析语句,通过ad-hoc查询完成业务需求。日志服务对计算结果提供多种可视化展示方式,dashboard内每个图表的统计指标支持即时修改生效。
日志服务默认提供了一些API网关的分析报表如下:
- api请求成功率、后端服务失败占比
- 请求PV最高的app、请求出现错误的api统计
- 访问来源app数、top请求次数的appGroup
- api请求PV、服务延迟统计
- top延时的api统计、top请求次数的api统计
除了官方提供的报表以外,你还可以自己写分析语句生成报表,例如,统计clientIp的访问来源的城市分布。
在日志Logstore查询框中填写分析语句:
* | select ip_to_city(clientIp) as client_ip_city, count(*) as request_count group by client_ip_city order by request_count desc limit 20
保存查询结果并添加到仪表盘:
在仪表盘中看到效果如下:
推荐10分钟精通Nginx访问日志分析统计给大家,这篇文章提供了一些有趣的访问日志分析样例可供参考。
2. 实时查询
快速问题诊断是一项非常重要的能力,可以帮助线上服务减少异常带来的损失。区别于业界常见的“T+1”日志投送能力,我们可以在日志服务上准实时获取到最新访问日志,为短时间内定位问题根源提供可能。
在收到告警或看到异常指标后,日志服务的大数据查询能力可以帮助你快速找到到值得关注的日志记录。例如,我们排查非getName api,GET请求且状态码为500、501、503的访问日志记录:
3. 监控报警
我们在日志服务上保存一个查询语句,计算api请求中非200 pv在总体请求pv的占比:
* | select sum(case when statusCode > 200 then 1 else 0 end) *1.0 / count(1) as non_200_ratio
按照报警设置指南将查询语句保存为告警,查询区间为最近10分钟,当非200 statusCode的请求比率超过千分之一时,通过钉钉发出告警:
4. 数据投递
日志服务支持1~365天的数据存储,假如你的日志规模很大,对于冷数据希望有更经济、更长时间的存储,可以通过配置OSS投递规则将数据投递到OSS存储。
怎样开通日志功能
你可以在日志服务、API网关两个产品的控制台上任选其一开通日志功能。
1. 日志服务控制台上开通步骤
a. 创建Logstore
若Logstore已存在请跳过本步骤。
b. 进入向导
若Logstore是第一步新建出来的:
如果Logstore是之前已存在的:
c. 选择日志源
d. 授权
e. 确认索引配置
在后的dashboard中将使用到这里列出的索引配置,请谨慎修改。
f. 保存
投递与ETL配置可暂不设置,在将来需要时再创建。
至此,wizard初始化工作完成,你可以选择刚才设置的Logstore:api-gateway-access-log进行日志查询、分析,或者进入仪表盘查看报表。
2. API网关控制台上开通步骤
在上图步骤之后,你的API网关访问日志可以分发到指定Logstore。
如果需要对Logstore做进一步分析,请参考“日志服务控制台上开通步骤”中b~f完成后续配置工作。
1分钟构建API网关日志解决方案相关推荐
- 使用Ballerina构建API网关
\ 关键要点 \\ 在为WSO2 API Manager创建API网关时,我们实际上是创建了与API Manager上发布的API相关的Ballerina服务.\\t 请求过滤器可以访问传入的请求数据 ...
- elk 日志管理_具有ELK的APIGEE API网关日志管理(弹性搜索,Logstash和Kibana)
elk 日志管理 在本文中,我们将看到如何使用 Elastic Search , Logstash 和 Kibana 管理APIGEE API网关生成的日志 . 下图突出显示了日志数据如何流经ELK堆 ...
- 具有ELK的APIGEE API网关日志管理(Elastic Search,Logstash和Kibana)
在本文中,我们将看到如何使用 Elastic Search , Logstash 和 Kibana 管理APIGEE API网关生成的日志 . 下图突出显示了日志数据如何流经ELK堆栈以进行数据可视化 ...
- 10分钟上线 - API网关 + 函数计算实现图片处理服务
摘要: 阿里云函数计算服务(FunctionCompute,FC)是一个事件驱动的全托管计算服务.通过函数计算与云端各个服务的广泛集成,开发者只需要编写函数代码,就能够快速地开发出弹性高可用的后端系统 ...
- curl 请求日志_kong api网关日志 将请求和响应数据附加到磁盘上的日志文件中
术语 plugin:在请求被代理到上游API之前或之后,在Kong内部执行操作的插件. Service:表示外部上游 API或微服务的Kong实体. Route:Kong实体,表示将下游请求映射到上游 ...
- 构建微服务:使用 API 网关
当您选择将应用程序构建为一组微服务时,您需要决定应用程序的客户端将如何与微服务交互.对于单体应用程序,只有一组(通常是复制的.负载平衡的)端点.然而,在微服务架构中,每个微服务都暴露了一组通常是细粒度 ...
- API 网关在微服务中的应用
目录 一.什么是 API 网关? 二.微服务架构对 API 网关的需求 三.API 网关在微服务架构中的工作 四.API网关的实现--问题和解决方案 可扩展性和性能 反应式编程模型 服务调用 服务发现 ...
- 大公司为什么都有API网关?没你想的那么简单!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:rrd.me/g6eyJ 在这篇文章中将我们一起来探讨当前的 ...
- 微服务为什么要用到 API 网关?
本文介绍了 API 网关日志的价值,并以知名网关 Apache APISIX 为例,展示如何集成 API 网关日志. 作者程小兰,API7.ai 技术工程师,Apache APISIX Contrib ...
最新文章
- java程序ssh置顶_使用shell脚本启动远程(SSH)Java应用程序不会返回本地提示
- 为你的水晶报表装载本地图片
- WIRW:淡水分子微生物生态学综述
- JS的深拷贝和浅拷贝
- TCP/IP详解--第五章
- eclipse git插件配置
- Maven实战:pom.xml与settings.xml
- html抓取成xml,使用XML包将html表抓取到R数据帧中
- 拼多多、小米、美团等科技公司为何急上市?
- oracle自增序列的删除,重建,回到最开始的设置值
- linux 把进程调到前台,【如何将后台运行的程序转到前台来?】
- isf文件格式改为csv格式
- eplan支持mysql_EPLAN软件平台系统和电脑要求
- 程序员职业发展路线图(完整版+珍藏版)
- 学习记录:安装binwalk
- Pyspider启动过程中的问题ssl/nss错配问题
- 跨境电商领域的“坂田五虎“你知道都是谁吗?
- 今天我是如何10分钟完成30万售后单问题分类的
- 如何判断两个ip地址是否在同一个网段
- 信息化治理与北京治堵:疏图同归
热门文章
- 【Qt】QtCreator无法调试终端程序,启动报错SIGSTOP
- 【Qt】通过QtCreator源码学习Qt(九):容器算法总结
- htc820+android+l,首款高通64位八核 HTC Desire 820评测
- c语言xml序列化,C# XML和实体类之间相互转换(序列化和反序列化)
- python input 数字_Python:raw_input读取数字的问题
- map multimapc++_C++的Map和Multimap
- redis集群scan_利用scan迁移部分单点redis数据到RedisCluster
- show在php,show.php
- ffmpeg java linux水印,Linux环境用FFmpeg给视频加水印详细步骤
- 编写linux下跑马灯应用程序,01 arm11 led 跑马灯程序