时序数据库 百度百科
时序数据库全称为时间序列数据库。时间序列数据库主要用于指处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。
时间序列数据主要由电力行业、化工行业等各类型实时监测、检查与分析设备所采集、产生的数据,这些工业数据的典型特点是:产生频率快(每一个监测点一秒钟内可产生多条数据)、严重依赖于采集时间(每一条数据均要求对应唯一的时间)、测点多信息量大(常规的实时监测系统均有成千上万的监测点,监测点每秒钟都产生数据,每天产生几十GB的数据量)。
比较适合保存服务器等状态信息,根据时间绘制成图。查看状态波动情况。
安装
https://www.cnblogs.com/lixuebin/p/10813983.html
https://www.cnblogs.com/quchunhui/p/12067897.html
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.8.3.x86_64.rpm
yum -y localinstall influxdb-1.8.3.x86_64.rpm
设置配置文件
这个数据库一般记录的是主机的运行情况,如网络内存。数据量较大。要保证数据存放空间足够。
如果希望设置数据存放位置 如设置为 /data/influxdb
mkdir /data/influxdb
要保证安装influxdb时生成influxdb伪用户对这个文件夹有读权限。将目录所有者设置为influxdb
chown -R influxdb:influxdb /data/influxdb
修改influxdb配置文件
vim /etc/influxdb/influxdb.conf
[meta]
dir = "/data/influxdb/meta"
[data]
dir = "/data/influxdb/data"
wal-dir = "/data/influxdb/wal"
systemctl restart influxdb
设置 influx用户名 密码 启用认证
进入数据库
influx
创建账户admin 密码password 所有权限
CREATE USER "admin" WITH PASSWORD 'password' WITH ALL PRIVILEGES
退出 influx控制台
exit
未启用认证时 不用用户名密码即可操作数据库。启用认证后需要认证账户密码后才能操作数据库。
设置启用认证和开启http访问
vim /etc/influxdb/influxdb.conf
[http]
enabled = true
bind-address = ":8086"
auth-enabled = true
log-enabled = true
write-tracing = false
pprof-enabled = false
https-enabled = false
https-certificate = "/etc/ssl/influxdb.pem"
重启 influxdb数据库。
systemctl restart influxdb
使用用户名密码认证
influx -username admin -password password
或者
influx
> auth
username: admin
password:
可以使用网页访问。如查看 所有数据库
curl -G "http://localhost:8086/query?u=admin&p=password&q=SHOW+DATABASES"
基本操作命令
创建数据库 如test库
CREATE DATABASE test
删除数据库 如test
DROP DATABASE test
切换数据库 如test
USE test
查看数据库中 表(类似于mysql数据库中的表,这里称呼为表)
SHOW MEASUREMENTS
删除measurement 如test。要先选择库,才能删除该库下的measurement。
DROP MEASUREMENT test
直接加上库名
DROP MEASUREMENT test ON test
查询数据 表内容 test_table
SELECT * from test_table
时间戳转换为正常时间显示。
precision rfc3339
默认显示的是UTC 时间。可使用tz 设置时区
select * from test_table tz('Asia/Shanghai')
precision
Unknown precision “”. Please use rfc3339, h, m, s, ms, u or ns
precision 可以设置如上 参数。。。可将时间戳转换。
转
https://www.jianshu.com/p/68c471bf5533
https://blog.csdn.net/weixin_30825199/article/details/96832344
https://www.cnblogs.com/wzbk/p/10569683.html
influxDB中的名词 | 传统数据库中的概念 |
---|---|
database | 数据库 |
measurement | 数据库中的表 |
points | 表里面的一行数据 |
Point由时间戳(time)、数据(field)、标签(tags)组成。
Point相当于传统数据库里的一行数据,如下表所示:
Point属性 | 传统数据库中的概念 |
---|---|
time | 每个数据记录时间,是数据库中的主索引(会自动生成) |
fields | 各种记录值(没有索引的属性) |
tags | 各种有索引的属性 |
tag可看做有索引的列,二filed是真正记录的值。
TAG使用示例
https://docs.influxdata.com/influxdb/v1.8/query_language/explore-schema/
查看数据库中tag key为host的value值。
show tag values with key=host
会返回不同measurement 下tag values的值。
SHOW TAG VALUES [ON <database_name>][FROM_clause] WITH KEY [ [<operator> "<tag_key>" | <regular_expression>] | [IN ("<tag_key1>","<tag_key2")]] [WHERE <tag_key> <operator> ['<tag_value>' | <regular_expression>]] [LIMIT_clause] [OFFSET_clause]
查看某一measurements中所有tag key
SHOW tag keys [ON database] [FROM measurement][WHERE tag_key operator tag_value)] [limit offset]
查看fields的key,不仅会显示fields名称结果集,还显示field的数据类型
SHOW tag keys [ON database] [FROM measurement][WHERE tag_key operator tag_value)] [limit offset]
如果查询 某一时间段内,tag的key或value值时,使用show tag 明明无用,查询的结果和查询的时间范围无关,需要使用select 语句查询,如
查询 tag key为host 时间范围为 2h内 时的value 值。
SELECT host FROM (SELECT host,value FROM virt_rx,virt_tx,virt_read,virt_write,virt_value WHERE time > now() -2h)
NON_NEGATIVE_DERIVATIVE(field_key, unit) 计算字段的变化值
NON_NEGATIVE_DERIVATIVE计算字段值的变化比。unit默认为1s,即计算的是1秒内的变化比。
这一个对于统计网卡流量很有帮助。
通过ifconfig简易计算CentOS7下流量使用
[root@server ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.199.80 netmask 255.255.255.0 broadcast 192.168.199.255
inet6 fe80::e7b:126c:b87e:bd32 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:97:49:5f txqueuelen 1000 (Ethernet)
RX packets 126567 bytes 150641732 (143.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 116985 bytes 50161283 (47.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
RX packets 126567 bytes 150641732 (143.6 MiB)
TX packets 116985 bytes 50161283 (47.8 MiB)
过一段时间再次查看
[root@server ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.199.80 netmask 255.255.255.0 broadcast 192.168.199.255
inet6 fe80::e7b:126c:b87e:bd32 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:97:49:5f txqueuelen 1000 (Ethernet)
RX packets 126653 bytes 150679397 (143.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 116998 bytes 50163361 (47.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
RX packets 126653 bytes 150679397 (143.6 MiB)
TX packets 116998 bytes 50163361 (47.8 MiB)
可以知道该段时间内共
发送数据
116998 -116985 =13 packages
50163361-50161283=2079 bytes
接收数据
126653- 126567 = 86 packages
150679397-150641732=37665 bytes
除以时间间隔大致可以算出该段时间的网络流量。NON_NEGATIVE_DERIVATIVE实现了这样的计算,unit默认是1s
non_negative_derivative配合group by time使用时,需要指定时间大于等于某一值,表示从此处开始计算。
如
select non_negative_derivative(mean("value"), 1s) from "cpu_value" where ("host"='server' AND "type_instance" = 'user') AND time>= now()-1h group by time(30s) fill(null) limit 10
AND time>= now()-1h 如果不设置,会没有查询结果。
influxdb中使用模糊查询时。后面的 值需要使用正则
如
show tag values from memory_value with key=host where host=~/client.?/
以时间分组查询group by时查询的是单个或多个field的聚合,不能是具体的field
如
select mean(value) from memory_value group by time(10s);
不可写
select value from memory_value group by time(10s);
https://www.cnblogs.com/yihuihui/p/11386694.html
https://blog.csdn.net/weixin_30825199/article/details/96832344
curl 操作influxdb
https://archive.docs.influxdata.com/influxdb/v1.2
创建数据库
curl -i -XPOST http://localhost:8086/query --data-urlencode "q=create database testdb"
写入数据
1、不带时间戳
curl -i -XPOST 'http://localhost:8086/write?db=testdb' --data-binary 'students,stuid=s123 score=89'
2、带时间戳
curl -i -XPOST 'http://localhost:8086/write?db=testdb' --data-binary 'students,stuid=s123 score=89 1434055562000000000'
查询数据
1、使用时间字符串(会进行时区转换)
curl -G 'http://localhost:8086/query' --data-urlencode "db=testdb" --data-urlencode "q=select * from students limit 1"
2、使用时间戳(不会进行时区转换)
curl -G 'http://localhost:8086/query' --data-urlencode "epoch=ms" --data-urlencode "db=testdb" --data-urlencode "q=select * from students limit 1"
查询语句备注
1.influxdb 查询时 条件语句后面的值 需要使用 单引号 。使用双引号或不添加引号都无法获取正确结果
select * from virt_rx where type='if_packets' limit 10