阿里云对象存储OSS外网流出流量异常增多导致费用上升的解决方法

news2024/9/21 22:55:15

  本文介绍在使用阿里云对象存储 OSS服务过程中,外网流量消耗异常增多并导致异常的费用支出这一情况的问题发现、问题定位与几种不同的问题解决方法。

  细细数来,写博客已经有近3的历史了,这成为了一项已经陪伴我大半人生的工作;也因此,对于文案,尤其是图片存储需求愈发提升。一开始,因为博客都是首发在CSDN,所以就直接默认用CSDN的服务器作为图床;然而,在今年3月份,CSDN应该是对服务器中的图片文件加了防盗链,导致我在其他平台发表文章后出现无法显示图片的情况。针对这一问题,也是先后尝试了包括GitHub在内的多种免费、付费图床,具体搭建图床的方法大家可以查看文章GitHub与PicGo搭建免费稳定图床并实现Typora内复制自动上传(https://blog.csdn.net/zhebushibiaoshifu/article/details/129455228)。最终,确定使用阿里云的对象存储 OSS服务作为搭建图床的平台——一方面是稳定,另一方面主要还是它很便宜。

  但是,就在几天前,发现了由于对象存储 OSS服务中,外网流量异常导致的阿里云余额高速消耗情况。本文就对这一个问题的发现、定位与解决方法加以介绍。

1 发现问题

  周四大雪居家办公(但我还是去单位了)时,收到阿里云的短信;我本还开心地以为是收到他们家秋招Offer了,结果仔细一看是在提醒余额不足;如下图所示。

  当时就很奇怪——明明几天前刚续费,按照我当前云上的数据规模,怎么可能这么快就只剩下这么点钱了?所以,赶紧到工作台中查看情况。

  如下图所示,可以看到在12月开始至今(也就是收到上述提示短信的前2周的时间范围内),无论是已消耗的成本,还是预测的未来成本,确实环比上升了很多(当然这也没多少钱,但是和过往比起来确实上升了很多)。而且下图还是我在解决本文所述问题后截取的,最初收到短息、发现问题的那一天(即截图的前大概2天)环比上升的数值更高。

  从下图的消费趋势也可以看出来,从11月开始,费用就已经不太正常了,和之前的几个月比起来高了很多;尤其是12月,才刚刚过半,就又比11月明显高出来一截了。

  从下图也可以看出来,最开始几个月的费用,平均下来每个月也就是几块钱;但是最近的两个月,消费翻了5倍甚至10倍。

  再从我的充值记录中看一看,如下图所示。可以看到,之前充一次能用半年,现在充了同样的钱,但是1个月不到就又要付费了。由此可知,这个消费确实是有异常情况的。

  所以,首先定位一下是哪里出了问题。

2 定位问题

  首先,从服务的角度来说,在阿里云我只开通了对象存储 OSS1个需要付费的服务,如下图所示;也就是说,出问题的话一定是对象存储 OSS服务导致的。

  随后,进入对象存储 OSS服务的管理界面。对象存储 OSS服务主要有2个方面的计费因素——一个是容量,也就是存储的文件大小;还有一个是流量,就是调取其中某个或某些文件时,所用到的传输流量。如下图所示,可以看到对象存储 OSS服务中,我的容量是没有问题的——因为每个月都会写新的博客,图床会有新的文件进入,所以这个同比增长10%左右的数据还是应该没问题的。但是,流量中的外网流出流量,明显超出了上一个月——而且本月(12月)还只是刚刚过半,并没有完全结束,此时就比上个月多出来了这么多流量,显然是有问题的。

  基于上述分析,大概率知道是对象存储 OSS服务中,外网流出流量这里出了一些问题。接下来,针对这一假设加以进一步验证。如下图所示,在存储数据的文件大小上,可以看到最近2个月内并没有发生明显的变化。

  然而,在使用的流量方面,可以看到最近2个月内出现了极端的上升,如下图所示;且这一极值就出现在感觉费用出现异常的那几天里。

  其中,导致流量出现异常的就是“公网流出”这一项,如下图所示。由此,几乎可以确定,就是对象存储 OSS服务中,流出流量这里导致的费用消耗异常

  既然知道了是对象存储 OSS服务的问题,就深入到其中探究一下是哪个环节导致了流出流量出现异常极值。在我的对象存储 OSS服务中,只创建了一个Bucket,如下图所示;所以如果是对象存储 OSS服务的问题,那么就一定是这个Bucket的问题。

  在这个Bucket中,也可以看到确实是外网流出流量有问题;如下图所示。但是,由此首先可以确定访问端口都是正常的。

  随后,看一下这个Bucket中,存储容量流量(也就是下图中的“使用带宽”)随时间变化的情况,如下图所示。可以看到,同样的,还是容量没有问题,但是流量出现异常增长的情况。

  从“使用流量”界面可以更清晰地看到这一突变值的存在,如下图所示。

  其中,出现突变值情况的访问,多数都是GET请求,而PUT请求看起来还是正常的,如下图所示;那么说明我的图片上传操作是没有问题的,都是在自己或他人对图片加以获取下载操作时出了问题。

  此外,将访问次数最多的请求的Referer头对比一下,如下图所示;发现Referer头最多的是为空的情况,其次都是几个自己常用的博客平台的请求——这个也就很正常了,毕竟在不同平台发布时,都需要从这个Bucket中获取图片文件。但是,这里可以注意到,除了Referer为空,接下来最多的情况则是来自www.cnblogs.com的请求,表示这些请求是来自博客园的,而我确实也会在博客园中不定时发布一些文章。

  此外,将访问次数最多的IP地址对比一下,如下图所示;可以看到,访问最多的IP地址,其使用的流量远远超出其他的IP地址,为断层第一。

  通过搜索,发现这个IP地址是来自于浙江省杭州市的某个地方;如下图所示。

  从这个Bucket的统计信息中,也可以看到是来自浙江省的访问次数最多;如下图所示。

  通过上述分析,只能知道这个大概率出现异常的访问是来自于浙江省的,但是依然不确定它到底是谁。此时,想到了可以通过这个Bucket中,被访问次数最多的文件,来定位可能的访问来源。

  如下图所示,这里发现在最近的1周内,访问次数最多的几个文件,都有着相同的文件名称前缀;而我每一次传图到图床时,都是用时间戳来给文件命名的——也就是说,如果是同一篇博客文章中的图片,那么其在这个Bucket中的文件名就会非常接近,即其各自的文件名称前缀(就是表示日期小时的那几位数字)自然就会一致或者说比较接近。那么下图这种情况,表明大概率是我的某一篇文章被多次访问,导致其中所有具有相似文件名称前缀的图片都被多次访问了。

  那么,就复制一下上图中被访问次数最多的那一个文件的名称,然后到这个Bucket中按照文件名称搜索一下——发现它是和一篇空间点云数据三维建模相关的博客中的配图;如下图所示。

  因此,就到我发表博客的各类平台中,逐一搜索,看看到底哪一个平台最近发布了有关上述这一篇点云数据的博客,那么这个平台或许就是这些异常访问的源头。

3 确定问题

  经过对比,发现原来是博客园导致的这一问题。如下图所示,我在11月底、12月初的这一段时间里,不仅发布了上述空间点云数据三维建模相关的博客,还发布了另外2篇和空间三维建模相关的博客;而这3篇文章(下图中3个紫色框对应的文章),因为都和空间建模有关,所以其中均有着大量的图片,确实难免会出现更高的访问流量。

  其次,对比上图中和空间建模有关的3篇文章,可以发现其各自的发布时间(也就是上图中3个紫色框内的时间),正好对应了使用流量出现快速上升情况的3关键时间节点;如下图所示。

  再最后,直接打开博客园文章的后台,发现确实其中的图片URL都没有上传到博客园的服务器上,而都还是指向我这里阿里云的对象存储 OSS服务的这个Bucket,如下图所示。

  那么很显然了,只要每有1位用户打开我在博客园中发布的博客,那么博客园就会以客户端的角色,访问我的阿里云服务器,并获取其中的图片文件;而在获取(下载)图片的过程中,都是走的我对象存储 OSS服务的流量。

  至此,就已经明确了我们的问题所在。值得一提的是,前段时间也看到博客园说他们换到了杭州办公(如下图所示),那么这也和前面那个来自浙江省杭州市的高访问次数的IP地址对应起来了。

  明确了问题,就可以尝试解决了。

4 解决问题

  在这里,因为本文出现的这个问题只是简单地由于其他博客网站中图片没有上传到第三方服务器导致的,所以解决方法很简单——将这些图片传到第三方服务器就行了;如果大家无法通过这种情况来解决,那么本文还提供了其他2种方法,大家可以参考。

4.1 上传至第三方服务器

  这个方法很简单,既然之前写博客的时候没有将自己的图片上传到博客园的服务器(主要是我在这些非首发平台发布文章的话,都选择直接复制.md文件来发布,所以如果博客平台不自动转存图片的话,我自己也没意识到图片没有上传),那么就手动上传一下就好。如下图所示,博客园也是有这个自动上传的功能的,在编辑文章的界面点击右下角的“提取图片”即可。

  这样操作之后,我这里外网流量消耗异常增多并导致异常的费用支出的情况就得到解决了。

4.2 设置Bucket权限

  如果大家的情况不能用上述方法来解决,那么还可以考虑通过配置Bucket访问控制列表(Access Control List,ACL)给自己的Bucket设置读写权限;如下图所示,如果设置了“私有”,那么就只有自己可以访问这个Bucket,其他人就不行了。但是这样的话需要注意——如果有其他网站中图片的URL是指向这个Bucket的,那么那个网站中的图片自然也都会打不开了;因为只有你的云平台账户可以访问这个Bucket,其他第三方平台或个人都访问不了,自然也就显示不出来你的图片。

  如下图所示,我一开始也尝试着将权限设置为“私有”,发现随后就出现了许多绿色的4XX请求,如下图所示;这表明设置了权限后,很多第三方访问我的图片的请求都获取不到数据了。

4.3 设置防盗链

  此外,大家也可以给自己的Bucket设置防盗链防盗链相当于就是在所有访问你文件请求中,只允许不允许带有特定Referer头的请求获取数据,其他网站都不允许允许;如下图所示。

  如果大家明确知道有哪些第三方平台会正常地访问自己的Bucket,那么就设置防盗链的白名单即可;相反,如果大家只希望不让哪些第三方平台访问自己的Bucket,那么设置防盗链的黑名单即可。

  至此,大功告成。

欢迎关注:疯狂学习GIS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1316462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文阅读:PointCLIP V2: Prompting CLIP and GPT for Powerful3D Open-world Learning

https://arxiv.org/abs/2211.11682 0 Abstract 大规模的预训练模型在视觉和语言任务的开放世界中都表现出了良好的表现。然而,它们在三维点云上的传输能力仍然有限,仅局限于分类任务。在本文中,我们首先协作CLIP和GPT成为一个统一的3D开放世…

【Qt QML 入门】TextArea

TextArea也是一个多行文本编辑器。TextArea相比texttedit,增加了占位符文本,并添加了样式定义。 import QtQuick import QtQuick.Window import QtQuick.ControlsWindow {id: winwidth: 800height: 600visible: trueTextArea {id: taanchors.centerIn: …

for-each循环优先于传统的for循环

在大多数情况下,使用 for-each 循环(也称为增强型 for 循环)比传统的 for 循环更加简洁和方便。它提供了一种更直观的方式来遍历集合或数组中的元素。以下是一个例子,展示了 for-each 循环优于传统 for 循环的情况: i…

Vue中使用echarts@4.x中国地图及AMap相关API的使用

一、此 demo 实现的基本功能 1.中国地图的显示 2.地图点击下钻的功能 3.地图相关组件的使用,例 tooltip… 二、实现思路 初始使用下载本地的中国 geo 格式的 json 数据来绘制地图,点击某一区划(例:山东省)时&#xff0…

[渗透测试学习] Keeper - HackTheBox

信息搜集 nmap扫描一下端口 nmap -sV -sC -p- -v --min-rate 1000 10.10.11.227发现有两个端口,22端口为ssh服务,80端口是http服务 尝试访问一下80端口 提示我们要访问tickets.keeper.htb/rt/,访问发现不行 那么把该域名添加到hosts里面 …

算法:程序员的数学读书笔记

目录 ​0的故事 ​一、按位计数法 二、不使用按位计数法的罗马数字 三、十进制转二进制​​​​​​​ ​四、0所起到的作用​​​​​​​ 逻辑 一、为何逻辑如此重要 二、兼顾完整性和排他性 三、逻辑 四、德摩根定律 五、真值表 六、文氏图 七、卡诺图 八、逻…

都有哪些大厂开始适配鸿蒙原生应用呢

12月8日,随着支付宝宣布启动鸿蒙原生应用开发以来,国内宣布接入鸿蒙原生应用开发的公司越来越多。事实上,自9月华为宣布鸿蒙原生应用全面启动以来,已有金融、旅行、社交等多个领域的企业和开发者陆续宣布加入鸿蒙生态,…

SpeechGPT领航:创新的130亿参数跨模态AI模型

引言 在人工智能的最新进展中,SpeechGPT以其130亿参数的规模和跨模态会话能力引起了业界的广泛关注。这一由复旦大学邱锡鹏教授团队开发的模型,不仅在技术层面上取得了重大突破,也为多模态人工智能(AI)的未来发展指明…

Unity 使用AddTorque方法给刚体施加力矩详解

给刚体施加力,除了使用AddForce方法,我们还可以使用AddTorque方法。该方法是通过施加力矩给刚体以力。AddTorque方法从形式上跟AddForce差不多,它也有4个重载方法: 1、AddTorque(Vector3 torque);使用Vector3类型参数…

Github详细使用教程

1. 什么是 Github? github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开。 Github 由Chris Wanstrath, PJ Hyett 与Tom Preston-Werner三位开发者在2008年4月创办。迄今拥有5…

SpringBoot之响应的详细解析

2. 响应 前面我们学习过HTTL协议的交互方式:请求响应模式(有请求就有响应) 那么Controller程序呢,除了接收请求外,还可以进行响应。 2.1 ResponseBody 在我们前面所编写的controller方法中,都已经设置了…

【JavaWeb】往浏览器打印一个hello world

上集:建一个web项目 第一步:建好Servlet类的文件 右键src,建一个class 就行 第二步:编代码 可以直接复制粘贴 用来测试的类 import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; //↓是注解&#xff0…

QML 自定义进度条组件开发

一、效果预览 二、介绍: 自定义的QML 屏幕亮度拖动进度条组件CusProgressBar 可跟鼠标移动 更改进度条样式 三、代码 import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Controls.Material 2.12/***author:Zwj*csdn:来份煎蛋吧*date:2023/12/16*…

c++_01_名字空间_复合类型_缺省参数_哑元函数

0 前言 C和C一样,都属于编译型语言 C和C一样,都属于强类型语言 C对C完全兼容,并提供更多面向对象的特性:语言风格更加简洁,类型检查更加严格 1 名字空间 namespace WHY?划分更精细的逻辑单元(逻辑空间)&…

深度学习——第6章 浅层神经网络(NN)

第6章 浅层神经网络(NN) 目录 6.1 神经网络模型概述 6.2 神经网络正向传播 6.3 神经网络反向传播 6.4 W和b的初始化 6.5 总结 上一课主要介绍了一些神经网络必备的基础知识,包括Sigmoid激活函数、损失函数、梯度下降和计算图。这些知识对…

人工智能在红斑狼疮应用主要以下4个方面

人工智能(Artificial Intelligence, AI)在医学领域的应用已取得了一定的进展。红斑狼疮(Systemic Lupus Erythematosus, SLE)是一种免疫系统性疾病,对该疾病进行诊断和治疗是一个复杂的过程。人工智能可以发挥作用&…

VGG(pytorch)

VGG:达到了传统串型结构深度的极限 学习VGG原理要了解CNN感受野的基础知识 model.py import torch.nn as nn import torch# official pretrain weights model_urls {vgg11: https://download.pytorch.org/models/vgg11-bbd30ac9.pth,vgg13: https://download.pytorch.org/mo…

ArrayList与LinkLIst

ArrayList 在Java中,ArrayList是java.util包中的一个类,它实现了List接口,是一个动态数组,可以根据需要自动增长或缩小。下面是ArrayList的一些基本特性以及其底层原理的简要讲解: ArrayList基本特性: 动…

前端框架的虚拟DOM(Virtual DOM)

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

JVM学习之类加载子系统

类加载子系统 类加载子系统负责从文件或者网络中加载Class文件,class文件在开头有特定的标识 ClassLoader只负责class文件的加载,是否可运行是执行引擎决定的 加载的类信息放在方法区。除了类信息之外,方法区也会放运行时常量池&#xff0c…