介绍
InfluxDB是一个时间序列,指标和分析数据库。时间序列数据库旨在解决存储在一段时间内进行的连续测量所产生的数据的问题。此数据可能包含系统指标(如CPU和内存使用情况)和应用程序指标(如应用程序错误和REST端点调用)等项目。
系统运行的时间越长,累积的数据量就越大。InfluxDB提供了有效存储此数据的解决方案。它针对DevOps,指标,传感器数据以及实时监控和分析的用例。使用InfluxDB,您可以快速构建强大的实时监控框架,该框架还提供历史分析。
在本指南中,我们将介绍:
- 如何在CentOS 7上安装和配置InfluxDB。
- 如何将系统监视数据从collectd系统统计守护进程提供给InfluxDB。
- 如何使用InfluxDB类似SQL的查询语言来快速了解和分析受监视系统的性能。
- 如何使用Grafana可视化工具堆栈创建丰富的仪表板解决方案,以更好地探索和呈现存储在InfluxDB实例中的数据。
先决条件
在开始之前,您需要以下内容:
- 一个64位CentOS 7 腾讯CVM。服务器所需的CPU,RAM和存储量取决于您要收集的数据量,但通常只需2GB RAM和2个CPU即可。
- 一个拥有sudo权限的非root用户。(你可能需要一台已经设置好可以使用
sudo
命令的非root账号的CentOS服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。) - 4 GB的交换空间。
第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
。编辑后,该部分应如下所示:
. . .
# Change this option to true to disable reporting.
reporting-disabled = true
[logging]
. . .
接下来,我们将更新默认读取超时,以允许稍长的连接提前期。读取超时控制允许数据库连接在关闭之前等待的时间。
在同一配置文件中,找到配置密钥read-timeout
并将其从更改5s
为10s
。
. . .
# 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,其中包含两个标记为“ 连接”和“ 主机名”和“端口设置”的部分。
第3步 - 更改默认的InfluxDB管理员凭据
每个InfluxDB都附带一组默认的管理员凭据。为安全起见,您应该更改此密码。
登录到InfluxDB UI使用默认的用户名根和密码根的连接部分。将数据库留空,然后单击蓝色的“ 连接”按钮。
在下一页的顶部菜单中,单击Cluster Admins。这将带您进入用户管理页面。在“ 用户名”部分下,单击root并通过填写新密码两次并单击蓝色“ 更改密码”按钮来更改密码。
最后,使用蓝色“ 断开连接”按钮注销,然后使用新密码重新登录。
第4步 - 创建数据库
当InfluxDB首次设置时,它不包含任何实际的数据库,因此我们需要创建一个数据库,我们最终将用它来存储我们的指标。
单击Web UI顶部菜单中的“ 数据库”菜单。在“ 创建数据库”部分的“ 数据库详细信息”下,输入metrics作为数据库名称。可以保留Shard Spaces选项中的默认选项。接下来,单击右下角的蓝色“ 创建数据库”按钮以创建数据库。
成功创建数据库后,您将在“ 浏览数据”链接旁边的屏幕顶部看到它。
为了验证我们创建的数据库是否正常工作,我们可以使用数据UI编写并检查一些示例数据。单击“ 浏览数据”链接以访问数据UI。你会看到这个屏幕:
在此屏幕中,您可以将一些测试数据写入数据库。您还可以针对存储在数据库中的数据发出即席查询,并查看基本可视化。让我们写一些数据来验证我们的数据库是否正常运行。
要使用Web UI输入数据,您需要为系列提供系列名称和值。系列名称是不带空格的字母数字字符串,值字段应以JSON键值格式提供。
在“ 写入点”部分,对于“ 时间序列名称”,输入test_metric,对于“ 值”,输入{"value": 23.4}
。然后,单击蓝色“ 写入点”按钮以输入数据。您将看到按钮旁边的绿色弹出200 OK。
重复该过程与时间序列相同的名字和以下值:{"value": 13.1}
,{"value": 13.1}
,{"value": 78.1}
,和{"value": 90.4}
。请注意,我们有意将值13.1写入两次。您将总共添加五个积分。
现在我们已经编写了一些示例数据点,我们可以检查它们。在页面顶部的“ 读取点”部分的“ 查询”框中,输入以下查询:
select * from test_metric
然后按蓝色的“ 执行查询”按钮。此查询的结果将显示存储在test_metric
系列数据库中的所有数据点。然后,您将看到一个如下所示的图形:
此屏幕显示的线图总结了时间序列中度量标准的趋势,以及汇总数据库中存储的数据的数据表。
我们还可以使用列标识符来缩小搜索范围。例如,要查找事件值为13.1的事件,请输入以下搜索查询:
select * from test_metric where value = 13.1
这会将示例数据返回两行:
为了给出更多细节,InfluxDB中的数据按时间序列组织,在我们的示例中的test_metric
,每个系列都有一组与事件对应的数据点。我们在输入数据时创建了五个事件。每个事件都有一个时间,一个序列号,以及一些类似于我们为事件测量的度量的列。在我们的示例中,我们在五个事件中分别调用了一个叫value
的单独的度量标准。
第5步 - 安装和配置collectd
在此步骤中,我们将设置并配置collectd以收集系统的指标。collectd是一个收集,传输和存储性能数据的Unix守护程序。它有助于维护可用资源的概述,以检测现有或迫在眉睫的瓶颈。
首先,启用EPEL(Enterprise Linux Extra Packages)存储库:
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配置文件包含许多设置,其中大多数设置默认情况下不处于活动状态,因为它们已被注释掉。我们将取消注释并修改其中一些。
在文件配置的顶部,在“全局”部分中,您将看到以下内容。
. . .
#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字段。此外,将Hostname字段设置为influxdb
。完成后,文件的这一部分应如下所示:
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 network
和LoadPlugin uptime
行的注释。
最后,我们将配置collectd直接向InfluxDB发送数据。
向下滚动到“插件配置”部分。在节分隔符(如下所示)之后,添加网络插件配置。
. . .
##############################################################################
# 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以使用收集的度量标准
要存储InfludDB中collectd收集的collectd系统指标,我们需要启用和配置InfluxDB collectd输入插件。
首先,打开InfluxDB配置文件进行编辑。
sudo nano /opt/influxdb/shared/config.toml
找到input_plugins.collectd
插件配置,如下所示。
. . .
# 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
. . .
通过进行以下更改来修改它以匹配下面的摘录:
- 设置为true。
- 将端口更改为8096。
- 将数据库更改为指标。
- 取消注释port,database和typesdb行。
. . .
# 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中的数据接口(我们在步骤5中停止的位置)中,在“ 读取点 ”下的“ 查询”文本框中输入以下查询,然后按蓝色“ 执行查询”按钮。
list series
如果您从collectd接收数据,您应该观察一系列类似于以下的系列:
我们现在可以通过像步骤5中那样探索这些数据来开始分析我们系统的性能。例如,发出以下查询将允许您观察系统中的内存使用情况:
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-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。这将带您进入以下个人资料管理页面。
单击顶部标题菜单中的“ 更改密码”链接。在相应字段中填写新密码,然后单击“ 更改密码”。
第9步 - 将InfluxDB数据库添加到Grafana
在此步骤中,我们将添加我们的InfluxDB数据库作为Grafana中的源。
要添加数据源,请单击顶部标题中的Grafana图标打开侧边菜单。在侧边菜单中,单击“ 数据源”。单击顶部标题中的“ 添加新链接”以显示数据源定义屏幕。
使用以下设置填充此屏幕:
- 名称:influxdb
- 键入:从下拉菜单中选择InfluxDB 0.8.x.
- 默认值:确保选中此复选框。默认数据源意味着它将为新面板预先选择。
- 网址:
http://localhost:8086
- 访问:从下拉菜单中选择代理。
- 基本身份验证:取消选中此复选框。
- 数据库:指标
- 用户:root
- 密码:您在步骤4中选择的根InfluxDB数据库密码。
最后,单击屏幕底部的绿色“ 添加”按钮。
第10步 - 创建Grafana仪表板
Grafana提供了一种功能强大且用户友好的方法来创建信息图表和仪表板。在此步骤中,我们将创建一个系统概述仪表板,以显示我们在InfluxDB中收集的系统指标的趋势。
在Grafana中,仪表板是您工作的基本托盘。仪表板包含显示元素(例如图形和文本窗格)。显示元素包含用于从数据源(在我们的示例中为InfluxDB)中获取数据的查询。因此,我们首先需要创建一个空的仪表板,作为我们显示的基础。
导航到Grafana主页,http://your_server_ip:3000
。单击顶部标题中的“ 主页”链接以显示仪表板列表屏幕。在此屏幕的底部,单击+新建。这将带您进入新的空白仪表板。
单击仪表板标题菜单中的齿轮,然后单击“ 设置”。您将看到以下屏幕:
此屏幕用于更改仪表板的主要设置。将标题字段从新仪表板更改为系统概述。接下来,单击顶部标题中的软盘图标以保存仪表板。
我们现在将使用显示元素填充仪表板,以创建可视系统概述信息散热器。
在仪表板中,单击行控制菜单,这是位于仪表板左上角的绿色小矩形。在此菜单中,将鼠标悬停在“ 添加面板”上,然后单击“ 图形”。这将在仪表板上创建一个空白图表。
单击图表顶部的图表标题,其中没有标题(单击此处),然后从结果菜单中单击编辑。这将带您进入图表管理菜单。单击“ 常规”选项卡,将“ 标题”字段更改为“ 网络”。
接下来,单击Metrics选项卡以转到查询构建器。在系列 字段中,我们可以指定我们希望用作图表数据来源的指标。开始输入界面 ; 然后,您将看到自动完成选择。选择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提供的聚合函数对系统的行为进行更深入的分析。您可能还希望开始从分布式系统收集数据,以便比较多个系统的性能,或者开始收集和分析其他非系统级别度量标准类型(例如,每个用户的页面访问次数或API调用次数)对于REST端点)。InfluxDB非常适合这些数据,并且官方的InfluxDB文档中列出了许多工具和库。