写点什么

《金融时报》:可观察性以及避免来自微服务的警报过载

  • 2017-11-28
  • 本文字数:2700 字

    阅读完需:约 9 分钟

内容提要

  • 任何基于微服务的应用都是分布式系统,因此,服务不独立运行。如果出现故障,则导致级联故障,使监控和警报复杂化。

  • 为适应监控微服务应用带来的挑战,Wells 提出一种三管齐下的办法:构建可被支持的系统,专注于“重要的东西”,以及筛选和增添警报和它们所包括的信息。

  • 由于服务量和网络通讯产生的潜在延时,日志可能丢失或延迟,因此任何分布式系统都需要日志聚合。

  • 当在基于微服务的系统内实施监控时,Nagios 等传统监控工具往往受到限制,因为它不提供“服务级别”视图,而且默认(基础设施)检查出来的某些问题无法被修复。

  • 监控与报警的一个核心目标是在客户使用之前发现问题,因此,运行模拟用户功能行为的“模拟请求”至关重要。

  • 必须不断筛选和增添警报,如果接收到无意义或者无需人为干预的警报,则必须进行修正或移除。

  • 创建警报应为标准开发工作流程的一部分即:“代码、测试、警报”。为确保开发团队知道警报是否停止工作,还应加入验证该警报的测试。

  • 在维护和处理重要系统中的警报时需要积极主动,过期的信息可能比没有信息更糟糕。

  • 微服务架构允许您快速行动,但也产生相关的操作成本,尤其在监控和可观察性方面。确定您是否愿意承担该成本。

Sarah Wells 在 QCon 伦敦发表了“防止来自微服务的警报过载”的演讲,他警告人们说,开发者和操作者在构建分布式的微服务系统时必须从根本上改变他们看待监控的方式。

《金融时报》首席工程师 Wells 在座谈开始时表示,发现什么时间有问题还不够,必须要在需要人为干预时触发警报。微服务架构允许开发团队迅速行动,但同时也会产生操作成本 ,而且基于微服务的系统产生的警报的数量(和复杂性)可能令人震惊。

_“微服务构架允许您迅速行动,但会产生相应的操作成本。_您要 __ 确定是否愿意承担该成本。”

《金融时报》 FT.com 网站由微服务后台支持,主要使用 Java 和 Go 编程语言,与 Docker 和 CoreOS 一起打包并部署到 Amazon 网络服务(AWS)平台。FT 将数据存储在 mongoDB、elastic、neo4j 和 Apache Kafka 中。

在任何时候,该后台都有 99 种功能服务和 350 个运行实例,以及 52 种非功能服务和 218 个运行实例。Wells 表示,如果每分钟检查这 568 个实例一次,则一天需要检查 817920 次。

共享虚拟机(VM)上的运行容器需要 92160 次系统级别检查,一天检查的总次数为 910080 次。另外,任何基于微服务的应用都是分布式系统,因此服务不会独立运行。

如果出现故障,则导致级联故障,使监控和报警复杂化。



Wells 认为,基于微服务的应用为监控带来更严峻的挑战。

为适应监控微服务应用带来的挑战,Wells 提出一种三管齐下的办法:构建可被支持的系统,专注于“重要的东西”,以及筛选和增添警报和它们所包括的信息。

为构建可被支持的系统,日志聚合和监控必不可少。由于服务量和网络通讯产生的时延,日志可能丢失或延迟,因此任何分布式系统都需要日志聚合。反过来说,这意味着基于日志的警报可能存在丢失问题,尤其是存在时效性的问题。有效的日志聚合需要一种找到所有相关日志的方法,因此 FT 团队使用事务 id 进行关联。

当实施监控时, Nagios 等传统监控工具往往受到限制,因为它不提供“服务级别”视图,而且默认(基础设施)检查出来的某些问题无法被修复。在基于微服务的系统中,监控应该处于服务和虚拟机级别。监控需要被聚合且可视化,FT 技术团队使用名为 SAWS (由 Silvano Dossan 构建)的自定义框架和 Dashing 。通过 Graphite Grafana 也可广泛地绘制相关图表等。

FT.com 技术团队的 SAWS 聚合监控

在开发多语言服务时,对于所使用的语言必须易于日志聚合和监控整合。必须指明期望值或操作合同,而且每位服务负责人需负责实现满足该需求的功能。例如,FT healthcheck 标准要求每种服务通过 HTTP, ' http://service/__health’公开一个供 healthcheck 的端点,如果服务能够运行 healthcheck 的话,它会返回 200;除此之外,FT healthcheck 还要求每种服务需要提供 1 个 JSON 文档,其中需要包含多次 healthcheck,以提供附加信息,但返回值必须为“ok”:“true”或“ok”:“false”。

****

****FT.com 微服务警报仪表盘,由 dashing.io 框架支持。

