民生银行的应用运维AIOps实战

852 阅读15分钟

民生银行的科技发展趋势

应用运维的定位

  • 应用系统的全生命周期管理
  • 应急处置第一责任人
  • 承上启下
    • 对外作为运维部门面向业务和开发的窗口
    • 对内协调运维各条线完成业务服务

面向业务部门

  • 沟通协调业务需求
  • 同步业务运行情况
  • 系统架构 续性管
  • 优化提升业务流程

面向开发测试部门

服务请求 上线交付 三线支持 工具建设 架构评审 设计评审

面向运维内部

  • 系统管理网络管理运行监控
  • 运维内部组织协调主要力量(流程+项目+系统)
  • 应急处理第一责任

民生应用运维的原则:基于SRE理念

  • 对应用系统的可靠性负责
  • 员工多面手,80%的员工具有开发经验

对服务质量负责

  • 服务分级
  • 驱动运维其他部门
  • 服务依赖

以发现问题为荣

  • 鼓励推动业务流程优化
  • 鼓励发现系统隐患
  • 鼓励建立问题工单

琐事与工具观

  • 工具和琐事的跷跷板效应
  • 好工具不是规划出来的

优先恢复

  • 详细事件报告
  • 根因分析
  • 规避总结

问题跟踪

  • 角色定位明确
  • 应急预案规范

应急管理

  • 以恢复生产服务为第一要务
  • 十分钟定位问题,十分钟解决问题

应用运维面临的挑战

  • 故障处理困难加大
  • 运维数据亟待挖掘
  • 运维价值难以体现

业务创新

  • 产品推陈出新
  • 流程优化改进
  • 注重客户体验
  • 要求快速响应

场景

  • 直销银行
  • 新零售信贷
  • 小微3.0
  • 远程银行

技术演进

  • 新架构
  • 新技术

场景

  • 分布式核心
  • 微服务与服务治理
  • 容器云平台
  • 大数据人工智能区块链|生物识别

运维支撑

  • 虚拟化
  • 云平台
  • 服务治理

场景

软硬件数量激增:7000+操作系统 应用和架构复杂化 频繁的变更操作: 调用链显著加长:最长17次调用 运维数据井喷:日志每日20T,监控指标百万/分钟,交易明细数亿/天

故障定位难题

基础资源异构性

  • 新老结构并行
    • 新系统一套架构 老系统一套 标准化做的不好
    • 合作的方式开发、买过来的、自己开发的 很难去标准化
  • 双栈运行

应用架构不统一

  • 标准化程度低
  • 无法共享和复用

频繁的变更发布

  • 应用集成关系频繁变更
  • 新业务新流程不断新增
  • 影响分析难以准确
  • 各条线协作困难

调用关系错综复杂

  • 网状调用关系
  • 难以厘清故障系统

严重依赖专家经验

  • 运维专家具有处理经验
  • 专家经验难以复用

运维数据井喷

  • 数据分散在各专业工具中,数据孤岛
  • 专业条线之间难以协作,数据难以共享
  • 海量数据人工无法快速分析

智能运维的架构设计

底层是运维对象层

  • 真实物理机
  • 机房
  • 网络设备
  • 数据库
  • 宿主机

数据源层

  • 机房的监控
  • 网络监控
  • 交易监控
  • 存储监控
  • 日志采集
  • 流程管理
  • 运维工具

将数据接入到智能运维平台

智能运维平台

  • 数据统一采集 进行数据治理
  • 数据加工
  • 数据存储
  • 引入一些智能的算法和模型
  • 实时计算和离线计算

然后推给上层的展示

展示层

  • 统一展示

应用场景

  • 质量保障
  • 运维效率提升
  • 成本优化

运维数据治理

  • 不断的摸索和迭代数据摸底
  • 编译出数据标准 格式 字段
  • 经过配置采集自动化 保证数据的准确
  • 采集的数据 进行人工分类 28个数据模型
  • 优化和反馈 不断的提高数据的质量

一横一纵故障定位

