如何在CentOS7上使用InfluxDB分析系统指标

来自菜鸟教程
跳转至:导航、​搜索

介绍

InfluxDB 是一个时间序列、指标和分析数据库。 时间序列数据库旨在解决存储在一段时间内进行的连续测量产生的数据的问题。 此数据可能包含系统指标(如 CPU 和内存使用情况)和应用程序指标(如应用程序错误和 REST 端点调用)等项目。

系统运行时间越长,积累的数据量就越大。 InfluxDB 提供了一种有效存储这些数据的解决方案。 它针对 DevOps、指标、传感器数据以及实时监控和分析的用例。 使用 InfluxDB,您可以快速构建强大的实时监控框架,同时提供历史分析。

在本指南中,我们将介绍:

  • 如何在 CentOS 7 上安装和配置 InfluxDB。
  • 如何将系统监控数据从 collectd 系统统计守护进程馈送到 InfluxDB。
  • 如何使用 InfluxDB 类 SQL 查询语言快速了解和分析被监控系统的性能。
  • 如何使用 Grafana 可视化工具堆栈创建丰富的仪表板解决方案,以更好地探索和呈现存储在我们的 InfluxDB 实例中的数据。

先决条件

在开始之前,您需要以下内容:

第 1 步 — 安装 InfluxDB

在这一步中,我们将安装 InfluxDB。

InfluxDB 作为一个独立的系统分发。 这意味着它没有外部依赖; 安装过程中使用的发布包中提供了运行数据库所需的一切,这使安装变得容易。

首先,更新您的系统以确保您拥有最新的错误和安全修复程序。

sudo yum -y update

接下来,安装最新版本的 InfluxDB,在撰写本文时为 v0.8.8。

sudo yum -y install  https://s3.amazonaws.com/influxdb/influxdb-latest-1.x86_64.rpm

包安装成功后,会在/opt/influxdb/versions/0.8.8中安装多个文件,并在/etc/init.d中创建InfluxDB服务管理脚本的符号链接。

第 2 步 — 配置和启动 InfluxDB

在这一步中,我们将自定义 InfluxDB 配置以禁用匿名数据报告并延长默认读取超时限制。

InfluxDB的主要配置文件是/opt/influxdb/shared/config.toml。 这使用了 TOML 格式,它看起来与 INI 配置格式非常相似,并且由于其明显的语义而被设计为易于阅读。

在我们自定义配置之前,请备份原始配置。

sudo cp /opt/influxdb/shared/config.toml /opt/influxdb/shared/config.toml_backup

从 0.7.1 版本开始,InfluxDB 每 24 小时向 m.influxdb.com 报告一次匿名数据。 为了最大限度地减少我们的带宽使用,我们将禁用此报告。 首先,使用 nano 或您喜欢的文本编辑器打开配置文件进行编辑。

sudo nano /opt/influxdb/shared/config.toml

找到配置键reporting-disabled,改成true。 编辑后,该部分应如下所示:

/opt/influxdb/shared/config.toml 摘录

. . .
# Change this option to true to disable reporting.
reporting-disabled = true

[logging]
. . .

接下来,我们将更新默认读取超时,以允许稍长的连接前置时间。 读取超时控制与数据库的连接在关闭之前允许等待多长时间。

在同一个配置文件中,找到配置键read-timeout,将其从5s改为10s

/opt/influxdb/shared/config.toml 摘录

. . .
# However, if a request is taking longer than this to complete, could be a problem.
read-timeout = "10s"

[input_plugins]
. . .

保存并关闭文件,然后启动 InfluxDB 守护进程。

sudo /etc/init.d/influxdb start

成功启动后,服务管理器脚本将提供以下输出。

成功的守护进程启动输出

Setting ulimit -n 65536
Starting the process influxdb [ OK ]
influxdb process was started [ OK ]

