“确保你可以看到服务内部正在发生的一切”,这是所有刚开始使用微服务的开发者经常听到的建议。 即充分利用可观察性的力量。 然而,可观察性是一个被过度使用的术语,因此术语的含义和所涉及的内容是很有价值的。
这篇博客很适合初学者、进阶者或者任何一个需要复习相关知识的人。 本文讲述了什么是事件,可观察性工具之间的区别,以及你可以用它们在 Istio 和 Envoy 服务网格支持的环境中做些什么。
指标、日志和追踪
从最基本的角度来说,可观察性最好被解释为使用指标、日志和追踪这些外部输出来理解系统的能力。
这些指标、日志和追踪是基于系统内部的事件产生的。
指标、日志和追踪都是了解这些事件以及延伸到服务内部工作的方法。
Istio 服务网格的可观察性
如果你已经广泛使用微服务,或者拥有一个混合环境,那么你很可能正在考虑使用或已经使用服务网格。
Istio 和 Envoy 在指标、日志和追踪中产生了大量的服务行为数据 —— 这很好! 你需要做出一些判断,决定哪些数据是关键的或重要的而哪些不是,这样你就不会淹没在收集的数据中,或者为存储你不需要的数据付费。
指标
一般来说,有两种类型的指标。应用 / 业务指标和运维指标。 运维指标
服务网格(比如 Istio)唯一关心的就是收集这些运维指标,帮助你确定服务表现如何,并对服务健康状况有一个大致的了解。
代理级指标
Envoy 会生成自己的统计数据、访问日志和追踪,更多信息可以在这里 找到。. Envoy 的可观察性会告诉你它的配置和健康状况,让你了解服务实例和 Envoy 资源之间的关系。
许多 Envoy 可观察性洞悉到的数据都是自动收集的,因此 Istio 采用了 Envoy 可观察性的强悍功能,并进一步增加了一个控制功能,让你能够选择在每个代理处生成和收集哪些指标。 此外,如果你需要扩展覆盖范围,你可以根据需要进行放大和缩小! 服务
服务级指标
涵盖了服务间通信的四种基本服务可观察性需求,服务级别指标可以让你深入了解延迟、流量、错误和饱和度(饱和度是指服务每秒可以处理的请求总数,以及距离达到该阈值有多近)。
控制平面指标
这些都是 Istio 对自己收集的指标! (真的就是那么简单。)
日志
访问日志让用户能够从单个实例的角度查看和了解行为。 Istio 的日志功能是由 Envoy 启用的,它们是可定制的,这意味着可以完全控制收集的内容和方式。
追踪
Istio 的追踪功能同样是由 Envoy 代理自动启用的,它让用户能够实时看到一个请求在网格中的流动情况,了解任何可能导致下游依赖失败或其他意外延迟的来源。 这些痕迹会被发送到分布式追踪后端,比如 Zipkin,它可以起到收集和查找的作用,为检查分布式链路提供简便的全方位体验。 Istio 在其中的作用是通过允许用户在必要的时候自主决定所进行的追踪量,从而加大对追踪功能的控制。
可观察性的价值
如果设置不当,可观察性会变得愈加昂贵和令人迷惑,使你愈难认清巨无霸(指复杂环境)。 良好的可观察性意味着:
- 在存储上的花费较少(这会影响你的财务支出)。
- 工程人员可以看到系统里实际系统发生了什么!在这种情况下, 模棱两可对任何人都没有帮助。
- 如果你正在经历一个迁移过程,好的可观察性会令你发现很多可能原先不知道的问题,让你有充分的机会实施稳固的流程以防问题在未来发生。
- 你会发现那些写得不好的代码。 可观察性虽然不会帮你重写代码,但会突出需要修改的地方。
- 它将在你的工程团队中嵌入一种护理的文化。
- 你将能够非常容易地看到使用最多的功能,并在客户意识到之前改进客户花费最多时间的地方。
上述列表还可以继续变长,但问题是可观察性工具所做的远远不止是帮助调试,它们是你进入一个需要更多监督的分布式系统的眼睛和耳朵。
延伸阅读
- Observability three ways: Adrian Cole
- Metrics, Tracing and Logging: Peter Bourgon
- Video: Observability ‘Ask Me Anything’ Learning Bytes
Tia Louden 是 Tetrate 的内容作者。 Tetrate 为企业解决可观测性问题,其产品由开源项目 Istio、Envoy、Zipkin 和 Apache SkyWalking 支持。