使用Grafana、InfluxDB和Collect监控您自己的基础架构

2020-07-21 21:12:57

对于公司来说,监控其基础设施节点至关重要,特别是在公司没有现场访问权限以在出现问题时进行干预的情况下。事实上,某些资源的密集使用可能是故障或过度拥挤的迹象。但是,除了预防之外,还可以使用监控来评估新软件在生产环境中可能产生的影响。目前,市场上有几种“现成”的解决方案可以跟踪所有消耗的资源。这些看似合理的解决方案提出了两个关键问题:高昂的设置成本和与第三方相关的安全问题。

第一个问题与成本有关。价格从每月10欧元到数千欧元不等,这取决于你需要监控的主机数量-前者是消费者定价,后者是企业定价。例如,假设我在一年中有三个节点要监控。每月10欧元,我会花120欧元。对于价格在每年1万至2万欧元之间的较小企业来说,这样的费用可能会膨胀其基本成本结构,并在财务上变得难以为继。

第二个问题是第三方风险。通常,基础设施数据必须通过第三方公司才能为客户查看和分析-无论客户是个人消费者还是企业。第三方公司如何捕获数据并将其呈现给客户?简单地说,第三方公司通常通过安装在节点上并受到监控的自定义代理来收集数据。人们经常发现此安装不是最新的,并且与操作系统不兼容。之前的工作已经由安全研究人员完成,他们揭示了“专有收集器”的问题。你会相信他们吗?我不会的。

在为ToR和某些加密货币保留节点时,我更喜欢选择一种免费、易于配置和开源的替代方案。在这里,我们将使用三元组:grafana、InfluxDB和Colltd。

为了能够分析我们的基础设施的每一个指标,有必要使用一个能够捕获我们想要监视的机器的统计数据的程序。在这方面,Collectd对您很有帮助:它是一个守护进程,可以分组并收集(因此得名)所有可以存储在磁盘上或通过网络发送的参数。

数据将被传输到InfluxDB的一个实例:一个特定的时间序列数据库,它将服务器接收数据的时间(以UNIX时间戳编码)与每个数据相关联。这样,COLLECTD发送的数据就已经以时间方式设置为一系列事件。

最后,您将使用Grafana,它将连接到InfluxDB来创建华丽的仪表板,以用户友好的方式显示数据。通过各种直方图和图表,可以实时观察与CPU、RAM等相关的所有数据。

让我们从InfluxDB开始,它是我们监视“系统”的心脏。InfluxDB是在GO中开发的开源时间序列数据库,用于将数据存储为事件序列。

每次添加数据时,默认情况下它都链接到UNIX时间戳。这为用户提供了极大的灵活性,他们不再需要担心保存“时间”变量,例如,“时间”变量有时配置起来很麻烦。让我们设想一下,我们有几台机器分布在多个大洲。我们如何管理“时间”变量?我们所有的数据都使用格林威治子午线吗?或者我们是否为每个节点设置不同的时区?如果数据保存在不同的时区,我们如何准确地显示图表?如您所见,这可能非常复杂。

作为一个自动为任何数据点添加时间戳的时间感知型数据库,InfluxDB具有同时写入特定数据库的优势。这就是为什么我们经常把InfluxDB想象成一个时间线。写入数据不会影响数据库的性能(在MySQL中有时会发生这种情况),因为写入只是将特定事件添加到时间线中。这个程序的名字正是源于这样一个概念,即时间是一股流动的无限的、不确定的“流”。

InflxuDB的另一个优势是易于安装,以及社区提供的广泛支持该项目的大量文档。它有两种类型的接口:Via Command Line(对于开发人员来说功能强大且灵活,但没有做好查看大量数据的准备)和允许与数据库直接通信的HTTP API。

InfluxDB不仅可以从官方网站下载,也可以从发行版的包管理器下载(在本例中,我们使用的是Debian系统)。建议安装前通过GPG检查包,下面我们导入InfluxDB包的密钥:

[电子邮件受保护]#~:cURL-SL https://repos.influxdata.com/influxdb.key|sudo APT-KEY ADD-[电子邮件受保护]#~:来源/etc/os-release[电子邮件受保护]#~:ECHO";deb https://repos.influxdata.com/debian$(lsb_release-cs)稳定";|sudo tee/etc/apt/Soures.list.d/influxdb.list。

