腾讯云带宽告警问题排查及解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了腾讯云带宽告警问题排查及解决相关的知识,希望对你有一定的参考价值。

参考技术A 产品服务器设置了「外网带宽使用率 >= 100%,统计粒度5分钟,连续1次满足条件则每1小时告警一次」告警策略,基本上我每天都收到多条告警信息。

放大一点查看数据:

服务器部署了 web 服务 和 用于存储图片资源,报表导出和资源(平均200KB左右,非 kb)一张,部分页面有时候会放好几张图片展示。如果是连续的浏览充电站、商城,或者导出报表,是很容易触发2次峰值而导致报警的。

刚才只是大约估计了一下可能的情况,排查问题还是要系统地去看,需要挑选了告警的时间区间,分别进行数据统计。

我们服务器对外的带宽服务有:

WEB 服务比较简单,nginx 上都有日志,可以通过日志的 bodysize 统计。其他两个是通过 socket 的,持续通讯的,所以我选择了数据日志的 log 进行大概统计。

以下是我的 nginx access.log 日志格式:

可以通过配置调整 ngx_http_log_module 的 log format,如:

可以看出 nginx 日志的 body_bytes_sent 是字节,所以可以通过以下指令查看数据量($10 是 body_bytes_sent 所在位置,需要根据实际调整;grep 内容是某一分钟的时间):

最终实际查看一天下来的流量也400MB,几个高峰的分钟段也就几M,都在预期合理的范围,并且形成不了持续的拥堵情况。

Web Socket 只有 connect 时的信息会写在 nginx access log 上,不过平时通讯的信息都有手动写相应的 access log(注意排除 业务的log信息)。经统计 web socket 的 access log 比较小,一天只有十几M的数据,基本可以忽略。

注意:心跳包也需要统计进去。

桩agent 是通过端口直连的,没有经过 nginx,log 比较分散,统计了几个大的agent的 log(只统计 access log),占用的大小都不大,基本不形成高峰。但由于数量多,没有最终确定某个时间段的高峰值。

通过 nginx 配置,限制最大的带宽,可以稍微缓解一次访问的压力。避免一个大文件的访问,就长期占用了所有的外网带宽。

Nginx 限流有两种方式:

ngx_http_limit_req_module 模块提供限制请求处理速率能力,使用了漏桶算法(leaky bucket)。下面例子使用 nginx limit_req_zone 和 limit_req 两个指令,限制单个IP的请求处理速率。

==在 nginx.conf http 中添加限流配置:==

==配置 server,使用 limit_req 指令应用限流==

上面例子限制 10r/s,如果有时正常流量突然增大,超出的请求将被拒绝,无法处理突发流量,可以结合 burst 参数使用来解决该问题。

burst 译为突发、爆发,表示在超过设定的处理速率后能额外处理的请求数。当 rate=10r/s 时,将1s拆成10份,即每100ms可处理1个请求。

此处,burst=20 ,若同时有21个请求到达,Nginx 会处理第一个请求,剩余20个请求将放入队列,然后每隔100ms从队列中获取一个请求进行处理。若请求数大于21,将拒绝处理多余的请求,直接返回503.

不过,单独使用 burst 参数并不实用。假设 burst=50 ,rate依然为10r/s,排队中的50个请求虽然每100ms会处理一个,但第50个请求却需要等待 50 * 100ms即 5s,这么长的处理时间自然难以接受。

因此,burst 往往结合 nodelay 一起使用。

nodelay 针对的是 burst 参数,burst=20 nodelay 表示这20个请求立马处理,不能延迟,相当于特事特办。不过,即使这20个突发请求立马处理结束,后续来了请求也不会立马处理。burst=20 相当于缓存队列中占了20个坑,即使请求被处理了,这20个位置这只能按 100ms一个来释放。

这就达到了速率稳定,但突然流量也能正常处理的效果。

ngx_http_limit_conn_module 提供了限制连接数的能力,利用 limit_conn_zone 和 limit_conn 两个指令即可。下面是 Nginx 官方例子:

limit_conn perip 10 作用的key 是 $binary_remote_addr,表示限制单个IP同时最多能持有10个连接。

