容器领域的十大监控系统对比(下)

阅读数:5 2020 年 4 月 12 日 20:40

容器领域的十大监控系统对比(下)

容器监测环境有多种形态和大小,而监控解决方案的数量之多亦令人望而生畏。在这一系列文章中,我将对容器领域的 10 个监控解决方案进行全面的分析对比。

上篇文章中,我介绍了此次对比测评的方法架构,并分析了五种容器监控解决方案:原生 Docker、cAdvisor、Scout、Pingdom 和 Datadog。本文我们将继续完成另外五种容器监控解决方案的对比:Sysdig、Prometheus、Heapster / GrafanaPingdom、ELK 和 Sensu。

SYSDIG

http://sysdig.com

Sysdig 是一家加州公司,为用户提供基于云计算的监控解决方案。与前文所描述的几个基于云的监控解决方案不同的是,Sysdig 更专注于监控容器环境,包括 Docker、集群、Mesos 和 Kubernetes。此外,Sysdig 还在开源项目中提供了一些可用功能,并且可以选择对 Sysdig 监控服务进行云部署还是本地部署。在这些方面,Sysdig 不同于迄今为止所出现的其他基于云的解决方案。

Sysdig,与 Datadog 类似,其目录可用于 Rancher,但 Sysdig 的本地和云安装都有单独目录。从 Rancher Catalog 里自动安装的 Sysdig 无法用于对 Kubernetes 的监控;不过,它也可以不通过 Rancher Catalog 来安装到 Rancher 之上。商用 Sysdig 监控具有 Docker 监控、告警和故障排除功能,并且还具有 Kubernetes、Mesos 和集群识别的功能。Sysdig 能够自动识别 Kubernetes Pod 和服务,因此选择 Kubernetes 作为 Rancher 的编排架构将是一个很好的解决方案。

Sysdig 和 Datadog 一样是按每个主机每月定价。虽然 Sysdig 入门价格略高,但它每个主机上可以支持更多容器,因此根据用户的环境,实际定价可能非常相似。 Sysdig 还提供了一个全面的 CLI——csysdig,将其与一些产品区分开来。

PROMETHEUS

http://prometheus.io

Prometheus 是一个很受欢迎的开源监控和警报工具包,它最初是在 SoundCloud 进行构建的。现在是 CNCF 项目,也是该公司在 Kubernetes 之后的第二个托管项目。作为一个工具包,它与目前为止所描述的其他监视解决方案有很大不同。首先一个主要的区别是,Prometheus,作为一种云服务,是模块化的,可以自行托管,这意味着无论是在本地还是在云端,用户都可以在他们的集群上部 Prometheus。

值得注意的是,Prometheus 不是将数据推送到云服务,而是安装在每个 Docker 主机上,并通过 HTTP 从 Prometheus 提供的各种输出口获取或“抓取”数据。其中,一些输出口被官方保留为 Prometheus GitHub 项目的一部分,而另一些则是由外部贡献。有些项目本身暴露了 Prometheus 数据,因此不需要输出口。由于 Prometheus 可高度扩展,用户需要考虑输出方的数量,并根据收集的数据量适当地配置轮询间隔。

Prometheus 的服务器从各种来源检索时间序列数据,并将数据存储在其内部数据存储区中。此外,Prometheus 提供服务发现等功能,这是一种针对特定类型数据的独立推送网关,并且有一个嵌入的查询语言 (PromQL),该语言擅长查询多维数据。同时,它也有一个嵌入式的 Web UI 和 API。虽然 Prometheus 中的 Web UI 提供了强大的功能,但用户必须对 PromQL 十分了解,因此一些站点更愿意使用 Grafana 作为绘制和查看集群相关指标的接口。

Prometheus 有一个独立的告警管理器,它也具有独特的 UI,并且可以处理存储在 Prometheus 中的数据。和其他告警管理器一样,它可以与各种外部告警服务一起工作,包括电子邮件、Hipchat、Pagerduty、#Slack、OpsGenie、VictorOps 等。

由于 Prometheus 由许多组件组成,输出方需要根据所监控的服务进行选择和安装,所以安装起来比较困难,但是作为免费产品,在价格上 Prometheus 具有无可比拟的优势。

虽然不像 Datadog 或 Sysdig 这样精炼,但是 Prometheus 提供了类似的功能、广泛的第三方软件集成以及一流的云监控解决方案,并且 Prometheus 十分了解 Kubernetes 和其他容器管理架构。另外,由 Infinityworks 开发的 Rancher Catalog 中的条目使得在使用 Cattle 作为 Rancher 的编排架构时,Prometheus 更容易入门,但由于配置选项的种类繁多,管理员需要花费一些时间才能正确安装和配置。

