当前位置: 首页 > 编程日记 > 正文

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等方式处理访问日志

apigateway_accesslog_usage

阿里云API网关的访问日志格式如下:

字段名字段含义
requestId每次请求的唯一ID
apiGroupUid分组ID
apiGroupName分组名称
apiStageUid环境ID
apiStageName环境名称
apiUidAPI的唯一ID
apiNameAPI名称
clientIp调用者IP
appId调用者的应用ID
appName调用者应用名称
domain请求的域名
httpMethod请求方法
path请求path
statusCodeHTTP状态码
errorMessage错误信息
exception异常信息
providerAliUidAPI提供者阿里云ID
regionregionId
requestHandleTime请求处理时间
requestSize请求大小
responseSize响应大小
serviceLatancy服务端延时(单位毫秒)

玩转API网关访问日志

本节为大家介绍在日志服务控制台上如何对API网关访问日志做分析。

1. 报表分析

基于灵活的分析语法,你可以按照自己的思路写出分析语句,通过ad-hoc查询完成业务需求。日志服务对计算结果提供多种可视化展示方式,dashboard内每个图表的统计指标支持即时修改生效。

日志服务默认提供了一些API网关的分析报表如下:

  • api请求成功率、后端服务失败占比

error_success_ratio

  • 请求PV最高的app、请求出现错误的api统计

topappid_errordetail

  • 访问来源app数、top请求次数的appGroup

appcount_topgroup

  • api请求PV、服务延迟统计

pv_latency

  • top延时的api统计、top请求次数的api统计

toplatency_topapi

除了官方提供的报表以外,你还可以自己写分析语句生成报表,例如,统计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

保存查询结果并添加到仪表盘:

clientip_distbute_ip_search

在仪表盘中看到效果如下:

client_ip_distribute

推荐10分钟精通Nginx访问日志分析统计给大家,这篇文章提供了一些有趣的访问日志分析样例可供参考。

2. 实时查询

快速问题诊断是一项非常重要的能力,可以帮助线上服务减少异常带来的损失。区别于业界常见的“T+1”日志投送能力,我们可以在日志服务上准实时获取到最新访问日志,为短时间内定位问题根源提供可能。

在收到告警或看到异常指标后,日志服务的大数据查询能力可以帮助你快速找到到值得关注的日志记录。例如,我们排查非getName api,GET请求且状态码为500、501、503的访问日志记录:

search_500

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的请求比率超过千分之一时,通过钉钉发出告警:

dingding_alarm

4. 数据投递

日志服务支持1~365天的数据存储,假如你的日志规模很大,对于冷数据希望有更经济、更长时间的存储,可以通过配置OSS投递规则将数据投递到OSS存储。

oss_shipper

怎样开通日志功能

你可以在日志服务、API网关两个产品的控制台上任选其一开通日志功能。

1. 日志服务控制台上开通步骤

a. 创建Logstore

若Logstore已存在请跳过本步骤。

log_config_1

b. 进入向导

若Logstore是第一步新建出来的:

log_config_2

如果Logstore是之前已存在的:

log_config_1_2

c. 选择日志源

log_config_3

d. 授权

log_config_4

e. 确认索引配置

在后的dashboard中将使用到这里列出的索引配置,请谨慎修改。

log_config_5

f. 保存

投递与ETL配置可暂不设置,在将来需要时再创建。

log_config_6

至此,wizard初始化工作完成,你可以选择刚才设置的Logstore:api-gateway-access-log进行日志查询、分析,或者进入仪表盘查看报表。

2. API网关控制台上开通步骤

logging_on_api_gateway_console

在上图步骤之后,你的API网关访问日志可以分发到指定Logstore。

如果需要对Logstore做进一步分析,请参考“日志服务控制台上开通步骤”中b~f完成后续配置工作。

相关文章:

ISQL*PLUS

1、有以下几种命令:环境:影响会话期间SQL语句的总体行为;格式化:格式化查询结果;文件处理:保存语句到脚本文件中,从脚本文件中运行语句;执行:从浏览器发送SQL语句到oracl…

【数据库】mysql 常用命令(一)

1、启动、停止mysql服务 1.0 sudo service mysql restart //测试有效 以下未测试 1.1 使用mysqld mysqld start mysqld stop 1.2 使用mysqld_safe启动、关闭MySQL服务 mysqld_safe 1.3 使用mysql.server启动、关闭MySQL服务 mysql.server stop …

15 个 JavaScript Web UI 库