limit_conn perserver 100 作用的key是 $server_name,表示虚拟主机(server) 同时能处理并发连接的总数。

需要注意的是:只有当 request header 被后端server处理后,这个连接才进行计数。

使用独立的云存储,专门存放资源文件。

Agent 与桩之间是通过外网连接的,可以考虑多加一台服务器,与 产品服务是一个内网的。Agent 先连接到一台转发服务器,与 ECMP直接通过内网连接。

端口转发参考:《Agent端口映像》



鉴于当前告警实际对访问的影响可忽略,将触发次数调整为2次再告警。(后面再也没有收到告警了~)

《 Nginx 的两种限流方式 》
《 常用的服务器日志分析命令 》

腾讯云轻量服务器性能评测:配置 8核 16G 18M 带宽

腾讯云轻量应用服务器8核 16G 18M配置,8M公网带宽下载速度峰值可达2304KB/秒,折合2.25M/s,系统盘为270GB SSD盘,3500GB月流量,折合每天116GB流量。分享腾讯云轻量服务器8核16G18M配置、CPU型号、公网带宽月流量、系统盘及限制条件详细说明。

腾讯云8核 16G 18M轻量服务器

在这个活动上:2bcd.com/go/tx/ 腾讯云4核8G服务器可以选择轻量应用服务器:

  • 轻量配置:8核16G18M、270GB SSD盘、3500GB月流量
  • 地域节点:上海、广州、北京

1、详细轻量服务器配置如下表:

轻量应用服务器

CPU内存带宽

系统盘

月流量包

地域节点

费用

轻量应用服务器

8核16G18M

270GB SSD

3500GB月流量,折合每天116GB

上海、广州、北京

1668元一年,可选续送3个月或送同配置3个月

如下图:

这款轻量应用服务器限制条件腾讯云新用户,新用户是指从未创建过轻量应用服务器或云服务器CVM的用户,如果之前已经创建过云服务器,那么则无法享受。如果是腾讯云老用户,可以想想办法,借用他人的新用户身份,毕竟新用户太香了。

2、轻量服务器CPU处理器性能

轻量应用服务器不支持指定CPU处理器型号,在创建轻量服务器时,CPU是系统随机分配的。很多用户担心轻量应用服务器是不是性能不如云服务器CVM,去翻阅了腾讯云官方文档,文档中有明确说明。所以大家不用担心轻量应用服务器的CPU计算性能问题。

3、公网带宽和月流量

这款轻量应用服务器为10M公网带宽,下载速度为1280KB/秒,即1.25M/s。轻量应用服务器是限制每月流量的,本文特价的轻量服务器自带1500GB月流量,每月免费流量为1500GB,折合每天50GB,一般来讲是够用的。那么问题来了,如果月流量不够用,超额了怎么办?需要另外支付流量费,为0.8元每GB。注意:轻量应用服务器只有公网出方向流量是收费的,入方向流量不统计也不收费。

4、系统盘

轻量应用服务器全系标配SSD云硬盘,SSD云硬盘是腾讯云基于NVMe SSD存储介质提供的全闪型存储类型,采用三副本的分布式机制,提供低时延、较高随机IOPS和吞吐量的I/O能力及数据安全性高达99.9999999%的存储服务。SSD云硬盘适用于对I/O性能有较高要求的场景。

以上是关于腾讯云轻量应用服务器4核8G10M配置限制条件及CPU内存系统盘和公网带宽性能评测,更多请以官方页面为准。

这款轻量应用服务器限制条件腾讯云新用户,新用户是指从未创建过轻量应用服务器或云服务器CVM的用户,如果之前已经创建过云服务器,那么则无法享受。如果是腾讯云老用户,可以想想办法,借用他人的新用户身份,毕竟新用户太香了。

以上是关于腾讯云带宽告警问题排查及解决的主要内容,如果未能解决你的问题,请参考以下文章

腾讯云服务器错误排查

线上FullGC频繁排查-druid

视频融合平台EasyCVR设备录像无法播放的问题排查与解决

阿里云Redis热key优化实践

linux--木马排查方案(腾讯云)

阿里云yum工具和出站80端口不可用的问题排查一例