在 InfluxDB 开始后,在 Web 浏览器中导航到 http://your_server_ip:8083 以验证 InfluxDB 是否已启动并正在运行。 这将显示默认的管理 UI,其中有两个部分分别标记为 Connect主机名和端口设置

第 3 步 - 更改默认 InfluxDB 管理员凭据

每个 InfluxDB 都附带一组默认的管理员凭据。 为了安全起见,您应该更改此密码。

Connect 部分使用默认用户名 root 和密码 root 登录 InfluxDB UI。 将数据库留空,然后单击蓝色的 Connect 按钮。

在下一页的顶部菜单中,单击 Cluster Admins。 这将带您进入用户管理页面。 在 Username 部分下,单击 root 并更改密码,方法是填写两次新密码并单击蓝色的 Change Password 按钮。

最后,使用蓝色的 Disconnect 按钮注销,然后使用新密码重新登录。

第 4 步 — 创建数据库

首次设置 InfluxDB 时,它不包含任何实际数据库,因此我们需要创建一个数据库,我们最终将使用它来存储我们的指标。

单击 Web UI 顶部菜单中的 Databases 菜单。 在 Create a Database 部分的 Database Details 下,输入 metrics 作为数据库名称。 可以保留 Shard Spaces 选项中的默认选项。 接下来点击右下角的蓝色 Create Database 按钮来创建你的数据库。

成功创建数据库后,您将看到它列在屏幕顶部的 Explore Data 链接旁边。

为了验证我们创建的数据库是否正常工作,我们可以使用数据 UI 编写并检查一些示例数据。 单击 Explore Data 链接以访问数据 UI。 您将看到此屏幕:

在此屏幕中,您可以将一些测试数据写入数据库。 您还可以针对存储在数据库中的数据发出临时查询并查看基本的可视化。 让我们编写一些数据来验证我们的数据库是否正常工作。

要使用 Web UI 输入数据,您需要提供系列名称和系列值。 系列名称是不带空格的字母数字字符串,值字段应以 JSON 键值格式提供。

Write Point 部分中,对于 Time Series Name 输入 test_metric,对于 Values,输入 {"value": 23.4}。 然后,点击蓝色的Write Point按钮输入数据。 您会看到按钮旁边以绿色弹出 200 OK

使用相同的时间序列名称和以下每个值重复该过程:{"value": 13.1}{"value": 13.1}{"value": 78.1}{"value": 90.4}。 请注意,我们有意将值 13.1 写入两次。 您将总共添加五个点。

现在我们已经编写了一些示例数据点,我们可以检查它们。 在页面顶部的 Read Points 部分,在 Query 框中,输入以下查询:

InfluxDB 查询

select * from test_metric

然后按下蓝色的 Execute Query 按钮。 此查询的结果将显示存储在数据库中的 test_metric 系列的所有数据点。 然后你会看到一个看起来像这样的图表:

此屏幕显示了一个总结时间序列中指标趋势的折线图和一个总结数据库中存储的数据的数据表。

我们还可以使用列标识符来缩小搜索范围。 例如,要查找事件值为 13.1 的事件,请输入以下搜索查询:

InfluxDB 查询

select * from test_metric where value = 13.1  

这将导致我们的示例数据返回两行:

更详细地说,InfluxDB 中的数据是按时间序列组织的,在我们的示例中为 test_metric。 每个系列都有一组对应于事件的数据点。 当我们输入数据时,我们在上面创建了五个事件。 每个事件都有一个时间、一个序列号和一些列,这些列类似于我们为一个事件测量的指标。 在我们的示例中,我们在五个事件中的每一个中都有一个称为 value 的度量。

第 5 步 — 安装和配置 collectd

在这一步中,我们将设置和配置 collectd 以收集我们系统的指标。 collectd 是一个 Unix 守护进程,用于收集、传输和存储性能数据。 它有助于维护可用资源的概览以检测现有或迫在眉睫的瓶颈。

首先,启用 EPEL(企业 Linux 的额外软件包)存储库:

sudo yum -y install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

然后安装collectd。

sudo yum -y install collectd

成功安装软件包后,将创建许多二进制文件、共享库和配置文件。 要注意的主要文件是 collectd 配置文件 /etc/collectd.conf 和主要的 collectd 守护程序二进制文件 /usr/sbin/collectd。 和之前的 InfluxDB 一样,让我们首先复制原始配置文件。

sudo cp /etc/collectd.conf /etc/collectd.conf_backup

接下来打开配置文件进行编辑。

sudo nano /etc/collectd.conf 

主要的 collectd 配置文件包含许多设置,其中大多数默认情况下是不活动的,因为它们被注释掉了。 我们将取消注释并修改其中的一些。

在文件配置顶部的 Global 部分,您将看到以下内容。 您将编辑的部分以红色突出显示。

/etc/collectd.conf 原始摘录

. . .
#Hostname    "localhost"
#FQDNLookup   true
#BaseDir     "/var/lib/collectd"
#PIDFile     "/var/run/collectd.pid"
#PluginDir   "/usr/lib64/collectd"
#TypesDB     "/usr/share/collectd/types.db"
. . .

通过删除行首的 # 取消注释 Hostname、BaseDir、PIDFile、PluginDir 和 TypesDB 字段。 此外,将主机名字段设置为 influxdb。 完成后,文件的这一部分应如下所示:

/etc/collectd.conf 修改摘录

Hostname    "influxdb"
#FQDNLookup   true
BaseDir     "/var/lib/collectd"
PIDFile     "/var/run/collectd.pid"
PluginDir   "/usr/lib64/collectd"
TypesDB     "/usr/share/collectd/types.db"

接下来,向下滚动到 LoadPlugin 部分,其中按字母顺序列出了大量插件。 滚动浏览它们并通过删除行首的 # 来取消注释 LoadPlugin networkLoadPlugin uptime 行。

最后,我们将配置 collectd 直接向 InfluxDB 发送数据。

向下滚动到插件配置部分。 在部分分隔符(如下所示)之后,添加网络插件配置(以红色突出显示)。

/etc/collectd.conf 修改摘录

. . .
##############################################################################
# Plugin configuration                                                       #
#----------------------------------------------------------------------------#
# In this section configuration stubs for each plugin are provided. A desc-  #
# ription of those options is available in the collectd.conf(5) manual page. #
##############################################################################

 <Plugin network>
  Server "127.0.0.1" "8096"
 </Plugin>

#<Plugin "aggregation">
. . .

现在保存并退出文件。 我们应该检查配置以确保我们没有无意中引入任何拼写错误或语法错误。 我们可以使用collectd来测试配置如下:

sudo /usr/sbin/collectd -t

如果 collectd 配置没有错误,则此命令将返回且无输出。 如果在文件中发现任何错误,它们将在终端中列出。

配置无误后,重新启动 collectd 以激活新配置。 这可能需要一点时间。

sudo service collectd start

第 6 步 - 配置 InfluxDB 以使用收集的指标

要将 collectd 收集的 collectd 系统指标存储在 InfluxDB 中,我们需要启用和配置 InfluxDB collectd 输入插件。

首先,打开 InfluxDB 配置文件进行编辑。

sudo nano /opt/influxdb/shared/config.toml

找到 input_plugins.collectd 插件配置,如下所示。 您将修改的行以红色突出显示。

/opt/influxdb/shared/config.toml 原始摘录

. . .
  # Configure the collectd api
  [input_plugins.collectd]
  enabled = false
  # address = "0.0.0.0" # If not set, is actually set to bind-address.
  # port = 25826
  # database = ""
  # types.db can be found in a collectd installation or on github:
  # https://github.com/collectd/collectd/blob/master/src/types.db
  # typesdb = "/usr/share/collectd/types.db" # The path to the collectd types.db file
. . .

