1. Centos7 下 InfluxDB 从安装开始到入门

参考文献

InfluxDB 1.7文档
https://docs.influxdata.com/influxdb/v1.7/

InfluxDB简介

InfluxDB是一个时间序列数据库,旨在处理高写入和查询负载。它是TICK堆栈的组成部分 。InfluxDB旨在用作涉及大量带时间戳数据的任何用例的后备存储,包括DevOps监控,应用程序指标,物联网传感器数据和实时分析。

主要特点

以下是InfluxDB目前支持的一些功能,使其成为处理时间序列数据的绝佳选择。

  • 专为时间序列数据编写的自定义高性能数据存储。TSM引擎允许高摄取速度和数据压缩
  • 完全写在Go。它编译成单个二进制文件,没有外部依赖项。
  • 简单,高性能的写入和查询HTTP API。
  • 插件支持其他数据提取协议,如Graphite,collectd和OpenTSDB。
  • 专为类似SQL的查询语言量身定制,可轻松查询聚合数据。
  • 标签允许对系列进行索引以实现快速有效的查询。
  • 保留策略有效地自动使过时数据过期。
  • 连续查询自动计算聚合数据,以提高频繁查询的效率。

InfluxDB的开源版本在单个节点上运行。如果您需要高可用性来消除单点故障,请考虑InfluxDB企业版

InfluxDB默认使用以下网络端口:

  • TCP端口8086用于通过InfluxDB的HTTP API进行客户端 - 服务器通信
  • TCP端口8088用于RPC服务以进行备份和还原

除了上面的端口,InfluxDB还提供了多个可能需要自定义端口的插件。可以通过配置文件修改所有端口映射,配置文件位于/etc/influxdb/influxdb.conf默认安装位置。

使用网络时间协议(NTP)用于保证写入InfluxDB的时间准确

在安装部署InfluxDB的服务器首先要保证好服务器的UTC本地时间准确,不然写入的时间序列数据肯定有误。
为了保证时间准确,最好开启NTP服务进行时钟同步。

使用docker启动InfluxDB

下载镜像:docker pull influxdb

[root@server81 influxdb]# docker pull influxdb
Using default tag: latest
Trying to pull repository docker.io/library/influxdb ... 
latest: Pulling from docker.io/library/influxdb
cd8eada9c7bb: Pull complete 
c2677faec825: Pull complete 
fcce419a96b1: Pull complete 
7eb470cb34c6: Pull complete 
5d32b89f3e91: Pull complete 
c06b59b518ce: Pull complete 
59c5fc9b8822: Pull complete 
a6b36405d3fd: Pull complete 
Digest: sha256:2c1dba8c2b9713355edce4a9824a10226be0d4ace071ecb663224a4d29ae8403
Status: Downloaded newer image for docker.io/influxdb:latest
[root@server81 influxdb]# 

编写启动influxdb服务脚本:

[root@server81 influxdb]# cat restart_influxdb.sh 
#!/bin/bash
basedir=$(cd `dirname $0`;pwd)

docker stop influxdb
docker rm influxdb
docker run -d --name influxdb -p 8086:8086 -v $basedir/influxdb:/var/lib/influxdb influxdb
[root@server81 influxdb]# 

执行启动influxdb服务:

## 执行shell脚本重启服务
[root@server81 influxdb]# ./restart_influxdb.sh 
influxdb
influxdb
d2918dc47850c94f0532e41465e8943c5e45c30c1884b529939bd49cd8c30263
[root@server81 influxdb]# 
[root@server81 influxdb]# ls
influxdb  restart_influxdb.sh
[root@server81 influxdb]# 
[root@server81 influxdb]# ls influxdb/
data  meta  wal
[root@server81 influxdb]# 

登陆influxdb的CLI界面

## 查看docker启动进程
[root@server81 influxdb]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
d2918dc47850        influxdb            "/entrypoint.sh in..."   17 minutes ago      Up 17 minutes       0.0.0.0:8086->8086/tcp   influxdb
82a294241ff7        registry:2          "/entrypoint.sh /e..."   4 weeks ago         Up 2 days           0.0.0.0:5000->5000/tcp   registry
[root@server81 influxdb]# 
## 进入influxdb容器内
[root@server81 influxdb]# docker exec -it influxdb bash
root@d2918dc47850:/# 
root@d2918dc47850:/# 

执行influx将启动CLI并自动连接到本地InfluxDB实例(假设您已经启动了服务器service influxdb start或influxd直接运行)。输出应如下所示:

