随手记统一监控平台架构演进实践

微风

2019/03/24 发布于 技术 分类

文字内容
1. 随手记统一监控平台 : 架构与实践 张 越 随手记基础平台部 架构师
3. 演讲大纲 • 诞生背景 - 随手记为什么需要监控平台化 • 平台化思路 - 理论基础与方法论、故障排查模型设计 • 平台化实践 - 缩减成本、流计算、关联分析、存储设计、采集设计 • 总结
4. 统一监控平台的诞生背景 随手记监控演进历史 +日志检索 指标监控 没有监控 排错要登录生产机器 监控平台化 +调用链 故障原因定位困难 排错需要切换多系统 单体应用 服务化 微服务 规模化微服务 1+ 10+ 100+ 300+ 互联互通
5. 随手记统一监控平台Focus (2015-2018) Focus是一个融合多种观测技术的应用监控平台。 300+ 服务 、2200+ 实例、400万指标、1700个告警 • 整合利用现有资源 • 提升效率和体验 • 减少开发运维成本
6. 架构简化结果 Elastic Job Brave SDK Logstash Kafka Zipkin Cassandra Zipkin Pre-aggs Service InfluxDB Grafana Focus Server ES Focus UI User Vision Application Focus SDK Kibana Spark Job Kafka Metric SDK ES User Vision Application Logstash
7. 故障排查效果 通过下钻引导用户找到根因 系统视角 服务视角 细节 堆栈
8. 演讲大纲 • 诞生背景 - 监控为什么需要平台化 • 平台化思路 - 理论基础与方法论、故障排查模型设计 • 平台化实践 - 缩减成本、流计算、关联分析、存储设计、采集设计 • 总结
9. 能力与职责划分 Logging (日志) Events 提供事件的细节 Metric / Time-series (指标/时间序列) Aggregation 负责统计和聚合 Tracing (调用链) Request-Scope 专注请求域信息
10. 关联分析的价值 碰撞出新的内容 统计应用的请求状况,并分类 链路聚合分析 统计应用发生了什么 日志聚类分析 了解每个请求发生了什么 全链路日志关联 应用画像与建模 全链路日志聚类分析
11. 故障排查模型设计 根因模型 分析 什么服务引起的? 架构拓扑描绘 实时链路分析 哪个方面有问题? 实时日志分析 实时依赖分析 指标聚合分析 Transaction 事务 哪类事务有问题? 事务聚合分析 调用链查询 全链日志关联 System 系统 Service 服务 Stack 堆栈 RC根因 问题发生过程细节? 日志查询 日志聚类分析 信息 Logging 日志 Tracing 调用链 Metrics 指标/时序
12. 演讲大纲 • 诞生背景 - 监控为什么需要平台化 • 平台化思路 - 理论基础与方法论、故障排查模型设计 • 平台化实践 - 缩减成本、流计算、关联分析、存储设计、采集设计 • 总结
13. Focus 整体设计 简单(3+2) 机房1 可扩展 计 算 组 件 Service A 采集组件 高吞吐 Service B 采集组件 实时处理(1m) 异常 分析 模块 AD/ Alerting 调用链处理模块 Tracing Analyzing 指标处理模块 Metric Aggregation Kafka 故障容忍和自愈 Service A 采集组件 Service B 采集组件 3 1 计 算 组 件 日志处理模块 Logging Analyzing 1 调用链处理模块 Tracing Analyzing 3 指标处理模块 Metric Aggregation 2 异常 分析 模块 AD/ Alerting 2 集 群 数 据 存 储 组 件 Store Data Hub 机房2 Elastic Search 数 据 交 换 组 集件 群 日志处理模块 Logging Analyzing 1 控制 组件 Web UI 控制 组件 Web UI 3
14. 1) 缩减成本 2.检索体验 92% 1T/d 0.7b/d Double/3month 1.成本
15. 日志的问题 90%的日志从未被检索过 存储浪费? 噪声增加? 可否去除没人看的日志, 同时不影响体验甚至提升体验? 90%+
16. 日志聚类分析 识别100W条日志说的是一件事情 Can not find user xiaobaiut@qq.com, Login failure… Can not find user mu571@qq.com, Login failure… Can not find user yustr@163.com, Login failure… Can not find user wfeij@yeah.net, Login failure… Can not find user liaolh@163.com, Login failure… Can not find user bigpowli@qq.com, Login failure… …………………….. Can not find user {}, Login failure… x 17320 事件描述 + 发生次数 + 发生时间趋势 + 样本
17. 日志归类实现 为日志打标签 关键字 • Slf4j/Log4j origin • Exception • LogEvent 直接获取 • Location Step 1. Collector 70% 人工修正 • Punct • Simhash • Mapping labeled 算法探测 Step 2. Computing 20% Step 3. Manual 10%
18. 2) 流计算 告警滞后、敏感 依赖存储 源事件 Kafka 过滤 离线存储 性能瓶颈 架构太重 Jobs TSDB/Alert 离线分析 结果告警
19. 引入流计算 TSDB/Alert 实时分析结果 增量计算 流计算集群 挑战: 高可用和自愈 算力可扩展 热点问题 防止重算(Exactly-Once语义) 齐全度问题 落盘 Jobs 离线分析任务 原数据查询
20. 使用 Kafka Streams 简化流计算开发 数据分区处理 进程内状态 Rebalance 故障转移 算力扩展 并行度调整 Streams Lib Exactly-Once 窗口回填 部署灵活 Collector App A Sharding Kafka A Kafka Streams Partition A Partition B B Partition C 异常检测 b Collector Ac b App A Sharding c ... x 结果存储 ElasticSearch ...
21. 流计算整合Pipeline 采样 打Label 业务日志 源日志Topic 按服务切分 源Metric点Topic 按服务切分 按服务切分 过滤 Level聚合 按类型切分 访问日志 源调用链Topic 聚合 组合 聚合 过滤 聚合 采样 落盘ES 按Name切分 过滤 聚合 采样 落盘ES 推告警 入TSDB 统计 落盘ES 推告警 入TSDB 推告警 入TSDB 推告警 入TSDB 推告警 入TSDB 聚合 入TSDB 入TSDB 1. 日志聚类、日志统计 2. 链路聚合计算 3. 指标预聚合计算
22. 3) 关联分析:全链路日志关联 Click 利用MDC给日志带上Span ID 和 Tracing ID 用 Tracing ID / Span ID 关联显示日志
23. 关联分析的更多价值 Tracing 系统拓扑结构 瓶颈 Metric 服务实时吞吐、延迟、失败率 上下游调用吞吐、延迟、失败率 Logging 服务实时故障信息 故障
24. 关联分析的更多价值 Tracing 提供事列表 Metric 提供状态(吞吐,错误率,延迟,满意度) 聚合链路提供卡顿点分析
25. 4) 存储设计 不同的技术使用的存储方案不一样 Graphite / InfluxDB / ElasticSearch / Cassandra 运维难 调优难 使用难 推广难 如何能统一存储? 用 户 告警系统 流计算 Web UI 存 储 层 Elastic Search InfluxDB Cassandra
26. 存储设计 1.统一存储引擎为ES 2.引入装饰层 为什么选择ES? 和多数监控技术亲和 可塑性 装饰服务 = 针对性优化 用 户 装 饰 层 告警系统 时序装饰 流计算 日志装饰 Web UI 链路装饰 装饰模式 or 代理模式? 存 储 集 群 Index Index Index Index Index Index Index Index Elasticsearch 集群 Index Index
27. 时间序列装饰器内的优化点 存储 1. 多值数据结构+倒排索引压缩元数据、 使用列存储压缩值 2. 历史数据降精度存储(Rollup)、历史数 据强制段合并 3. Mapping 优化(关闭不必要的分词和 存储)、优化索引刷新时间、滚动创建 索引 查询 1. 提供时间序列API(简化使用) 2. 索引规划优化(减少索引打开数量)利用 Routing直接命中分片(不打开整个索引) 3. 预聚合(Pre-Aggregation)、降精度查询 4. 读写分离 效果 压缩比 ~10:1 90%查询在2秒以内返回 单节点~ 1W / 12W 复杂聚合查询
28. 5) 采集端的问题 应用接入成本太高 接个监控一上午过去了 用户体验不好 不协调,漏采集 因为监控导致的发版或重启 扩展性问题 对中间件的扩展很困难 无法承载新特性 Service Config Brave SDK Config Metric SDK Log Log File File read Logstash Agent
29. 5) 采集端设计 Target MyBatis Spring 字节码 or SDK ? ... Focus SDK Argument OR Config Log Collector Metric Collector Tracing Collector Async SDK Core 带宽 or CPU ? Service Log4j Core 模块 提供API和数据结构 配置刷新 全异步化 装 配 器 Dubbo 一站式采集SDK 易接入 可扩展 核 心 包 Queue Sampler Transporter Thread Thread Thread
30. 演讲大纲 • 诞生背景 - 监控为什么需要平台化 • 平台化思路 - 理论基础与方法论、故障排查模型设计 • 平台化实践 - 缩减成本、流计算、关联分析、存储设计、采集设计 • 总结
31. Focus 整体设计 简单(3+2) 机房1 可扩展 计 算 组 件 Service A 采集组件 高吞吐 Service B 采集组件 实时处理(1m) 异常 分析 模块 AD/ Alerting 调用链处理模块 Tracing Analyzing 指标处理模块 Metric Aggregation Kafka 故障容忍和自愈 Service A 采集组件 Service B 采集组件 3 1 计 算 组 件 日志处理模块 Logging Analyzing 1 调用链处理模块 Tracing Analyzing 3 指标处理模块 Metric Aggregation 2 异常 分析 模块 AD/ Alerting 2 集 群 数 据 存 储 组 件 Store Data Hub 机房2 Elastic Search 数 据 交 换 组 集件 群 日志处理模块 Logging Analyzing 1 控制 组件 Web UI 控制 组件 Web UI 3