探究时序数据库influxdb的强大功能与应用 (时序数据库 influxdb)

时序数据是指在特定时间和顺序下发生的数据记录,例如传感器数据、日志数据等。随着物联网、云计算和大数据技术的发展,时序数据的产生和应用越来越广泛,而针对时序数据的数据库也应运而生。influxdb是一款高性能、分布式的时序数据库,具有很多强大的功能,被广泛用于监控、IoT、实时分析、机器学习等领域。本文将从以下几个方面介绍influxdb的功能和应用:

1. 基本概念

influxdb是一个开源,分布式的时序数据库,使用go语言编写,支持HTTP API,主要特点如下:

– 每个数据记录有时间戳和至少一个浮点数值,这些数据记录按照时间顺序存储;

– 支持水平扩展和副本集,能够保证高可用和数据一致性;

– 查询语言类似于SQL,但是针对时序数据做了优化,可以支持大量的维度聚合操作;

– 支持第三方插件,例如Grafana、Telegraf等,用于可视化和数据采集;

– 支持多种API类型,例如查询、写入、批量写入等。

2. 数据模型

influxdb的数据模型含有三个核心概念:measurement、tag和field。下面分别介绍:

– Measurement:它是一个数据集,包含多个数据点,每个数据集可以包括一个或多个field,它们都有相同的时间戳。一般情况下,把一个measurement作为数据的主题,例如cpu、memory、temperature等;

– Tag:它是measurement的元数据,用于识别和过滤measurement,例如在cpu measurement中可以添加hostname tag,用于区分不同机器的数据。Tag可以是一个字符串,也可以是数字和布尔类型;

– Field:它是特定时间戳下的一个数值,每个field都可以是浮点类型、整数类型、以及布尔类型。

下面是influxdb数据模型的示意图:

3. 写入数据

influxdb的写入数据方式分为两种:单条写入和批量写入。单条写入的写入语法如下:

“`

curl -i -XPOST ‘http://localhost:8086/write?db=mydb’ –data-binary ‘cpu,hostname=myhost value=0.64’

“`

上面的语法表示把0.64的数值写入到cpu measurement中,并添加了hostname tag,而mydb是数据库的名称。通过HTTP API写入数据时,还可以添加很多其他属性,例如时间戳、数据类型等。

批量写入是将多个数据点一次性写入influxdb的方式,可以大幅度提高写入效率。例如,可以把多条数据点放置在一个数据文件中,并通过客户端和influxdb建立连接,类似于以下的Push API。

“`

from influxdb import InfluxDBClient

client = InfluxDBClient(host=’localhost’, port=8086)

client.switch_database(‘mydb’)

json_body = [

{

“measurement”: “cpu”,

“tags”: {

“hostname”: “myhost”

},

“time”: “2023-11-03T14:00:00Z”,

“fields”: {

“value”: 0.64

}

}

]

client.write_points(json_body)

“`

4. 查询数据

influxdb的查询语言很易于学习,它使用一种类似于SQL的语法,可以从不同的measurement中查询数据。除了常规的查询语言之外,还支持丰富的聚合操作,例如sum、mean、max、min等。下面是一个简单的查询实例:

“`

SELECT mean(value) FROM cpu WHERE hostname=’myhost’ AND time>’2023-11-03T14:00:00Z’ AND time

“`

上面的语法表示从cpu measurement中查询hostname为myhost的数据,时间范围在2023-11-03 14:00:00到2023-11-03 15:00:00之间,五分钟为一个时间段进行聚合操作。除了常规的SQL查询之外,influxdb还支持很多高级查询语法,例如移动平均、滑动窗口等。

5. 应用场景

influxdb适用于多种场景,例如:

– 监控:可以存储和查询各种系统性能指标、网络流量指标、设备状态指标等;

– IoT:可以存储和分析传感器数据,例如温度、湿度、光照等数据;

– 实时分析:可以存储和分析各种实时日志数据,例如电商网站的访问记录、用户点击记录等;

– 机器学习:可以存储和查询大量的时间序列数据,例如交通流量、股票价格等,对于训练预测模型非常有用。

6.

时序数据是大数据技术愈发重要的一部分,而influxdb作为一款高性能、分布式的时序数据库,已经被广泛应用于各种实时数据存储和分析需求。在不同的应用场景下,尤其是在物联网、机器学习领域,influxdb的强大功能往往具有决定性影响。可以预见,在未来,时序数据库的应用范围还会继续扩大,influxdb也将继续成为开发人员和数据科学家们的不二选择。

相关问题拓展阅读:

InfluxDB与ElasticSearch

2023,开年就经历了疫情,这个年就过的有点长。随着春暖花开,全国各地都逐渐好转了,中国宴厅加油!

之前使用过此氏InfluxDB做过SaaS服务,用于数据统计和展示;也使用过ES做时序数据的存储和数据统计。那么根据不同的情况,如何做出选择呢?

提到数据服务,就不能不提读写性能。

