当前位置: 首页 > news >正文

API 网关日志的价值,你了解多少?

本文介绍了 API 网关日志的价值,并以知名网关 Apache APISIX 为例,展示如何集成 API 网关日志。

作者钱勇,API7.ai 技术工程师,Apache APISIX Committer。

原文链接

网关日志的价值

在数字化时代,软件架构随着业务成长而变得越来越复杂,这给故障的发现和排查都带来了非常大的挑战,进一步倒逼软件重视自身的可观测性能力。 而日志被称为可观测性的三大支柱之一,它可以帮助系统管理员和开发人员了解系统的运行状态,以便能够及时发现并解决问题。 此外,日志还可以用于数据挖掘、审计和安全监控等方向,以确保系统的合规性和安全性。

而 API 网关是在应用程序与外部世界之间构建的一道关口,它可以帮助组织更好地管理和监控 API 调用,其中之一重要的功能就是对于 API 调用日志的记录。

API Gateway Log

下面将会从两个角度来分析 API 网关日志的价值。

运维价值

无论是传统系统运维,还是现代网站可靠性工程师(SRE),对于保障系统稳定性这个大目标而言,如何发现故障永远是排在最高优先级的任务,因为对于任何一个大型的在线业务,每一秒的故障时间都可能会带来巨大的业务损失和用户体验伤害。

而 API 网关处于整个系统的最前端,它可以扮演一个“哨兵”的角色,让我们从它的访问日志中提取非常多对于运维体系至关重要的指标数据:

  • 通过上、下游状态码分析,监控网站整体可用性和具体上游服务的可用性;
  • 通过访问日志整体统计,监控网站流量,及时发现 DDoS 一类的攻击;
  • 流量的趋势分析可以作为业务系统扩缩容的参考依据;
  • 请求耗时统计,为业务系统提供接口级别的性能报告,作为业务系统性能优化的数据参考。

以上都是一些在业界被广泛采用的 API 网关日志的最佳实践,在很多企业的运维体系中落地。

业务价值

与运维价值被广泛认可相比,网关日志的业务价值往往是被人们所忽视的。 例如在用户行为分析领域,在程序中使用编码的方式进行埋点上报是最常见的数据收集方式,而对于一套设计良好的 API 来说,网关日志是可以天然支持此类需求的。我们可以:

  • 通过分析客户端 IP,统计流量的地理位置分布;
  • 通过分析 HTTP Referer,了解用户进入各个页面的来源;
  • 对于重点 API 的聚合统计,可以直接得到关键业务指标。例:统计用户注册、商品下单等 API 的成功调用,可以直接得到指定时间段内的新用户、新订单的数量指标。

当然网关日志显然不如程序埋点灵活,无法实现自定义数据收集需求,但其中蕴藏的业务价值足以满足简单的数据挖掘需求。

Apache APISIX 是一个动态、实时、高性能的云原生 API 网关,提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。 它的很多能力是通过可插拔的插件形式提供,这其中就包括十数个日志插件。下面将会以 APISIX 中典型的日志插件为例,介绍如何将网关日志与日志分析系统打通,挖掘出更多的价值。

APISIX 典型日志插件介绍

elasticsearch-logger

Elastic Search And Apache APISIX

ElasticSearch 是一个分布式开源搜索和分析引擎,旨在处理大量数据,在日志分析领域享有极高知名度。 它提供的配套数据面板 Kibana,可以非常轻松的定制出各种统计图表,满足组织对于可视化查询分析的需求。

实际应用时,由于大多数传统软件的日志都是保存到本地文件,所以 ElasticSearch 生态中有一个项目叫 Filebeat,用于监控本地机器上的日志文件,并将增量的日志发送给 ElasticSearch 服务器。而 APISIX 提供的 elasticsearch-logger 插件,可以将 APISIX 的访问日志直接发送 ElasticSearch 服务器,这有几点好处:

  • 无需部署 Filebeat 组件,处理链路更短,减少计算资源消耗;
  • 日志不落盘,不用考虑日志文件的磁盘占用,因为访问日志的量级可能非常大,如果没有处理好文件的轮转,很容易将机器的磁盘打满,导致故障。此外,与磁盘进行交互也会一定程度上降低网关的性能。

kafka-logger

网关访问日志有一个很明显的特点:日志的数据量与业务的请求量成正比,请求越多,日志越多。对于大多数在线业务,请求量会存在明显的周期性,比如外卖平台的流量高峰期会出现在餐点附近,而视频网站的高峰期则会出现在下班时间段。 这对于日志存储系统的挑战是巨大的,如何保证系统在流量高峰期依然可以正常工作,是每一个 ElasticSearch 管理员的必修课。

Apache APISIX And Kafka

消息队列是处理“削峰填谷”场景的不二法器,在网关与存储系统之间引入消息队列,提供日志缓冲区,将会极大的降低存储系统在流量高峰期的压力。 为此 APISIX 提供了 kafka-logger ,它可以将访问日志投递到 Kafka 服务器,避免对日志存储产生直接的冲击。

loggly

近几年 SaaS 的概念逐渐深入人心,它凭借极低的接入门槛和按需付费的计价模型被众多中小型企业所青睐,在日志分析领域也涌现了诸多 SaaS 产品,Loggly 凭借着丰富的日志来源和分析手段成为其中的佼佼者。 在此背景下,活跃的 APISIX 社区开发了开箱即用的 loggly 插件,只需要配置好凭证信息,就可以将 APISIX 访问日志直接发送给 Loggly 服务,十分方便。

类似 loggly 插件,APISIX 还提供了 google-cloud-loggingsls-loggertencent-cloud-cls 插件,可以轻松集成主流云厂商的日志服务。

Apache APISIX Log SaaS

error-log-logger

