searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

InfluxDB基础(1)

2023-04-26 01:48:26
70
0

一、概述

1.1 概念

InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。

1.2 特色功能

  • 基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等)

  • 可度量性:你可以实时对大量数据进行计算

  • 基于事件:它支持任意的事件数据

1.3 特点

  • 无结构(无模式):可以是任意数量的列

  • 可拓展

  • 支持min, max, sum, count, mean, median 等一系列函数,方便统计

  • 原生的HTTP支持,内置HTTP API

  • 强大的类SQL语法

  • 自带管理界面,方便使用

1.4 Docker内安装

  1. 搜索InfluxDB镜像

 docker search influxdb
  1. 拉取influxdb镜像

 docker pull influxdb:1.7
  1. 创建容器,设置端口映射

 docker run -id --name=c_influxdb -p 8083:8083 -p 8086:8086 influxdb

1.5 配置

InfluxDB默认使用下面的网络端口:

  • TCP端口8086用作InfluxDB的客户端和服务端的http api通信

  • TCP端口8088给备份和恢复数据的RPC服务使用

另外,InfluxDB也提供了多个可能需要自定义端口的插件,所以的端口映射都可以通过配置文件修改,对于默认安装的InfluxDB,这个配置文件位于/etc/influxdb/influxdb.conf

  1. 进入容器

 docker exec -it c_influxdb /bin/bash
  1. 因为需要修改配置文件,所以安装vim

 apt-get update
 apt-get install vim
  1. 配置admin用户认证登陆

不管是yum安装,亦或者是docker安装的方式,influxdb默认安装完毕之后,并不会自带用户认证的功能,直接就可以进行访问的了。

对于这种不设置防备的措施,总体来说,不是很好。因此,需要设置用户认证。

  • 通过shell登录,influxdb

     infulx

  • 创建admin用户

 CREATE USER root with PASSWORD '123456' WITH ALL PRIVILEGES
  • 进行验证

 auth

  • 查看是否授权管理员权限

 show users

  • 在配置文件启用认证

默认情况下,influxdb的配置文件是禁用认证策略的,所以需要修改设置一下。

编辑配置文件vim /etc/influxdb/influxdb.conf,把 [http] 下的 auth-enabled 选项设置为 true 。docker里安装的influxdb的是没有http这一项,直接加上就好

 [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"
  • 重启容器

 docker restart c_influxdb 
  1. 使用外部机器连接容器中的influxdb

之后再访问需要 带上用户名、密码

 influx -username '用户名' -password '密码'

当配置了admin认证用户之后,进行http的api请求的时候也要带上用户名和密码的参数,不然无法执行

 curl -G "http://localhost:8086/query" -u username:password --data-urlencode "q=SHOW DATABASES"
 curl -G "http://localhost:8086/query" --data-urlencode "u=username" --data-urlencode "p=password" --data-urlencode "q=SHOW DATABASES"
 curl -G "http://localhost:8086/query?u=username&p=password&q=SHOW+DATABASES"

二、基本概念

2.1 数据格式

在 InfluxDB 中,我们可以粗略的将要存入的一条数据看作一个虚拟的 key 和其对应的 value(field value)。格式如下:

 cpu_usage,host=server01,region=us-west value=0.64 1434055562000000000

虚拟的 key 包括以下几个部分: database, retention policy, measurement, tag sets, field name, timestamp。

  • database:数据库名,在 InfluxDB 中可以创建多个数据库,不同数据库中的数据文件是隔离存放的,存放在磁盘上的不同目录。

  • retention policy:存储策略,用于设置数据保留的时间,每个数据库刚开始会自动创建一个默认的存储策略 autogen,数据保留时间为永久,之后用户可以自己设置,例如保留最近2小时的数据。插入和查询数据时如果不指定存储策略,则使用默认存储策略,且默认存储策略可以修改。InfluxDB 会定期清除过期的数据。

  • measurement:测量指标名,例如 cpu_usage 表示 cpu 的使用率。

  • tag sets:tags 在 InfluxDB 中会按照字典序排序,不管是 tagk 还是 tagv,只要不一致就分别属于两个 key,例如 host=server01,region=us-west 和 host=server02,region=us-west 就是两个不同的 tag set。

    tag--标签,在InfluxDB中,tag是一个非常重要的部分,表名+tag一起作为数据库的索引,是“key-value”的形式。

  • field name:例如上面数据中的 value 就是 fieldName,InfluxDB 中支持一条数据中插入多个 fieldName,这其实是一个语法上的优化,在实际的底层存储中,是当作多条数据来存储。

  • timestamp:每一条数据都需要指定一个时间戳,在 TSM 存储引擎中会特殊对待,以为了优化后续的查询操作。

2.2 与传统数据库中的名词做比较

influxDB中的名词 传统数据库中的概念
database 数据库
measurement 数据库中的表
point 表里面的一行数据

2.3 point

Point由时间戳(time)、数据(field)、标签(tags)组成。

Point相当于传统数据库里的一行数据,如下表所示:

Point属性 传统数据库中的概念
time 每个数据记录时间,是数据库中的主索引(会自动生成)
fields 各种记录值(没有索引的属性)
tags 各种有索引的属性
series 表示这个表里面的数据,可以在图表上画成几条线:通过tags排列组合算出来。

注意

  • time 相当于表的主键,当一条数据的time和tags完全相同时候,新数据会替换掉旧数据,旧数据则丢失(线上环境尤其要注意)。

  • tags 和time可以作为排序字段,field则不可以。如:ORDER BY time DESC

  • 设置了保存策略后,若此保存策略为设置成默认保存策略(一个库可以有多个保存策略),则在查询时,表名(measurement)前,要加上保存策略。

    保留策略为two-hour不是默认保存策略,则查询时候,需要指定其保存策略。

     select * from two-hour.measure where time > now() -10
  • fields和tags的字段类型是由存入的第一条记录值决定的。

2.4 数据类型

fields和tags的字段类型是由存入的第一条记录值决定的。 举例:

  • 如第一条记录fieldA的值为2,想插入一条记录,fieldA字段值为3.14的值,就会报错。因为该字段已经被初始化为整型了。

  • 如第一条记录fieldB存储的是3,想插入一条记录,fieldB字段值为hello,则也会报错,该字段已被初始化成整型,不能再写入字符串了。

因此,建议只使用字符串类型和浮点类型,把所有的整型,长整型,浮点型,双精度型统一转为小数格式的浮点类型,再写入数据库,字符串类型的不用做转换,这样就不会出现插入数据失败和丢失数据了。

2.5 Series

Series 相当于是 InfluxDB 中一些数据的集合,在同一个 database 中,retention policy、measurement、tag sets 完全相同的数据同属于一个 series,同一个 series 的数据在物理上会按照时间顺序排列存储在一起。

series 的 key 为 measurement + 所有 tags 的序列化字符串,这个 key 在之后会经常用到。

2.6 Shard

Shard 在 InfluxDB 中是一个比较重要的概念,它和 retention policy 相关联。每一个存储策略下会存在许多 shard,每一个 shard 存储一个指定时间段内的数据,并且不重复,例如 7点-8点 的数据落入 shard0 中,8点-9点的数据则落入 shard1 中。每一个 shard 都对应一个底层的 tsm 存储引擎,有独立的 cache、wal、tsm file。

0条评论
0 / 1000
Gotcha
2文章数
0粉丝数
Gotcha
2 文章 | 0 粉丝
Gotcha
2文章数
0粉丝数
Gotcha
2 文章 | 0 粉丝
原创

InfluxDB基础(1)

2023-04-26 01:48:26
70
0

一、概述

1.1 概念

InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。

1.2 特色功能

  • 基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等)

  • 可度量性:你可以实时对大量数据进行计算

  • 基于事件:它支持任意的事件数据

