使用 Cacti 绘制任何数据!

作者:Shawn Powers

在过去的几年里,我一直在尝试理解如何使用 RRDtool(环形数据库工具)制作图表,此前我曾惨败于理解 MRTG(多路由器流量图形器)。我喜欢 RRDtool 的一点是它更新,并且支持更广泛的数据源。但它仍然非常复杂,我曾多次放弃学习如何使用它。就在那时我发现了 Cacti。

Cacti 不是一个新程序。它已经存在很长时间了,并且以其自身的方式来说,它本身也是一个复杂的野兽。然而,我最终还是花时间弄清楚了它,并且我意识到它使用起来并不太困难。酷的是,Cacti 使 RRDtool 的操作变得非常方便。我确实花了一天的大部分时间才完全理解 Cacti,所以希望这篇文章能为您节省一些时间。

目标

我想创建一个图表,它可以自动绘制某些东西,并使用 bash 脚本作为输入,而不是 SNMP 或其他任何东西。我已经使用 bash 多年了,并且我很乐意使用命令行来获取数据。事实上,对于这个项目,我将改编一个我为 BirdTopia(我过去几年持续进行的鸟类摄像头项目)使用的脚本,该脚本将从命令行拉取温度。我想从两个不同的城市拉取温度并将它们一起绘制成图表。在这个例子中,我使用了密歇根州佩托斯基(我住的地方)和德克萨斯州休斯顿(Linux Journal 总部所在地)。

这是脚本


#!/bin/bash
curl -s "http://api.wunderground.com/weatherstation/
 ↪WXCurrentObXML.asp?ID=$1" \
| grep temp_f | sed 's/.//' | sed 's/.//' | sed
 ↪'s/<temp_f>//' | sed 's/<\/temp_f>//'

它看起来很复杂,但实际上它只是从 Weather Underground 下载了作为参数给出的气象站的 API 信息,然后使用 sed(流编辑器)将信息简化为一个简单的数字——具体来说,是华氏度的数值。如果您喜欢摄氏度,我赞赏您的国家采用公制,但不幸的是,我的大脑就是无法将摄氏度与室外温度的温暖程度联系起来。

一个棘手的部分是弄清楚您所在城市的正确气象站 ID 是什么。我希望您可以直接使用邮政编码,但我一直无法找到可以接受邮政编码的命令行天气 API。因此,如果您正在跟随操作,只需前往 Wunderground 并加载您所在地区的页面。到达那里后,单击图 1 中显示的链接(您的文本会有所不同,但页面上的位置应匹配)。下一页将显示您当地气象站的名称。您可以在图 2 中看到我的。

图 1. 我假设这是我的气象站,但事实并非如此。您需要点击进入才能找到代码。

图 2. 这是我当地气象站的代码。请务必在命令行上尝试您的脚本,以查看您是否拥有正确的代码。

要使用脚本获取当地温度,只需键入脚本的名称(我将我的脚本命名为“gettemp”并将其保存为 /usr/local/bin/ 中的可执行文件),并将气象站名称作为参数


spowers@cacti:~$ gettemp MAS614
48.0
spowers@cacti:~$

相同的脚本也适用于休斯顿的天气。我在休斯顿查找了一个气象站名称,发现“KTXGALEN6”作为名称。使用它作为参数,我可以获得休斯顿的当前温度。而且,这些将是我的两个数据点。

Cacti 的工作原理

老实说,这是整个过程中最令人沮丧的部分。Cacti 拼图中有很多不同的部分,很容易让人放弃。继续在您的系统上安装 Cacti(它应该在存储库中),然后登录。默认登录名通常为“admin”,密码也为“admin”。您应该立即更改它。