通过进行以下更改来修改它以匹配下面的摘录:

  • 将启用设置为真。
  • 将端口更改为 8096。
  • 将数据库更改为指标。
  • 取消对 port、database 和 typesdb 行的注释。
. . .
[label /opt/influxdb/shared/config.toml modified excerpt]
  # Configure the collectd api
  [input_plugins.collectd]
  enabled = true
  # address = "0.0.0.0" # If not set, is actually set to bind-address.
  port = 8096
  database = "metrics"
  # types.db can be found in a collectd installation or on github:
  # https://github.com/collectd/collectd/blob/master/src/types.db
  typesdb = "/usr/share/collectd/types.db" # The path to the collectd types.db file
. . .

保存文件并重新启动 InfluxDB 以激活新配置。

sudo /etc/init.d/influxdb restart

接下来,让我们检查一下 InfluxDB 是否正在从 collectd 接收系统指标。 在 UI 中的 Data Interface 中,我们在步骤 5 中离开的位置,在 Read Points 下的 Query 文本框中输入以下查询,然后按蓝色 执行查询 按钮。

InfluxDB 查询

list series 

如果您从 collectd 接收数据,您应该观察到类似于以下的一长串系列:

我们现在可以通过像第 5 步那样探索这些数据来开始分析我们系统的性能。 例如,发出以下查询将允许您观察系统中的内存使用情况:

InfluxDB 查询

select * from "influxdb/memory/memory-used"

结果数据显示清楚地显示了已记录到我们的 InfluxDB 实例的内存使用情况的变化。 这是一个例子:

第 7 步 — 安装和启动 Grafana

我们可以使用 InfluxDB 的 Web 界面来探索数据并从时间序列数据中可视化系统趋势。 但是,Web UI 有点简陋,不适合呈现我们正在收集的指标数据。

Grafana 是一个功能丰富的指标仪表板,与 InfluxDB 很好地集成。 Grafana 将赋予我们创建仪表板的能力,这些仪表板提供系统概览,适合共享或用作墙壁展示。

要安装 Grafana,请输入以下命令。

sudo yum -y install  https://grafanarel.s3.amazonaws.com/builds/grafana-2.0.2-1.x86_64.rpm

通过首先重新加载 systemd 的守护进程来启动 Grafana 堆栈。

sudo systemctl daemon-reload

然后启动 Grafana 服务器。

sudo systemctl start grafana-server

最后,检查其状态。

sudo systemctl status grafana-server

成功启动后,服务管理器状态将确认 Grafana 服务已启动并且正在提供 Web UI。 您在终端中收到的输出将以此开头:

Grafana 状态输出

grafana-server.service - Starts and stops a single grafana instance on this system
   Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled)
   Active: active (running) since Tue 2015-06-02 18:59:17 EDT; 3s ago
. . .

第 8 步 — 更改默认 Grafana 管理员凭据

每个 Grafana 实例都附带一组默认的管理员凭据。 为了安全起见,您应该更改此密码。 您可以使用 Web UI 或 Grafana 配置文件来执行此操作,但由于易于使用,我们将使用 Web UI。

Grafana 启动后,导航到 http://your_server_ip:3000。 使用默认用户名 admin 和密码 admin 登录 Grafana UI。 单击屏幕左上角的 Graphana 徽标,然后在出现的菜单中单击 admin。 这将带您进入以下配置文件管理页面。

单击顶部标题菜单中的 Change Password 链接。 在相应的字段中填写您的新密码,然后单击 更改密码

第 9 步 — 将 InfluxDB 数据库添加到 Grafana

在这一步中,我们将在 Grafana 中添加我们的 InfluxDB 数据库作为源。

要添加数据源,请单击顶部标题中的 Grafana 图标打开侧面菜单。 在侧边菜单中,单击 数据源 。 单击顶部标题中的 Add New 链接以显示数据源定义屏幕。