新闻来源:speckboy.com几乎所有的富 Web 应用都基于一个或多个 Web UI 库或框架,这些 UI 库与框架极大地简化了开发进程,并带来一致,可靠,以及高度交互性的用户界面。本文介绍了 15 个非常强大的 JavaScript Web UI 库&#xff0c…

【网络编程】MarioTCP

0、参考博客 《MarioTCP_一个可单机支持千万并发连接的TCP服务器 - JohanFong - CSDN博客》 http://blog.csdn.net/everlastinging/article/details/10894493 1、下载 sourceforge下载:https://sourceforge.net/projects/mariotcp/files/latest/download 2、安装…

Spring MVC-ContextLoaderListener和DispatcherServlet

2019独角兽企业重金招聘Python工程师标准>>> Spring MVC-ContextLoaderListener和DispatcherServlet 博客分类: spring java Tomcat或Jetty作为Servlet容器会为每一个Web应用构建一个ServletContext用于存放所有的Servlet, Filter, Listener。Spring MVC…

《中国人工智能ABC人才发展报告》发布,算法和应用类人才短缺

近日,百度云联手中国传媒大学、BOSS 直聘和百度指数发布了《中国人工智能 ABC 人才发展报告(2018版)》(以下简称“报告”)和百度云智学院2019 年人才认证体系。报告指出,从 2018 年的人才供需状况来看&…

博客域名改为http://bobli.cnblogs.com

本博客的域名已修改为:http://bobli.cnblogs.com/ 原来的地址还可以进入,希望搜索引擎快点更新过来。。。 感谢博客园管理员的帮助,效率非常之高!

百度Apollo 3.5是如何设计Cyber RT计算框架的?

自百度Apollo自动驾驶平台开源以来,已快速迭代至 3.5 版本,代码行数超过 39 万行,合作伙伴超过 130 家,吸引了来自 97 个国家的超 15000 名开发者。无疑,Apollo 是目前世界范围内最活跃的自动驾驶开放平台之一。最新发…

Spark Streaming实践和优化

2019独角兽企业重金招聘Python工程师标准>>> Spark Streaming实践和优化 博客分类: spark 在流式计算领域,Spark Streaming和Storm时下应用最广泛的两个计算引擎。其中,Spark Streaming是Spark生态系统中的重要组成部分&#xff0…

Python | 一万多条拼车数据,看春运的迁徙图

作者 | 白苏,医疗健康领域产品经理一枚,Python&R爱好者来源 | InThirty编辑 | Jane今天是腊月二十八,你们都到家了吗?这篇文章,作者对北京、上海、广州、深圳、杭州等地 1万多条出行数据进行分析,得出了…

[转载] sql server 2000系统表解释

sql server 2000系统表解释汇总了几个比较有用的系统表,内容摘自联机帮助sysobjects---------------在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一…

【驱动】uboot环境变量分析

0、bootcmd 0.1 飞凌原设置 bootcmdif mmc rescan; then if run loadbootscript; then run bootscript; else if test ${bootdev} sd1; then echo update firmware.........;run update_from_sd;else echo mmc boot..........;if run loadimage; then run mmcboot; else run n…

python--属性魔法方法

转载于:https://www.cnblogs.com/Purp1e/p/8149773.html

利用三层交换机实现VLAN的通信实验报告

利用三层交换机实现VLAN的通信实验报告<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />背景&#xff1a;要想实现VLAN之间的通讯,我们可以采用通过路由器实现VLAN间的通信 使用路由器实现VLAN间通信时&#xff0c;路由器与交换机…

【Qt】Qt Creator中文输入设置

#【Qt】Qt Creator中文输入设置 一、ubuntu中文输入法的设置 1、在终端中输入&#xff1a; $ ibus-setup 弹出界面如图&#xff1a; 2、选择中文输入法 3、点击右上角设置–》选择系统设置–》选择语言支持 4、语言支持选择&#xff1a; 汉语&#xff08;中国&#xff09…

为何Google将几十亿行源代码放在一个仓库?

作者 | Rachel Potvin&#xff0c;Josh Levenberg 译者 | 张建军 编辑 | apddd 【AI科技大本营导读】与大多数开发者的想象不同&#xff0c;Google只有一个代码仓库——全公司使用不同语言编写的超过10亿文件&#xff0c;近百TB源代码都存放在自行开发的版本管理系统Piper中&…

Java反射得到属性的值和设置属性的值