进入后,查看“控制台”页面(图 3)的左侧,该页面应默认加载。令人困惑的部分是,“设备”、“数据源”、“数据查询”等名称听起来都像是您想要配置以获取数据的。我在下面列出了定义,希望它能减少困惑

  • 数据查询: 这通常指的是用于获取数据的 SNMP 查询。我在这里没有使用它,即使它听起来像是我需要配置的东西,才能对 bash 脚本进行数据查询。

  • 数据输入方法: 如果您正在跟随操作,这就是您配置 bash 脚本的地方。Cacti 将脚本视为获取数据的一种方式,而不是数据本身。这意味着您可以将脚本(或数据输入方法)用于多个数据源。在我的例子中,我对佩托斯基温度和休斯顿温度都使用了相同的数据输入方法。

  • 设备: Cacti 允许您按设备对数据进行分类。如果您要监控来自许多不同服务器的服务器数据,这将很有意义。在这种情况下,我没有绘制不同设备的图表,因此我根本不会使用设备分类(我将使用“无”作为设备)。

  • 数据源: 数据源使用“数据输入方法”来创建可图形化的数据片段。对于此示例,我有两个数据源:佩托斯基温度和休斯顿温度。

  • 数据模板: 这是一个模板,用于指示 Cacti 如何使用数据输入方法来创建数据源。基本上,您设置数据模板,以便 Cacti 知道在创建数据源时要问哪些问题。不使用数据模板也是可以的,但是如果您不设置数据模板,Cacti 在创建数据源时会给出错误,您需要稍后返回并修复这些错误。这真的很麻烦,但是创建数据模板的步骤使这个过程痛苦程度大大降低。

图 3. 不要感到不知所措;它远没有看起来那么可怕。

希望这能澄清一些奇怪的术语。绘图实际上是独立的,所以首先您需要配置您的数据源。(一旦您的数据源开始存储周期性数据,您就可以从您的数据源制作图表。)

第一部分:数据输入方法

对于这个例子,即使我有两个数据源,我只有一个数据输入方法。这意味着我需要在 Cacti 中配置脚本,以便它接受每个数据源的参数(气象站代码)。因此,要做到这一点,首先单击左侧的“数据输入方法”,然后单击“数据输入方法”页面右上角的“添加”。查看图 4 以了解“添加”链接的位置,因为我花了很长时间才找到它!

图 4. 我花了很长时间才弄清楚如何添加东西。我感觉很傻。

在这里您可以创建 Cacti“调用”您的脚本的标准。图 5 显示了如何设置信息。请注意,您必须使用“脚本/命令”输入类型,并且参数的占位符放在 < > 括号中。“数据输入方法”的名称只是一个友好的名称,括号中的命令行参数也获得了一个友好的名称。(另请注意,Cacti 将命令行参数称为“输入源”,这在 bash 脚本的情况下不是很有描述性。)填写完毕后,单击底部的“创建”。

图 5. 请务必选择脚本/命令!

下一个页面(图 6)看起来很相似,但您会看到现在有两个更多部分需要您完成。第一个是“输入字段”部分。单击该部分右上角的“添加”,然后告诉系统脚本期望的输入是什么。在图 7 中,您可以看到上一步的“输入字段”已被选中。我的示例脚本只有一个参数,所以它是唯一的选择。(请注意,名称与我在上一步的 <括号> 中输入的名称相同。)

图 6. 您需要配置输入字段和输出字段。

图 7. 这些错误检查功能对于某些脚本将派上用场。

我为“输入字段”添加了一个友好的名称,这样当我稍后配置数据源时,就很清楚 Cacti 正在寻找什么。如果您想玩花样,可以使用正则表达式来清理输入,但我将其留空。此外,由于脚本在没有气象站代码的情况下无法工作,我确保未选中允许空输入的复选框。最后一个字段在本例中也不适用,所以我将其留空。选择一个友好的名称后,单击“创建”。

接下来,单击“输出字段”框右上角的“添加”链接。您将被带到一个看起来像图 8 的屏幕。在这里,您基本上是在为来自 bash 脚本的输出应用标签。对于这个例子,我知道我将得到一个数字,所以在第一个字段中,我只是将其称为“degrees”(度数),然后我添加了一个友好的名称来描述输出。“更新 RRD 文件”默认情况下已选中,请确保将其保持选中状态。这就是 Cacti 知道这将是一个可图形化的数据点的方式!完成后,单击“创建”。

图 8. 只需使用一个有意义的名称。