最上层是系统间的调用关系 服务的调用关系即交易路径 先从交易路径层面 确认是哪个系统

常见故障类型的总结

组件性能问题

  • 现象:数据库、中间件性能不足
  • 原因:交易量大,应用使用不合理、组件参数不合理等

基础设施故资障

  • 现象:网络、存储、宿主机等底层资源故障
  • 原因:硬件故障,变更操作 评估不到位等

调用链路问题

  • 由一套系统/服务引发了多套系统/服务故障

应用逻辑错误

  • 设计缺陷、代码缺陷、配置错误等

部分主机故障

  • 现象:集群中的个别主机出现故障
  • 原因:硬件故障,假死,内存泄漏,操作

部分服务故障

  • 现象:部分服务异常,其他服务正常
  • 原因:逻辑错误、性能问题、

第三方问题

  • 依赖的外部系统故障幕共享

故障类型站占比情况

人工排障流程-应用运维视角

告警

  • 触发检查的操作

影响分析

  • 影响范围 全局or局部
  • 影响程度 严重程度

故障传播分析

  • 依赖其他的服务 由其他服务导致 或者是自己引起的
  • 定界

特征分析

  • 问题的数据 总结到一个具体的特征上
    • 单服务故障
    • 返回码
    • 报错来自哪里

监控指标

  • 检查各监控指标是否正常

日志检查

  • 检查日志有没有报错

模拟人工排障

故障发现

可用性故障发现

  • 可用性指标
  • 单指标异常检查

日志异常检测

  • 日志模版
  • 单指标异常检查

故障影响分析

影响分析

  • 基于交易明细
  • 使用多纬的算法 分析在什么范围 从而评估影响

根因分析

调用链分析

  • 交易明细
  • 基于异常算法实践

多维特征分析

  • 交易明细
  • 多维度异常定位

监控指标定位

  • 监控指标
  • 多指标异常定位
  • 人工分析慢

日志模版定位

  • 人工查询慢
  • 日志模版+多指标异常定位

解决方案

典型事件匹配

关联分析

故障解决

处理过程示例

智能运维场景设计1-可用性故障发现

背景

  • 与SRE 的核心目标一致
  • 固定阈值 误报漏报多 人工维护成本高
  • 故障发现要及时 无漏报 少误报

数据: 关注黄金指标

  • 交易量
  • 成功率
  • 响应率
  • 响应时间

挑战

  • 简单的算法 (例如3sigma LOF 孤立森林) 只能在特定数据下 奏效
  • 指标情况各异 难以设计适应所有场景的算法
  • 节假日 尖峰 聚变等场景

什么样的成功率都有

算法: 单指标异常检测 基于GBRT的回归基带算法

  • 智能基带 根据历史数据 预测基带数据
  • 超出基带就是异常

效果

  • 开箱即用 无需事先标注 节省人工
  • 故障发现时更及时
  • 漏报少 大小故障不放过

响应案例

智能运维场景设计2-调用连分析

找到问题到底和哪个模块相关

背景

  • 调用链路不断延长
  • 告警风暴
  • 传统手段 解决办法类似烽火台狼烟信息共享问题 一步一步的去执行 效率低
  • 统计历史事件原因,25%的事件中存在多个系统的关联影响

数据需求

  • 系统级调用关系
  • 服务级调用关系
  • 全局统一流水号

调用连分析

构建全局调用链

  • 系统为节点, 每一个点代表一套系统, 每一个箭头代表调用关系
  • 调用关系
  • 调用性能

异常调用剪枝

  • 检测每条调用链路 正常的调用干系
  • 保留异常调用链

综合排序

  • 计算每个节点异常贡献度
  • 给出TOP3故障系统

智能运维场景设计3-多维特征分析

背景

  • 每笔交易都有很多维度组成,影响故障的维度很多
    • 地理维度 区域 机房 机柜 模块
    • 交互维度 哪个系统 服务 返回码 响应时间
    • 业务维度
  • 当整体指标出现告警时(如交易量上升),快速定位到具体的交叉维度(如渠道=手机银行&服务名=黄金购买)的异常,辅助故障定位或确定影响范围