package com.whbs.bean; public class UserBean { private Integer id; private int age; private String name; private String address; public UserBean(){ System.out.println("实例化"); } public Integer getId() { return id; } public void setI…

ASP.NET 中的正则表达式

引言 Microsoft.NET Framework 对正则表达式的支持是一流的&#xff0c;甚至在 Microsoft ASP.NET 中也有依赖正则表达式语言的控件。本文介绍了深入学习正则表达式的基础知识和推荐内容。 本文主要面向对正则表达式知之甚少或没有使用经验&#xff0c;但却熟悉 ASP.NET、可借助…

如何用最强模型BERT做NLP迁移学习?

作者 | 台湾大学网红教授李宏毅的三名爱徒来源 | 井森堡&#xff0c;不定期更新机器学习技术文并附上质量佳且可读性高的代码。编辑 | Jane谷歌此前发布的NLP模型BERT&#xff0c;在知乎、Reddit上都引起了轰动。其模型效果极好&#xff0c;BERT论文的作者在论文里做的几个实验…

【驱动】GPIO寄存器配置总结

#【驱动】GPIO寄存器配置总结 0、设置复用功能为GPIO 1、设置引脚特性&#xff0c;与硬件匹配 2、配置寄存器举例 字段解释&#xff1a; 2.0、SRE 数据位&#xff1a;0 SRE(Slew Rate Field)&#xff1a;转换速度字段&#xff1f;&#xff1f;&#xff1f;这是一个可以调…

android Tabhost部件

本文结合源代码和实例来说明TabHost的用法。 使用TabHost 可以在一个屏幕间进行不同版面的切换&#xff0c;例如android自带的拨号应用&#xff0c;截图&#xff1a; 查看tabhost的源代码&#xff0c;主要实例变量有&#xff1a; private TabWidget mTabWidget; private Fr…

网易开源支持图像识别的自动化UI测试工具,零基础亲测好评!

编辑 | Jane出品 | AI科技大本营AI科技大本营给大家推荐了很多有意思、适合开发者们的工具&#xff0c;比如代码修复神器、帮小白快速分析 Error、PDF 翻译工具、变量命名神器等等。今天&#xff0c;营长要专门给测试人员&#xff0c;或者想做测试的小伙伴们推荐一款工具&#…

【驱动】GPIO 作为按键时的 设备树 配置

#【驱动】GPIO作为按键时的 设备树 配置 0、设备树 0.0 别名 imx6ul.dtsi 什么作用&#xff1f;&#xff1f;&#xff1f; /*************开始/ / { aliases {… gpio0 &gpio1; gpio1 &gpio2; gpio2 &gpio3; gpio3 &gpio4; gpio4 &gpio5; /**********…

最小树形图及其生产方法

诸位看官&#xff0c;这是我第一次在整篇文章的所有图片里面加水印。小弟写博客的时间不长&#xff0c;就有两篇博客被盗用并未注明原文网址。这一方面使我痛心不已&#xff0c;另一方面迫使我不得不重新考虑一下版权保护问题。小弟不是吝啬鬼&#xff0c;如果影响阅读或者是确…

【数据库】MySQL的C语言接口学习

0、【初始化】 MYSQL* mysql_init(MYSQL *mysql); 1、【设置连接选项】 int mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg); 2、【连接】 MYSQL* mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, cons…

程序员单身比例有多高?【2019开发者图鉴】告诉你

编辑 | Jane 出品 | AI科技大本营 本次调查共 8 个问题&#xff0c;根据这些数字我们整理了《2019开发者图鉴》&#xff0c;下面营长将发现的一些有意思的数字分享给大家&#xff1a; 性别与年龄 本次参与调查的男女比例约为 8&#xff1a;2&#xff08;男8女2&#xff09;。 …

26.2. Web UI

http://localhost:3000/ 原文出处&#xff1a;Netkiller 系列 手札 本文作者&#xff1a;陈景峯 转载请与作者联系&#xff0c;同时请务必标明文章原始出处和作者信息及本声明。

VC++ 6.0的小花招

Visual Studio系列中产品中&#xff0c;Visual Studio 6.0是最经典的一个版本&#xff0c;虽然后来有Visual Studio .NET 2003&#xff0c;以及2005&#xff0c;也确实添加了很多让我觉得激动的特性&#xff0c;但是从使用细节的细腻程度上来看&#xff0c;VS 6.0无疑是最棒的。…

【linux】嵌入式中 crontab的使用

0、编辑 执行&#xff1a;crontab -e 执行命令后&#xff0c;将出现一个编辑界面&#xff0c;内容格式如下 Minute Hour Day Month Dayofweek command 分钟 小时 天 月 天每星期 命令 每个字段代表的含义如下&#xff1a; Minute 每个小时的第几分钟执行该任务 Hour 每天的第几…