受益于大数据和物联网技术的蓬勃发展,如今的智能设备越来越多。随之而来的还有海量的数据,而对于这些随时间变化容易产生大量数据的机器,类似influxDB这种时序数据库,非常适合管理。
基础设施环境的需求每年都在变化,相关的系统也变得越来越复杂。但是,如果我们不了解基础设施以及它们在我们生活中所发生的变化,那么这些变化将毫无意义。这时候,就到了监控工具和软件用武之地的时候了。它们将给予操作者和管理员在他们的环境中查看问题并及时修复问题的能力。
但是,如果我们想在问题发生之前就预测出来呢?收集我们环境相关的指标和数据,可以让我们在了解基础架构的运行情况下,根据数据进行预测。当我们知道并了解正在发生的事情时,我们可以预防问题,而不仅仅是解决问题。
当我们使用这些数据之前,我们需要搞清楚如何收集和存储它们。例如,如果我们想要收集100台机器每十秒的CPU使用率,我们需要保存大量数据。甚至,如果每台机器运行15个容器,并且您想保存每个容器的数据呢?或者,如果我想要保存每个流程生成的数据怎么办?这里就是时序数据库有用的地方。
时序数据库存储时序数据,什么意思?下面,我们将对此进行解释。并且向您介绍InfluxDB,一个开源的时序数据库。到本文结束时,您将了解以下内容:
-
什么是时序数据以及时序数据库?
-
有关InfluxDB和TICK技术栈的基本信息。
-
如何安装InfluxDB和其他工具。
一、介绍时序的概念
图中的表,就是介绍像MySql这样的RDBMS是如何存储数据的?
如果您熟悉MySQL之类的关系数据库管理软件(RDBMS),则肯定对表,列和主键这类的术语比较熟悉。很像excel,数据都存储在行和列中。关系数据库被广泛使用,遵从于ACID原则(原子性,一致性,隔离性和持久性),您可以通过相关的语句更新其中的某些数据。
但是,对于那些产生大量数据的东西,比如自动驾驶汽车,收集它的数据,关系型数据库并不是一个好的选择。因为,汽车不断收集身边环境的数据,它采用这些数据并分析随时间变化的行为,以保证正确行使。数据量可能就是每小时数十亿字节。虽然,您仍然可以使用关系数据库来收集这些数据,但是在扩展和可用性上,这并不是最佳工具。
1、为什么时序数据库是一个很好的选择?
这是时序数据有意义的地方。假如您想收集有关城市交通、农业设备温度或者装配线生产率的数据。不要将数据放入包含行和列的表中,而是以时间戳为基线,推送多行数据,下图可能更有助于您理解这一点:
想象一下行和行的数据,是按时间戳进行排序存储
使用这种类型的数据,可以更轻松地跟踪和观察随时间而发生变化的指标。当数据累积到一定程度时,您不仅可以看到过去的行为,现在的行为,甚至可以预测未来的行为。可以选择更明智的数据决策!
好奇,时序数据库如何存储和格式化数据?不同的时序数据库有不同的方式,InfluxDB以线路协议存储数据。查询时,可以以json格式返回数据。
2、InfluxDB:时序数据库
InfluxDB是由InfluxData开发的开源时序数据库,使用Go语言编写的,这意味着你可以在不安装任何依赖项的情况下使用它。它支持多种数据协议,例如:Telegraf(也来自于InfluxData),Graphite,Collectd和OpenTSDB。这使您可以灵活地选择收集数据的方式。它是增长最快的时序数据库之一,您可以在GitHub上找到源码。
让我们来了解在InfluxData的TICK技术栈中,是如何使用三个工具来构建时序数据库,并且开始存储和处理数据。
二、TICK stack
InfluData的平台基于四个开源项目,这些项目可以在时序数据中相互配合使用。通过一起使用,您可以轻松地收集、存储、处理和查看数据。平台的四个部分称为TICK技术栈,代表:
-
Telegraf:收集系统和服务的统计数据的代理程序
-
InfluxDB:用于指标,事件和实时分析的可扩展数据存储
-
Chronograf:用于TICK技术栈的监控/可视化用户界面(本文未涉及)
-
Kapacitor:在时序数据中,用于处理,监控和警告的框架
在这里,我们将探讨TICK技术栈的三个部分:InfluxDB,Telegraf和Kapacitor。
该图说明了TACK技术栈的不同组件如何相互连接
1、InfluxDB
如上所述,InfluxDB是TICK技术栈的时序数据库。有一些因素使它从其他时序数据库中脱颖而出。
强大的性能:性能是InfluxDB最重要的优点之一。这使您即使在高负载的情况下,也能轻松使用数据。并且,InfluxDB专注于快速查询数据,以及通过压缩来保持其可管理性。为了方便用户查询和写入数据,它还提供了HTTP(S)方式的API接口。它的性能非常强大,可以每秒精确处理多达一百万个数据点。
类SQL语句:如果您熟悉类似SQL的语法,那么上手InfluxDB会非常快。它使用类似SQL的语法进行查询数据。例如,假设您正在收集计算机上已用磁盘空间的数据,如果您想查看该数据,可以编写一个如下的查询,该查询将从三个月的时间中提取已用磁盘空间的平均值,并以10天为增量进行分组:
SELECT mean(diskspace_used)asmean_disk_used FROM disk_stats WHEREtime()>= 3m GROUPBYtime(10d)
数据存储策略:在处理大量数据时,如何存储它成为了一个问题。随着时间的推移,数据量可以累积成一个天文数字。InfluxDB可以采用正确的数据存储策略,来减少磁盘的开销。例如,假如您收集许多机器中内存使用率,虽然在30天内持续的数据可能是有意义的,但是在30天之后,您可能不需要那么精确的数据,这些数据就不那么重要了。30天后,您可以将数据的平均值设置的不那么精确,并且您可以将这些数据保留六个月,永久或者您喜欢的时间。这样,可以在历史数据和减少磁盘开销之间取得平衡。
补充:
一、安装InfluxDB(centos7上示例)
1.下载:wgethttps://dl.influxdata.com/influxdb/releases/influxdb-0.13.0.x86_64.rpm
2.安装:sudo yum localinstallinfluxdb-0.13.0.x86_64.rpm
3.启动:systemctl start influxdb
二、库操作(类似MySQL)
1.显示数据库:showdatabases
2.新建数据库:createdatabase 库名
3.删除数据库:dropdatabase 库名
4.选择数据库:use 库名
三、表操作(与MySQL有些区别)
1.显示数据表:showmeasurements
2.新建数据表,通过插入的数据的方式新建表:
Insert test,domain=www.tyun.cn,name=tyun
3.删除数据表:dropmeasurement test
2、Telegraf
如果InfluxDB是您存储数据的工具,那么Telegraf就是您收集数据最佳的工具。Telegraf是一个指标收集的守护程序,它从系统组件,物联网(IoT)传感器等中收集各种指标。它是开源的,完全用Go编写。与InfluxDB一样,Telegraf由InfluxData团队编写,它可以与InfluxDB一起使用。它还包括对不同数据库的支持,例如:MySQL/MariaDB,MongoDB,Redis等。您可以在InfluxData的网站上阅读更多相关信息。
Telegraf是模块化的,基于插件,开箱即用,它支持100多个插件。用于各种输入源(包括Apache,Ceph,Docker,Iptables,Kubernetes,Nginx和Varnish),处理和输出。
即使您没有将InfluxDB做为数据存储,您也可以使用Telegraf当做收集有关系统或传感器的数据和信息的有用方法。
补充:
一、安装Telegraf(centos7上示例)
1.下载:wgethttps://get.influxdb.org/telegraf/telegraf-0.11.1-1.x86_64.rpm
2.安装:sudo yum localinstall telegraf-0.11.1-1.x86_64.rpm
3.启动:systemctl start telegraf
二、配置
3、Kapacitor
现在我们有办法收集和存储我们的数据,但是用它做什么呢?Kapacitor是技术栈的一部分,它允许您以几种不同的方式处理数据。它支持流数据和批数据。
Kapacitor最大的优点之一:它可以为您环境中发生的事件提供实时警报。 CPU使用率过载或温度过高?您可以设置多个不同的警报系统,包括但不限于电子邮件,触发命令,Slack,HipChat,OpsGenie等等。 您可以在文档中看到完整列表。
三、安装TICK技术栈
几乎每个操作系统发行版都提供了安装包。您可以从命令行安装这些软件包。使用说明如下:
1、Fedora:
2、CentOS7/RHEL 7:
3、Ubuntu/Debian:
4、其他操作系统:
请登录InfluxData官网,进行了解。
四、总结
本文只是对TICK技术栈的相关组件进行了一个大概的导读,深层次的东西还没有讲道。译者翻译这篇文章的主要原因,其实就是想起到一个抛砖引玉的作用,给那些只使用过关系型数据库或者没接触过TICK技术栈的同行们开阔一下视野(有时候,思路比技术更重要)。以后有时间,我会专门写一些关于TICK技术栈更深层次的东西。希望大家多多关注新钛云服,关注本公众号。
原文:https://opensource.com/article/17/8/influxdb-time-series-database-stack