Linux容器已经被业界广泛用于开发甚至生产系统。Docker和Kubernetes已经被开发运营人员广泛了解和熟悉。但是容器云架构下系统监控确实一个常常被忽略的问题。尽管容器部署主要涉及在每个容器内运行单个应用程序或服务,但是随着部署规模的扩大,对环境状态和运行状况的可见性变得越来越重要,而不仅仅是在操作系统或应用程序级别,而且在容器级别也是如此。云生态监控和日志处理领域分为实时数据库,度量标准收集器,可视化工具,轮询器,记录器等。过去几年中,开源产品和商业监控应用程序不断涌现,本文我介绍几个最受欢迎的开源云应用监控工具。

Prometheus




监控apk调用了什么函数 监控应用程序_Graph


Prometheus(普罗米修斯)是领先的开源云监视解决方案,除其他事项外,其数据以时间序列数据库存储,天然适合监控数据库存储。普罗米修斯是CNCF(Cloud Native Computing Foundation,原生云计算基金会)支持的九大项目之一,也是CNCF中,除了也是Kubernetes后第二大托管项目。普罗米修斯获得了包括谷歌,红帽,IBM等公司在内的众多云供应商的支持,是云应用首选监控程序。

普罗米修斯最初源于音乐托管网站SoundCloud,接着成为了Docker生态系统的重要组成部分。CoreOS团队还积极地使用Prometheus来改善Kubernetes的性能。

普罗米修斯已发展成为高级系统监控和告警工具箱,能够监视各种资源,包括容器,Hadoop集群,各语言运行时以及Python、Golang、JVM之类的应用程序堆栈。


监控apk调用了什么函数 监控应用程序_Graph_02


简而言之,普罗米修斯是一个开源监控系统,时间序列数据库以及用于实现代码的框架。但是,普罗米修斯不能生成度量标准,需要要以HTTP可以解析的语言将度量标准提供给它。关于普罗米修斯参看虫虫之前文章,有详细介绍。

Graphite


监控apk调用了什么函数 监控应用程序_Elastic_03


Graphite是一种流行的开源工具,用于构建基于Web的仪表板以进行监视和分析。Graphite最初是由Orbitz的Chris Davis于2006年用python创建的一个辅助项目。用于监控和绘制计算机系统的性能,最终形成了一个基本监控系统,并于2008年以Apache 2.0 license的授权开源发布。目前已经获得了GitHub,Salesforce和Reddit等众多大公司提供和支持。

Graphite由三部分组成:

Carbon 时间序列数据的守护程序,用于接收数据;

Whisper(类似于RRDtool)数据库和存储;

Graphite-web的Web应用程序,可按需呈现图形。


监控apk调用了什么函数 监控应用程序_应用监控工具_04


Graphite在企业中仍然很流行,原因是由于其自动化程度很高,其中所有新数据点都能在数据库中自动创建。


监控apk调用了什么函数 监控应用程序_应用程序_05


Graphite本质上是三个相互耦合的独立工具,也可以单独使用并与其他工具集成。

Riemann


监控apk调用了什么函数 监控应用程序_监控apk调用了什么函数_06


上面我们说了Graphite所有组件都耦合可以单独使用。Riemann就是用于替代Graphite中Carbon守护程序的。尽管Carbon会监听指标并将其写入whisper存储数据库,但由于Carbon是基于Python开发的,容易在性能上遇到瓶颈,这时候我们可以用Riemann代替它。Riemann使用 Clojure 语言实现以 "事件流(event streams)方式处理数据和汇总。但是,Riemann不是度量收集器。

Riemann的工作方式是从事件流(例如指标,日志,事件,主机和服务)收集数据,然后根据需要存储,图形或警报。基于事件流的一栈环境下一旦事件流停止流动,就能马上发现系统故障或网络断开。Riemann还能收集和处理各种形式的事件,事先监控。

