本文介绍在使用阿里云的对象存储 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 定位问题
首先,从服务的角度来说,在阿里云我只开通了对象存储 OSS这1
个需要付费的服务,如下图所示;也就是说,出问题的话一定是对象存储 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