上面介绍的插件都是用于收集访问日志,在 APISIX 中还存在另外一类日志:错误日志(error.log),它对于排查网关自身故障非常关键,所以 APISIX 提供了 error-log-logger 插件 ,用于将错误日志发送到远端服务器进行存储分析。实际使用时,可以结合 APISIX 的日志等级配置,让网关打印出更多 debug 或者 info 级别的日志,这两个级别会包含更加详细的网关运行状态日志,利用这些日志通常可以定位出绝大多数问题。

总结

网关日志蕴藏着巨大的价值,从 Apache APISIX 项目丰富的日志插件中我们也可以看出,社区中的企业用户对于网关日志价值的肯定,而这些插件也进一步降低了新用户搭建日志系统的成本。 此外,APISIX 还有另外两类可观测性插件:metricstracing,它们配合上日志插件将会进一步提升网关的可观测性,助力系统稳定性建设。

关于 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中的碰撞器和触发器的区别&#xff…...

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的空间复杂度&#xff1f; 案例2:计算斐波那契额数列的前N项的空间复杂度 案例3:计算阶乘递归Fac的空间复杂度&#xff1f; 案例4:F1和F2两函数是否使用的同一块空间 案例5:计算该…...

开源项目国际化:多语言配置全流程指南

开源项目国际化&#xff1a;多语言配置全流程指南 【免费下载链接】pivottable Open-source Javascript Pivot Table (aka Pivot Grid, Pivot Chart, Cross-Tab) implementation with dragndrop. 项目地址: https://gitcode.com/gh_mirrors/pi/pivottable 跨国团队如何让…...

轻量级AI写作工坊:OpenClaw+nanobot内容创作流

轻量级AI写作工坊&#xff1a;OpenClawnanobot内容创作流 1. 为什么需要自动化写作助手 作为一名技术博主兼自媒体运营者&#xff0c;我每天都要面对内容创作的"三重压力"&#xff1a;选题焦虑、写作耗时、发布繁琐。最痛苦的是&#xff0c;当我花两小时写完一篇技…...

Java面向对象实战:从0到1手写奇偶判断工具类[特殊字符]新手保姆级教程

&#x1f338;你好呀&#xff01;我是断弦承露&#x1f31f;感谢陪伴&#xff5e; 小白博主在线求友&#x1f33f; 跟着小白学/Java/软件设计/鸿蒙开发/芯片开发&#x1f4d6;专栏汇总&#xff1a;《软件设计师》专栏 | 《Java》专栏 | 《 RISC-V 处理器实战》专栏 | 《Flutter…...

OpenClaw任务编排:GLM-4.7-Flash驱动复杂工作流

OpenClaw任务编排&#xff1a;GLM-4.7-Flash驱动复杂工作流 1. 为什么需要任务编排&#xff1f; 去年我接手了一个重复性极高的数据整理工作——每周需要从十几个不同来源收集数据&#xff0c;清洗后生成可视化报告。最初尝试用Python脚本自动化&#xff0c;但随着需求变化&a…...

避坑指南:Prescan8.5安装常见报错解决方案(含MATLAB集成配置)

Prescan8.5安装避坑指南&#xff1a;7类典型报错与MATLAB集成深度解析 当仿真工程师第一次打开Prescan8.5安装包时&#xff0c;很少有人能预料到接下来可能遭遇的"技术迷宫"。作为自动驾驶仿真领域的重要工具&#xff0c;Prescan的安装过程就像它的功能一样复杂——从…...

LazyLLM架构设计揭秘:低代码如何支撑复杂多Agent系统

LazyLLM架构设计揭秘&#xff1a;低代码如何支撑复杂多Agent系统 【免费下载链接】LazyLLM 项目地址: https://gitcode.com/gh_mirrors/la/LazyLLM 在当今AI应用开发领域&#xff0c;构建复杂的多Agent系统往往需要大量的工程投入和专业知识。然而&#xff0c;LazyLLM框…...

计算机组成原理实验避坑指南:存储器地址映射常见错误及解决方法

计算机组成原理实验避坑指南&#xff1a;存储器地址映射常见错误及解决方法 第一次在Proteus里搭建存储器系统时&#xff0c;看着密密麻麻的地址线和片选信号&#xff0c;我对着实验指导书发呆了半小时——明明按照图示连接了所有线路&#xff0c;可写入RAM的数据总是莫名其妙出…...

百川2-13B-4bits量化实测:OpenClaw长文本处理会丢信息吗?

百川2-13B-4bits量化实测&#xff1a;OpenClaw长文本处理会丢信息吗&#xff1f; 1. 测试背景与动机 最近在尝试用OpenClaw搭建个人自动化工作流时&#xff0c;遇到一个实际问题&#xff1a;当处理长文档&#xff08;比如几十页的PDF或网页文章&#xff09;时&#xff0c;AI助…...

3KW无线充电系统设计:开环控制与闭环控制的MATLAB Simulink仿真模型,采用双边L...

3KW无线充电系统设计&#xff08;MATLAB simulink仿真模型&#xff09; 控制方式&#xff1a;开环控制闭环控制 拓扑结构&#xff1a;双边LCC拓扑结构 输入电压&#xff1a;750V 输出电压&#xff1a;400V 传输功率&#xff1a;3KW 最近在折腾一个3KW无线充电系统的仿真项目&am…...

NaViL-9B开源模型实战:媒体内容审核平台图文敏感信息识别案例

NaViL-9B开源模型实战&#xff1a;媒体内容审核平台图文敏感信息识别案例 1. 模型与平台介绍 NaViL-9B是上海人工智能实验室研发的原生多模态大语言模型&#xff0c;能够同时处理文本和图像信息。这个开源模型特别适合构建智能内容审核系统&#xff0c;因为它具备以下核心能力…...