# 监控如何做

# 指标如何选择

  1. 延迟
  2. 吞吐量
  3. 错误
  4. 资源利用率
    • cpu
    • 内存
    • 磁盘
    • 缓存连接数等
  5. 独特的指标
    • 主从延迟
    • 队列堆积
    • 缓存命中率

# 如何采集数据

  1. agent
  2. 埋点
    • 切面
    • 直接计算发到监控服务器
  3. 日志

# 处理与存储

  1. 写入ES,原始数据查询

  2. 流式中间件

    • 解析数据格式
    • 聚合运算
    • 存储在时序数据库中
    • Grafana展示数据
  3. 访问趋势报表(整体运行情况)

    • 接入WEB服务器、应用服务器的访问日志
    • 整体访问量
    • 响应时间
    • 错误数量
    • 带宽
  4. 性能报表(资源整体运行情况)

    • 资源、依赖服务的埋点
    • 被埋点资源的访问量、响应时间
  5. 资源报表

    • 使用agent采集的,资源的运行情况。连接数异常增高,缓存命中率下除等,用于进一步分析问题根源,找到解决方案

# 用户体验数据监控

应用性能管理 APM

# 如何搭建

  1. 数据采集
    • agent方式,植入SDK,定期通过固定接口发送服务端
    • 采集
      • 网络
      • 卡顿、崩溃、流量、耗电量等
      • 垃圾收集数据等
    • 通用数据格式
      • 系统部分:协议版本、消息头,消息体,业务消息的长度
      • 消息头:应用标识,消息时间,消息签名,消息密钥
      • 端消息体:客户端版本,SDK版本,IDFA,IDFV,IMEI,机器型号,渠道号,运营商,网络类型,操作系统类型,国家,地区,经纬度 ----(加密)
      • 业务消息体:采集的数据 ---- (加密)
  2. 数据存储
  3. 数据展示

# 监控那些信息

  1. 首要目标:客户端网络问题
    • 埋点:网络请颠沛流离的每一个步骤耗时、错误情况
      • 等待时间
      • DNS时间
      • 握手时间
      • SSL时间
      • 发送时间
      • 首包时间:首个响应包时间
      • 包接收时间:接收到所有数据的时间
    • 价值:
      • 数据来自客户端,准确、真实、实时反应用户操作体验
      • 性能优化指向标
      • 帮助监控CDN链路质量
  2. 异常事件
    • 登录异常,下单失败,浏览商品信息失败等

# 全链路压力测试平台

目的:通过观测系统在峰值负载下的表现,从而找到系统的性能隐患

# 正确的姿势

  1. 线上数据和线上环境
  2. 使用线上流量,而不是模拟流量
  3. 多机发起,贴近用户,至少不在同一机房

# 如何做

  1. 流量隔离
  2. 风险控制

# 模块:

  1. 流量构造和产生模块
    • 拷贝入口流量,清洗后存储
    • 访问日志,需要解析脚本解析
    • 开源工具拷贝GoReplay,劫持流量,记录数据工厂中
    • 流量染色,添加标记项
  2. 压测数据隔离模块
    • 读取数据的请求,对于不能压测的,Mock或特殊处理
    • 写入数据的请求,写入影子库
      • mysql,同一实例,不同schema,导入线上数据
      • Redis,增加统一前缀,存储在同一份存储中
      • ES,单独的索引中
  3. 系统健康和压测流量干预模块
    • 设立目标:如整体qps达到20万每秒
    • 逐渐增加流量,稳定运行观察表现,中间有调整系统,回退上一次qps,保证服务稳定
    • 流量监控组件研发:
      • 预设阈值,达到后通知压测服务减少流量,并茂报警研发和运维,迅速瓶颈,解决问题或扩容后再压测
  4. 价值
    • 帮助发现瓶颈,提前准备预案
    • 容量评估,提供数据支撑
    • 预案演练(降级预案)

# 配置管理

  1. 配置文件
  2. 配置中心

# 变更推送

  1. 轮询
  2. 长连推送

# 降级熔断

# 雪崩

局部故障最终导致全局故障

服务或组件慢,导致调用者持有资源无法释放,最终拖整体服务

# 熔断机制

保险丝、断路器模式

服务之间调用、资源调用(Redis等)

# 降级机制

全局考虑,放弃 非核心 功能 或服务,保证整体可用性

熔断是降级一种

降级开关

  • 读:直接返回降级数据
  • 轮询查询:减少频率
  • 写:异步化,放弃一些一致性和实效性,保证可用性

# 流量控制

# 算法

  1. 固定窗口
  2. 滑动窗口
  3. 漏桶
  4. 令牌筒
    • 应对突发流量,低延迟
上次更新: : 7 months ago