如何在Ubuntu 14.04服务器上安装和使用 Graphite

介绍

收集有关系统和应用程序的信息可以为您提供有关基础架构,服务器和软件的明智决策所需的信息。

有许多不同的方式来获取这种信息,并以允许容易理解的方式显示它。 一个这些应用程序的被调用Graphite

Graphite是用于组织和呈现从系统收集的数据的可视化表示的优秀工具。 它非常灵活,并且可以进行配置,以便您可以获得详细表示的好处,以及您正在跟踪的指标的性能和运行状况的大致概况。

在前面的指南中,我们看到了图形的概况,并统计收集应用程序 ,你可以串起来建立一个强大的系统中显示的统计数据。 在本指南中,我们将向您介绍如何在Ubuntu 14.04服务器上设置Graphite。 在以后的指南中,我们将讨论如何从饲料Graphite统计collectdStatsd

安装Graphite

要开始,我们需要下载并安装Graphite组件。 如果你看看我们的图形化软件介绍,你会注意到Graphite是由几个组件:Web应用程序,一个称为Carbon的存储后端和称为whisper的数据库库。

Graphite以前很难安装。 幸运的是,在Ubuntu 14.04中,我们需要的所有组件都可以在默认存储库中找到。

让我们更新我们的本地包索引,然后安装必要的包:

sudo apt-get update
sudo apt-get install graphite-web graphite-carbon

在安装过程中,如果您决定清除安装,系统会询问您是否希望Carbon删除数据库文件。 在这里选择“否”,这样你就不会破坏你的统计。 如果你需要从头开始,你总是可以手动删除文件(保存在var/lib/graphite/whisper )。

安装完成后,将安装Graphite。 我们需要做一些额外的配置,虽然使一切离开地面和运行。

为Django配置数据库

虽然Graphite数据本身由Carbon和whisper数据库库来处理,但是Web应用程序是一个Django Python应用程序,需要将其数据存储在某个地方。

默认情况下,配置为使用SQLite3数据库文件。 然而,这些不如完整的关系数据库管理系统那么强大,因此我们将配置我们的应用程序以使用PostgreSQL。 PostgreSQL对数据类型更加严格,并捕获可能导致问题出现的异常。

安装PostgreSQL组件

我们可以通过键入以下命令安装我们需要的数据库软件和帮助程序包:

sudo apt-get install postgresql libpq-dev python-psycopg2

这将安装数据库软件,以及Graphite将用于连接和与数据库通信的Python库。

创建数据库用户和数据库

安装我们的数据库软件后,我们需要创建一个PostgreSQL用户和数据库供Graphite使用。

我们可以通过登录到一个互动的PostgreSQL提示psql命令作为postgres系统用户:

sudo -u postgres psql

现在,我们需要创建一个数据库用户帐户,Django将使用它来操作我们的数据库。 我们将调用用户graphite 为此用户选择安全密码:

CREATE USER graphite WITH PASSWORD 'password';

现在,我们可以创建一个数据库,并给予我们新的用户所有权。 我们将调用数据库graphite以及使它很容易辨认他们的关联关系:

CREATE DATABASE graphite WITH OWNER graphite;

当你完成后,我们可以退出PostgreSQL会话:

\q

您可能会看到一条消息,指出Postgres无法保存文件历史记录。 这对我们来说不是问题,所以我们可以继续。

配置Graphite Web应用程序

现在,我们有我们的数据库和用户准备好了。 但是,我们仍然需要修改Graphite的设置以使用刚才配置的组件。 还有一些其他设置,我们应该看看。

打开Graphite Web应用程序配置文件:

sudo nano /etc/graphite/local_settings.py

首先,我们应该设置将在创建哈希时用作salt的密钥。 取消对SECRET_KEY参数和值更改为东西长而独特。

SECRET_KEY = 'a_salty_string'

接下来,我们应该指定时区。 这将影响我们的图形上显示的时间,因此设置很重要。 由“TZ”列中指定其设置为您的时区在此列表中

TIME_ZONE = 'America/New_York'

我们还要配置身份验证以保存图形数据。 当我们同步数据库时,我们可以创建一个用户帐户,但是我们需要通过取消注释此行来启用身份验证:

USE_REMOTE_USER_AUTHENTICATION = True

接下来,寻找DATABASES字典中的定义。 我们要更改值以反映我们的Postgres信息。 您应该更改NAMEENGINEUSERPASSWORD ,以及HOST密钥。

当你完成后,它应该看起来像这样:

DATABASES = {
    'default': {
        'NAME': 'graphite',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'graphite',
        'PASSWORD': 'password',
        'HOST': '127.0.0.1',
        'PORT': ''
    }
}

红色区域是您需要更改的值。 请确保您修改密码,你所选择的一个graphite的Postgres用户。

此外,请确保您设置的HOST参数。 如果将此空白留空,Postgres会认为您正在尝试使用对等身份验证连接,这将无法在我们的情况下正确验证。

保存并在完成后关闭文件。

