API 网关日志的价值,你了解多少?
本文介绍了 API 网关日志的价值,并以知名网关 Apache APISIX 为例,展示如何集成 API 网关日志。
作者钱勇,API7.ai 技术工程师,Apache APISIX Committer。
原文链接
网关日志的价值
在数字化时代,软件架构随着业务成长而变得越来越复杂,这给故障的发现和排查都带来了非常大的挑战,进一步倒逼软件重视自身的可观测性能力。 而日志被称为可观测性的三大支柱之一,它可以帮助系统管理员和开发人员了解系统的运行状态,以便能够及时发现并解决问题。 此外,日志还可以用于数据挖掘、审计和安全监控等方向,以确保系统的合规性和安全性。
而 API 网关是在应用程序与外部世界之间构建的一道关口,它可以帮助组织更好地管理和监控 API 调用,其中之一重要的功能就是对于 API 调用日志的记录。

下面将会从两个角度来分析 API 网关日志的价值。
运维价值
无论是传统系统运维,还是现代网站可靠性工程师(SRE),对于保障系统稳定性这个大目标而言,如何发现故障永远是排在最高优先级的任务,因为对于任何一个大型的在线业务,每一秒的故障时间都可能会带来巨大的业务损失和用户体验伤害。
而 API 网关处于整个系统的最前端,它可以扮演一个“哨兵”的角色,让我们从它的访问日志中提取非常多对于运维体系至关重要的指标数据:
- 通过上、下游状态码分析,监控网站整体可用性和具体上游服务的可用性;
- 通过访问日志整体统计,监控网站流量,及时发现 DDoS 一类的攻击;
- 流量的趋势分析可以作为业务系统扩缩容的参考依据;
- 请求耗时统计,为业务系统提供接口级别的性能报告,作为业务系统性能优化的数据参考。
以上都是一些在业界被广泛采用的 API 网关日志的最佳实践,在很多企业的运维体系中落地。
业务价值
与运维价值被广泛认可相比,网关日志的业务价值往往是被人们所忽视的。 例如在用户行为分析领域,在程序中使用编码的方式进行埋点上报是最常见的数据收集方式,而对于一套设计良好的 API 来说,网关日志是可以天然支持此类需求的。我们可以:
- 通过分析客户端 IP,统计流量的地理位置分布;
- 通过分析 HTTP Referer,了解用户进入各个页面的来源;
- 对于重点 API 的聚合统计,可以直接得到关键业务指标。例:统计用户注册、商品下单等 API 的成功调用,可以直接得到指定时间段内的新用户、新订单的数量指标。
当然网关日志显然不如程序埋点灵活,无法实现自定义数据收集需求,但其中蕴藏的业务价值足以满足简单的数据挖掘需求。
Apache APISIX 是一个动态、实时、高性能的云原生 API 网关,提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。 它的很多能力是通过可插拔的插件形式提供,这其中就包括十数个日志插件。下面将会以 APISIX 中典型的日志插件为例,介绍如何将网关日志与日志分析系统打通,挖掘出更多的价值。
APISIX 典型日志插件介绍
elasticsearch-logger

ElasticSearch 是一个分布式开源搜索和分析引擎,旨在处理大量数据,在日志分析领域享有极高知名度。 它提供的配套数据面板 Kibana,可以非常轻松的定制出各种统计图表,满足组织对于可视化查询分析的需求。
实际应用时,由于大多数传统软件的日志都是保存到本地文件,所以 ElasticSearch 生态中有一个项目叫 Filebeat,用于监控本地机器上的日志文件,并将增量的日志发送给 ElasticSearch 服务器。而 APISIX 提供的 elasticsearch-logger 插件,可以将 APISIX 的访问日志直接发送 ElasticSearch 服务器,这有几点好处:
- 无需部署 Filebeat 组件,处理链路更短,减少计算资源消耗;
- 日志不落盘,不用考虑日志文件的磁盘占用,因为访问日志的量级可能非常大,如果没有处理好文件的轮转,很容易将机器的磁盘打满,导致故障。此外,与磁盘进行交互也会一定程度上降低网关的性能。
kafka-logger
网关访问日志有一个很明显的特点:日志的数据量与业务的请求量成正比,请求越多,日志越多。对于大多数在线业务,请求量会存在明显的周期性,比如外卖平台的流量高峰期会出现在餐点附近,而视频网站的高峰期则会出现在下班时间段。 这对于日志存储系统的挑战是巨大的,如何保证系统在流量高峰期依然可以正常工作,是每一个 ElasticSearch 管理员的必修课。