数据

  • 交易明细

场景

  • 故障原因定位
    • 单主机异常
    • 个别服务异常
    • 其他维度聚合

故障影响分析

- 其他维度特征总结(错误码相同、机构号相同、源系统相同等)

特征分析:问题数据是否有特征?

智能运维场景设计3 多维特征分析

算法

  • 从交易明细数据中,通过关联分析找出每个系统的关键维度(数十个)
  • 整体指标出现告警时触发多维定位
  • 依据蒙特卡洛树搜索算法,对各种维度的交叉情况评估,快速剪枝,找出交叉维度

优势

  • 告警影响分析,缓解告警焦虑
  • 根因分析,智能下钻
  • 7*24在线

案例 某系统成功率低 准确定位异常来源

智能运维场景设计4 监控指标排查

背景

  • 机器数量增多,监控项细分
  • 报警仅针对核心指标的严重问题
  • 系统特点不同,排障依赖经验
  • 传统的报警 不会看cpu突降的问题
    • 关注指标的异常变化

数据

  • 按照CMDB 将机器分组
    • 用户数据库
    • 业务数据库
    • 图像数据库
    • 接入层应用
    • 集成层应用
    • Redis缓存等
  • 监控指标
    • 系统-模块-服务器-指标类别-实例-指标
    • xBank-业务库DB2-NAPSAP1-Disk-hdisk power 99-磁盘繁忙率

场景

  • 故障定界:关注专业模块-指标类别
  • 典型问题:常见的典型问题定义和识别,解决方案
  • 关联分析:告警关联,SQL关联, 基础资源故障关联

要快速定位 是哪一类的指标有问题 是disk还是数据库? 然后进行更准确的定位

人工排查的特点

1.排查指标是否异常

  • 多个监控工具来回切换
  • 海量监控指标排查慢
  • 异常指标认定无标准
  • 告警风暴干扰排查方向

2.同类机器指标比较

  • 人工比较主观性强
  • 手工操作时间长

3.故障原因分析

  • 依赖先验知识
  • 依赖专家
  • 依赖经验

机器排查的特点

优势

  • 与人工排查的结果一致
  • 不忽略长尾指标
  • 大幅减少故障定位耗时

1.指标异常程度评判

  • 同时评判海量指标
  • 异常程度定量评价
    • 异常的波动进行量化

2.相似异常机器聚类

  • 根据CMDB定义模块(数据库模块,应用服务器模块等)
  • 模块内聚类,具有类似指标异常的机器聚类
    • 对每一个层次 打分、然后排名
    • 变化最大的 与故障相关的放到最前面

3.定位结果排名

  • 算法排序
  • 得到可能性最大的异常原因

案例 某系统响应时间增加 原因是磁盘繁忙

案例 某系统响应率和失败率下降 准确定位到异常进程

智能运维场景设计5 智能日志分析

背景

  • 日志数据内涵丰富

    • 记录很多行为
    • 相当比例的逻辑问题可以从日志中找到答案
    • 应用运维工程师熟悉服务的内部逻辑,熟悉日志
  • 日志挖掘难度大

    • 非结构化,无法直接分析
    • 数据量过大,人力无法完成

数据

  • 已建立日志平台,日志量丰富
    • 平均每日新增15TB
    • 覆盖1715台主机,4大类操作系统,应用系统213套,9大类日志类型(应用日志,数据库日志,中间件日志,以及存储、网络、管理口、审计、容器平台、监控相关日志)

智能日志分析

日志采集

  • 借助ELK天眼日志平台的通道 获取日志

日志模版提取

  • 基于FP-tree的模版提取技术
  • 将相似的日志 归位一类 提取常量和变量 用常量组成一个模版

日志故障发现

  • 然后根据模版出现的频率进行统计
    • 转换成一个持续的曲线
    • 可以进行异常检查
    • 异常变化的提示
    • 和异常事件进行匹配
  • 查看变量的分布 辅助定位