Infinityworks 提供了一些有用的插件,其中包括prometheus-rancher-exporter,这些插件将 Rancher stack 和从 Rancher API 获得的主机的健康状况发送给 Prometheus 兼容端点。因此,Prometheus 对于那些愿意花更多精力的管理者来说是最强大的监控解决方案之一。

HEAPSTER

https://github.com/kubernetes/heapster

Heapster 是 Kubernetes 旗下的一个项目,它有助于实现容器集群监控和性能分析。此外,Heapster 对 Kubernetes 和 OpenShift 的支持十分良好,也很适用于在 Rancher 上使用 Kuberenetes 作为编排工具的用户。Cattle 或者 Swarm 的用户则通常不会选择它。。

人们经常将 Heapster 定义为一个监控解决方案,但更确切地说,它应该是一个“集群范围内的监控和事件数据聚合器”。Heapster 从来不单独部署,相反,它是一堆开源组件的一部分。Heapster 监控堆栈通常由以下部分组成:

>数据收集层:例如,在每个集群主机上使用kubelet访问的 cAdvisor

>可插入式存储后端:例如,ElasticSearch、InfluxDB、Kafka、Graphite 等

>数据可视化组件:Grafana 或 Google Cloud Monitoring

Heapster 与 InfluxDB、Grafana 共同组成了一个流行的堆栈,当用户在 Rancher 上部署 Kubernetes 时,此组合便会默认安装在 Rancher 上。需要注意的是,这些组件被认为是 Kubernetes 的附加组件,因此它们可能不会被自动部署到所有 Kubernetes 发行版中

InfluxDB 受欢迎的其中一个原因是,它是少数几个支持 Kubernetes 项目和数据的数据后端之一,并且可以对 Kubernetes 进行更全面的监控。

值得注意的是,Heapster 本身不支持在商用云的解决方案或 Prometheus 中发现的与应用程序性能管理(APM)相关的告警或服务。需要监控服务的用户可以使用 Hawkular 来弥补这一不足,不过 Hawkular 并不会自动配置为 Rancher 部署的一部分,而是需要用户另行操作。

ELK STACK

https://www.elastic.co/

另一个可用于监视容器环境的开源软件栈是 ELK,由 Elastic 提供的三个开源项目组成。ELK 是通用的,广泛用于各种分析应用程序,日志文件监控是其中关键的一环。ELK 以其关键组件的首字母命名:

>Elasticsearch:基于 Lucene 的分布式搜索引擎

>Logstash:一个数据处理管道,用于获取数据并将其发送到 Elastisearch(或其他“托盘”)

>Kibana:Elasticsearch 的可视化搜索仪表板和分析工具

Elastic 栈中一个容易被忽视的成员是 Beats,项目开发人员将其描述为“轻量级数据托运器”。现在有许多现成的 Beats 托运器,包括 Filebeat(用于日志文件)、Metricbeat(用于收集各种来源的数据)以及用于简单的 uptime 监控等。

ELK 栈的部署方式有所不同。Kiratech 的 Lorenzo Fontana 在这篇文章中解释了如何使用 cAdvisor 从 Docker Swarm 主机收集数据以存储在 ElasticSearch 中,并使用 Kibana 进行分析: https://blog.codeship.com/monitoring-docker-containers-with-elasticsearch-and-cadvisor/ 。在另一篇文章中,Aboullaite Mohammed 描述了一个不同的用例,其重点是收集 Docker 日志文件,分析各种 Linux 和 NGINX 日志文件(error.log、access.log 和 syslog): https://aboullaite.me/docker-monitoring-with-the-elk-stack/ 。有些商用 ELK 栈提供者,例如 logz.io 和 Elastic Co,向用户提供“ELK 即服务”,在原生 ELK 之外补充提供了告警功能。有关在 Docker 上使用 ELK 的更多信息,请访问 https://elk-docker.readthedocs.io/

对于希望尝试使用 ELK 的 Rancher 用户,它在 Rancher Catalog 中已有条目,《如何在 Rancher 上运行 Elasticsearch》一文介绍了如何在 Rancher Catalog 中部署 ELK。《使用容器和 Elasticsearch 集群对 Twitter 进行监控》一文介绍了如何使用 ELK 监控 Twitter 数据。尽管博洽多闻的管理员可以使用 ELK 进行容器监控,但与 Sysdig、Prometheus 或 Datadog 等直接针对容器监控的解决方案相比,ELK 的上手和使用难度都会更大。

SENSU

http://sensuapp.org