Riemann具有超快速度和性能。其官方网站宣传的,Riemann可以在商用 x86 硬件条件下,Riemann 每秒就可以处理数百万次事件,延迟时间却只有亚毫秒,5 毫秒可以完成 99 次。

在云环境条件下,Riemann也可以容器化方式运行和组合:

Riemann 服务器进程,由 Clojure 语言编写,是主流处理引擎;

Riemann-health 程序,实现Riemann 集群的健康/使用指标报告;

Riemann-dash 程序,一个小型 Sinatra 应用,为 Riemann 提供网页控制台界面。

作为云部件,Riemann也可将事件供应给Prometheus系统。

Riemann在Clojure开发人员中特别受欢迎,因为配置文件实际上是一些可执行的Clojure代码,可以高度定制和构建。

Grafana


监控apk调用了什么函数 监控应用程序_监控apk调用了什么函数_07


Grafana是用Golang 开发的开源的度量分析与可视化套件,主要用于大规模指标数据的可视化展现方式,是网络架构和应用分析中最流行的时序数据展示工具。可以支持对Zabbix,Graphite,ElasticSearch,OpenTSDB,Prometheus和InfluxDB数据汇总、指标仪表板和图形编辑器。


监控apk调用了什么函数 监控应用程序_Elastic_08


Grafana可以让用户轻松创建和编辑仪表板。Grafana非常适合分布式数据存储环境下的数据汇总、查询和可视化,也能对接指标阈值设置和告警。特别适用于实现高质量的交互式可视化和图形。

Weave Scope

Weave Scope是容器生态中,可以自动进行容器APP映射,直观地理解、监视和控制基于容器化微服务的应用程序。Weave Scope涵盖监视,可视化,管理和故障排除。我们可以用Weave Scope可以在容器级别上监视和控制堆栈,并确切地了解容器在做什么以及原因,零配置并自动检测所有进程,容器和主机,该工具可以检查速度框,对于任何开发人员来说都是节省时间的工具。

Weave Scope可以监控kubernetes集群中的一系列资源的状态、资源使用情况、应用拓扑、scale、还可以直接通过浏览器进入容器内部调试等


监控apk调用了什么函数 监控应用程序_应用监控工具_09


随着越来越多的工具针对更特定的工作流程进行开发,没有一种工具在堆栈中占据永久的位置,并且可以随时替换其中的任何一种以获得更好,更高效或更具自定义性的东西。但是就目前而言,这些开源监视工具在每个DevOps团队的监视工具中占据着至关重要的位置。

ELK Stack

Elasticsearch是ELK栈的一部分,全栈套件还有有Kibana,Beats和Logstash。尽管ELK栈被设计为集成解决方案,其中Elasticsearch通常用作支持工具。Elasticsearch是基于Luncene的java全文搜索引擎,也是最常用最强大的分布式可收缩日志存储和检索集群。Elasticsearch提供了RESTful广泛而且精巧的API供访问,该API可以支持近实时性的搜索用以支持数据发现。它几乎与所有内容兼容,并与其他工具一起广泛用于查询数据库。


监控apk调用了什么函数 监控应用程序_Graph_10


Kibana是一个基于Elasticsearch的分析和可视化平台,可直观地浏览Elasticsearch集群中的数据。由于Kibana只是ELK栈中的可视化部分,因此也可以被替换为Grafana,Graphite或其他可视化工具。


监控apk调用了什么函数 监控应用程序_Elastic_11


Logstash是类似于Riemann的另一种流处理系统,可以从日志,指标,Web应用程序,数据存储和各种AWS服务中提取流数据。Logstash还具有一个输出插件,可以通过该插件将特定事件发送到Riemann,例如可警报的事件或需要Riemann采取措施的事件。


监控apk调用了什么函数 监控应用程序_Elastic_12


ELK栈已经被广泛地应用于运维实时日志处理架构中,通常用于日志系统的存储、处理和分析汇总。但是由于其实时性质,在云生态中,可以用于云集群的监控和故障排查分析。