2021 年的研究发现,惊人的 96% 的受访者正在使用 Kubernetes 或计划在不久的将来使用它——而 69% 的受访者目前正在生产中使用 Kubernetes。Kubernetes 为大型组织和小型组织提供了许多好处:它提高了开发人员的生产力、降低了成本、提高了效率,并最终为最终用户带来了更好的体验。
但是,虽然Kubernetes 有很多优势,但它也带来了一些挑战。对于在 K8s 上运行工作负载的团队来说,实施全面的监控堆栈是一个重要的早期步骤。在这篇文章中,我们将探讨四种开源工具和技术,你可以使用它们来减少停机时间、更有效地进行故障排除,并全面了解集群内发生的一切。
开源工具和技术
云原生计算基金会 (CNCF) 已经孵化和毕业了许多用于监控和可观察性的惊人技术和工具。其中四种工具和技术特别有用,可以被各种规模的组织利用。让我们跳进去。
指标和警报
Prometheus于 2016 年 5 月 9 日被 CNCF 接受,是一个功能强大且 100% 开源的工具和时间序列数据库。借助 Prometheus,工程团队能够大规模收集指标并配置警报。Prometheus 被新生的初创公司以及世界上一些最大的公司使用,例如 Digital Ocean、Ericsson 和 Docker。借助 Prometheus,团队能够使用PromQL编写查询并创建临时表、图表和警报。借助 Alertmanager,团队能够使用预配置和可自定义的警报来识别发生的重要问题。使用警报规则,用户可以使用 Prometheus 表达式语言定义警报条件,然后将通知发送到外部服务。
Prometheus 有一个内置的可视化工具集,但通常与另一个可视化工具配对,例如Grafana或ContainIQ。将 Prometheus 连接到可视化工具很容易;Grafana 中有大量可用的预构建仪表板。由于 Prometheus 有许多集成和现有的导出器,因此使用官方导出器以及外部维护的选项将第三方指标桥接到 Prometheus 非常容易。
Prometheus 是 CNCF 的毕业项目。在GitHub 上,Prometheus 拥有超过 42,000 颗星和来自 700 多名贡献者的贡献。
链路追踪
Jaeger于 2017 年 9 月 13 日被 CNCF 接受,是一个分布式追踪的开源平台。使用 Jaeger,工程师可以通过分布式事务监控或跟踪进行监控和故障排除。与 Prometheus 一样,Jaeger 被大大小小的团队使用,并且被设计为大规模使用。像 Uber 这样的公司使用 Jaeger 每天处理数十亿个 span。
Jaeger 对于分析性能和延迟以及进行优化特别有用。使用 Jaeger,执行根本原因分析和研究服务依赖关系要容易得多。例如,Jaeger 可用于识别特定微服务的延迟峰值,包括影响最终用户体验的那些。Prometheus 和 Jaeger经常一起使用:Prometheus 提供了一个工具集来检测你的基础设施中的问题,而 Jaeger 通过深入研究各个请求来帮助你解决这些问题。
Jaeger 有一个名为 Jaeger Web UI 的原生 UI,它是用 Javascript 实现的。Jaeger 和 Kubernetes入门是一个简单的过程。Jaeger Operator 可以安装在 Kubernetes 集群上,并且可以为特定命名空间或整个集群启用。Jaeger 是 CNCF 的毕业项目。在 GitHub 上,Jaeger 拥有超过 15,000 颗星和来自 200 多名贡献者的贡献。
标准化指标、日志、跟踪
OpenTelemetry于 2019 年 5 月 17 日被 CNCF 接受,是一组工具、API 和 SDK,用于检测、生成、收集和导出遥测数据。通过使用 OpenTelemetry,工程师能够收集指标、日志和跟踪,因此他们可以更深入地挖掘其基础设施和应用程序的性能。
OpenTelemetry 是开源的、供应商中立的,并且在可观察性方面受到许多大公司以及云提供商本身的支持。微服务架构有很多好处,但是当它们被大规模部署时,工程团队可能会更难以查看服务的执行情况以及它们如何影响其他服务。指标、日志和跟踪可以让团队全面了解正在发生的事情,但收集这些数据需要运行、操作和维护多个代理/收集器,这可能是一个挑战。
OpenTelemetry 通过标准化将数据发送到可观察性后端的格式来解决这个问题,无论它是开源工具还是付费解决方案。它消除了供应商锁定的风险,因为团队现在能够使用标准格式轻松地在后端之间切换。
OpenTelemetry 是一个 CNCF 毕业项目,位于GitHub 上。
指标的多集群和长期存储
Thanos于 2019 年 7 月 20 日被 CNCF 接受,它是一个开源项目,使工程师能够通过高度可用的长期存储选项扩展其 Prometheus 设置。Thanos 可以使用与 Prometheus 服务器在同一主机或同一 pod 上运行的sidecar轻松与 Prometheus 集成。与 Prometheus 一样,Thanos 并没有特别依赖于 Kubernetes,但这是流行的用例。Thanos 旨在以多种重要方式改进 Prometheus。首先,借助 Thanos,工程师可以通过允许跨多个服务和集群进行查询来扩展他们的 Prometheus 设置。对于跨多个集群运行 Kubernetes 工作负载的公司来说,这是一种改进的方法,可以通过集中视图帮助节省时间。其次,借助 Thanos,团队能够利用许多长期存储选项,例如 S3。与 Prometheus 一样,Thanos 可以与 Grafana 等可视化工具一起使用,并且它原生支持 Prometheus 查询 API。Thanos 是一个 CNCF 孵化项目。在GitHub 上,Thanos 拥有超过 10,000 颗星和来自 400 多名贡献者的贡献。
其他注意事项
以下是一些需要考虑的其他最佳实践。
- 缓慢扩展:虽然这些工具有很多好处,但团队在实施过程中应该深思熟虑。在某些情况下,在整个基础架构中使用这些工具之前,在有限的集合中或在单个集群中或在暂存环境中测试这些工具中的每一个可能是有意义的。
- 考虑使用托管产品:今天,许多云提供商都提供托管解决方案。例如,亚马逊和谷歌云都管理过 Prometheus 产品。
- 鼓励团队合作:整个团队都可以了解如何使用这些工具。拥抱学习,并为你的工程团队提供他们需要的时间和资源,以便他们熟悉开源工具的世界。
- 警惕告警疲劳:告警疲劳是组织规模扩大时的真正挑战。努力设置可操作的警报,并考虑定期重新调整警报,以确保它们创造价值而不是浪费时间。
总结
在本文中,我们介绍了四个工具集,它们可以增强和改进对在 Kubernetes 上运行工作负载的工程师的监控。
Prometheus 是许多组织的首选时间序列数据库,当与 Thanos 一起使用时,它是一个长期的解决方案。
Jaeger 提供了修复你在基础架构中检测到的问题所需的额外上下文。OpenTelemetry 已经标准化了指标、日志和跟踪的格式和收集,让团队高枕无忧并保持动态。
这些工具共同提供了有效排除故障所需的指标、日志和跟踪,并确保你的最终用户拥有出色的体验。