随着应用越来越多 , 对于可观测性和稳定性的诉求也越来越多 。 因此 , 我们自研了一套简单的根因分析系统 , 通过文本相似度算法将当前服务日志进行归类聚类分析 。
简版根因分析上线
上图为典型 ONS 故障 , 依赖服务进行服务升级 。 如果这是通过日志抓取智能分析出来的日志 , 做了很长时间 SRE 后 , 变更也会对于线上稳定性造成很大破坏 。 如果能将变更等也收集到可观测体系中 , 将会带来很大好处 。 同理 , 如果能将 ONS 要升级的信息收集到可观测体系统中 , 通过种种事件关联 , 能够分析出根因 , 对于系统稳定性和问题排查将极为有益 。
ARMS 支持 traceId 透出 responseHeader
F6 公司和 ARMS 团队也进行了深入合作 , 探索了可观测的最佳实践 。 ARMS 近期退出了一项新功能 , 将 traceID 直接透出到 HTTP 头 , 可以在接入层日志中将它输出到对应日志 , 通过 Kibana 进行检索 。
客户在发生故障时 , 将日志信息和 traceID 一起上报给技术支持人员 , 最后研发人员可通过 traceID 快速定位到问题原因、上下游链路 , 因为 traceID 在整个调用链路中是唯一的 , 非常适合作为检索条件 。
同时 , ARMS 支持直接通过 MDC 透传 traceID, 支持 Java 主流日志框架 , 包括 Logback、Log4j、Log4j2 等 , 也可以将 traceID 作为标准 Python 输出 。
上图展示了典型的日志输出场景下 ARMS 的后台配置 , 可以打开关联业务日志和 traceID, 支持各种各样的组件 , 只需在日志系统中定义 eagleeye_traceid 即可输出 traceID 。
上述方案较为简单 , 研发的修改也很少 , 甚至可以做到免修改 , 且对于 Loggin 和 Trace 的关联程度做到了较大提升 , 减少了数据孤岛 。
ARMS 支持运维告警平台
ARMS 为进一步降低 MTTR, 提供了很多数据 , 但是数据如何到达 SRE 、DevOps 或研发运维人员手里 , 依然需要花费一些心思 。
因此 , ARMS 上线了运维告警平台 , 通过可视化方式完成了告警转发、分流等事件处理 , 可以通过静默功能、分组等 , 支持多种集成方式 。 目前 F6 在用的包括 Prometheus、buffalo、ARMS 以及云监控 , 其中云监控包含了包括 ONS、Redis 在内的很多数据 , 研发人员或 SRE 人员在钉钉群里认领对应的响应事件即可 。 同时还支持报表、定时提醒、事件升级等功能 , 便于事后复盘和改善 。
上图为线上处理问题的界面截图 。 比如钉钉群里的告警会提示上一次相似告警由谁处理、告警列表以及对应事件处理流程等 。 同时 , 还提供了过滤功能 , 可以分割内容 , 通过字段丰富或匹配更新等方式替换内容填充模板 , 用于精准告警 , 比如识别到应用名称后 , 可以关联到对应应用的 owner 或告警人员 。 此功能后续也将逐步替代前文用 Go 语言写的 Apollo SDK 应用 。
Java 生态免修改注入 agent 方式-JAVA_TOOL_OPTIONS
同时 , 我们也借鉴了 ARMS 免修改注入 Agent 的方式 。 ARMS 通过one point initContainer 的方式注入了很多 ARMS 信息 , 也挂载了一个名为 home/admin/.opt 的 mount 用于存储日志 。 正因为有 initContainer, 它才能够实现自动升级 。
在 initContainer 中 , 可以通过调用 ARMS 接口获取到当前 ARMS Agent 最新版本 , 然后下载 Java Agent 最新版本 , 放到 mount 目录下 , 与目录下对应的数组 Pod 进行通信 , 通过共享 volume 的方式完成 Java Agent 共享 。 过程中最核心的点在于 , 通过 JAVA_TOOL_OPTIONS 实现了 Java Agent 挂载 。
通过上述方式 , 我们模拟了一套流程 , 通过openkruise 组件 workspread 使用 patch 方式修改 deployment 。 最简单的实践是利用 openkruise workspread给对应的 deployment 打注解 , 从而使得无需由研发或 SRE 团队进行处理 , 只要编写对应 CRD 即可 , CRD 过程直接注入 JAVA_TOOL_OPTIONS(见上图右下角代码) 。 其应用场景也较为丰富 , 可以做应用流量回放、自动化测试等 。
- 2022年12月6-7日|领军·杰出|锦江之星品牌白玉兰品牌再度斩获行业大奖
- 程序员|程序员的口味变了!C++首次逆袭JAVA:跻身最受欢迎编程语言TOP3
- Java|华为笔记本双12大促开启 智慧体验让办公学习更高效
- Java|京东第一刀落下:多个副总裁卸任 刘强东嫡系人手接管
- Java|荣耀Magic5Pro很大胆,16GB+5000mAh+100W,香喷喷
- 算法|外卖行业的下滑,或许是平台从放弃“算法”的那一刻起!
- 补齐行业技术短板!国内高端翻转犁在洛阳完成试制
- 拓尔思|电子行业报告:芯片良率的重要保障,量检测设备国产替代潜力大
- Java|MIUI14把精简当作核心卖点,国产系统急需做减法
- Java|“高薪专业户”的IT互联网行业是否已达到天花板?Java行业薪酬