1.3 特点

  • 无结构(无模式):可以是任意数量的列

  • 可拓展

  • 支持min, max, sum, count, mean, median 等一系列函数,方便统计

  • 原生的HTTP支持,内置HTTP API

  • 强大的类SQL语法

  • 自带管理界面,方便使用

1.4 Docker内安装

  1. 搜索InfluxDB镜像

 docker search influxdb
  1. 拉取influxdb镜像

 docker pull influxdb:1.7
  1. 创建容器,设置端口映射

 docker run -id --name=c_influxdb -p 8083:8083 -p 8086:8086 influxdb

1.5 配置

InfluxDB默认使用下面的网络端口:

  • TCP端口8086用作InfluxDB的客户端和服务端的http api通信

  • TCP端口8088给备份和恢复数据的RPC服务使用

另外,InfluxDB也提供了多个可能需要自定义端口的插件,所以的端口映射都可以通过配置文件修改,对于默认安装的InfluxDB,这个配置文件位于/etc/influxdb/influxdb.conf

  1. 进入容器

 docker exec -it c_influxdb /bin/bash
  1. 因为需要修改配置文件,所以安装vim

 apt-get update
 apt-get install vim
  1. 配置admin用户认证登陆

不管是yum安装,亦或者是docker安装的方式,influxdb默认安装完毕之后,并不会自带用户认证的功能,直接就可以进行访问的了。

对于这种不设置防备的措施,总体来说,不是很好。因此,需要设置用户认证。

  • 通过shell登录,influxdb

     infulx

  • 创建admin用户

 CREATE USER root with PASSWORD '123456' WITH ALL PRIVILEGES
  • 进行验证

 auth

  • 查看是否授权管理员权限

 show users

  • 在配置文件启用认证

默认情况下,influxdb的配置文件是禁用认证策略的,所以需要修改设置一下。

