• influxdb[1] 简介


    简介

    时序数据库TSDB 通常具有以下的特点:

    • 时间是不可或缺的绝对主角(就像 MySQL 中的主键一样),数据按照时间顺序组织管理

    • 高并发高吞吐量的数据写入

    • 数据的更新很少发生

    • 过期的数据可以批量删除

    InfluxDB 就是一款非常优秀的时序数据库,DB-Engines TSDB 排名第一。参考 https://db-engines.com/en/ranking/time+series+dbms。 分为开源版和商业版,目前只有商业版本支持集群。

    InfluxDB的主要特点包括下面这些:

    • schemaless(无结构),可以是任意数量的列
    • 可扩展(目前只有商业版本支持集群)
    • 方便、强大的查询语言,类SQL,易上手
    • 支持HTTP API
    • 丰富的插件,集成了数据采集、存储、可视化功能
    • 实时数据 Downsampling
    • 高效存储,使用高压缩比算法,支持retention polices
    • 底层数据结构为TSM 树( Time-Structured Merge Tree ),性能高且资源占用少
    • go 语言编写而成,没有额外的依赖

    基本概念

    • database 数据库

    • measurement 类似于表

    • timestamp 时间戳,就像是所有数据的主键一样。

    • tag tag key = tag value 键值对存储具体的数据,会构建索引,查询速度快。tag set 就是 tag key-value 键值对的不同组合。

    • field field key = field value 键值对也是存储具体的数据,但不会被索引。类似的 field set 就是 field key-value 的组合。

    • series 一个 series 序列是由同一个 RP 策略下的同一个 measurement 里的同一个 tag set 构成的数据集合。

    • point 一个 point 点代表了一条数据,由 measurement、tag set、field set、timestamp 组成。一个 series 上的某个 timestamp 时间对应唯一一个 point 。

    • retention policy( 简称 RP )

      保留策略,由以下三个部分构成:

      DURATION:数据的保留时长。

      REPLICATION:集群模式下数据的副本数,单节点无效。

      SHARD DURATION:可选项,shard group 划分的时间范围。

    Line protocol

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

    符号 [] 代表可选项,符号 ... 代表可以有多个,符号 ,用来分隔相同 tag 或者 field 下的多个数据,符号空格分隔 tag、field、timestamp 。

    使用场景

    监控平台、物联网平台、实时分析等场景

    安装

    权限

    安装InfluxDB包需要root或是有管理员权限才可以。

    网络

    InfluxDB默认使用下面的网络端口:

    • TCP端口8086用作InfluxDB的客户端和服务端的http api通信
    • TCP端口8088给备份和恢复数据的RPC服务使用

    另外,InfluxDB也提供了多个可能需要自定义端口的插件,所以的端口映射都可以通过配置文件修改,对于默认安装的InfluxDB,这个配置文件位于/etc/influxdb/influxdb.conf

    NTP

    InfluxDB使用服务器本地时间给数据加时间戳,而且是UTC时区的。并使用NTP来同步服务器之间的时间,如果服务器的时钟没有通过NTP同步,那么写入InfluxDB的数据的时间戳就可能不准确。

    Install InfluxDB as a service with systemd

    RedHat和CentOS用户可以直接用yum包管理来安装最新版本的InfluxDB。

    # Ubuntu/Debian
    wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.x.x-xxx.deb
    sudo dpkg -i influxdb2_2.x.x_xxx.deb
    
    # Red Hat/CentOS/Fedora
    wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.x.x-xxx.rpm
    sudo yum localinstall influxdb2_2.x.x_xxx.deb.rpm
    

    或者加入yum源

    cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
    [influxdb]
    name = InfluxDB Repository - RHEL $releasever
    baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable
    enabled = 1
    gpgcheck = 1
    gpgkey = https://repos.influxdata.com/influxdb.key
    EOF
    

    一旦加到了yum源里面,就可以运行下面的命令来安装和启动InfluxDB服务:

    # 安装influxdb
    sudo yum install influxdb
    # 启动influxdb service
    sudo service influxdb start
    # 查看运行状态
    sudo service influxdb status
    
    

    When installed as a service, InfluxDB stores data in the following locations:

    • Time series data: /var/lib/influxdb/engine/

    • Key-value data: /var/lib/influxdb/influxd.bolt.

    • influx CLI configurations: ~/.influxdbv2/configs (see influx config for more information) .

    配置

    安装好之后,每个配置文件都有了默认的配置,可以通过命令influxd config来查看这些默认配置。

    配置文件/etc/influxdb/influxdb.conf之中的大部分配置都被注释掉了,所有这些被注释掉的配置都是由内部默认值决定的。配置文件里任意没有注释的配置都可以用来覆盖内部默认值,需要注意的是,本地配置文件不需要包括每一项配置。

    有两种方法可以用自定义的配置文件来运行InfluxDB:

    • 运行的时候通过可选参数-config来指定:
    # 启动influxd
    sudo influxd -config /etc/influxdb/influxdb.conf
    
    • 设置环境变量INFLUXDB_CONFIG_PATH来指定,例如:
    echo $INFLUXDB_CONFIG_PATH
    /etc/influxdb/influxdb.conf
    
    influxd
    

    其中-config的优先级高于环境变量。

    Install InfluxDB in a Kubernetes cluster

    参考文档 (https://docs.influxdata.com/influxdb/v2.0/install/?t=Kubernetes#install-influxdb-in-a-kubernetes-cluster)https://docs.influxdata.com/influxdb/v2.0/install/?t=Kubernetes

    使用

    连接数据库

    $ influx -precision rfc3339
    Connected to http://localhost:8086 version 1.8.6
    InfluxDB shell version: 1.8.6
    

    说明:

    • InfluxDB的HTTP接口默认起在8086上,所以influx默认也是连的本地的8086端口,你可以通过influx --help来看怎么修改默认值。
    • -precision参数表明了任何返回的时间戳的格式和精度,在上面的例子里,rfc3339是让InfluxDB返回RFC339格式(YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ)的时间戳。

    创建数据库

    > CREATE DATABASE mydb
    >
    > SHOW DATABASES
    name: databases
    ---------------
    name
    _internal
    mydb
    
    >
    

    说明:_internal数据库是用来存储InfluxDB内部的实时监控数据的。

    > USE mydb
    Using database mydb
    >
    

    读写数据

    InfluxDB里存储的数据被称为时间序列数据,其包含一个数值,就像CPU的load值或是温度值类似的。时序数据有零个或多个数据点,每一个都是一个指标值。数据点包括time(一个时间戳),measurement(例如cpu_load),至少一个k-v格式的field(也即指标的数值例如 “value=0.64”或者“temperature=21.2”),零个或多个tag

    在概念上,你可以将measurement类比于SQL里面的table,其主键索引总是时间戳。tagfield是在table里的其他列,tag是被索引起来的,field没有。不同之处在于,在InfluxDB里,你可以有几百万的measurements,你不用事先定义数据的scheme,并且null值不会被存储。

    数据操作

    > INSERT cpu,host=serverA,region=us_west value=0.64
    > select * from cpu
    name: cpu
    time                           host    region  value
    ----                           ----    ------  -----
    2021-07-21T09:04:14.189591692Z serverA us_west 0.64
    > 
    > INSERT temperature,machine=unit42,type=assembly external=25,internal=37
    > 
    > select * from temperature
    name: temperature
    time                           external internal machine type
    ----                           -------- -------- ------- ----
    2021-07-21T09:10:47.145556558Z 25       37       unit42  assembly
    > 
    > select * from temperature where external = 25
    name: temperature
    time                           external internal machine type
    ----                           -------- -------- ------- ----
    2021-07-21T09:10:47.145556558Z 25       37       unit42  assembly
    >
    

    显示所有表

    > show measurements
    name: measurements
    name
    ----
    cpu
    temperature
    > 
    
    

    删除表

    > drop measurement temperature
    

    数据更新删除

    InfluxDB属于时序数据库,没有提供修改和删除数据的方法。

    但是删除可以通过InfluxDB的数据保存策略(Retention Policies)来实现删除。

    field在insert时,其它值不变,只修改field值是可以更新的,如果修改tag值或者新增field,只会新增数据

    > select * from cpu
    name: cpu
    time                host    region  value
    ----                ----    ------  -----
    1626858254189591692 serverA us_west 0.64
    > 
    > INSERT cpu,host=serverA,region=us_west value=0.65 1626858254189591692
    > 
    > select * from cpu
    name: cpu
    time                host    region  value
    ----                ----    ------  -----
    1626858254189591692 serverA us_west 0.65
    > 
    > INSERT cpu,host=serverA,region=us_west1 value=0.65 1626858254189591692
    > 
    > select * from cpu
    name: cpu
    time                host    region   value
    ----                ----    ------   -----
    1626858254189591692 serverA us_west  0.65
    1626858254189591692 serverA us_west1 0.65
    
    

    时间戳格式

    InfluxDB使用的是UTC时间,除了支持epoch_time外,还支持rfc3339_date_time_stringrfc3339_like_date_time_string

    • epoch_time 时间戳的精度可以达到纳秒级(ns)即19位Long类型
    • rfc3339_date_time_string rfc3339时间格式是ietf协会定义的一种时间格式,'YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ'
    • rfc3339_like_date_time_string 'YYYY-MM-DD HH:MM:SS.nnnnnnnnn'

    series操作

    series表示这个表里面的数据,可以在图表上画成几条线,series主要通过tags排列组合算出来。

    > show series from cpu
    key
    ---
    cpu,host=serverA,region=us_west
    cpu,host=serverA,region=us_west1
    
    
  • 相关阅读:
    快速启动jar包脚本【Linux】
    解决Linux报错:/bin/bash^M: 坏的解释器: 没有那个文件或目录
    学习——nginx(2021/09/23)
    react hook中的状态管理方式
    findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance of DomWrapper which is inside StrictMode.
    祝胡老师节日快乐
    vue3+ts+AntV/L7加载钻取地图
    实用的 Bash 快捷键
    react antd form 自定义表单验证validator 需要注意的细节,否则会无法触发表单提交。
    execjs
  • 原文地址:https://www.cnblogs.com/iiot/p/15047987.html
Copyright © 2020-2023  润新知