Sensu 是一个通用的自主监控解决方案,支持多种监控应用。用户可在 MIT 许可下获得一个免费的 Sensu Core 版本,Sensu 的企业版则拥有更多的附加功能,价格为每月 99 美元,可以为 50 个 Sensu 客户端提供服务。Sensu 使用术语“客户端”来指代其监控代理,因此根据您监控的主机和应用程序环境的数量,企业版可能会变得非常昂贵。Sensu 在容器管理之外还拥有非常强大的功能,但就监控容器环境和容器化应用程序这方面来看,它与其他平台并无差别。

Sensu 插件的数量持续增长,现在已有数十个 Sensu 和社区支持的插件可以从各种来源提取数据。2015 年 Rancher 对 Sensu 进行早期评估时,那时 Sensu 用户要从 Docker 中提取信息,需要开发 shell 脚本。但是现在,Sensu 已经有了一个不错的 Docker 插件,这使得 Sensu 更易于使用了。

插件往往是用 Ruby 编写的,使用基于 gem 的安装脚本,这些脚本需要在 Docker 主机上运行。用户可以在他们选择的语言中开发额外的插件。与我们讨论过的其他监控解决方案相同的是,Sensu 插件不是部署在自身容器中。(这一点毫无疑问,因为 Sensu 并非在监控容器的基础上构建的。)

由于不同的用户希望根据自己的监控要求混合和匹配插件,因此为每个插件设置单独的容器将会非常棘手,这可能是为什么不使用容器进行部署的原因。不过,插件可以使用 Chef、Puppet 和 Ansible 等平台进行部署。例如,对于 Docker 来说,有 6 个独立的插件可以从各种来源收集与 Docker 相关的数据,包括 Docker 统计信息、容器数量、容器运行状况、Docker ps 等等。Sensu 插件的数量非常多,包括许多用户可能在容器环境(ElasticSearch、Solr、Redis、MongoDB、RabbitMQ、Graphite 和 Logstash 等)中运行的应用程序栈。此外,Sensu 还提供用于管理和编排架构的插件,如 AWS 服务(EC2、RDS、ELB)。但是在插件列表中,Kubernetes 似乎消失了。但是 Sensu 提供对 OpenStack 和 Mesos 的支持。

Sensu 通过 RabbitMQ 使用消息总线,以协助代理 / 客户端与 Sensu 服务器之间的通信。Sensu 用 Redis 存储数据,但它的设计目的是将数据路由到外部的时间序列数据库。支持的数据库包括 Graphite、Librato 和 InfluxDB。

安装和配置 Sensu 需要花点功夫。安装 Sensu 前必须先安装 Redis 和 RabbitMQ。 Sensu 服务器、Sensu 客户端和 Sensu 仪表板需要单独安装,并且根据部署的是 Sensu 内核还是企业版本,流程也会有所不同。如前所述,Sensu 不提供容器友好的部署模型。为了方便起见,可以使用 Docker 镜像 (hiroakis/Docker-sensu-server) 运行 redis、rabbitmq-server、uchiwa(开源 web 层) 和 Sensu 服务器组件,但在评估上,这个软件包比生产部署更有用。

Sensu 的特性非常多,但对容器用户而言,它的缺点是架构很难安装、配置和维护,因为这些组件本身没有被 Docker 化。此外,许多告警功能(例如发送警报给诸如 PagerDuty,Slack 或 HipChat 等服务)可以在基于云的解决方案或像 Prometheus 这样的开源代码解决方案中使用,因此需要购买 Sensu 企业版许可。特别是若你使用 Kubernetes,可能 Sensu 不是最好的选择。

我们忽略的监控解决方案

Graylog 是另一个监控 Docker 的开源解决方案。和 ELK 一样,Graylog 也适用于 Docker 日志文件分析。它可以接受和解析来自多个数据源的日志和事件数据,并支持像 Beats、Fluentd 和 NXLog 这样的第三方收集器。

Nagios 通常被认为更适合于监控集群主机而不是容器,但对于那些在监控集群环境中浸淫已久的人来说,Nagios 最受欢迎

Netsil 是一家硅谷初创公司,作为一个监控应用程序,它为 Docker、Kubernetes、Mesos 以及各种应用程序和云提供商提供插件。Netsil 的应用运营中心(AOC)与我们讨论的其它监控架构一样,以云 /SaaS 或自主托管的形式为云应用服务提供架构感知监控。

结语

容器监控解决方案很多,新的解决方案不断涌现,同时现有的解决方案不断发展。此次我们采取了 high-level 的对比方法,希望可以帮助您 “缩小列表”,针对自身需求进行更认真的评估,从而选出最适合的解决方案。

作者简介

Gord Sissons,加拿大多伦多咨询公司 StoryTek 的首席顾问。Gord 在 HPC、大数据和集群管理等领域拥有超过 25 年的 IT 行业经验。他毕业于安大略省渥太华的卡尔顿大学,拥有系统和计算机工程学位。

评论

发布