[root@server81 influxdb]# docker exec -it influxdb bash
root@d2918dc47850:/# 
root@d2918dc47850:/# influx
Connected to http://localhost:8086 version 1.7.2
InfluxDB shell version: 1.7.2
Enter an InfluxQL query
> exit
root@d2918dc47850:/# 
root@d2918dc47850:/# influx -precision rfc3339
Connected to http://localhost:8086 version 1.7.2
InfluxDB shell version: 1.7.2
Enter an InfluxQL query
> 

注意:

  • InfluxDB HTTP API 8086默认在端口上运行。因此,influx将连接到端口8086localhost默认。如果您需要更改这些默认值,请运行influx --help查看相关帮助。
  • 使用-precision参数指定任何返回的时间戳的格式/精度。在上面的示例中,rfc3339告诉InfluxDB以RFC3339格式YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ)返回时间戳。

退出的方式,输入exit
现在,命令行已准备好以Influx查询语言(又称InfluxQL)语句的形式获取输入。要退出InfluxQL shell,请键入exit并单击return

创建InfluxDB数据库

全新安装的InfluxDB没有数据库(除了系统_internal),因此创建一个是我们的首要任务。您可以使用CREATE DATABASE <db-name>InfluxQL语句创建数据库,其中<db-name>是您要创建的数据库的名称。只要数据库的名称是双引号的字符串,就可以包含任何unicode字符。如果名称仅包含ASCII字母,数字或下划线且不以数字开头,则也可以不加引号。

创建一个数据库,名称为mydb

> CREATE DATABASE mydb
> 

注意:按 Enter键后,将出现一个新提示,并且不显示任何其他提示。在CLI中,这意味着语句已执行且没有要显示的错误。如果出现问题,将始终显示错误。没有消息就是好消息!

现在已经创建了mydb数据库,可以SHOW DATABASES语句显示所有现有数据库:

root@d2918dc47850:/# influx -precision rfc3339
Connected to http://localhost:8086 version 1.7.2
InfluxDB shell version: 1.7.2
Enter an InfluxQL query
> 
> CREATE DATABASE mydb
> 
> show databases
name: databases
name
----
_internal
mydb
> 
> 
> SHOW DATABASES
name: databases
name
----
_internal
mydb
> 

注意:_internal数据库中创建和使用InfluxDB存储内部运行指标。稍后再查看以了解InfluxDB如何在幕后执行。

设置使用哪个数据库 use <db-name>

在使用SHOW DATABASES查看了有哪些数据库之后,就可以使用USE <db-name>来设置将要使用的数据库,自动为将来的所有请求设置数据库。例如:

> SHOW DATABASES
name: databases
name
----
_internal
mydb
> 
> use mydb
Using database mydb
> 

现在,将来的命令只会针对mydb数据库运行。

写入数据到数据库中

现在我们有了一个数据库,InfluxDB已准备好接受查询和写入。
InfluxDB中的数据按“时间序列”进行组织,其中包含测量值,如“cpu_load”或“temperature”。
时间序列的数据存在多个时间点测量值都是零的情况,部分存在测量值。
其中每个时间点的数据包含了时间戳测量值(例如"cpu_load"),并且至少有一个键值field对应,例如cpu_load = 21.2
大体格式可以简单理解这样 : 时间 cpu_load = 21.2

另外还有一种键值标签 tags 的数据,例如 "host=server01","region=EMEA"等。

从概念上讲,您可以将存储测量值数据表格视为一个SQL表,其中主索引始终是时间。 tags并且fields是表中的有效列。 tags可以是索引,而fields则无法设置为索引。相对于SQL表不同之处在于,使用InfluxDB,您可以进行数百万次测量,您不必预先定义表格,也不会存储空值。

使用线路协议Line Protocol)将点写入InfluxDB,其遵循以下格式:
<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]

以下几行都是可以写入InfluxDB的点的示例:

cpu,host=serverA,region=us_west value=0.64
payment,device=mobile,product=Notepad,method=credit billed=33,licenses=3i 1434067467100293230
stock,symbol=AAPL bid=127.46,ask=127.48
temperature,machine=unit42,type=assembly external=25,internal=37 1434067467000000000

注意:有关线路协议的更多信息,参见“ 语法”页面。

要使用CLI将单个时间序列数据点插入InfluxDB,请输入INSERT后跟一个点:

root@d2918dc47850:/# influx
Connected to http://localhost:8086 version 1.7.2
InfluxDB shell version: 1.7.2
Enter an InfluxQL query
> show databases
name: databases
name
----
_internal
mydb
> 
> use mydb
Using database mydb
> 
> INSERT cpu,host=serverA,region=us_west value=0.64
> 

INSERT cpu,host=serverA,region=us_west value=0.64
说明:测量名称为cpu和标记(tag)的点host,region现在已经写入数据库,测量value值为0.64

