12 个最佳 Docker 容器监控工具:优缺点比较 [2023]
12 个最佳 Docker 容器监控工具:优缺点比较 [2023]
监控系统可帮助 DevOps 团队更快地检测和解决性能问题。随着 Docker 和 Kubernetes 的稳步增长,从一开始就进行容器监控和日志管理非常重要。
这绝非易事。监控 Docker 容器非常复杂。制定战略并建立适当的监控系统并不简单。
在这篇文章中,我们将深入探讨什么是容器监控以及为什么需要它,并比较当今可用的最佳容器监控工具。有些可能没有像 Sematext 的 Docker 监控解决方案那样成熟的功能,例如一些开源产品。
我在这里解释使用 CNCF 产品和 SaaS 工具之间的权衡。这样您就可以对您的需求和费用做出有根据的估计。
但首先,让我快速带您了解容器监控的基础知识。
什么是容器监控
容器监控是通过收集和分析性能指标来跟踪基于微服务架构构建的应用程序性能的过程。由于其短暂性,与虚拟机或裸机服务器上运行的传统应用程序相比,容器相当复杂,并且监控起来更具挑战性。
用简单的英语来说这是什么意思?容器是短暂的,意味着无状态。您需要收集指标和日志并立即将它们发送到集中位置进行妥善保管。否则,一旦容器被删除,它们就会被删除。因此,它比传统的虚拟机和服务器更具挑战性。
监控此类基础设施设置是确保容器最佳性能的必要条件和关键步骤。
我们在有关 Docker 容器管理挑战的文章中详细讨论了这一点。一定要检查一下。
为什么要监控 Docker 容器
实时监控容器对于确保应用程序的最佳性能至关重要。然而,当涉及到 Docker 容器时,监控可以帮助您:
- 及早发现并主动解决问题,避免生产风险
- 在监控整个环境的同时安全地实施变更
- 微调应用程序以提供改进的性能和更好的用户体验
- 优化资源配置
容器监控如何工作:12 个最佳 Docker 监控工具
监控容器与监控传统部署没有什么不同,因为在这两种情况下您都需要指标、日志、服务发现和运行状况检查。
然而,由于其动态性和多层次性,它更加复杂。但是一个好的容器监控解决方案可以导航堆栈中的所有层。您只需选择适合您特定用例的一种即可。以下是您应该考虑使用的最佳 Docker 监控工具,以便更好地了解容器部署的操作情况。
1. 语义文本
Sematext Monitoring 是一个具有 Docker 监控功能的全栈可观测性解决方案。它提供了更全面且易于设置的指标、事件和日志监控仪表板,为您提供有关容器和基础设施的可操作的见解。
通过异常检测、警报以及基础设施、集群和容器所有部分之间的关联,您可以在一处获得所需的一切,以便更好、更快地进行故障排除。
Sematext 的自动发现功能会自动检测新的容器和其中运行的容器化应用程序,并让您可以直接通过用户界面启动服务和日志监控,无需额外的步骤。很神奇! 🤯
您可以全面了解和深入了解您的基础设施。无论您在什么平台上运行,无论是裸机、虚拟机还是 Docker Swarm、Rancher 或 Kubernetes 等精心编排的容器环境,都无关紧要。
将所有这些与警报和异常检测以及使用数十个不同通知目的地的选项相结合,提供了一个全面的可观察性平台。如需快速了解如何在 Sematext 中监控 Docker 容器日志,请观看下面的视频。
2. Dynatrace
Dynatrace 也是一个全栈可观测性解决方案,提供用户友好的方法来监控 Docker 容器指标和日志。
它提供软件即服务 (SaaS) 和本地部署模型,可满足您对 Docker、其日志及其运行的基础设施的大部分监控需求。
Dynatrace 允许您以与只能通过执行 docker stats 命令获取的相同方式探索不同主机的容器资源使用情况。
您可以访问 Docker 指标,例如 CPU 使用率、RSS 和缓存内存使用率、传入和传出网络流量以及容器 CPU 使用率受到限制的总时间。很简约!
想了解 Sematext 的表现如何?查看我们关于 Sematext 与 Dynatrace 的页面。如果您想对 Dynatrace 及其替代品进行更广泛的比较,请阅读我们的专门文章。
3. 数据狗
Datadog 为您的基础设施、应用程序、网络和日志提供强大的监控系统,同时还提供对 Docker 容器的支持。
所需要做的就是安装 Datadog 代理。如果您已经安装了代理,那么就可以开始了。如果没有,只需下载代理包并按照说明操作即可。
唯一需要记住的是,默认限制是每个受监控实例 350 个指标。如果您想全面了解容器,您还可以自动收集 Docker 日志。
想了解 Sematext 的表现如何?查看我们关于 Sematext 与 Datadog 的页面。您还可以在我们的 Datadog 最佳替代品文章中找到有关它们如何比较的更多详细信息。
4. 普罗米修斯和格拉法纳
有多种开源工具可用于 DIY 式容器监控和日志记录。通常容器日志和指标存储在不同的数据存储中。
ELK 堆栈是日志的首选工具,而 Prometheus 则在指标方面很受欢迎。
最知名、最广泛使用的流行仪表板工具是 Grafana 和 Kibana。 Grafana 作为仪表板工具表现出色,可以显示来自多个数据源(包括 Elasticsearch、InfluxDB 和 Prometheus)的数据。
然而,总的来说,Grafana 实际上更适合指标,尽管也可以将 Grafana 用于 Elasticsearch 日志。 Grafana 对于临时日志搜索仍然非常有限,但集成了日志警报。
根据您的指标和日志数据存储选择,您可能需要使用一组不同的数据收集器和仪表板工具。 Vector 和 Prometheus 是我评估过的最灵活的开源数据收集器。
Prometheus 导出器需要一个抓取器(Prometheus Server 或替代的第 3 方抓取器)或 Prometheus Server 的远程存储接口,以将指标存储在替代数据存储中。
Prometheus 和 Grafana 是一个强大的开源组合,将极大的灵活性与后端相结合,为 Docker 容器指标提供良好的监控。
但是,请记住,初始设置和配置步骤以及持续的升级、维护等都是必需的,并且可能非常耗时,因此成本高昂,尤其是在您不熟悉这些工具的情况下。
5.Elasticsearch 和 Kibana
如上所述,虽然 Prometheus 在指标方面很受欢迎,但 ELK 堆栈是日志的首选工具。
Elasticsearch 是一个基于 Lucene 库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,具有 HTTP Web 界面和无模式 JSON 文档。 Elasticsearch 是用 Java 开发的。
Elasticsearch 可让您轻松地大规模存储、搜索和分析。
Kibana 是一个免费且开放的用户界面,可让您可视化 Elasticsearch 数据并导航 Elastic Stack。从跟踪查询负载到了解请求流经应用程序的方式,您可以执行任何操作。
Kibana 核心附带了经典功能:直方图、折线图、饼图、旭日图等。当然,您可以搜索所有文档。
另一个强大的开源组合 ——Elasticsearch 和 Kibana 将极大的灵活性与提供 Docker 容器日志监控的后端相结合。
然而,就像 Prometheus 和 Grafana 一样,初始设置和配置步骤以及持续的升级、维护等都是必需的,并且可能非常耗时,因此成本高昂,特别是如果您不熟悉这些工具的话。
6. SolarWinds 服务器和应用程序监视器
SolarWinds Server & Application Monitor 提供对 Docker 容器的监控。它可以让您根据您选择的环境深入了解 Docker 指标以及 Windows 和 Linux 指标。
凭借支持开箱即用的警报和仪表板功能,该解决方案不仅适合监控 Docker,还适合监控整个基础设施。
7. 使用 APM 进行 AppOptics Docker 监控
AppOptics 是一个全栈 APM,使您能够评估应用程序性能并让您查看容器化资源。
借助 AppOptics,您可以快速发现性能问题,并确定这些问题是由容器还是由容器中运行的代码引起的。
AppOptics 现在是 Solarwinds 的一部分。从 SolarWinds Server & Application Monitor 和 AppOptics 获得的功能类似。您可以获得开箱即用的 Docker 集成以及高效的使用指标(包括 CPU 利用率),以提供您所需的性能洞察。
您还可以将警报配置为在 Docker 指标超过设定阈值时自动发送。
8.cAdvisor
cAdvisor 是容器顾问的缩写,是 Google 创建的一个简洁的开源指标收集器,用于分析和公开正在运行的容器的资源使用情况和性能数据。它还公开了开箱即用的 Prometheus 指标。
这意味着指标由 cAdvisor 收集,但由 Prometheus 抓取。
Github 存储库表示:“cAdvisor(容器顾问)让容器用户了解其正在运行的容器的资源使用情况和性能特征。”
简单来说,这意味着 cAdvisor 作为守护进程运行,收集、聚合、处理和导出有关容器的信息。
它保留每个容器的资源隔离参数、历史资源使用情况、完整历史资源使用情况的直方图以及网络统计信息。该数据由容器和机器范围导出。
9. 系统挖掘
Sysdig 允许您最大限度地提高云基础设施、服务和应用程序的性能和可用性。它提供了对快速变化的容器环境的深入可见性。
您可以使用源自实际系统调用的精细容器数据更快地解决问题,这些数据通过云和 Kubernetes 上下文进行了丰富。 Sysdig 使跨团队统一数据以进行云监控变得轻而易举。
Sysdig 是第一个商用的与 Prometheus 完全兼容的云监控平台。这为开发人员提供了一个熟悉的工具,而无需担心管理问题。
据报道,Sysdig 可以扩展到数百万个指标,并具有长期保留和单一后端。感人的!
10. ManageEngine 应用程序管理器
应用程序管理器是 ManageEngine 中的一项 APM 功能,具有对 Docker 监控的本机支持。它可以帮助您快速查找并修复整个应用程序堆栈中的性能问题(从 URL 到代码行)。
您可以了解本地和云中的服务器、虚拟机、数据库。
它是一个集成的 APM,可满足您的所有服务器和应用程序监控需求。应用程序管理器提供主动的应用程序监控服务来实时测量性能统计数据,以全面监控您的基础设施。
与其他应用程序监控工具不同,Applications Manager 支持最广泛的 100 多种流行技术,涵盖服务器、虚拟机、容器、应用程序服务器、数据库、大数据存储、中间件和消息传递组件、Web 服务器、Web 服务等。
该监控工具可扩展至 10,000 个应用程序,设置简单,无需培训或咨询即可启动应用程序监控。
11. 相扑逻辑
Sumo Logic 是一个监控系统,拥有 150 多个应用程序和集成,可以轻松聚合整个堆栈和管道中的数据。
Sumo Logic 与 Docker 容器的集成可以对基于分布式容器的应用程序和 Docker 容器本身出现的问题进行故障排除和根本原因分析。
您可以获得整个 Docker 基础设施的本机收集源、Docker 基础设施的实时监控(包括统计信息、事件和容器日志)、解决问题以及针对异常容器或应用程序行为设置警报的能力等等。
然后,您可以使用可自定义的仪表板可视化这些数据,并获得整个基础设施的可见性。
12. 斯普朗克
借助 Splunk,您可以在单个仪表板中监控从主机到容器再到应用程序的 Docker。您可以按容器查看基础架构指标,并将单个主机的性能与总体性能进行比较。
您可以轻松深入到主机以按容器查看基础架构指标,并比较各个主机上的性能。
借助 Splunk,您还可以将性能指标与特定容器相关联,并评估应用程序是否在服务级别受到影响。
Splunk 将有关基础设施、应用程序和日志的不同数据汇集在一起,无需上下文切换。您还可以自动发现 Kubernetes 组件,让您立即监控整个堆栈。
想了解 Sematext 的表现如何?查看我们关于 Sematext 与 Splunk 的页面
如何选择适合您的监控工具
您可以使用一些用于日志记录、监控和跟踪的开源容器可观察性工具,甚至还有更多 SaaS 解决方案。它们都能完成工作,由您来选择您需要什么以及您想要在维护上投入多少精力。
如果您需要可观察性并且这是您团队的核心能力,那么您需要投入时间来寻找最有前途的工具,在评估它们的同时学习如何实际使用它们,最后安装、配置和维护它们。
比较多个解决方案并检查各种工具协同工作的效果是明智的。以下是我建议为您的用例选择最佳容器监控工具的建议:
收集指标的覆盖范围
- 有些工具仅收集一些指标,有些工具收集大量您可能并不真正需要的指标,而其他工具则允许您配置要收集的指标。
当一个人在解决生产问题的压力下工作时,缺少相关指标可能会令人沮丧,就像拥有太多或错误的指标会让人更难找到真正重要的信号一样。 - 需要配置收集或可视化每个指标的工具的设置和维护非常耗时。不要选择此类工具。相反,寻找能够为您提供良好默认设置并自由定制要收集的指标的工具。
- 如果您想了解您选择的工具必须能够监控哪些容器统计信息,请查看我们关于关键 Docker 指标的博客文章。
日志格式的覆盖范围
- 典型的应用程序堆栈由多个组件组成,例如数据库、Web 服务器、消息队列等。确保您可以构建应用程序中的日志。如果您不仅想使用日志进行故障排除,还想从日志中获取见解,那么这是一个需要遵循的关键日志记录最佳实践。使用正则表达式或 grok 定义日志解析器模式非常耗时。拥有现有模式库非常有帮助。这可以节省时间,尤其是在容器世界中,当您使用官方 docker 镜像时。
活动征集
- 任何有关服务重新启动或崩溃原因的指示都将帮助您快速对问题进行分类并更快地找到根本原因。因此,如果您运行 Kubernetes,任何容器监控工具都应该收集 Docker 事件和 Kubernetes 状态事件。
指标、日志和跟踪的关联
- 无论您最初是通过指标、日志还是跟踪发现问题,访问所有这些可观察性数据都可以使故障排除变得更快。
因此,显示来自不同来源的数据的单一 UI 是交互式深入分析、快速故障排除、更快 MTTR 的关键,坦率地说,这使 DevOps 的工作变得更加愉快。
机器学习功能和异常检测,用于针对日志和指标发出警报
- 基于阈值的警报仅适用于已知且恒定的工作负载。在动态环境中,基于阈值的警报会产生太多噪音。
确保您选择的解决方案具有此核心功能,并且不需要花费很长时间来学习基线或需要太多的调整、培训等。
检测并关联具有相同行为的指标
- 当指标以类似模式表现时,我们通常会发现其中一个指标是性能瓶颈根本原因的症状。
我在实践中看到的一个很好的例子是高 CPU 使用率与容器交换活动和磁盘 IO 相结合 - 在这种情况下,可以通过关闭容器交换来减少 CPU 使用率甚至更多磁盘 IO。
对于上述系统指标,相关性通常是已知的 - 但是当您跟踪特定于应用程序的指标时,您可能会发现微服务中需要优化的新相关性和瓶颈。
单点登录
- 关联存储在孤岛中的数据是不可能的。
此外,使用多个服务通常需要多个帐户,并迫使您学习的不是一个,而是多个服务及其 UI 等。每次您需要使用这两个服务时,都会产生痛苦的开销,需要在之前调整时间范围等内容可以在单独的窗口中查看其中的数据。
这会花费时间和金钱,并且使得与团队共享数据变得更加困难。
基于角色的访问控制
- 对于任何寻求在企业层面采用的工具来说,缺乏 RBAC 将成为一个阻碍。适用于小型团队和中小型企业但缺乏角色和权限的多用户支持的工具几乎永远无法满足大型企业的要求。
总拥有成本
在规划开源监控的设置时,人们常常低估监控代理和日志传送程序生成的数据量。
- 随着指标和日志量的增长,大多数组织都会低估处理、存储和检索指标和日志所需的资源。
- 一个常见的问题是往往低估了监控基础设施和开源工具的持续维护所需要投入的人力和时间。
这不仅导致监控和日志记录基础设施的成本超出任何人的预测,而且维护基础设施所需的时间和资金也超出了预期。 - 您可以通过限制数据保留来缓解这种情况。这需要更少的资源、更少的专业知识来扩展基础设施和工具,从而减少维护,但这当然限制了人们可以从长期数据中获得的可见性和洞察力。
- 基础设施成本只是指标、跟踪和日志存储限制的原因之一。例如,InfluxDB 在开源版本中没有集群或分片,而 Prometheus 仅支持较短的保留时间以避免性能问题。
- 另一种方法是将指标的粒度从 10 秒精度降低到一分钟甚至更多。这称为抽样。
这可能会导致其他问题,例如信息不准确、分析问题的时间较少、对问题和历史趋势的洞察力有限。 - 通过选择一个可以为您处理所有事情的 SaaS 工具,您可以完全避免这些问题。您唯一需要做的就是发送数据,然后您就可以安心入睡了。
微服务分布式事务追踪
到目前为止,我们只讨论了监控和日志记录,暂时完全忽略了分布式事务跟踪作为可观察性的第三个支柱。
请记住,一旦开始跨微服务收集事务跟踪,数据量就会大幅增加。这进一步增加了自托管监控设置的总拥有成本。
请注意,本文中提到的数据收集工具仅处理指标和日志,而不处理跟踪。有关事务跟踪和 OpenTracing 兼容跟踪器的更多信息,请参阅我们的 Jaeger 与 Zipkin 博客文章。
同样,我在这里介绍的仪表板工具不附带交易跟踪的数据收集和可视化功能。这意味着您需要第三组工具来设置分布式事务跟踪!
包起来!
无论您运行多少个 Docker 容器,监控都是保持应用程序正常运行以及用户满意的关键。为此,DevOps 工程师需要集成良好的监控、日志记录和跟踪解决方案,以及指标、跟踪和日志之间关联等高级功能。
运行内部监控所需的工程和基础设施成本可以很快得到回报。每个受监控服务的可调整数据保留时间有助于优化成本并满足运营需求。这将为您的 DevOps 团队带来更好的用户体验,尤其是更快的故障排除,从而在关键错误或性能问题影响您的商业服务时最大限度地减少收入损失。
在开发 Sematext Cloud 时,我们牢记上述想法,目标是提供更好的容器监控解决方案。您可以在 Docker 监控系列的第 3 部分《使用 Sematext 进行 Docker 容器监控》中阅读更多相关信息,或者直接尝试 14 天免费试用,亲自查看
最后,如果您使用 Kubernetes 作为 Docker 容器的编排器,您还需要对其进行监控。如果您是新手,我们的 Kubernetes 日志记录和 Kubernetes 监控教程将帮助您了解 Kubernetes 日志和指标的复杂性,这对于建立涵盖所有基础的全面监控策略至关重要。
你也可能对此有兴趣: