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