Kubernetes和Docker是现代DevOps中最常听到的两个流行词。 Docker是使您能够容器化和运行应用程序的工具,而Kubernetes为您提供了一个平台来编排或管理这些容器--因为使用Docker CLI手动管理成千上万个容器是一个现实的噩梦。
但是,仅运行数千个容器并通过Kubernetes管理它们是不够的。您必须正确观察和分析它们,以确保您的服务正常运行。此过程称为站点可靠性工程(SRE),这是Google发起并推广的术语。可观察性和分析是SRE的主要内容。它可以细分为以下三个领域:
- 监控,您可以从应用程序和资源中提取数值指标,然后可以对其进行可视化和分析,以显示资源的当前状态。提取度量后,就可以将它们用于设置警报规则,简化配置和调试以及做出更好的SRE决策。
- 日志 使开发人员可以在发生故障时调试其容器。容器是短命的,日志也是如此。 Kubernetes和Docker确实提供了一种浏览容器日志的本地方法,但是其功能非常有限。因此,在任何面向容器的环境中,都必须有一个集中式日志平面。
- 跟踪 使您可以调试网络上运行的服务,并遵循请求跟踪,直到可以确定问题的根源。在微服务体系结构中,当多个服务/容器相互发送请求以执行一项业务任务时,适当的跟踪解决方案是必要的。
本文将描述用于监视和分析容器形态运行的服务最有效的开源工具。
Prometheus
Prometheus是讨论开源监控解决方案时想到的第一个工具。它在开发社区中非常受欢迎,并且是CNCF项目的毕业生,该项目专注于SRE的监视方面。 Prometheus最初是由SoundCloud创建并开源的,它简化了从给定指标端点基于时间序列提取数字指标的过程。它旨在监视高度动态的容器环境。
Prometheus分为三个元素:Prometheus服务器,Alertmanager和Exporter。Exporter是独立的,独立的进程/容器,可以在目标资源上运行,以通过度量标准API生成和导出度量标准。然后,Prometheus服务器负责服务发现以及从Exporter程序中提取指标以存储在Prometheus DB中,并随后用于可视化或警报。 Alertmanager负责设置警报规则,分析Prometheus DB中的数据,并在触发特定规则时将警报消息发送给多个接收者。这里列出了大量Exporters,这些Exporters都得到了普罗米修斯的正式支持和社区的维护。
Prometheus已成为监视云原生架构的行业标准。虽然它以其服务发现的简单性,易用性,警报能力以及与Kubernetes的集成而闻名,但其轮询体系结构并不理想。当前,Prometheus服务器必须可以访问度量标准终结点。但是,在Prometheus中实现了一个Pushgateway,它支持度量推送而不是轮询。普罗米修斯的另一个缺点是伸缩性不好。这个问题可以在Prometheus的Thanos中得到解决。
相关工具和技术:Grafana,Cortex,Thanos,Prometheus exporter,Alertmanager,Istio,Prometheus operator。
Grafana
Grafana是一个开源指标分析和可视化套件。它允许您使用从多个来源(例如Prometheus,Elasticsearch,MySQL,Postgres和Redis)获得的数据创建自定义仪表板。此外,Grafana拥有自己的警报系统和基于角色的软件访问控制(RBAC)系统。作为数据可视化工具,Grafana在Prometheus用户中享有盛誉,因为它们使他们能够有效地可视化Prometheus中存储的指标。 Grafana中有各种官方和社区构建的自定义仪表板,可用于各种数据源,使用户可以轻松设置仪表板(在此链接中找到)并继续进行监视。 Grafana提供了另一个名为Loki的关联产品,该产品在Kubernetes中汇总日志并与Grafana UI很好地集成。
相关工具和技术:Loki,Prometheus。
Elastic Stack
Elastic Stack是Elastic的一组开源产品,旨在帮助用户实时搜索,分析和可视化来自任何类型的源的任何格式的数据。该产品以前被认为是ELK堆栈,首字母缩写词代表该公司的主要产品之一:Elasticsearch,Logstash和Kibana。 Elastic Stack借助其大数据数据库Elasticsearch提供监视和日志记录解决方案。
为了聚合日志,人们倾向于使用Elasticsearch进行存储,使用Logstash或Fluentd进行日志流传输,以及使用Kibana进行可视化。 Fluentd不是Elastic Stack的一部分,但是它广泛用于Kubernetes,以代替Logstash(Elastic Stack提供的工具)流式传输日志。同样,Metricbeat用于刮擦指标并在Kibana上设置可视化效果。企业版Elastic Stack随附X-Pack,X-Pack是一组附加工具,可用于报告,警报和基于角色的访问控制(RBAC)等功能。默认情况下,Elastic Stack GUI Kibana不支持RBAC。您必须使用前面提到的Elastic Stack企业版来启用它。
相关工具和技术:X-pack,Metricbeat,Logstash,Kibana。
Sensu Go
Sensu Go是用于大规模多云监视的遥测和服务运行状况检查解决方案。它使您可以了解任何公共或私有云中的服务器,容器,服务,应用程序,功能和连接的设备。 Sensu可以与Prometheus一起运行以从两种解决方案中获得最大收益,也可以在没有Prometheus的情况下本机运行。 Sensu与Prometheus一起工作得最好,因为将应用程序级别指标导出到Prometheus需要将Prometheus SDK加载到您的应用程序代码库并公开指标端点。然后将端点刮擦并存储在Prometheus Server中。这听起来可能需要做很多工作,有时确实如此。 Sensu通过使用Sidecar概念避免了这种复杂性。 Sensu代理与您的应用程序一起部署。代理不断收集指标并将其公开给Prometheus服务器,而无需更改应用程序代码库。
Sensu没有Prometheus。它可以在Kubernetes中本地运行,在Kubernetes中,它拥有自己的服务器来存储和可视化由前面提到的Sensu代理公开的指标数据。
相关工具和技术:Prometheus。
Sysdig Inspect
Sysdig有两个开源产品:Sysdig Inspect和Falco。在这里,我们将重点关注Inspect,它可以监视和捕获系统中运行的容器进程,并允许您深入研究这些进程以进行事件后取证。这使您能够分析应用程序性能,排除错误并监视可能出现异常的所有处理器。此外,如果系统受到破坏,则Sysdig可让您了解破坏发生的方式以及在此过程中获取了哪些数据。 Sysdig Inspect是一个非常强大的工具,专注于系统的性能调整和安全检测。
相关工具和技术:Grafana,Sysdig,Sysdig Falco。
Jaeger
Jaeger是Uber Engineering开源的端到端分布式跟踪解决方案。它使您可以监视复杂的分布式系统中的事务并进行故障排除。在现代微服务体系结构中,大多数操作问题都属于网络和可观察性的范畴。发生服务故障时,您不知道请求如何通过网络在服务之间传递以完成单个业务事务。这使得调试非常困难。 Jaeger目前正在CNCF下孵化,Jaeger使用跟踪来启用根本原因分析,性能和延迟优化以及分布式事务监视。 Jaeger与Istio开箱即用,Istio是Google开源的一种流行的服务网格实现。
相关工具和技术:Prometheus,Jaeger,Zipkin,Istio。
结论
这些工具在技术行业中被广泛使用,并且它们都有自己的优势。但是,这些解决方案中的大多数都需要熟练的实施和持续的手动维护,这可能会对DevOps团队造成负担,并分散企业的精力。没有一种解决方案可以满足您的所有需求,因为每种工具都专注于可观察性和分析的一个或两个特定方面。通过将这些工具混合在一起,可以为您的个人业务需求提供独特的解决方案。
为了便于比较,下面的图表概述了本文讨论的每种工具提供的功能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。