简介
有很多原因可以解释为什么收集有关服务器、应用程序和流量的统计数据是一个好主意。 收集和组织数据可以让您对有关扩展、故障排除和跟踪配置中的痛点的决策充满信心。
有多种工具可用于跟踪我们机器上的指标,它们通常被委托给流程的某一小部分。我们可以将这些工具连接在一起,创建一个用于收集、记录和显示结果的系统。
在本指南中,我们将讨论一些允许您收集、存储和可视化服务器和应用程序生成的数据的技术。
我们将讨论 Graphite ,这是一个由多个组件组成的图形库,可用于随着时间的推移呈现数据的可视化表示。 我们还将研究** collectd** ,这是一个系统统计守护进程,可以收集有关运行服务器的近实时信息。 我们列表中的最后一个是** StatsD** ,这是一个灵活的统计聚合器,可用于收集和组织任意数据。
在后面的指南中,我们将介绍如何在Ubuntu 14.04服务器上安装和配置这些组件,以便启动和运行。
我们为什么要跟踪数据?
我们需要确定的第一件事是我们在服务器或应用程序环境中跟踪数据的原因。
最重要的原因实际上很简单:我们拥有的数据越多,我们就越有可能了解任何给定时刻正在发生的事情。这使我们能够使用硬数据支持我们的决策,并提前查看更改是否可能针对正确的组件。跟踪统计数据为我们提供了应用程序日志中可能没有的补充信息源。
大多数(但不是所有)日志记录系统无法关联来自各种应用程序的数据或将事件连接到某些系统状态,因为它们基本上代表自包含的应用程序输出。这可能会让人们很难对一场活动周围的情况建立一个整体的看法。
我们可以设想一下,您的数据库服务器发生了故障。在阅读日志时,您可能会注意到,在UTC时间15:35:28,您的MySQL服务因OOM(内存不足)错误而终止。我们现在知道内存使用率是问题所在,但我们可能不知道是什么原因导致以前稳定的服务器出现内存使用率高峰。
如果我们要跟踪有关服务器和应用程序的数据,我们可以开始将明显不同的系统数据组合在一起,以帮助我们准确地了解问题发生时的环境情况。我们可能会发现内存使用量稳步攀升,这可能是由于内存泄漏造成的。如果我们有关于应用程序级内存使用情况的信息,我们很可能会确切地看到哪个程序是罪魁祸首。我们还可能看到有一个不寻常的峰值,这可能意味着完全不同的东西。
在不同的场景中,我们可以看到系统在部署之前和之后的样子。如果新代码产生了一些奇怪的情况,我们可以看到它对其他组件的影响,并将其性能与旧代码进行比较。我们可以找出我们的新代码显示改进的地方,以及我们可能犯下错误的地方。
有了智能数据收集,我们可以将我们的系统视为一个系统,而不是一组松散的无关组件。
石墨组件
我们将在这里开始有点倒退,并首先讨论Graphite,绘图库。然后,我们将返回并介绍Graphite可以用来获取数据的一些软件。
石墨是一个图形库,负责存储和呈现数据的可视化表示。这意味着Graphite需要其他应用程序来收集和传输数据点。
Graphite项目本身由几个不同的组件组成,每个组件都有特定的、重点关注的目的。
Graphite Web App
Graphite安装中最明显、最动态的组件是Graphite Web应用程序。
在这里,您可以设计绘制数据的图表:
石墨为您提供了一个非常灵活的界面来设计图形。您可以组合不同类型的指标、控制标签、字体、颜色和线条属性,并且可以随意调整大小和操作数据。
这里要理解的关键思想是Graphite_Render_Graphs基于它接收的数据点和您给它的方向。它不只是打印出图表,然后扔掉数据。您可以动态地将数据呈现为您想要的任何数据。
Web应用程序还允许您保存图形属性和布局,以便您可以使用您想要的所有设置来调出您的监控界面。您可以拥有任意数量的仪表板视图,这意味着您可以为每台计算机或应用程序提供单独的仪表板。如果您需要将这些数据关联起来,只需拖放这些图表即可组合显示。
然而,灵活性并不仅限于此。石墨允许您在一个纯URL上呈现图形,以便嵌入到其他界面中。您还可以以非图形表示形式(如JSON或CSV)导出数据,或输出包含嵌入数据信息的SVG。
现在,您已经了解了在获取数据时可以对其执行哪些操作,接下来让我们来讨论其他Graphite组件,以了解允许我们执行此操作的过程。
碳
碳是石墨配置的存储后端。单个Graphite配置将有一个或多个Carbon守护进程,负责处理由收集和传输统计信息的其他进程发送的数据(收集器不是Graphite的一部分)。
有各种不同的Carbon守护进程,每个守护进程以不同的方式处理数据。 其中最基本的是所谓的'carbon-cache.py'。 这个daemon是直接的。 它侦听端口上的数据,并以有效的方式将数据写入磁盘。
它在数据到达时存储数据,然后在预定的时间段后将其刷新到磁盘。重要的是要认识到,碳组件处理数据接收和刷新程序。它不处理实际的存储机制。这就留给了我们稍后要讨论的`Whisper``组件。
‘bon-cache.py守护进程被告知要使用什么格式、协议和端口。它还会被告知使用什么数据保留策略进行数据存储。这些都是用来窃窃私语的。对于大多数基本配置,单个
bon-cache.py`实例就足以处理数据接收。
随着安装程序的增长,可以同时运行多个实例。可以通过前面的Carbon-relay.py
或Carbon-Aggregator.py
守护进程来实现平衡。
可以使用bon-relay.py
守护程序向所有后端守护程序发送请求,以实现一定的冗余。还可以跨不同的bon-cache.py
实例进行数据分片,将读负载分散到多个存储位置。
carbon-aggregator.py
守护进程可以缓冲数据,然后在一段时间后将其转储到carbon-cache.py
中。 这可以帮助减少统计数据处理对系统的影响,但会牺牲细节。
耳语
Whisper是一个数据库库,Graphite使用它来存储发送的信息。
它非常灵活,可以非常详细地存储时间序列数据。它在不同的细节级别创建不同的档案,因此在实际使用中,当信息超过某些配置的老化阈值时,它会优雅地降级为较低的分辨率。
例如,对于某个指标,您可以每秒存储一个数据点。你可以悄悄地告诉我,这个详细的数据应该保存5个小时。您还可能有一个存储较低分辨率数据的存档。它可能每分钟只存储一个点,并保存6个月。
较低分辨率档案中的每个点都是根据记录在较高分辨率档案中的相同数据计算的。您可以拥有任意多个不同分辨率和保留率的档案。您可以配置Whisper如何根据被跟踪的指标类型计算较低分辨率档案的数据。
例如,指标可能是某个事件在短时间内发生的次数的计数。要以较低的分辨率为较大的时间范围创建点,您需要将较高分辨率档案的数据点相加,以汇总较大时间跨度内的数据值。
根据指标的性质,Whisper可以用其他方式计算较低分辨率的数据。例如,一些数据通过求平均值来概括,而另一些数据则可能跟踪最大值。对于平均值,从较高分辨率点计算实际平均值以创建较低分辨率点。对于最大值,应该保留最高值,其余的应该扔掉,以保持数字的意义。
Whisper在收到数据时(在收集所需值所需的时间量之后)计算并记录较低分辨率的数据。它只是收集执行数据聚合技术所需的数据点(平均值、最大值等),然后将其写入。
石墨在查询数据以呈现图形时,将使用包含所请求时间范围的最高分辨率档案。
统计汇总下发
正如我们上面提到的,Graphite本身并不关心数据收集。相反,它依赖于从其他服务机构获得信息。这使得项目能够保持一个狭隘的焦点,并允许它以模块化方式与各种输入服务交互。
下面,我们将讨论Graphite理解的协议,然后讨论两个流行的收集程序Colltd 和** StatsD** ,它们可以用来将数据传递给Carbon进行处理。
协议
您可以使用三种不同的协议将数据发送到Graphite。
首先,Graphite接受并可以理解纯文本。这是最灵活的格式,因为几乎任何应用程序或服务都可以生成文本输出,这可以用来提供Graphite或中间工具。
纯文本消息包括有关指标名称、给定值以及该值的时间戳的信息。这些消息可以在指定为纯文本的端口上直接发送到Carbon,而不需要额外的格式化。
因为Graphite是在Python中创建的,所以Graphite还接受Pickle
数据序列化格式。此Python标准允许您在单个事务中缓冲和发送多个时间值。
石墨也可以接受使用AMQP报文的数据。这使您可以更优雅地处理大量数据。使用此配置,您可以输入大量统计数据并处理远程主机之间的网络连接中断,而不会丢失数据。
已收集
收集有关服务器的详细信息的最简单方法之一是使用名为collectd的守护程序。
Collect可以收集有关服务器环境的许多不同组件的统计信息。它允许您轻松跟踪常见指标,如内存使用情况、CPU负载、网络流量等。这使您可以轻松将事件与系统状态相关联。
除了收集标准的系统信息,collectd还有一个插件系统来扩展其功能。 这意味着您可以轻松跟踪常见软件,如Apache,Nginx,iptables,memcache,MySQL,PostgreSQL,OpenVPN等等。
Colltd提供了一种从服务器上的预构建应用程序和公共服务获取数据的简单方法。这应该用来跟踪您的基础设施和您所依赖的服务的行为。
统计数据D
StatsD是一个非常简单的守护程序,可以用来向Graphite发送其他数据。这种方法的好处是,在您创建的应用程序和系统中内置统计信息跟踪变得微不足道。
StatsD的运行方式是在接口上侦听代表单个数据点的简单UDP数据包。这意味着它可以以一种无连接的方式接受大量信息。然后,它可以聚合它收到的值,并将它们传递给Graphite。
该系统允许您发送大量统计数据,而无需担心增加应用程序延迟。 StatsD服务将收集所有数据,汇总数据,然后在预期的时间范围内将漂亮的汇总数据点发送给Graphite。
由于这些优势,它实际上是发送到Graphite的任何类型数据的良好中介。 但我们可以利用它的主要方式是监控我们自己创建的应用程序和工具。
StatsD非常适合这样做,因为它是一个接受UDP流量的通用守护进程。各种编程语言中有许多不同的客户端库,可以将数据直接发送到StatsD实例。这意味着您正在构建的应用程序可以轻松地发送要跟踪的数据。
结论
到目前为止,您应该已经很好地理解了一组不同的统计数据和图形实用程序是如何协同工作的,从而为您提供了一个完整的环境。
在下一个指南中,我们将讨论如何在Ubuntu14.04 server.上安装Graphite然后,我们将把collectd和StatsD连接到Graphite来输入要监控的统计数据。