为了确保没有恶意人员进入,我们创建了用户“管理员”。InfluxDB使用一种名为“InfluxQL”的特定查询语言,类似于SQL,它允许您与数据库交互。要创建新条目,我们使用查询CREATE USER。

[电子邮件受保护]#~:impxConnected to http://localhost:8086InfluxDB Shell版本:x.y.z&>>;创建具有所有权限的密码为MYPASSISCOOL';的用户ADMIN。

从相同的CLI界面中,我们创建“指标”数据库,该数据库将用作指标的容器。

接下来,让我们修改influxdb(/etc/fluxdb/fluxdb.conf)的配置,使接口在端口24589(Udp)上打开,直接连接到名为“metrics”的数据库,以支持集合体。您还需要下载tyes.db文件并将其放在/usr/share/Collect td/(或任何其他文件夹)中,以定义Collect以本机格式发送的数据。

有关配置中Collectd块的详细信息,请参阅文档参考。

Collectd是我们监控基础设施中的一个数据聚合器,它便于将数据传输到InfluxDB。默认情况下,Collectd捕获CPU、RAM、内存(在磁盘上)、网络接口、进程等指标。该程序的潜力是无穷无尽的,因为它可以通过预安装的插件启用或通过创建新插件进行扩展。

让我们以一种简单化的方式来说明Colltd是如何工作的。假设我想检查我的节点有多少个进程。在执行此操作时,Collectd只需执行一个API调用即可获得每个时间单位的进程数(默认情况下定义为5000ms)。一旦捕获,数据将通过一个需要配置的模块(称为“Network”)发送到InfluxDB。

使用我们的编辑器打开文件/etc/Collectd.conf,滚动以找到Network部分,然后按照以下代码片段中的内容进行编辑。请务必指定InfluxDB(INFLUXDB_IP)的接口所在的IP。

我的建议是在配置中修改发送到InfluxDB的主机名(在我们的基础设施中,InfluxDB是一个“集中式”数据库,因为它驻留在单个节点上)。这样做,数据将不会是冗余的,并且不会有其他节点覆盖信息的风险。

为了记住这句著名的“引语”,通过图表实时观察基础设施指标,使我们能够以高效和及时的方式采取行动。要创建和配置仪表板,我们将使用Grafana。

Grafana是一个开源工具,与多种数据库(包括InfluxDB)兼容,它以图形方式表示指标,并允许用户在特定数据满足条件时创建警报。例如,如果您的CPU达到高峰,可以通过电子邮件等方式在Slake、MatterMost上通知您。事实上,每次有人进入SSH时,我都会亲自配置警报,这样我就可以主动监控谁“进入”了我的基础设施。

Grafana不需要任何特殊设置:同样,是InfluxDB“扫描”“time”变量。集成非常简单。让我们首先导入公钥,从Grafana官网添加包(这取决于您使用的操作系统):

[电子邮件受保护]#~:wget-q-O-https://packages.grafana.com/gpg.key|sudo APT-KEY ADD-[电子邮件受保护]#~:ECHO";Deb https://packages.grafana.com/oss/deb稳定主&34;|sudo tee-a/etc/apt/Soures.list.d/grafan a.list[电子邮件受保护]#~:apt-get update&;&;apt-get install grafana。

接下来,当我们通过浏览器转到localhost:3000页面时,应该会看到grafana的登录界面。默认情况下,您应该使用admin作为用户名,使用admin作为密码(建议在第一次登录后更改密码)。

现在,屏幕在New Dashboard的正下方显示一个绿色的小矩形。将鼠标悬停在此矩形上并选择添加面板,然后选择图形:

现在将显示包含测试数据的图表。单击此图表的标题,然后选择编辑。Grafana允许编写智能查询:您不必知道数据库的每个字段,因为Grafana通过一个列表建议它们,您可以从列表中选择要分析的参数。

编写查询从未像现在这样简单:只需选择您想要跟踪的度量,然后单击Refresh。我还建议按主机名区分指标,这样可以更容易地隔离任何问题。如果您正在寻找创建仪表板的其他想法,我建议您访问Grafana Showcase获取灵感。

正如我们已经注意到的,Grafana是非常可扩展的,允许我们比较不同性质的数据。没有不能捕捉到的指标,所以创造力是你唯一的限制。监控您的机器,获得基础架构的通用实时视图!

我真的要感谢Andrés的插图。