日志辅助问题定位

  • 模版频率变化
  • 变量分布变化

案例 某文件系统飙升 定位到具体的日志异常

  • 当前的日志 比前一天的日志 多出了6 7倍
  • 业务类型数据的变化 占比变化突增
    • 发现日志集中在某个业务上面

某系统成功率降低

  • 定位结果:某机器无模版的日志量增加, 抽样查看主要为Too ManyFiles Open
  • 原因:代码缺陷,个别服务器的文件句柄数量达到最大

某音视频类系统响应慢

  • 定位结果:某类服务器的日志, UDP异常的报错增大
  • 原因:音视频流量大, UDP服务繁忙

某系统的调用时间过长

多位特征分析 定位到某商户 操作某产品导致

实践感悟

智能运维不是万能的,尤其是现阶段的智能运维

  • 正确的认识它 现在是一个初级阶段 还是有很多的挑战 不能给予过高的期望
  • 面对的问题和数据 比较复杂
    • 常见的都是正常的数据 很少出现异常的情况 数据倾斜的问题很多
  • 数据挑战:收集数据,数据倾斜
  • 算法挑战:非典型机器学习问题,可解释性要求
    • 常见的算法都是面对分类问题
    • 实际运维场景往往很杂 直接利用分类的情况不多 往往要用无监督学习

管控预期,合理定位智能运维

  • 替换人工流程中“难、慢、重”的部分,考AI提升效率
  • 结合“场景+算法+数据",简化应用运维的工作

数据的质量决定智能运维能达到的上限,好的算法逐渐逼近上限

  • 数据的质量很重要 然后才能提升算法 从而提高AI
  • 不要迷信算法,实践是检验算法的唯一真理 不要为了AI 而AI
    • 黑猫白猫,抓住老鼠就是好猫
    • 不一定通过算法 利用一些规则也可以做好

从算法Demo到产品存在巨大鸿沟

  • 产品化的过程 很难 跟当前现用的流程融合起来 不要颠覆现状
  • 不要尝试改变用户,而要融入日常流程

智能运维,大有可为

  • 仍处于单点时代,未来将由点及面,快速发展
  • 智能运维场景将逐渐从故障处理领域扩散开来,发展出更多的应用场景

QA

故障分析的数据源?

  • 应用监控的数据
  • 统一监控的数据 服务器 数据库 中间件 缓存数据库 进行组织编排
  • 日志

和日志分析平台的区别?

  • 看技术路线
  • 应用系统的监控 主要是通过日志实现的
    • 通过日志 去分析服务的一个运行的情况
  • AI运维 实现故障的发现和定位
    • 需要在现有数据的基础

对于基础资源的监控 如果集群中的硬件配置不同 怎么取健康值

  • 不做横向的比较 只做纵向的比较
    • 这个机器平时60% 突然飙到了80% 那可能就是异常

黄金指标是怎么采集到的?

  • 一个途径 基于流量定向分析的工具
    • 生产的流量镜像一份 网络抓包的数据进行解包
  • 自主的开发平台 进行APM的操作
    • 输出黄金指标

降低维护的难度和复杂度 提高维护性?

监控的工具多 数据也很多 如果各自玩自己的话 数据无法共享 没有协作

  • 数据集中起来 一起利用
  • 各个团队去消费数据
    • AI运维面向故障
    • 运营面向可视化

日志异常检测的模版数 会比较多 会进行一些筛选过滤的环节 只把关心的日志模版接入进来

  • 容量预测算法
  • 告警压缩算法

周期性指标的异常检测

  • 异常检测的时候 使用了回归的算法 会把周期性的问题考虑进去

收集规则和建模规则

  • 和数据的采集有关
  • 多源异构的数据 使用这些数据之前 要有梳理成标准数据的一个过程(数据治理)
  • 收集上来的数据 先进行数据清洗

不同指标的相关性

  • 后续异常定位的时候 会引入这样的一个考量
  • 某几个指标 从关系的角度 做关联