查询刚才写的数据:

> SELECT "host", "region", "value" FROM "cpu"
name: cpu
time                host    region  value
----                ----    ------  -----
1546688002825475579 serverA us_west 0.64
> 

可以看出测量名称cpu就是SQL的表名,其他就是字段名称。这样就更加好理解了。

注意:在插入数据的时候,并没有提供时间戳。如果没有为某个点提供时间戳,InfluxDB会在获取该点时分配本地当前时间戳。
这个时间戳就类型mysql中的自增长id

让我们尝试存储另一种类型的数据,在同一测量中有两个字段:

> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
> 

查询刚刚插入temperature的所有字段和标记,您可以使用*运算符:

> select * from temperature
name: temperature
time                external internal machine type
----                -------- -------- ------- ----
1546688551508705124 25       37       unit42  assembly
> 

警告: 在大型数据库上使用*不带LIMIT子句可能会导致性能问题。您可以使用Ctrl+C取消响应时间过长的查询。

## 再次插入多条数据
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
> 
> select * from temperature 
name: temperature
time                external internal machine type
----                -------- -------- ------- ----
1546688551508705124 25       37       unit42  assembly
1546688749536654124 25       37       unit42  assembly
1546688750174577918 25       37       unit42  assembly
1546688750737028280 25       37       unit42  assembly
1546688751229687907 25       37       unit42  assembly
1546688751772543015 25       37       unit42  assembly
1546688752401279324 25       37       unit42  assembly
## 使用limit查询,基本跟SQL写法一致
> select * from temperature limit 3
name: temperature
time                external internal machine type
----                -------- -------- ------- ----
1546688551508705124 25       37       unit42  assembly
1546688749536654124 25       37       unit42  assembly
1546688750174577918 25       37       unit42  assembly
> 

InfluxQL有许多功能和关键字,这里没有涉及,包括对Go风格的正则表达式的支持。例如:

执行使用正则匹配所有数据 SELECT * FROM /.*/ LIMIT 1

> SELECT * FROM /.*/ 
name: cpu
time                external host    internal machine region  type value
----                -------- ----    -------- ------- ------  ---- -----
1546688002825475579          serverA                  us_west      0.64

name: temperature
time                external host internal machine region type     value
----                -------- ---- -------- ------- ------ ----     -----
1546688551508705124 25            37       unit42         assembly 
1546688749536654124 25            37       unit42         assembly 
1546688750174577918 25            37       unit42         assembly 
1546688750737028280 25            37       unit42         assembly 
1546688751229687907 25            37       unit42         assembly 
1546688751772543015 25            37       unit42         assembly 
1546688752401279324 25            37       unit42         assembly 
> 
## 如果要看有哪些表格数据,可以使用这句进行查看。
> SELECT * FROM /.*/ limit 1
name: cpu
time                external host    internal machine region  type value
----                -------- ----    -------- ------- ------  ---- -----
1546688002825475579          serverA                  us_west      0.64

name: temperature
time                external host internal machine region type     value
----                -------- ---- -------- ------- ------ ----     -----
1546688551508705124 25            37       unit42         assembly 
> 

执行where语句条件判断:select * from "temperature" where "internal" > 36

> select * from "temperature" where "internal" > 36
name: temperature
time                external internal machine type
----                -------- -------- ------- ----
1546688551508705124 25       37       unit42  assembly
1546688749536654124 25       37       unit42  assembly
1546688750174577918 25       37       unit42  assembly
1546688750737028280 25       37       unit42  assembly
1546688751229687907 25       37       unit42  assembly
1546688751772543015 25       37       unit42  assembly
1546688752401279324 25       37       unit42  assembly
> 
> select * from "temperature" where "internal" > 38
> 

这就是将数据写入InfluxDB并进行查询所需要知道的全部内容。要了解有关InfluxDB写入协议的更多信息,请查看写入数据指南。要进一步探索查询语言,请查看查询数据指南。有关InfluxDB概念的更多信息,请查看“ 关键概念”页面。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,894评论 2 89
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,723评论 0 30
  • InfluxDB是一个开源的时序数据库,使用GO语言开发,特别适合用于处理和分析资源监控数据这种时序相关数据。而I...
    __七把刀__阅读 164,495评论 19 91
  • 2017年,12月1日。最后的一个月就要迈向2018年了,时间就这样不知不觉过去了,一去不复返。 日出永远都是这样...
    WOO梵馨怡miU阅读 487评论 1 1
  • 01、 江湖海日月潮升,四大部洲漫动中。 入维光纤声细细,相映水天一色情。 02、 婆娑日月何伊始,始见日月时几更...
    真如自在阅读 339评论 5 8