监控与警报的一个核心目标是在客户使用之前发现问题,因此,运行模拟用户功能行为的“模拟请求(s ynthetic requests ”至关重要。如果与用户主进程有关的功能崩溃,则必须马上解决该故障,例如,FT 编辑器不能发布新文章。Wells 表示,工程师必须学会如何安排优先顺序,而且“关注重要的事情”。FT 技术团队还创建了显示错误数量和响应延迟等客户核心统计数据的仪表盘,但是,Wells 强调,“重要的是端到端(业务功能)”,而且“如果您只需要信息 ,去新建一个仪表盘或报告就好”。

必须不断筛选和增添警报,如果接收到无意义或者无需人为干预的警报,则必须进行修正或移除。如果出现问题且没有警报,则应将该问题列入需修复部分。每个警报中必须包含主要信息,例如,业务影响概览、相关的 run book (运行资料)位置、以及触发该问题的相应事务 id。



例如,FT.com 警报包括问题、影响、事务 ID 和以及相关运行资料的链接等信息。

FT 团队使用专门的“Ops Cops”(开发团队的成员定期轮换随时待命),观察监控问题,将警报集成到团队的 Slack 信息发送系统。预定义 emoji 表情符号列表(每个都描述有清楚明确的目的)用于表明管理和处理问题的时间和方法。

在座谈总结中,Wells 提出创建警报应为标准开发流程的一部分该标准流程应当为“代码、测试、警报”。为确保开发团队知道警报是否停止工作,还应加入验证该警报的测试。FT 技术团队认同混乱测试哲学,受 Netflix’s Simian Army 和 Chaos Monkey 的启发,创建了“Chaos Snail”(它比 Monkey 更小,用 Bash shell 编写!)。Wells 警告说,在维护和处理重要系统中的警报时,需要积极主动性,过时的信息比没有信息更糟糕。尽可能自动化更新,并找到办法分享更新的内容。

在 Speaker Deck 上可以观看 Sarah Wells 的 QCon 伦敦讲座“避免来自微服务的警报过载”的幻灯片,您也可以在 InfoQ 观看视频。

关于作者

Daniel Bryant 正引领组织和科技领域的变革。他目前的工作内容包括,通过引入更好的需求收集和规划技术增强组织内部敏捷,关注敏捷开发内构架的相关性,促进持续的集成 / 交付。Daniel 目前的技术专长主要是“DevOps”工具,云 / 容器平台,以及微服务实现。他还是伦敦 Java 团体(LJC)的领导者,为开放源码项目提供帮助,为 InfoQ、DZone 和 Voxxed 等知名技术网站撰写文章,并定期出席 QCon、JavaOne 和 Devoxx 等国际会议。

查看英文原文: https://www.infoq.com/articles/observability-financial-times

感谢罗远航对本文的审校。

2017-11-28 16:521499

评论

发布
暂无评论
发现更多内容

🕋【Redis干货领域】从底层彻底吃透AOF重写(原理篇)

洛神灬殇

redis持久化 aof Redis 核心技术与实战 5月日更

模块四作业

Chris Cheng

架构实战营

Springboot结合Netty实战聊天系统

Damon

音视频

Sentinel在docker中获取CPU利用率的一个BUG

捉虫大师

Java Docker sentinel

话题讨论|做程序员五年后是什么样子?

饭饭

程序员 职业规划 发展现状 内卷 IT行业

iOS 面试策略之系统框架-网络、推送与数据处理

iOSer

ios

手撕友商7nm FPGA?英特尔“亲儿子”上阵

E科讯

英特尔PK赛灵思,完美胜出!Agilex™ FPGA迎来大规模量产

E科讯

百亿级图数据在快手安全情报的应用与挑战

NebulaGraph

图数据库 大厂实践

详解支撑7亿用户搜索的百度图片处理收录中台

百度Geek说

中台 搜索 图片处理

Rust从0到1-集合-Hash Map

rust hashmap 集合 Collections hash map

如何模拟弱网环境?

运维研习社

Linux 运维 网络 5月日更

SpringCloudRPC远程调用核心原理:代理模式与RPC客户端实现类

小Q

Java 学习 架构 面试

面试官:啥是请求重放呀?

why技术

Java

英特尔Agilex FPGA大规模量产出货,正面硬杠赛灵思

E科讯

领域驱动设计(DDD)

码语者

DDD

音视频开发视频和视频帧:ffmpeg的RTMP推流

赖猫

音视频 ffmpeg 推流 RTMP RTSP

云时代的数据之约

BinTools图尔兹

数据库 云计算 运维 云服务 dba

话题讨论|程序员在520最想收到什么礼物?

饭饭

程序员 恋爱 520 单身

前端领域的数据状态统一管理机制

鲸品堂

大前端 数据 流程图 state

消费者剩余:你愿意花多少钱买一件东西?

石云升

创业 产品 职场经验 5月日更

数字化转型助推,200亿元数据治理市场空间充满想象

DT极客

Nextcloud一站式体验

白粥

NAS Nextcloud

Redis后端之Redis持久化

赖猫

redis 后端 LinuxC/C++

金三银四面试结束后,整理的1000道Java面试题及答案

Java 程序员 架构 面试

如何自学 Java ?不报班只白嫖行不行?

Java架构师迁哥

你是否想要自由地构筑世界?51WORLD助力数字孪生开发者快速成长

Meta 小元

开发者工具 开发者关系 数字孪生 全要素场景

面试让HR都能听懂的MySQL锁机制详解

linux大本营

MySQL 数据库 Linux 后台开发

快时代的知识形态

Ryan Zheng

牛!马士兵亲自教授坦克大战+精通23种设计模式,视频+笔记+源码

Java架构追梦

Java 架构 面试 23种设计模式 坦克大战

上架Google Play应用如何适配Android 11?

YonBuilder低代码开发平台

《金融时报》:可观察性以及避免来自微服务的警报过载_DevOps & 平台工程_Daniel Bryant_InfoQ精选文章