编辑配置文件vim /etc/influxdb/influxdb.conf,把 [http] 下的 auth-enabled 选项设置为 true 。docker里安装的influxdb的是没有http这一项,直接加上就好

 [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"
  • 重启容器

 docker restart c_influxdb 
  1. 使用外部机器连接容器中的influxdb

之后再访问需要 带上用户名、密码

 influx -username '用户名' -password '密码'

当配置了admin认证用户之后,进行http的api请求的时候也要带上用户名和密码的参数,不然无法执行

 curl -G "http://localhost:8086/query" -u username:password --data-urlencode "q=SHOW DATABASES"
 curl -G "http://localhost:8086/query" --data-urlencode "u=username" --data-urlencode "p=password" --data-urlencode "q=SHOW DATABASES"
 curl -G "http://localhost:8086/query?u=username&p=password&q=SHOW+DATABASES"

二、基本概念

2.1 数据格式

在 InfluxDB 中,我们可以粗略的将要存入的一条数据看作一个虚拟的 key 和其对应的 value(field value)。格式如下:

 cpu_usage,host=server01,region=us-west value=0.64 1434055562000000000

虚拟的 key 包括以下几个部分: database, retention policy, measurement, tag sets, field name, timestamp。

  • database:数据库名,在 InfluxDB 中可以创建多个数据库,不同数据库中的数据文件是隔离存放的,存放在磁盘上的不同目录。

  • retention policy:存储策略,用于设置数据保留的时间,每个数据库刚开始会自动创建一个默认的存储策略 autogen,数据保留时间为永久,之后用户可以自己设置,例如保留最近2小时的数据。插入和查询数据时如果不指定存储策略,则使用默认存储策略,且默认存储策略可以修改。InfluxDB 会定期清除过期的数据。

  • measurement:测量指标名,例如 cpu_usage 表示 cpu 的使用率。

  • tag sets:tags 在 InfluxDB 中会按照字典序排序,不管是 tagk 还是 tagv,只要不一致就分别属于两个 key,例如 host=server01,region=us-west 和 host=server02,region=us-west 就是两个不同的 tag set。

    tag--标签,在InfluxDB中,tag是一个非常重要的部分,表名+tag一起作为数据库的索引,是“key-value”的形式。

  • field name:例如上面数据中的 value 就是 fieldName,InfluxDB 中支持一条数据中插入多个 fieldName,这其实是一个语法上的优化,在实际的底层存储中,是当作多条数据来存储。

  • timestamp:每一条数据都需要指定一个时间戳,在 TSM 存储引擎中会特殊对待,以为了优化后续的查询操作。

2.2 与传统数据库中的名词做比较

influxDB中的名词 传统数据库中的概念
database 数据库
measurement 数据库中的表
point 表里面的一行数据

2.3 point

Point由时间戳(time)、数据(field)、标签(tags)组成。

Point相当于传统数据库里的一行数据,如下表所示:

Point属性 传统数据库中的概念
time 每个数据记录时间,是数据库中的主索引(会自动生成)
fields 各种记录值(没有索引的属性)
tags 各种有索引的属性
series 表示这个表里面的数据,可以在图表上画成几条线:通过tags排列组合算出来。

注意

  • time 相当于表的主键,当一条数据的time和tags完全相同时候,新数据会替换掉旧数据,旧数据则丢失(线上环境尤其要注意)。

  • tags 和time可以作为排序字段,field则不可以。如:ORDER BY time DESC

  • 设置了保存策略后,若此保存策略为设置成默认保存策略(一个库可以有多个保存策略),则在查询时,表名(measurement)前,要加上保存策略。

    保留策略为two-hour不是默认保存策略,则查询时候,需要指定其保存策略。

     select * from two-hour.measure where time > now() -10
  • fields和tags的字段类型是由存入的第一条记录值决定的。

2.4 数据类型

fields和tags的字段类型是由存入的第一条记录值决定的。 举例:

  • 如第一条记录fieldA的值为2,想插入一条记录,fieldA字段值为3.14的值,就会报错。因为该字段已经被初始化为整型了。

  • 如第一条记录fieldB存储的是3,想插入一条记录,fieldB字段值为hello,则也会报错,该字段已被初始化成整型,不能再写入字符串了。

因此,建议只使用字符串类型和浮点类型,把所有的整型,长整型,浮点型,双精度型统一转为小数格式的浮点类型,再写入数据库,字符串类型的不用做转换,这样就不会出现插入数据失败和丢失数据了。

2.5 Series

Series 相当于是 InfluxDB 中一些数据的集合,在同一个 database 中,retention policy、measurement、tag sets 完全相同的数据同属于一个 series,同一个 series 的数据在物理上会按照时间顺序排列存储在一起。

series 的 key 为 measurement + 所有 tags 的序列化字符串,这个 key 在之后会经常用到。

2.6 Shard

Shard 在 InfluxDB 中是一个比较重要的概念,它和 retention policy 相关联。每一个存储策略下会存在许多 shard,每一个 shard 存储一个指定时间段内的数据,并且不重复,例如 7点-8点 的数据落入 shard0 中,8点-9点的数据则落入 shard1 中。每一个 shard 都对应一个底层的 tsm 存储引擎,有独立的 cache、wal、tsm file。

文章来自个人专栏
Gotcha的学习笔记
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0