使用以下设置填充此屏幕:

  • 名称:influxdb
  • Type:从下拉菜单中选择InfluxDB 0.8.x
  • Default:确保选中此复选框。 默认数据源意味着它将为新面板预先选择。
  • 网址http://localhost:8086
  • 访问:从下拉菜单中选择代理
  • Basic Auth:不选中此复选框。
  • 数据库:指标
  • 用户:root
  • Password:您在步骤 4 中选择的根 InfluxDB 数据库密码。

最后,单击屏幕底部的绿色 Add 按钮。

第 10 步 - 创建 Grafana 仪表板

Grafana 提供了一种强大但用户友好的方法来创建信息图表和仪表板。 在这一步中,我们将创建一个系统概览仪表板来显示我们在 InfluxDB 中收集的系统指标的趋势。

在 Grafana 中,dashboard 是您工作的基本托盘。 仪表板包含 显示元素 (例如图形和文本窗格)。 显示元素包含用于从数据源(在我们的例子中是 InfluxDB)中获取数据的查询。 因此,我们首先需要创建一个空仪表板,作为我们展示的基础。

导航到 Grafana 主页 http://your_server_ip:3000。 单击顶部标题中的 Home 链接以显示仪表板列表屏幕。 在这个屏幕的底部,点击+新建。 这将带您进入新的空白仪表板。

单击仪表板标题菜单中的齿轮,然后单击设置。 您将看到以下屏幕:

此屏幕用于更改仪表板的主要设置。 将 Title 字段从 New dashboard 更改为 System Overview。 接下来,单击顶部标题中的软盘图标以保存仪表板。

我们现在将使用显示元素填充仪表板,以创建视觉系统概览信息辐射器。

在仪表板中,单击行控件菜单,这是位于仪表板左上角的绿色小矩形。 在此菜单中,将鼠标悬停在 Add Panel 上,然后单击 Graph。 这将在您的仪表板上创建一个空白图表。

单击图表顶部的图表标题,显示为 no title (click here),然后从结果菜单中单击 edit。 这将带您进入图表管理菜单。 单击 General 选项卡并将 Title 字段更改为 Network

接下来,单击 Metrics 选项卡将您带到查询生成器。 在 series 字段中,我们可以指定我们希望用作图表数据源的指标。 开始输入interface; 然后,您将看到一个自动完成的选择。 选择 influxdb/interface-eth0/if_errors 指标。

接下来,点击图表管理菜单底部的+添加查询。 这将向查询生成器添加第二个查询行。 使用与之前相同的方法为 influxdb/interface-eth0/if_octets 指标添加查询,并再次为 influxdb/interface-eth0/if_packets 指标添加查询。

添加三个查询后,您的指标屏幕应如下所示:

最后,单击 Back to Dashboard 链接将您带到仪表板,其中现在包含显示系统网络趋势的图表,然后单击顶部标题中的软盘图标保存您的新显示图表和仪表板。

可以重复上述过程以创建可视化图表以显示存储到 InfluxDB 系列的任何数据。

结论

InfluxDB 是用于存储和分析时间序列数据的强大工具,例如监控运行系统性能时生成的数据。 将 InfluxDB 与 Grafana 相结合提供了一种有效存储和可视化此类数据的解决方案。

完成本教程后,您应该对 InfluxDB 有一个大致的了解:如何安装它,如何配置数据库以供使用,以及如何向其发送数据。 此外,您可以设置 Grafana 并使用它来构建通用系统监控仪表板。

InfluxDB 和 Grafana 有许多进一步的特性和用例。 您可以使用 InfluxDB 提供的 聚合函数 对系统的行为进行更深入的分析。 您可能还希望开始从分布式系统收集数据,以便比较多个系统的性能,或者开始收集和分析其他非系统级别的指标类型(例如 每个用户的页面访问次数或 REST 端点的 API 调用次数)。 InfluxDB 非常适合此类数据,并且在 InfluxDB 官方文档中列出了许多 工具和库