InfluxDB - 安装与使用

InfluxDB是专为时序数据设计的数据库,能支撑大量的读写负载,是一个高性能的时序数据datastore。

一、下载

https://portal.influxdata.com/downloads

根据部署系统下载对应版本(此处以Ubuntu 16.04版本为例)

二、安装
2.1 需求

默认预留端口:

8086,HTTP API
8088,RPC端口,用于备份和恢复

NTP服务:
InfluxDB使用机器本地时间作为timestamp,需要机器之间使用NTP进行同步;如果没有同步的话,写入的时间序列数据可能会不准确

2.2 安装

推荐通过包管理器安装或者通过预编译程序安装,根据OS选择不同的安装方式:

包管理工具: http://docs.influxdata.com/influxdb/v1.2/introduction/installation/
预编译程序: https://portal.influxdata.com/downloads#influxdb

以Ubuntu为例:

curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -  
source /etc/lsb-release  
echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list

sudo apt-get update && sudo apt-get install influxdb  
sudo systemctl start influxdb  
2.3 配置

配置文件默认全部注释掉,使用默认的配置项,可以根据需要配置。每个配置项有对应的、相同功能的环境变量。

配置文件:/etc/influxdb/influxdb.conf

查看配置:influxd config

配置说明: https://docs.influxdata.com/influxdb/v1.2/administration/config/

2.3.1 需要注意的几个配置项如下:
[meta]    # 元数据
dir = /var/lib/influxdb/meta  
数据/WAL:
[data]    # 数据
dir = /var/lib/influxdb/data  
wal-dir = /var/lib/influxdb/wal  
cache-max-memory-size = 1048576000    # Cache最大可用内存

[coordinator]    # 查询相关
query-timeout = “0s”                  # 查询最大执行时间  
log-queries-after = “0s”              # 打印慢查询

[http]           # HTTP服务
auth-enabled = false                  # 启用安全认证  
max-connection-limit = 0              # 最大连接数  
2.3.2 日志

根据系统不同(sysvinit/systemd),InfluxDB会将日志存储在不同的地方。如果是日志文件,可以通过logroate控制;如果是systemd,可以通过journalctl 查看。

日志:https://docs.influxdata.com/influxdb/v1.2/administration/logs/

2.3.3 备份与恢复

https://docs.influxdata.com/influxdb/v1.2/administration/backup_and_restore/

可以通过指定-since 进行增量备份/恢复。

2.3.4 安全

https://docs.influxdata.com/influxdb/v1.2/query_language/authentication_and_authorization

安全功能需要启用安全认证功能,创建好admin用户和所需的普通用户,并设置相应权限

三、使用
3.1 命令行连接

influx -precision rfc3339

P.s. Precision指定timestamp的精度

3.2 数据模型

Time-series数据基本可以理解为检测数据的表,不过检测数据(measurement)可以支持上百万个:

Measurement(table)
Timestamp (PK)
Tags (index)
Fields (value)

3.3 常用功能

CREATE DATABASE mydb
SHOW DATABASES
USE mydb

3.4 写入和读取

写入格式:

<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]  

例如:

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  

命令行中写入和读取:

INSERT cpu,host=serverA,region=us_west value=0.64  
SELECT "host", "region", "value" FROM "cpu"  

InfluxDB使用InfluxQL作为操作语言,参考:
Reference:
https://docs.influxdata.com/influxdb/v1.2/query_language/spec/

3.5 Client

InfluxDB可以使用命令行、HTTP和客户端三种方式进行操作(本质上都是通过HTTP进行)

命令行: https://docs.influxdata.com/influxdb/v1.2/tools/shell/

HTTP方式:
https://docs.influxdata.com/influxdb/v1.2/guides/writing_data/
https://docs.influxdata.com/influxdb/v1.2/guides/querying_data/

Client方式:
https://docs.influxdata.com/influxdb/v1.2/tools/api_client_libraries/

InfluxDB go-client
Go的客户端由InfluxDB团队维护,提供了一些方便的封装功能,使用HTTP协议与InfluxDB通信。

Go客户端:
https://github.com/influxdata/influxdb/blob/master/client/README.md

四、Down-sampling and Data Retention

在数据量可能逐渐增大的情况下,可以通过InfluxDB的采样和数据过期功能来控制数据增长。

CQ(Continuous Query):可以执行数据采样功能
RP(Retention Policy):指定数据过期策略

例如,food_data数据库下的orders存储了实时数据: 保存两个小时的实时数据

CREATE RETENTION POLICY "two_hours" ON "food_data" DURATION 2h REPLICATION 1 DEFAULT  

保存一年汇总数据

CREATE RETENTION POLICY "a_year" ON "food_data" DURATION 52w REPLICATION 1  

进行数据采样汇总:

CREATE CONTINUOUS QUERY "cq_30m" ON "food_data" BEGIN  
  SELECT mean("website") AS "mean_website",mean("phone") AS "mean_phone"
  INTO "a_year"."downsampled_orders"
  FROM "orders"
  GROUP BY time(30m)
END  

使用示例: https://docs.influxdata.com/influxdb/v1.2/guides/downsampling_and_retention/

CQ介绍:
https://docs.influxdata.com/influxdb/v1.2/query_language/continuous_queries/
RP介绍:
https://docs.influxdata.com/influxdb/v1.2/query_language/database_management/#retention-policy-management

flacro

Read more posts by this author.