同步数据库

现在我们已经填写了数据库部分,我们可以同步数据库以创建正确的结构。

您可以输入以下命令:

sudo graphite-manage syncdb

系统将要求您为数据库创建超级用户帐户。 创建一个新用户,以便您可以登录界面。 你可以调用这个任何你想要的。 这将允许您保存图形和修改界面。

配置 Carbon

现在我们有了一个数据库,我们可以开始配置Carbon,Graphite存储后端。

首先,让我们启用 Carbon服务在启动时启动。 我们可以通过打开服务配置文件来实现:

sudo nano /etc/default/graphite-carbon

这只有一个参数,它指示服务是否将在启动时启动。 将值更改为“true”:

    CARBON_CACHE_ENABLED=true

保存并关闭文件。

接下来,打开Carbon配置文件:

sudo nano /etc/carbon/carbon.conf

此文件的大部分已为我们的目的正确配置。 但是,我们会做一个小小的改变。

通过将此指令设置为true来打开日志旋转:

ENABLE_LOGROTATION = True

保存并关闭文件。

配置存储模式

现在,打开存储模式文件。 这告诉Carbon存储值的时间以及这些值的详细程度:

sudo nano /etc/carbon/storage-schemas.conf

在里面,你会发现看起来像这样的条目:

[carbon]
pattern = ^carbon\.
retentions = 60:90d

[default_1min_for_1day]
pattern = .*
retentions = 60s:1d

该文件当前有两个部分定义。 第一个是决定如何处理来自 Carbon本身的数据。 Carbon实际上被配置为存储其自身性能的一些度量。 底部定义是一个catch-all,旨在应用于任何未被另一个部分匹配的数据。 它定义了一个默认策略。

括号中的单词是用于定义新定义的段标题。 在每个部分下,有一个模式定义和保留策略。

模式定义是用于匹配发送到Carbon的任何信息的正则表达式。 发送到Carbon的信息包括度量标准名称,这是此检查。 在第一实施例中,图案检查有问题的量度是否与字符串开始“ carbon. ”。

保留策略由多组数字定义。 每个集合包含一个度量间隔(记录度量的频率),后跟冒号,然后是存储这些值的时间长度。 您可以定义多组数字,以逗号分隔。

为了演示,我们将定义一个新的模式,它将匹配一个测试值,我们将在以后使用。

在默认部分之前,为我们的测试值添加另一个部分。 使它看起来像这样:

[test]
pattern = ^test\.
retentions = 10s:10m,1m:1h,10m:1d

这将匹配在开始任何指标“ test. 它将存储它收集的数据三次,在不同的细节。 第一个归档定义( 10s:10m )将创建一个数据点,每十秒钟。 它将只存储十分钟的值。

第二个存档( 1m:1h )将创建一个数据点的每一分钟。 它将收集从过去一分钟的所有数据(六点,因为上一个存档每十秒创建一个点),并将其聚合以创建点。 默认情况下,它通过平均点来实现,但我们可以稍后调整。 它以一个小时的详细程度存储数据。

将要创建的最后一个归档( 10m:1d )将使一个数据点,每10分钟,以同样的方式与第二归档聚集的数据。 它将存储一天的数据。

当我们从Graphite请求信息时,它将返回测量我们要求的时间框架的最详细的归档信息。 因此,如果我们要求过去五分钟的指标,则将返回第一个归档中的信息。 如果我们要求过去50分钟的图表,数据将从第二个存档中获取。

保存并在完成后关闭文件。

关于存储聚合方法

当将更详细的信息转换为广义数字时,Carbon决定汇总数据的方式对于理解是否需要精确的指标非常重要。 这适用于每次Graphite制作一个不太详细的度量版本,例如我们在上面创建的测试模式中的第二和第三个档案。

如上所述,默认行为是在聚合时取平均值。 这意味着,除了最详细的归档之外,Carbon将平均其接收的数据点以创建数字。

这并不总是希望。 例如,如果我们想要事件在不同时间段内发生的总次数,我们将把数据点相加以创建我们的广义数据点,而不是平均它们。

我们可以定义我们希望在一个名为发生聚合的方式storage-aggregation.conf 将Carbon examples目录中的文件复制到我们的Carbon配置目录中:

sudo cp /usr/share/doc/graphite-carbon/examples/storage-aggregation.conf.example /etc/carbon/storage-aggregation.conf

在文本编辑器中打开文件:

sudo nano /etc/carbon/storage-aggregation.conf

这看起来有点类似于最后一个文件。 你会发现这样的条目:

[min]
pattern = \.min$
xFilesFactor = 0.1
aggregationMethod = min

节名称和模式与存储模式文件完全相同。 它只是一个任意的名称和模式,以匹配您定义的指标。

XFilesFactor是,它允许您指定的 Carbon应该做的聚集值的最小百分比一个有趣的参数。 缺省情况下,所有的值被设置为0.5 ,这意味着更多的详细的数据点的50%必须是可用的,如果聚集的点是要创建。

