influxdb 基本概念

1.安装

安装的话分两种情况,虚机的话直接下载二进制文件运行就好了。

kubernetes容器下也很方便,起一个deployment,存储挂载到/var/lib/influxdb 就ok,配置文件可以通过configmap挂载进去。
kubernetes下面也可以用helm来安装,官方提供了一个比较好用的chart,stable/influxdb,会部署成一个statefulsets的应用,也是ok的。

2. 概念

2.1 database

CREATE DATABASE xx
SHOW DATABASES
USE mydb

跟mysql有点像,不过insert数据不需要ddl 语句先crate table。

2.2 measurement

相当于sql里面的table概念。

写数据格式:

<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

跟普通sql来说就多了tags ,多了k/v的数据

Cli 里面可以用insert 插入

> create database mydb
> use mydb
Using database mydb
> INSERT cpu,host=serverA,region=us_west value=0.64
> SELECT "host", "region", "value" FROM "cpu"
name: cpu
time                host    region  value
----                ----    ------  -----
1577934903004849943 serverA us_west 0.64

插入了一行到cpu这个指标,标签上host,region。

> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
> select * from temperature
name: temperature
time                external internal machine type
----                -------- -------- ------- ----
1577935315876294939 25       37       unit42  assembly

influxdb还有个RETENTION的概念,就是创建database的时候能指定retention

CREATE DATABASE <database_name> [WITH [DURATION <duration>] [REPLICATION <n>] [SHARD DURATION <duration>] [NAME <retention-policy-name>]]

如果不指定,会默认使用autogen,

> show retention policies
name    duration shardGroupDuration replicaN default
----    -------- ------------------ -------- -------
autogen 0s       168h0m0s           1        true

这是一个很重要的特性,通过他能自动删老旧数据。

参考 retention policy (RP)

3. the Time-Structured Merge Tree (TSM)

比B+ 或者lsm树更高的压缩比,(压缩比有多高? 那个文档里写了提升45倍的压缩包 ),高写入高读取。
非常完善的一个stroge engine ,包括wal database才有的特性,可以研读一下代码。

细节可以看

https://docs.influxdata.com/influxdb/v1.7/concepts/storage_engine/

https://docs.influxdata.com/influxdb/v1.7/query_language/database_management/#retention-policy-management

4. 聚合

基本上跟sql的差不多。都是select 开头,提供了丰富的聚合函数。

详细文档: https://docs.influxdata.com/influxdb/v1.7/query_language/functions/#aggregations

5. 资源分配

cpu来看差不多需要1个cpu ,优化的还是挺好的。

内存占用就看数据量和tags了。tag数量越多,数据越多,占用内存越大,这个要注意的,

这个database数据量(达到一个很大的规模,这个我忘了具体多少了)上去了以后还是会挂的,变得很不稳定。

6. Prometheus 使用influxdb做remote read,write

这个我看有些博客说是要编译adatper ,早期可能需要, 现在其实不用了,官方早已支持的很好。

https://docs.influxdata.com/influxdb/v1.7/supported_protocols/prometheus/

remote_write:
  - url: "http://localhost:8086/api/v1/prom/write?db=prometheus&u=username&p=password"

remote_read:
  - url: "http://localhost:8086/api/v1/prom/read?db=prometheus&u=username&p=password"


如果没有用户名密码认证的话,把username和password去掉即可。

这里有个小tips,prometheus内部维护了一个metric,用来记录没有写成功的count,prometheus_remote_storage_failed_samples_total , 这个值要看一下是否有失败。

参考

https://docs.influxdata.com/influxdb/v1.7/introduction/getting-started/

https://docs.influxdata.com/influxdb/v1.7/concepts/storage_engine/

posted @ 2020-05-20 10:12  过去的我  阅读(575)  评论(0编辑  收藏  举报