您的“数据输入方法”屏幕现在应该如图 9 所示。请务必按窗口右下角的“保存”;否则,您将丢失所有工作。如果您单击左列的“数据输入方法”,您应该看到您的脚本作为新的“脚本/命令”添加。接下来,您可以使用该数据输入方法来创建您的两个数据源。

图 9. 请务必保存!

第二部分:数据模板

如果您转到左列中的“数据模板”并单击右上角的“添加”,您将看到一个类似于图 10 的屏幕。模板背后的想法是尽可能多地回答问题,同时为那些将特定于使用模板配置的每个数据源的项目留空。查看图 10,请注意我在顶部给模板起了一个友好的名称。下一个字段,在“数据源”下,我将其留空,但我选中了“使用每个数据源的值”的复选框,因为我希望两个数据源具有不同的名称。(如果它们都具有相同的名称,那将非常没用。)选中该复选框会告诉 Cacti,当人们使用数据模板时,您希望他们提出自己的名称。“数据输入方法”是您在第一部分中按照操作创建的方法——只需在下拉列表中找到它。“关联的 RRA”告诉 Cacti 它应该跟踪哪些数据集。请务必选择所有这些,因为您希望能够为历史数据创建多个图表。然后,“步长”指的是它应该多久轮询一次脚本以获取温度。默认值为五分钟(300 秒),我建议保持不变。最后在该部分中,请确保选中“数据源活动”,以便它实际存储数据。请注意,该部分的最后两个字段选中以使用“每个用户数据源”,因为我希望这些值对于使用此模板创建的任何数据源都相同。

图 10. 数据模板使创建数据源变得容易得多。

下一部分指的是 RRD(环形数据库)文件中的数据项。由于我正在跟踪温度,所以我只是决定在文件中将该字段称为“temp”。我也不想要最大值或最小值,所以我在每个字段中都放了“U”。“数据源类型”字段指的是存储的数据类型。在这种情况下,它是一个波动的值,我想在图表上比较它们之间的差异,所以“GAUGE”类型是我想要的。随意探索其他数据类型,但对于监控和绘制温度等内容,您应该使用 GAUGE。最后,“心跳”字段告诉 Cacti 在数据条目之间可以间隔多长时间,然后它需要用“未知”填充数据点(这默认为十分钟,我建议保持不变)。另请注意,没有标记“使用每个数据源”复选框,因为这些值对于使用我的脚本的任何数据源都相同。单击“创建”,您应该看到 Cacti 提供另一个要填写的字段(图 11)。

图 11. 记住尽可能多地填写,并选中那些应该对每个数据源唯一的框。

底部出现的“自定义数据”部分来自需要输入的数据输入方法(气象站代码)。由于我希望每个数据源都使用自己的代码,所以我选中了“使用每个数据源”框并将该字段留空。单击“保存”,数据源应已配置并准备好使用。

第三部分:数据源

现在您有了数据输入方法和一个数据模板来告诉 Cacti 如何使用它,您需要创建您的两个数据源。转到左侧的“数据源”,然后单击右上角的“添加”以添加您的第一个源。第一页要求您选择数据模板和主机。此数据源与特定服务器无关,因此将“主机”保留为“无”,但您要选择您新创建的数据模板(图 12)并单击“创建”。

图 12. 酷,数据模板!

由于数据模板已经回答了关于新数据源的大部分问题,因此您只需询问一些详细信息。在图 13 中,您可以看到我需要命名此数据源,选择数据源路径并为其提供气象站代码。我只是使用了 Cacti 创建的默认数据源路径。输入名称和气象站代码后,单击“保存”。

图 13. 看到没?当您只有两件事要输入时,创建数据源要容易得多!

如果您正在跟随操作并想做与我类似的事情,请为您的第二个气象站重复此过程。由于数据模板已经到位,因此添加第二个数据源非常简单。我添加休斯顿的方式与添加佩托斯基的方式完全相同。

第四部分:图表

创建数据源实际上是使用 Cacti 创建图表最困难的部分。一旦创建了数据源,数据将每五分钟轮询一次,并且数据将被添加到 RRD 文件中。在创建数据源之前,您无法创建图表,因为图表只是以图形方式显示数据源内部的数据。因此,既然您有了数据源,您就可以创建图表来显示它们。

