1、字节跳动观测数据埋点标准化实践舒博字节跳动可观测团队 高级工程师大纲 背景 埋点标准化的挑战与拆解思路 实践与效果 总结背景随着字节业务规模越来越大,稳定性治理稳定性治理 就成为了一个越来越重要的话题。就成为了一个越来越重要的话题。观测数据标准化 及 配套的数据链路就是后续稳定性建设的数据基石。统一的观测数据标准,可以极大程度提升团队间排障效率,从人肉分析提升到更大程度自助/自动化排障的阶段。埋点标准化的重要性提高研发效率且降低研发协同成本为AIOps 提供强有力的数据支撑提高研发效率且降低研发协同成本面向排障:跨层间 上下文过滤便捷并统一术语历史数仓分析 整体pipeline 逻辑和适配成本
2、降低很多降低用户的学习曲线 以及 心智理解负担为AIOps 提供强有力的数据支撑清华大学裴丹老师的 的架构路线 也提到了 数据的重要性:数据知识驱动、算法代码联动、人机协同观测数据是基石之一有了数据标准化和统一的访问体验,为后续稳定性终极目标 MTTR 1-5-10 提供了数据层面的保障,包括同层数据的聚合/过滤 以及跨层数据的下钻和上卷 都会有统一的使用姿势。埋点标准化的挑战与拆解思路挑战:挑战:历史上可观测性埋点质量偏低历史上可观测性埋点质量偏低思路:思路:分层分层&向后兼容推进埋点标准化向后兼容推进埋点标准化卡点:卡点:识别和解决识别和解决埋点标准化的定义埋点标准化的定义:覆盖完整覆盖完
3、整定义统一定义统一计量准确计量准确面向引擎友好面向引擎友好M.T.L 横向覆盖是否完整横向覆盖是否完整定义统一定义统一计量准确计量准确面向引擎友好面向引擎友好TLBN/A高中之前打点丢失问题较严重低之前指标打点 对于配置预计算不友好指标名膨胀也比较严重微服务中20 年前 Tracing 方案还在 V1 版本高中之前遇到高基数的指标会被封禁低之前指标打点 对于配置预计算不友好指标名膨胀也比较严重加权计算也不好实现语言 runtime N/A低Golang&c+框架 不同的版本定义的指标格式都不太一样高低之前指标打点 对于配置预计算不友好容器指标低没有日志采集覆盖高中之前遇到高基数的指标会被封禁低
4、之前指标打点 对于配置预计算不友好基础架构 存储&数据库低存储、数据库、MQ 客户端也没有黄金指标打点没有日志采集覆盖低不同存储、数据库、MQ 产品打点格式 都不一中低之前指标打点 对于配置预计算不友好2020 年之前,字节整体观测数据埋点质量情况服务端观测数据质量大致分 3 类问题:同层数据/跨层数据不统一 观测多模态数据类型 指标、日志、链路数据定义不统一 观测数据格式面向引擎不够友好,比如所有的数据都在 default 租户一个大仓,再如很多观测指标定义对于预计算不友好。思路:思路:分层和向后兼容推进埋点标准化分层和向后兼容推进埋点标准化问题一问题一 同层数据同层数据/跨层数据不统一跨层
5、数据不统一解决方案解决方案:协作组件设计打点规范协作组件设计打点规范微服务RPC:引入多租户+多值&对齐TagKV 术语TLB:引入多租户+多值&面向预计算友好容器指标:引入多租户+多值&对齐TagKV 术语:思路:思路:分层和向后兼容推进埋点标准化分层和向后兼容推进埋点标准化问题二问题二 观测多模态数据类型观测多模态数据类型指标、日志指标、日志、链路数据定义不统一解决方案解决方案:采集覆盖采集覆盖+埋点术语统一埋点术语统一日志采集覆盖:微服务+容器链路覆盖:SDK 基线版本升级TLB:引入多租户+多值&面向预计算友好多模观测数据埋点术语统一:统一 M.T.L SDK TagKV定义;埋点ve
6、ndor SDK 感知运行时环境 定义TagKV 思路:思路:分层和向后兼容推进埋点标准化分层和向后兼容推进埋点标准化问题三问题三 观测数据格式面向引擎不够友好观测数据格式面向引擎不够友好解决方案解决方案:指标标准化引入metrics 2.0 多租户&多值:2.0 SDK 在性能开销&传输效率都优于1.0团队历年来在多个观测对象团队历年来在多个观测对象上埋点做出的业务推进上埋点做出的业务推进卡点卡点:识别和解决识别和解决如何高效推动业务升级?如何高效推动业务升级?如何进一步提升核心组件的埋点质量?如何进一步提升核心组件的埋点质量?如何保障观测数据迁移对于在线核心观测大盘和报警影响最小化?如何保