消息队列是处理“削峰填谷”场景的不二法器,在网关与存储系统之间引入消息队列,提供日志缓冲区,将会极大的降低存储系统在流量高峰期的压力。 为此 APISIX 提供了 kafka-logger ,它可以将访问日志投递到 Kafka 服务器,避免对日志存储产生直接的冲击。
loggly
近几年 SaaS 的概念逐渐深入人心,它凭借极低的接入门槛和按需付费的计价模型被众多中小型企业所青睐,在日志分析领域也涌现了诸多 SaaS 产品,Loggly 凭借着丰富的日志来源和分析手段成为其中的佼佼者。 在此背景下,活跃的 APISIX 社区开发了开箱即用的 loggly 插件,只需要配置好凭证信息,就可以将 APISIX 访问日志直接发送给 Loggly 服务,十分方便。
类似 loggly 插件,APISIX 还提供了 google-cloud-logging 、sls-logger 、tencent-cloud-cls 插件,可以轻松集成主流云厂商的日志服务。

error-log-logger
上面介绍的插件都是用于收集访问日志,在 APISIX 中还存在另外一类日志:错误日志(error.log),它对于排查网关自身故障非常关键,所以 APISIX 提供了 error-log-logger 插件 ,用于将错误日志发送到远端服务器进行存储分析。实际使用时,可以结合 APISIX 的日志等级配置,让网关打印出更多 debug 或者 info 级别的日志,这两个级别会包含更加详细的网关运行状态日志,利用这些日志通常可以定位出绝大多数问题。
总结
网关日志蕴藏着巨大的价值,从 Apache APISIX 项目丰富的日志插件中我们也可以看出,社区中的企业用户对于网关日志价值的肯定,而这些插件也进一步降低了新用户搭建日志系统的成本。 此外,APISIX 还有另外两类可观测性插件:metrics、tracing,它们配合上日志插件将会进一步提升网关的可观测性,助力系统稳定性建设。
关于 API7.ai 与 APISIX
API7.ai 是一家提供 API 处理和分析的开源基础软件公司,于 2019 年开源了新一代云原生 API 网关 -- APISIX 并捐赠给 Apache 软件基金会。此后,API7.ai 一直积极投入支持 Apache APISIX 的开发、维护和社区运营。与千万贡献者、使用者、支持者一起做出世界级的开源项目,是 API7.ai 努力的目标。
相关文章:
API 网关日志的价值,你了解多少?
本文介绍了 API 网关日志的价值,并以知名网关 Apache APISIX 为例,展示如何集成 API 网关日志。 作者钱勇,API7.ai 技术工程师,Apache APISIX Committer。 原文链接 网关日志的价值 在数字化时代,软件架构随着业务成…...
华大单片机、STM32单片机如何做printf串口打印格式化输出
第一种方法:使用标准C库,但使用标准C库你必须关闭半主机模式(1)添加下面代码就是关闭半主机模式/* 告知连接器不从C库链接使用半主机的函数 */ #pragma import(__use_no_semihosting)/* 定义 _sys_exit() 以避免使用半主机模式 */…...
unity 面试汇总
1、什么是协同程序?答:在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个可以与程序并行的逻辑。可以用来控制运动、序列以及对象的行为。2、Unity3D中的碰撞器和触发器的区别ÿ…...
Spring SpringBoot中使用Mybatis-plusDemo1
官网:https://baomidou.com GitHub:GitHub - baomidou/mybatis-plus: An powerful enhanced toolkit of MyBatis for simplify development Gitee:mybatis-plus: mybatis 增强工具包,简化 CRUD 操作。 文档 http://baomidou.com低代码组件库 http://aizuda.com My…...
【18.04Ubuntu中解决无法识别显示屏】
【18.04Ubuntu中解决无法识别外接显示屏】1. 问题来源2. 检查Ubuntu是否识别出外接显示器3. 解决没有识别出外接显示器问题4. 显示器扩展屏幕设置1. 问题来源 实验室的一个dell显示器,通过HDMI连接电脑后,在Windows上连接上就直接可以使用了。由于我电脑…...
Python 协程详解,都在这里了
什么是协程 协程(co-routine,又称微线程、纤程) 是一种多方协同的工作方式。 协程不是进程或线程, 其执行过程类似于 Python 函数调用, Python 的 asyncio 模块实现的异步IO编程框架中, 协程是对使用 asy…...
百家号如何写文章赚钱,百家号写文章真的赚钱?
随着互联网的快速发展,越来越多的人开始关注到写文章赚钱这个领域。而在众多写作平台中,头条号无疑是最受欢迎的一个。那么,百家号写文章赚钱是真的吗?如何写文章赚钱呢?下面我们就来一一解答。 首先,百家号…...
【HDFS】datanodeReport RPC优化
cat datanodeReport.txt | awk ‘{print $8}’ | sort | uniq | wc -l 结果15,说明我们有15个router。 每15秒一个router8次调用这个rpc。15秒是我们的监控采集间隔。 看下router为什么要调用这个rpc。 顺着这个配置项去寻找:dfs.federation.router.dn-report.time-out 一…...
【数据结构】研究链表带环问题
💯💯💯💯 本篇主要研究的是链表带环问题,快慢指针的应用,分析不同解法对带环链表的处理,梳理完本篇你将对链表的理解更加透彻Ⅰ.研究链表带环问题Ⅱ.扩展带环问题1.为什么慢指针和快指针一定会相…...
数据仓库的设计思想
数据仓库设计 知识点01:设计大纲与学习目标 #内容大纲1、数据仓库基础知识(回顾)什么是数仓为什么有数仓数仓的特点是什么OLTP和OLAP系统区别(数据库和数仓的区别)2、数仓系统的架构与核心流程核心1:ETL核…...
【JavaSE】数组的定义与使用详解
目录 1.数组的基本概念 1.1数组的好处 1.2什么是数组 1.3数组的定义及初始化 1.3.1数组的创建 1.3.2数组的初始化 1.4数组的使用 1.4.1访问数组中的元素 1.4.2遍历数组 2.数组的类型 2.1认识JVM的内存分布 2.2基本类型变量与引用类型变量 2.3认识null 3.数组的应…...
Kubernetes14:Helm为了部署像微服务这种的大型项目
Kubernetes14:Helm介绍(为了部署像微服务这种的大型项目) 1、Helm的引入 (1)之前方式部署应用基本过程 编写yaml文件 1、deployment kubectl create deployment nginx --imagenginx --dryrun -o yaml > nginx.yaml2、Service kubect…...
2.3操作系统-存储管理:页式存储、逻辑地址、物理地址、物理地址逻辑地址之间的地址关系、页面大小与页内地址长度的关系、缺页中断、内存淘汰规则
2.3操作系统-存储管理:页式存储、逻辑地址、物理地址、物理地址逻辑地址之间的地址关系、页面大小与页内地址长度的关系、缺页中断、内存淘汰规则页式存储逻辑地址、物理地址如何判断物理地址和逻辑地址它们之间的地址关系?页面大小与页内地址长度的关系…...
设计模式3——结构型模式
结构型模式描述如何将类或对象按某种布局组成更大的结构,它分为类结构型和对象结构型模式,前者采用继承机制来组织接口和类,后者采用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”&…...
css——图片缩放,拉伸,变形的解决办法
你的图片即将变得超级丝滑图片为什么会拉伸变形?怎么解决?css的object-fit属性object-fit属性有什么用介绍一下object-position举个小栗子图片为什么会拉伸变形? 前端布局时,图片会出现拉伸、缩放和变形的原因可能有多种: 1.例如图…...
【工具使用】STM32CubeMX-基础使用篇
一、概述 无论是新手还是大佬,基于STM32单片机的开发,使用STM32CubeMX都是可以极大提升开发效率的,并且其界面化的开发,也大大降低了新手对STM32单片机的开发门槛。 本文主要面向初次接触STM32CubeMX的同学,大…...
面试题解-理解cookie、session和token
项目vuespringboot 1、token 用户填写密码账号发送至后端,由后端生成token,返回给前端,前端把它存放起来,如放在cookie或者localStorage里面 前端向服务器发起请求时在请求头携带token,判断用户身份给与反应。 //后…...
Buuctf [GUET-CTF2019]number_game 题解
目录 一.主函数逻辑 二.level_stor()函数 三.mid_stor函数 四.operate函数 五.judge2函数 六.求解flag 一.主函数逻辑 ①先输入一个字符串,然后judge1()函数遍历它,判断字符是否在[0,4]区间范围内 ②将输入的字符串用层次遍历的方式存储为一个二叉树root ③再将二叉树r…...
OsgEarth配置.earth文件支持wms服务
<!-- 参考 http://vmap0.tiles.osgeo.org/wms/vmap0?LAYERSbasic&SERVICEWMS&VERSION1.1.1&REQUESTGetMap&STYLES&FORMATimage%2Fjpeg&SRSEPSG%3A4326&BBOX-90,45,-45,90&WIDTH256&HEIGHT256 --> <!-- 可用 2023.03.09--> …...
【数据结构】详解空间复杂度
Yan英杰的博客 悟已往之不谏 知来者之可追 目录 空间复杂度 案例1:计算BubbleSort的空间复杂度? 案例2:计算斐波那契额数列的前N项的空间复杂度 案例3:计算阶乘递归Fac的空间复杂度? 案例4:F1和F2两函数是否使用的同一块空间 案例5:计算该…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...
ZYNQ学习记录FPGA(二)Verilog语言
一、Verilog简介 1.1 HDL(Hardware Description language) 在解释HDL之前,先来了解一下数字系统设计的流程:逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端,在这个过程中就需要用到HDL,正文…...
未授权访问事件频发,我们应当如何应对?
在当下,数据已成为企业和组织的核心资产,是推动业务发展、决策制定以及创新的关键驱动力。然而,未授权访问这一隐匿的安全威胁,正如同高悬的达摩克利斯之剑,时刻威胁着数据的安全,一旦触发,便可…...