可以设置图表模板,但与数据模板不同,它们并非真正必需的。在我的例子中,由于我只创建了一个图表,因此设置模板比从头开始创建一个图表花费的时间更长,因此我将从头开始进行操作。为了开始,单击屏幕左侧的“管理图表”。(注意:不要单击“新建图表”,因为出于某种原因,Cacti 将尝试使用主机,并且不让您选择没有关联主机的数据源的选项。值得庆幸的是,这在“图表管理”部分不是问题。)

进入图表管理后,单击右上角的“添加”。为“主机”和“模板”都选择“无”(图 14),因为您不会为此图表使用模板。然后单击“创建”。

图 14. 图表模板不会为您节省任何时间,但如果您要制作许多类似的图表,请查看它们。

下一个页面(图 15)看起来令人不知所措,但您几乎会将所有内容都保留为默认值。我唯一添加的是图表的标题(佩托斯基 & 休斯顿)以及底部的垂直标签(华氏度)。对于您的第一个图表,我建议将所有其他内容都保留为默认值。单击“创建”。

图 15. 值得庆幸的是,您想要大部分默认值。

下一个页面(图 16)看起来很相似,但请注意我在红色圈出的部分,标题为“图表项目”。您需要在该部分右侧单击“添加”,并添加数据源。您会看到我选择了“休斯顿温度”作为要绘制图表的数据源(图 17)。

图 16. 我一开始错过了这个部分,并且很困惑为什么我没有得到任何图表。

图 17. 为什么下拉框只显示 HEX?

第二个字段是为图表选择颜色。令人恼火的是,下拉菜单仅显示颜色的 HEX 代码,但在您选择一个颜色后,它会为您显示颜色。休斯顿通常很热,因此它看起来适合用红色。接下来是不透明度,我选择了 100%。 “图表项目类型”默认不是“AREA”,因此请务必为看起来像数据滚动山的传统图表选择它。将“合并函数”保留为 AVERAGE 是安全的,并将所有其他内容保留为默认值。我确实在“文本格式”字段中添加了“休斯顿温度”,以便它在我的图表上显示哪种颜色是哪个数据源。对数据感到满意后,单击“创建”。对您的第二个数据源执行相同的操作。您会在我的(图 18)中注意到,我为佩托斯基选择了蓝色,并且没有选择 AREA,而是选择了 LINE1。它是一种不同类型的图表,因此它不会填充页面,而是会绘制一条带有温度的线。我这样做是为了让休斯顿填充背景,而佩托斯基会在其顶部绘制一条线,这样您就可以同时看到两者。图 19 显示了图表外观的预览。请务必单击底部的“保存”!

图 18. 蓝色看起来适合佩托斯基。

图 19. 看起来图表已配置。(不要忘记单击“保存”。)

就这样!

剩下要做的就是等待。每五分钟,应该添加一个数据点,并且图表将使用该数据的图形表示形式进行更新。Cacti 允许您将图表导出到本地路径(如 /var/www/html)或远程 FTP 服务器。如果您不让它导出图表,您将必须登录才能查看它们。我不会介绍导出图表的过程,但请单击左列的“设置”链接,然后单击顶部的“图表导出”选项卡。设置非常不言自明。要查看您刚刚创建的图表,请等待 10-15 分钟,然后按照图 20 中所示的箭头找到图表。您应该看到您的新图表开始用数据填充自己!

图 20. 这些图表很难找到;希望箭头能帮助您。

Cacti 还有许多其他功能,它允许您自定义图表,在图形上显示最小值/最大值,以及不同类型的图表、数据源等等。一旦您熟悉了使用它,Cacti 就是一个非常好的自动化绘图过程的工具。我希望您像我一样从中获得乐趣!

Shawn 是 Linux Journal 的副编辑,并且从一开始就接触 Linux。他对开源充满热情,并且热爱教学。他还喝太多咖啡,这经常在他的写作中表现出来。

加载 Disqus 评论