zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    「CSP-S 2019」初赛解析
    「SP741」STEAD
    「CF1382B」Sequential Nim
    「二分图」学习笔记
    题解 P3321 【[SDOI2015]序列统计】
    题解 P5339 【[TJOI2019]唱、跳、rap和篮球】
    题解 P3200 【[HNOI2009]有趣的数列】
    题解 P2606 【[ZJOI2010]排列计数】
    题解 CF1095F 【Make It Connected】
    题解 CF1155E 【Guess the Root】
  • 原文地址:https://www.cnblogs.com/gqdw/p/12922015.html
Copyright © 2011-2022 走看看