• 可观测性-Event-埋点数据模型


    埋点数据模型

    埋点的目标是RED(Request,Error,Duration)

    初期

    当上线初期整体数据量不大的时候,我们可以统统以事件(event)来埋点。

    例如埋点数据模型如下

    measurement: laker_order #metrics name
    fileds:
      value: 398 # 泛化的value,可以是duration unit: ms,也可以是 filesize unit:byte,订单金额等。
      count: 1 # default 1.
      browser_version: 107.0.0.0 # autofill 浏览器版本
      os_version: # autofill 操作系统版本
      userid:  # autofill 用户id
      tracking_id: # TrackingID
      biz_id: # 业务id, 订单id/账单id/消息id等  
      description: # description
    tag:
      error_type: DECRYPTION_FAILED # DECRYPTION_FAILED/DECRYPTION_UNAUTHORIZED/DECRYPTION_GET_KEY_FAILED  
      status: 1 #用这个来代替 success感觉更好呢 0成功 1失败 2:xx 3:xx(但是要控制好 别扩散)
      -- success: true # true/false 成功失败
      org_id: # autofill 组织id
      os: Win #autofill 操作系统
      browser: chrome # autofill 浏览器
      az: # autofill 可用区 A/B/C 
      region: # autofill 地域 上海/杭州
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    注意:tag中的值一定是可枚举的,且其基数不能太大,基数计算如下:

    例如:

    • error_type: 值有3
    • success:2
    • org_id: 20
    • os:3
    • browser:6
    • az:1
    • region:1

    则基数为:3*2*20*3*6*1*1=2160

    基数一般建议小于1w,当然这取决于你服务器的配置有多高。

    这里注意下,内存基数和influxdb端基数是不一样的。例如,还是上面的计算方式。

    • error_type: 内存:3 ,全局:3
    • success:内存:2 ,全局:2
    • org_id: 内存:20 ,全局:20
    • os:内存:20 ,全局:20
    • browser:内存:6,全局:6
    • az:内存:1,全局:6(因为一个实例,在内存上只有一个az,但是整体是有6个的)
    • region:内存:1,全局:2

    则实例内存基数为:3*2*20*3*6*1*1=2160

    小心应用实例内存溢出。

    influxDB基数为:3*2*20*3*6*6*2=25920

    小心influxdb内存溢出。

    优化

    当系统用户数据量上来后,我们需要优化了,因为上面每个event,都是一条数据,会导致数据量太大了,我们需要用聚合指标来收集数据。以http request举例子。

    例如有 10000个事件

    • uri: /api/v1/users/{id} status : 200 ,有3000条

    • uri: /api/v1/users/{id} status : 500,有3000条

    • uri: /api/v1/orgs/{id} status : 200 ,有3000条

    • uri: /api/v1/orgs/{id} status : 500,有1000条

    事件指标数:10000条。

    聚合指标数:2 * 2 = 4条。

    优点

    • 把指标数量从事件数量级别下降到tag value的基数级别。

    缺点

    埋点模型如下

    measurement: laker_order
    # metric_type: timer/counter
    fileds:
      mean: 100    # 步长内事件值平均值,平均响应时间
      count: 1000  # 步长内事件数
      sum: 10000   # 步长内事件值总和,响应时间的总和
      upper: 250   # 步长内事件最大值,最大响应时间
    tag:
      error_type: DECRYPTION_FAILED # DECRYPTION_FAILED/DECRYPTION_UNAUTHORIZED/DECRYPTION_GET_KEY_FAILED  
      success: true # true/false
      org_id: # autofill
      os: Win #autofill
      browser: chrome # autofill
      az: # autofill 可用区 A/B/C
      region: # autofill 地域 上海/杭州
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    可以看到没有指标细节了,细节可以用 事件指标+log解决。

  • 相关阅读:
    Python 作用域:局部作用域、全局作用域和使用 global 关键字
    【WebLogic】WebLogic 2023年7月补丁导致JVM崩溃的解决方案
    Redis6入门笔记。别急慢慢来
    推动制造业数字化转型是发展数字经济的重要环节
    算法基础习题—内存分配(区间树实现)
    一文带你详细了解 JVM 运行时内存
    Oracle数据库:oracle 11g安装教程,已安装好的oracle各个文件夹的作用,oracle用户权限怎么样
    Django常见面试题总结(二)
    两化融合贯标是指什么
    软件测试基础学习
  • 原文地址:https://blog.csdn.net/abu935009066/article/details/127979494