向InfluxDB写入数据

作者: itfanr | 来源:发表于2017-04-08 21:56 被阅读4640次

    简单用法

    在InfluxDB中的数据是通过“时间序列组织的“,包含一个测量变量,比如cpu_load或者温度。时间序列有无数的点,每个点都是metric的离散采样。点包含time(一个时间戳)、一个measurement测量变量(比如是cpu_load),至少一个kv键值对field(测量变量的值,比如"value=0.64",或者"temperature=21.2"),很多的kv键值对tags(包含了任何关于变量的元数据信息,比如"host=server01",“region=EMEA”, “dc=Frankfurt”) 。

    在概念上,你可以把一个measurement看做是一个SQL表,主索引一直都是时间。tagsfields实际上是表中的列。tags会被索引,但是fields不会。区别是,使用InfluxDB,你可以有百万个测量变量,但是不需要设计前面的架构,空值不会被存储。

    点会被写入到InfluxDB,使用行协议(Line Protocol),格式如下:

    <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
    

    使用influx命令行,可以插入一个个时间序列点,比如使用如下的语句:

    > INSERT cpu,host=serverA,region=us_west value=0.64
    
    >
    

    这样,一个点——测量变量是cpu,tags是hostregion,测量值value为0.64,被写入到数据库中了。

    然后,我们可以通过如下语句查到这条数据记录:

    > SELECT "host", "region", "value" FROM "cpu"
    name: cpu
    ---------
    time                                     host       region   value
    2015-10-21T19:28:07.580664347Z  serverA   us_west    0.64
    
    

    我们尝试存储另外一种数据,在一个测量变量里含有两种fields:

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

    一次查询操作中,可以使用*操作符获取所有的fields和tags:

    > SELECT * FROM "temperature"
    name: temperature
    -----------------
    time                                     external     internal   machine    type
    2015-10-21T19:28:08.385013942Z  25              37          unit42  assembly
    
    >
    

    从外部文件导入数据

    导入的文件包含以下的两段:

    • DLL(数据定义语言):包含创建相关数据库和管理retention policy的InfluxQL命令。如果你的数据库和retention policy已经存在,你的文件可以跳过这个段。
    • DML(数据管理语言):列出相关的数据库、retention policy(如果需要的话),并包含行协议的数据

    比如,文件datarrr.txt

    # DDL
    CREATE DATABASE pirates
    CREATE RETENTION POLICY oneday ON pirates DURATION 1d REPLICATION 1
    
    # DML
    # CONTEXT-DATABASE: pirates
    # CONTEXT-RETENTION-POLICY: oneday
    
    treasures,captain_id=dread_pirate_roberts value=801 1439856000
    treasures,captain_id=flint value=29 1439856000
    treasures,captain_id=sparrow value=38 1439856000
    treasures,captain_id=tetra value=47 1439856000
    treasures,captain_id=crunch value=109 1439858880
    

    导入命令如下:

    $influx -import -path=datarrr.txt -precision=s
    

    结果如下:

    2015/12/22 12:25:06 Processed 2 commands
    2015/12/22 12:25:06 Processed 5 inserts
    2015/12/22 12:25:06 Failed 0 inserts
    

    参考

    1. query_language
    2. tools-influxdb
    3. line-protocol
    4. launch-influx
    5. database_management
    6. retention-policy

    相关文章

      网友评论

      • 89cb24a3c4ce:想请教一下,InfluxDB的value想存String类型的,怎么办?
        > insert string_test,tagname=tag value=ddd
        ERR: unable to parse 'string_test,tagname=tag value=ddd': invalid boolean
        这样会报错呢
        6b6be9188b4d:因为他是 Line Protocol格式的,
        分为3个部分。
        第一部分:表名后面以逗号隔开.
        第二部分和 第三部分之间以空格隔开。
        举个栗子:
        insert test,name=zengqingjun,age=25 count=1,min=0
        test是表名。name 和 age 是第二部分 count和min是第二部分
        itfanr:好像无法增加string类型的value,只能加tag
        itfanr:好久没研究了 帮不了你了
      • itfanr:在简书排版真心好

      本文标题:向InfluxDB写入数据

      本文链接:https://www.haomeiwen.com/subject/hgsrattx.html