See Also 日志集中架构方案

InfluxDB

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

1. History

Errplane公司在2013年下半年开始以开源项目的形式开始了 InfluxDB 的开发。其目的是为了提供一个高性能的监控以及告警的解决方案。

在2014年11月,Errplane获得了由梅菲尔德风险投资公司与Trinity Ventures领投的A轮投资,金额高达810万美元。

在2015年,Errplane 正式更名为 InfluxData Inc.,而更名后的InfluxData又分别于2016年9月,2018年2月获得了金额高达1600万美元和3500万美元的B轮,C轮投资。

2. Technical Overview

InfluxDB 没有外部依赖,它提供了一种类似sql的语言,监听端口8086,并提供了内置的以时间为中心的函数,用于查询由测量值、序列和点组成的数据结构。每个点由称为fieldset的几个键-值对和一个时间戳组成。当通过一组称为标记集的键-值对组合在一起时,它们定义了一个系列。最后,通过字符串标识符将系列分组在一起以形成度量。

值可以是64位整数、64位浮点数、字符串和布尔值。点按它们的时间和标记集建立索引。保留策略是在度量和控制数据的下采样和删除方式上定义的。连续查询定期运行,将结果存储在目标度量中。

2.1. Database

数据库是个逻辑容器,包含了measurement、retention policies、continuous queries、time series data,类似于mysql的database。

2.2. Measurement

描述了相关数据的存储结构,类似于mysql的table,但是不需要创建,写入数据的时候自动创建。

2.3. Line Protocol

定义了influxdb的数据写入格式,通过HTTP、TCP和UDP接受数据。它定义了一个与 Graphite 向后兼容的行协议,其形式如下:

measurement(,tag_key=tag_val)* field_key=field_val(,field_key_n=field_value_n)* (nanoseconds-timestamp)?

$curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'

2.4. Tag

Line Protocol中的 tag_key。可以被索引,tag的类型只能是字符串

2.5. Field

Line Protocol中的 field_key。会用于展示,value支持的类型有floats,integers,strings,booleans。

2.6. Timestamp

格式是:RFC3339 UTC。默认精确到纳秒,可选。

2.7. Retention Policy

保留策略包括设置数据保存的时间以及在集群中的副本个数。默认配置是:RP是autogen,保留时间是永久,副本为1。这些配置在创建数据库时可以修改。

2.8. Series

measurement, tag set, retention policy相同的数据集合算做一个 series。理解这个概念至关重要,因为这些数据存储在内存中,如果series太多,会导致OOM。

3. Comparison

https://db-engines.com/en/system/Elasticsearch%3BGraphite%3BInfluxDB%3BPrometheus Elasticsearch vs. Graphite vs. InfluxDB vs. Prometheus

4. Play in Docker

https://github.com/influxdata/influxdb/tree/master/docker/influxd

https://hub.docker.com/_/influxdb

# Image ID: 2d066753d507/ InfluxDB ver: 1.7.9
docker pull influxdb:alpine

docker exec -it influxdb bash
influx  -username influxdb -password database
> show databases
> show measurements
> select * from cpu_value limit 1

5. Reference


CategoryDatabase