这可以用于确保您不创建可能歪曲实际情况的数据点。 例如,如果由于网络问题,70%的数据被丢弃,您可能不想创建一个只真实地代表30%的数据的点。

接下来定义聚合方法。 可能的值为average,sum,last,max和min。 他们是相当自我解释,但非常重要。 选择错误的值将导致您的数据以不正确的方式记录。 正确的选择完全取决于您实际跟踪的指标。

:认识到,如果你发送的数据Graphite点更频繁地比最短存档间隔长度,你的一些数据会丢失是很重要的

这是因为Graphite只在从详细归档到通用归档时应用聚合。 当创建详细数据点时,它只会写入发送到它的最新数据,当间隔已过去。 我们将在另一个导向讨论StatsD,它可以帮助由缓存和聚合数据,在更频繁的时间间隔来在缓解此问题。

保存并关闭文件。

完成后,您可以键入以下命令启动Carbon:

sudo service carbon-cache start

安装和配置Apache

为了使用Web界面,我们将安装和配置Apache Web服务器。 Graphite包括Apache的配置文件,所以选择很容易。

通过键入以下命令来安装组件:

sudo apt-get install apache2 libapache2-mod-wsgi

安装完成后,我们应禁用默认虚拟主机文件,因为它与我们的新文件冲突:

sudo a2dissite 000-default

接下来,将Graphite Apache虚拟主机文件复制到可用的网站目录中:

sudo cp /usr/share/graphite-web/apache2-graphite.conf /etc/apache2/sites-available

然后,我们可以通过键入以下命令来启用虚拟主机文

sudo a2ensite apache2-graphite

重新加载服务以实现更改:

sudo service apache2 reload

检出Web界面

现在我们已经配置了一切,我们可以查看Web界面。

在网络浏览器中,访问您服务器的域名或IP地址:

http://server_domain_name_or_IP

您应该看到如下所示的屏幕:

Graphite默认屏幕

在进一步之前,您应该登录,以便您可以保存您可能会做的任何图形设置。 单击顶部菜单栏上的“登录”按钮,并输入在同步Django数据库时配置的用户名和密码。

接下来,如果打开的树Graphite在左窗格中,您应该看到 Carbon条目。 在这里你可以找到Carbon记录下来的数据图表。 点击几个选项。 在这里,我对接收的指标和更新操作指标进行图表:

Graphite Carbon数据

现在,让我们尝试向Graphite发送一些数据。 当你经历这些步骤,请注意,你几乎从不发送统计数据到Graphite像这样。 有更好的方法这样做,但这将有助于演示在后台发生什么,也将帮助您了解Graphite处理数据的方式的局限性。 我们将讨论如何使用配套服务来解决这些问题。

指标消息需要包含指标名称,值和时间戳。 我们可以在我们的终端做到这一点。 让我们创建一个价值,将符合我们test ,我们创建的存储架构。 我们还将匹配在聚合时将其值相加的一个定义。 我们将使用date命令,使我们的时间戳。 类型:

echo "test.count 4 `date +%s`" | nc -q0 127.0.0.1 2003

如果刷新页面,然后看在Graphite左边的树,你会看到我们新的测试指标。 发送上述命令几次,在之间等待至少10秒。 记住,当在其最小间隔中发送多个值时,Graphite抛出除最后一个值之外的所有值。

现在,在Web界面中,告诉Graphite显示过去8分钟。 在测试指标的图表上,点击是带有绿色箭头的白色矩形的图标。 当您将鼠标悬停在其上时,将显示“选择最近的数据”:

Graphite最近的数据

从弹出窗口中选择8分钟。 单击说明“更新图”的图标,以获取最新的数据。 您应该看到一个图表,几乎没有任何信息。 这是因为你只发送了几个值,每个值都是“4”,所以没有变化。

但是,如果您查看过去15分钟的图表(假设您发送命令几次不同的时间,间隔大于10秒但小于一分钟),您应该看到不同的东西:

Graphite聚集

这是因为我们的第一个存档不保存数据十五分钟,因此Graphite查看我们的第二个存档的渲染数据。 它看起来不同,因为我们发送Graphite一个“计数”度量,它匹配我们的聚合定义之一。

计数聚合指示Graphite将在其较大间隔的过程中接收的值相加,而不是平均。 如您所见,我们选择的聚合方法非常重要,因为它定义了如何从更详细的点创建广义数据点。

结论

你现在已经安装和设置了Graphite,但它仍然在相当有限的能做什么。 我们不想一直手动提供数据,如果我们在最小的时间间隔内有多个指标,我们希望它不会丢弃数据。 我们需要配套工具来帮助我们解决这些问题。

在接下来的指南中,我们将讨论如何建立collectd一个系统的统计数据收集守护程序,可以用来喂Graphite数据和解决这些限制。 在今后的导游,我们还将介绍如何配置与GraphiteStatsD以及如何使用Graphite界面更加深入。

作者:Justin Ellingwood
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