我没有实际做过压测,我们就通过一篇官方文档,来了解一下:

InfluxDB,更适用于对数字类数据本身的计算和存储,支持数据统计函数,支持HttpAPI,支持Grafana;但它不支持全文检索,不支持Kibana;

ES,适合日志系统,也适合数字类数据本身的计算和存储,特别是坐标类数据,有独特的函数支持;支持HttpAPI,支持Kibana和Grafana。

总的来说,ES适用的场景多过InfluxDB,但也因此,其性能优势不大,磁盘存储成本也会相对高一些。

两者都支持集群和分布式。

据说InfluxDB的最新版本,对集群功能已经不开源了,商业版本支持。开源版本,单机版稳定性优于集群。

ES的集群搭建,公司也尝试过,但运维成本和服务器成本都不理想,后改用阿里/腾讯的云套件。

如果搭建数据分析晌扒隐处理系统,倾向使用InfluxDB;日志系统,请使用ES。

部署更建议使用各大云平台的产品套件,其安全性、运维成本都是较低的。

如何实现Docker应用的自定义弹性伸缩

简介

现在有很多客户很关心应用的自动弹性伸缩,有些客户销毕也有自己的监控框架,并希望能跟阿里云容器服务进行集成。阿里云容器服务提供了服务弹性伸缩触发器,并能够跟监控框架集成来实现自定义的服务自动弹性伸缩。

阿里云容器服务会自动采集容器的监控数据,并可以通过集成将监控数据发送到三方的监控框架中。有了监控数据,我们可以在监控框架中定义自己的报警规则,当指标发生报警的时亏伍芹候调用阿里云容器服务提供的触发器来进行容器的扩容或者缩容。

下面用Influxdb,Kapacitor来介绍怎样通过触发器跟监控框架集成实现自定义弹性伸缩。

生成服务的Scaling触发器

在阿里云容器服务的应用列表中,点击要进行自动扩容控制的应用,进入后点击“创建触发器”

然后选择“资源伸缩”,并选择要伸缩的服务名

生成的触发器如下:

调用sale out的时候需要添加参数&type=scale_out&step=2.

部署Influxdb及监控

包括监控时序数据库Influxdb, 监控报警框架Kapacitor,及界面展现Grafana. 我们可以用一个模板来部署:

version: ‘2’

services:

influxdb:

image: influxdb:0.13

ports:

“8083:8083”

“8086:8086”

container_name: “influxdb”

labels:

aliyun.monitoring.addon.influxdb: “”

grafana:

image: grafana/grafana:3.0.

ports:

“3000:3000”

links:

influxdb

kapacitor:

image: kapacitor:0.13

ports:

“9092:9092”

volumes:

/etc/acs/:/etc/acs/

environment:

KAPACITOR_INFLUXDB_0_URLS_0=

command: kapacitord -config /etc/kapacitor/kapacitor.conf

模板中通过标签“ aliyun.monitoring.addon.influxdb”来指定将阿里云容器服务中的监控数据发送到Influxdb.

在阿里云容器服务中增加一个模板,并通过模板创建应用:

部署好的应用:

配置Kapacitor报警规则

创建报警规则文件。在 Kapacitor中配置报警规则,并当报警是调用扩容触发器URL.

通过Web远程终端或者Docker Exec进入Kapacitor容器, 增加报警规则,比如我们对CPU指标设置报警规则,创建/etc/橘冲acs/cpu.tick文件,内容如下:

stream

// Select just the cpu measurement from our example database.

|from()

.measurement(‘docker_container_cpu’)

|groupBy(‘aliyun.cluster’, ‘aliyun.service.id’)

|alert()

.crit(lambda: “aliyun.cluster”==’xx’ AND “aliyun.service.id”==’xx’ AND usage_percent” > 70)

.post(‘

yYWRhODQwMDJhNjRmNWVhZjcxZjU1ZTllfG5naW54LWRlZmF1bHR8cmVkZXB3l8MThtZHFxbXJkNXJ

kaHw=&secret=&&type=scale_out&step=1′)

.log(‘/tmp/alerts.log’)

这里对监控的CPU指标”docker_container_cpu”按集群及服务进行聚合然后判断当usage_percent>70的时候进行服务扩容。

类似,我们也可以增加一个缩容的报警规则。

定义报警规则并启用 在Kapacitor容器中执行如下命令定义并启用报警规则。

kapacitor define cpu_alert -type stream -tick cpu_alert.tick -dbrp telegraf.default;

kapacitor enable cpu_alert

这样当CPU的使用率超过70%的时候,会自动调用扩容触发器进行容器的扩容。

时序数据库 influxdb的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于时序数据库 influxdb,探究时序数据库influxdb的强大功能与应用,InfluxDB与ElasticSearch,如何实现Docker应用的自定义弹性伸缩的信息别忘了在本站进行查找喔。


数据运维技术 » 探究时序数据库influxdb的强大功能与应用 (时序数据库 influxdb)