基于腾讯云负载均衡的接口调用统计系统的设计

1、设计背景

你是否碰到过下面类似的问题:

  • 消耗系统资源较多的接口被恶意频繁调用导致系统无法正常提供服务,但是又一下子找不到调用者ip。

  • 怀疑接口被频繁调用,但是又不知道具体是哪个接口。

  • 网关的宽带被占满,不知道是哪个接口和那个ip导致的。

  • 想查找网关里面平均调用时间最慢的接口,针对性优化。

为了解决这个问题,我们可以使用网关作为统一的接口调用出口,拿网关的日志进行分析,就能解决上述问题。

2、技术栈

3、数据流向

负载均衡->日志服务->CKafka->Logstash->Elasticsearch

看到这个数据流向图就可以理解最log最终是投递到ES中然后使用Kibana进行分析。

4、负载均衡日志的数据结构

加粗的字段是我们需要关注的!

变量名 说明
stgw_request_id 请求 ID。
time_local 访问的时间与时区,例如,“01/Jul/2019:11:11:00 +0800”,最后的“+0800”表示所处时区为 UTC 之后的8小时,即为北京时间。
protocol_type 协议类型(HTTP/HTTPS/SPDY/HTTP2/WS/WSS)。
server_addr 请求的目的 IP。
server_port 请求的目的端口。
server_name 规则的 server_name,即服务器名称。
remote_addr 客户端 IP。
remote_port 客户端端口。
status CLB 返回给客户端的状态码。
upstream_addr RS 地址。
upstream_status RS 返回给 CLB 的状态码。
proxy_host stream ID。
request 请求行。
request_length 从客户端收到的请求字节数。
bytes_sent 发送到客户端的字节数。
http_host 请求域名。
http_user_agent HTTP 协议头的 user_agent 字段。
http_referer HTTP 请求来源。
request_time 请求处理时间:从收到客户端的第一个字节开始,直到给客户端发送的最后一个字节为止,包括客户端请求到 CLB、CLB 转发请求到 RS、RS 响应数据到 CLB、CLB 转发数据到客户端的总时间。
upstream_response_time 整个后端请求所花费时间:从开始 CONNECT RS 到从 RS 接收完应答的时间。
upstream_connect_time 和 RS 建立 TCP 连接所花费时间:从开始 CONNECT RS 到开始发送 HTTP 请求的时间。
upstream_header_time 从 RS 接收完 HTTP 头部所花费时间:从开始 CONNECT RS 到从 RS 接收完 HTTP 应答头部的时间。
tcpinfo_rtt TCP 连接的 RTT。
connection 连接 ID。
connection_requests 连接上的请求个数。
ssl_handshake_time SSL 握手所花费时间。
ssl_cipher SSL 加密套件。
ssl_protocol SSL 协议版本。
vip_vpcid 负载均衡 VIP 的所属私有网络 ID。

5、Kibana的统计图

  • ip与请求数的柱状图
  • ip与“发送到客户端的字节数”的柱状图
  • ip与“从客户端收到的请求字节数”的柱状图
  • RS地址与请求数的柱状图
  • RS地址与相应手机的柱状图
  • CLB 返回给客户端的状态码与请求数的柱状图

原文链接:https://www.jdkdownload.com/invoke_count_system.html