[TOC]
0x00 前言简述 InfluxDB 介绍 Q: 什么是InfluxDB?
InfluxDB 采用Go语言开发是一个开源时间序列平台, 是一个可编程且高性能的时间序列数据库,具有跨 OSS、云和企业产品的通用 API。 简单描述: Influxdb是由Golang 构建的时序数据库,由于由Go语言构建使得其跨平台部署相对方便。
Q: InfluxDB 有何用? 描述: InfluxDB 主要用于存储和查询数据、度量、事件和实时分析的可扩展数据存储,在后台处理数据以用于 ETL 或监控和警报目的、用户仪表板以及可视化和探索数据等的 API。 常用于物联网、分析和云应用程序的时间序列数据平台以及存储大量资源监控数据指标, 所以通常其还会与Grafana联用进行数据的展示。
Q: InfluxDB 时间序列平台的优点有那些?
用于实时应用程序的强大 API 和 工具集, 可以用你喜欢的语言(InfluxDB API、Arduino、C#、Go、Java、JavaScript、Kotlin、Node.js、PHP、Python、R、Ruby、Scala 和 Swift)编写代码
高性能时间序列引擎
庞大的云和开源开发人员社区
内存占用较少
Q: 版本区别说明 描述: InfluxDB 当前主要发型版分为社区版本(免费) 和 企业版本(收费), 通常我们使用社区版本即可, 它包含了基本的时间序列工具包,社区版本当前master分支为 2.x 版本, 但是对于想使用 1.x 版本可以在Github或者Docker镜像中找寻到其。InfluxDB 2.x 相比较于 InfluxDB 1.x 来说性能有很大的提升并且将 influxCLI 不再打包在来自influxdb需要单独下载, 其次是有关系型数据库基础的朋友可能比较喜欢 InfluxDB 1.x 因为其查询更加贴近,而 2.x 版本中增删改查都有较大的变化。
[TOC]
0x00 前言简述 InfluxDB 介绍 Q: 什么是InfluxDB?
InfluxDB 采用Go语言开发是一个开源时间序列平台, 是一个可编程且高性能的时间序列数据库,具有跨 OSS、云和企业产品的通用 API。 简单描述: Influxdb是由Golang 构建的时序数据库,由于由Go语言构建使得其跨平台部署相对方便。
Q: InfluxDB 有何用? 描述: InfluxDB 主要用于存储和查询数据、度量、事件和实时分析的可扩展数据存储,在后台处理数据以用于 ETL 或监控和警报目的、用户仪表板以及可视化和探索数据等的 API。 常用于物联网、分析和云应用程序的时间序列数据平台以及存储大量资源监控数据指标, 所以通常其还会与Grafana联用进行数据的展示。
Q: InfluxDB 时间序列平台的优点有那些?
用于实时应用程序的强大 API 和 工具集, 可以用你喜欢的语言(InfluxDB API、Arduino、C#、Go、Java、JavaScript、Kotlin、Node.js、PHP、Python、R、Ruby、Scala 和 Swift)编写代码
高性能时间序列引擎
庞大的云和开源开发人员社区
内存占用较少
Q: 版本区别说明 描述: InfluxDB 当前主要发型版分为社区版本(免费) 和 企业版本(收费), 通常我们使用社区版本即可, 它包含了基本的时间序列工具包,社区版本当前master分支为 2.x 版本, 但是对于想使用 1.x 版本可以在Github或者Docker镜像中找寻到其。InfluxDB 2.x 相比较于 InfluxDB 1.x 来说性能有很大的提升并且将 influxCLI 不再打包在来自influxdb需要单独下载, 其次是有关系型数据库基础的朋友可能比较喜欢 InfluxDB 1.x 因为其查询更加贴近,而 2.x 版本中增删改查都有较大的变化。1 2 3 4 5 show databases; influx write -b primary -o primary -p 't01,building=boli,floor=702a temp=24.51651036342'
温馨提示: 2019 年 1 月 11 日左右,这个仓库上的 master 将成为 InfluxDB 2.0 代码,infludata/platform 的内容将移至此存储库。如果你依赖于 master,你应该更新你的依赖来跟踪 maxter-1.x 分支。
温馨提示: InfluxDB 1.x 数据存储在数据库(database)中,InfluxDB OSS 2.2中,数据存储在桶(bucket)中。
InfluxDB 参考来源 influxdb 官网地址: https://influxdata.com/ influxdb 帮助文档: https://docs.influxdata.com/influxdb/latest/introduction/get-started/ influxdb Release: https://github.com/influxdata/influxdb/releases influxdb v2.x 客户端工具 :https://github.com/influxdata/influx-cli
0x01 安装部署 描述: 我们可以采用多种方式进行安装部署 InfluxData , 例如 Docker 映像、Debian 包、RPM 包和 InfluxDB 的压缩包等方式安装。 温馨提示: influx 命令行界面 (CLI) 客户端作为单独的二进制文件提供在同一位置。
使用 Docker 安装 IndluxDB 2.x 安装步骤 步骤 01.直接运行docker run创建一个influxdb2容器。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 mkdir /opt/influxdb-docker-data-volume && cd $_ docker run --name influxdb2 -d -p 8086:8086 \ -e DOCKER_INFLUXDB_INIT_MODE=setup \ -e DOCKER_INFLUXDB_INIT_USERNAME=admin \ -e DOCKER_INFLUXDB_INIT_PASSWORD=weiyigeek.top \ -e DOCKER_INFLUXDB_INIT_ORG=weiyigeek \ -e DOCKER_INFLUXDB_INIT_BUCKET=primary \ --volume $PWD :/var/lib/influxdb2 \ influxdb:2.2.0 DOCKER_INFLUXDB_INIT_MODE=setup DOCKER_INFLUXDB_INIT_USERNAME=admin DOCKER_INFLUXDB_INIT_PASSWORD=password DOCKER_INFLUXDB_INIT_ORG=org DOCKER_INFLUXDB_INIT_BUCKET=bucket
参考地址:
使用 Helm 在 Kubernetes 安装 InfluxDB 2.x 描述: 此处为了方便快捷安装部署influxdb,我在Kubernetes集群环境中采用helm
方式(安装使用请参考【 https://blog.weiyigeek.top/2021/6-10-617.html 】)进行InfluxData
的安装部署。
实践操作 步骤 01.添加Chart仓库并在其仓库中搜索influxdb1 2 3 4 5 helm repo add bitnami https://charts.bitnami.com/bitnami helm repo update && helm search repo influxdb helm show values bitnami/influxdb > influxdb.yml
步骤 03.执行如下命令安装influxdb需指定修改后的Chart图表相关values的influxdb.yml文件。1 2 3 4 5 6 7 8 9 10 11 helm install prometheus-influxdb bitnami/influxdb -f influxdb.yml --version 5.3.1 -n devtest --debug --create-namespace InfluxDB™: prometheus-influxdb.devtest.svc.cluster.prod (port 8086) InfluxDB™ Prometheus Metrics: prometheus-influxdb-metrics.devtest.svc.cluster.prod (port 9122) kubectl run prometheus-influxdb-client --rm --tty -i --restart='Never' --namespace devtest \ --image docker.io/bitnami/influxdb:2.2.0-debian-10-r41 --privileged=true \ --command -- bash kubectl port-forward svc/prometheus-influxdb 8086:8086
步骤 04.验证部署的influxdb的Pod以及Service,然后进入prometheus-influxdb的Pod里shell终端中.1 2 3 4 5 6 7 8 9 10 kubectl get pod,svc -n devtest -l app.kubernetes.io/component=influxdb kubectl exec -n devtest -it prometheus-influxdb-5fbc6d5f9d-ww6ck -- bash I have no name!@prometheus-influxdb-5fbc6d5f9d-ww6ck:/$
步骤 06.在prometheus-influxdb-5fbc6d5f9d-ww6ck终端中执行influx命令。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 I have no name!@prometheus-influxdb-5fbc6d5f9d-ww6ck:/$ env | egrep "^INFLUXDB" INFLUXDB_ADMIN_USER_TOKEN=1VreF2TZuek7V6hmnquF INFLUXDB_ADMIN_ORG=primary INFLUXDB_CREATE_USER_TOKEN=no INFLUXDB_ADMIN_USER=admin INFLUXDB_HTTP_AUTH_ENABLED=true INFLUXDB_ADMIN_BUCKET=primary INFLUXDB_ADMIN_USER_PASSWORD=iSzWSexDso $ influx version Influx CLI dev (git: none) build_date: 2022-04-11T15:46:15Z $ influx ping OK $ influx server-config { "assets-path" : "" , "bolt-path" : "/bitnami/influxdb/influxd.bolt" , "e2e-testing" : false , "engine-path" : "/bitnami/influxdb" , "feature-flags" : null, "flux-log-enabled" : false , "hardening-enabled" : false , "http-bind-address" : "0.0.0.0:8086" , "http-idle-timeout" : 180000000000, "http-read-header-timeout" : 10000000000, "http-read-timeout" : 0, "http-write-timeout" : 0, "influxql-max-select-buckets" : 0, "influxql-max-select-point" : 0, "influxql-max-select-series" : 0, "log-level" : "info" , "metrics-disabled" : false , "nats-max-payload-bytes" : 0, "nats-port" : 0, "no-tasks" : false , "pprof-disabled" : false , "query-concurrency" : 1024, "query-initial-memory-bytes" : 0, "query-max-memory-bytes" : 0, "query-memory-bytes" : 0, "query-queue-size" : 1024, "reporting-disabled" : false , "secret-store" : "bolt" , "session-length" : 60, "session-renew-disabled" : false , "sqlite-path" : "/bitnami/influxdb/influxd.sqlite" , "storage-cache-max-memory-size" : 1073741824, "storage-cache-snapshot-memory-size" : 26214400, "storage-cache-snapshot-write-cold-duration" : "10m0s" , "storage-compact-full-write-cold-duration" : "4h0m0s" , "storage-compact-throughput-burst" : 50331648, "storage-max-concurrent-compactions" : 0, "storage-max-index-log-file-size" : 1048576, "storage-no-validate-field-size" : false , "storage-retention-check-interval" : "30m0s" , "storage-series-file-max-concurrent-snapshot-compactions" : 0, "storage-series-id-set-cache-size" : 0, "storage-shard-precreator-advance-period" : "30m0s" , "storage-shard-precreator-check-interval" : "10m0s" , "storage-tsm-use-madv-willneed" : false , "storage-validate-keys" : false , "storage-wal-fsync-delay" : "0s" , "storage-wal-max-concurrent-writes" : 0, "storage-wal-max-write-delay" : 600000000000, "storage-write-timeout" : 10000000000, "store" : "disk" , "testing-always-allow-setup" : false , "tls-cert" : "" , "tls-key" : "" , "tls-min-version" : "1.2" , "tls-strict-ciphers" : false , "tracing-type" : "" , "ui-disabled" : false , "vault-addr" : "" , "vault-cacert" : "" , "vault-capath" : "" , "vault-client-cert" : "" , "vault-client-key" : "" , "vault-client-timeout" : 0, "vault-max-retries" : 0, "vault-skip-verify" : false , "vault-tls-server-name" : "" , "vault-token" : "" }
步骤 07.查看influxdb提供的UI界面, 此处我们可编辑svc将其通过NodePort方式保留服务, 也可通过port-forward临时转发其服务端口, 然后便可通过浏览器访问mater节点+32506端口进行访问。1 2 3 4 5 6 7 8 9 $ kubectl edit svc -n devtest prometheus-influxdb $ kubectl get svc -n devtest prometheus-influxdb NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE prometheus-influxdb NodePort 10.98.134.121 <none> 8086:32506/TCP,8088:30441/TCP 6d3h kubectl port-forward -n devtest --address 0.0.0.0 svc/prometheus-influxdb 32506:8086
温馨提示: 此处登陆密码为前面env环境中获取的INFLUXDB_ADMIN_USER
与INFLUXDB_ADMIN_USER_PASSWORD
环境变量值(admin/iSzWSexDso)。
weiyigeek.top-influxdb-UI
步骤 08.安装并使用客户端工具连接创建的prometheus-influxdb远程influxdb数据库。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 kubectl run prometheus-influxdb-client --namespace devtest --rm --tty -i --restart='Never' --image docker.io/bitnami/influxdb:2.2.0-debian-10-r41 --privileged=true -- bash wget -c https://dl.influxdata.com/influxdb/releases/influxdb2-client-2.3.0-linux-amd64.tar.gz && tar -zxvf influxdb2-client-2.3.0-linux-amd64.tar.gz cp influxdb2-client-2.3.0-linux-amd64/influx /usr/local /bin/influx source <(influx completion bash)source <(influx completion zsh)Invoke-Expression ((influx completion powershell) -join "`n`" )
温馨提示: 在V2.x版本及其之后客户端工具已经从influxdb中分离开成为一个独立的项目(https://github.com/influxdata/influx-cli/
)。
温馨提示: 如果希望自动补全在其它shell会话中也可以将该命令加入到~/.bash_profile
文件中使得下次打开shell终端可以自动补全。1 2 3 4 tee -a ~/.bash_profile <<'EOF' source <(influx completion bash)EOF source ~/.bash_profile
步骤 09.安装完成后使用 influx命令 添加需要连接的 influxdb 数据库。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 influx config create -a -n prometheus-influxdb -t 1VreF2TZuek7V6hmnquF -o primary -u http://prometheus-influxdb:8086 influx config create -a -n prometheus-influxdb -t 1VreF2TZuek7V6hmnquF -o primary -u http://10.98.134.121:8086 $ influx config Active Name URL Org * prometheus-influxdb http://10.98.134.121:8086 primary $ influx ping OK $ influx config rm prometheus-influxdb Active Name URL Org Deleted * prometheus-influxdb http://10.98.134.121:8086 true
步骤 10.influx 2.x 数据库数据增删改查。1 2 3 4 5 6 7 influx write -b primary -o primary 'airSensors,sensor_id=home temperature=71.18922021239435,humidity=35.096794192432846,co=0.49012238573499495' influx write -b primary -o primary 'airSensors,sensor_id=home temperature=72.18922021239435,humidity=36.096794192432846,co=0.50012238573499495' influx write -b primary -o primary 'airSensors,sensor_id=home temperature=73.18922021239435,humidity=37.096794192432846,co=0.51012238573499495' influx delete -b primary -o primary -p sensor_id=home --start '2022-06-05T08:26:39.455Z' --stop '2022-06-10T09:50:39.455Z'
weiyigeek.top-利用Influxdb中DataExplorer查看插入的数据
温馨提示: 使用 influx query
命令后如果想要退出查询, 则可以按下 ctrl + d
。
使用 kubectl 在 Kubernetes 部署 InfluxDB 1.X 描述: 在k8s集群中可能我们常常会使用kubectl客户端工具指定资源清单的进行apply以部署相应资源,此处我们将演示以资源清单方式部署 InfluxDB 1.X。
温馨提示: 当前【2022年6月7日 19:51:14】1.X 最新的InfluxDB版本为 1.8.10。
步骤 01.准备的部署influxdb的资源清单如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 tee influxdb-Deployment.yaml <<'EOF' apiVersion: v1 kind: Service metadata: labels: app: influxdb name: influxdb spec: ports: - name: http nodePort: 30083 port: 8083 protocol: TCP targetPort: 8083 - name: api nodePort: 30083 port: 8086 protocol: TCP targetPort: 8086 - name: graphite nodePort: 30003 port: 2003 protocol: TCP targetPort: 2003 selector: app: influxdb sessionAffinity: None type: NodePort --- apiVersion: apps/v1 kind: Deployment metadata: name: influxdb labels: app: influxdb spec: replicas: 1 selector: matchLabels: app: influxdb template: metadata: labels: app: influxdb spec: containers: - image: influxdb:1.8.10 imagePullPolicy: IfNotPresent name: influxdb ports: - containerPort: 8083 name: influx protocol: TCP - containerPort: 8086 name: api protocol: TCP - containerPort: 2003 name: graphite protocol: TCP volumeMounts: - mountPath: /etc/influxdb name: config-volume - mountPath: /var/lib/influxdb/ name: data restartPolicy: Always terminationGracePeriodSeconds: 30 volumes: - name: config-volume configMap: defaultMode: 420 name: influxdb-config - name: data hostPath: path: /nfsdisk-31/datastore/influxdb/data type: DirectoryOrCreate EOF
步骤 02.准备influxdb使用的配置文件并存放到configMap资源控制器下。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 tee influxdb.conf <<'EOF' [meta] dir = "/var/lib/influxdb/meta" [data] dir = "/var/lib/influxdb/data" engine = "tsm1" wal-dir = "/var/lib/influxdb/wal" [[graphite]] enabled = true bind -address = ":2003" database = "appdb" EOF $ kubectl create cm influxdb-config --from-file=influxdb.conf configmap/influxdb-config created
步骤 03.使用kubectl工具按照influxdb-Deployment.yaml资源清单中的内容进行安装部署, 并且查看其部署情况。1 2 3 4 5 6 7 8 9 10 $ kubectl apply -f influxdb-Deployment.yaml $ kubectl get pod,svc -l app=influxdb
步骤 04.进入到influxdb-f54d77bc6-cp46r的Pod容器内部shell终端,并使用influx客户端连接到默认的 influxdb 服务端口上。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 $ kubectl exec -it influxdb-f54d77bc6-cp46r bash root@influxdb-f54d77bc6-cp46r:/ Connected to http://localhost:8086 version 1.8.10 InfluxDB shell version: 1.8.10 > help Usage: connect <host:port> connects to another node specified by host:port auth prompts for username and password pretty toggles pretty print for the json format chunked turns on chunked responses from server chunk size <size> sets the size of the chunked responses. Set to 0 to reset to the default chunked size use <db_name> sets current database format <format> specifies the format of the server responses: json, csv, or column precision <format> specifies the format of the timestamp: rfc3339, h, m, s, ms, u or ns consistency <level> sets write consistency level: any, one, quorum, or all history displays command history settings outputs the current settings for the shell clear clears settings such as database or retention policy. run 'clear' for help exit /quit/ctrl+d quits the influx shell show databases show database names show series show series information show measurements show measurement information show tag keys show tag key information show field keys show field key information > create user "root" with password 'weiyigeek.top' with all privileges > show databases name: databases name ---- _internal > create database "jmeter" > use jmeter Using database jmeter > show MEASUREMENTS name: measurements name ---- Upgrade-Insecure-Requests: events > select * from events name: events time application text title ---- ----------- ---- ----- 1654483349859000000 nginx Test name started ApacheJMeter 1654483351852000000 nginx Test name ended ApacheJMeter
0x02 InfluxDB2.X 数据查询 描述: 在 InfluxDB2.x 中提供了两种语法查询数据,Flux 和 InfluxQL。
Flux - 功能给你性脚本语言 描述: Flux 一门新的功能性数据脚本语言(Flux Script),旨在将查询、处理、分析和对数据的操作统一为一个语法,这里仅介绍针对查询需要的一些常用函数和操作,了解更多Flux见Flux官方文档。
基础规定, 每个查询语句必须包含数据源,时间区间和过滤器, 对应关键字分别为 from,range,filter。实际上不包含filter也是可以的,可以理解为filter过滤条件就是all,所以说Flux查询遵循如下几个步骤.
指定数据源
时间范围
过滤数据
对数据整形、聚合函数(重新组织数据结构)
输出结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 from(bucket: "demo-bucket" ) |> range(start: -1d) |> range(start: 2022-06-10T02:20:10.765Z, stop: 2022-06-11T02:20:10.765Z ) |> filter(fn: (r) => r["_measurement" ] == "student" ) |> filter(fn: (r) => r["std_name" ] == "weiyigeek" ) |> filter(fn: (r) => r["_field" ] == "score" ) |> aggregateWindow(every: 1s, fn: mean, createEmpty: false ) |> yield(name: "results" )
weiyigeek.top-使用Flux进行influxDB数据查询
Flux 标准库(部分) 该部分列举常用flux标准库函数,根据用法可举一反三使用所有标准库函数
buckets() :返回当前组中所有的桶
from(bucket: “demo-bucket”) : 指定从那个bucket查询数据
range() : 指定时间区间range接收两个参数start和stop, 其中stop可以省略缺省值是当前时间,而start不能省略否则会报语法错误。
1 2 3 4 5 6 from(bucket:"weiyigeek" ) |> range(start: -1h) from(bucket:"weiyigeek" ) |> range(start: 2021-01-01T00:00:00Z, stop: 2021-01-01T12:00:00Z)
filter() : 对数据进行过滤,接收一个判断函数,其类似于类似于java中的lamda, 例如(r) => (r.recordProperty comparisonOperator comparisonExpression)
。
1 2 3 4 5 6 7 from(bucket:"demo" ) |> range(start: -1h) |> filter(fn: (r)=>(r.owner=="weiyigeek" )) |> filter(fn: (r)=>(r.owner=="weiyigeek" or r["std_name" ] == "weiyigeek" )
contains(value, set) :判断value是否包含在set中。
1 2 3 4 5 fiels = ["tencent" ,"ali" ] from(bucket: "demo" ) |> range(start: 2022-03-12T08:14:04Z,stop:2022-03-13T08:19:05Z) |> filter(fn: (r) => contains(value:r.owner,set :fiels))
window(very, period, offset) : 该函数根据时间将数据分组。
very 指定每个时间窗口的时间,例如 every = 5 那么 时间窗口可以是 0m-5m,5m-10m,10m-15m。默认为 period 的值 period 明确在每个时间窗口中需要从时间窗口起始到多久的数据,例如时间窗口为10m-15m period = 3 则只取10m-13m的数据,13m-15m的数据会被抛弃。默认为 every 的值 offset 指定每个时间窗口的时间偏移量,例如时间窗口为10m-15m offset = 3 那么会取 13m-15m的数据,10m-13m的数据会被抛弃,但注意当offset = every 时 offset不生效。且offset大于every 时 生效offset = offset % every
min() : column 求最小值的列默认为_value , 取每个分组中最小值
max() : column 求最大值的列默认为_value , 取每个分组中最大值
1 2 3 4 5 6 7 from(bucket: "demo-bucket" ) |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement" ] == "student" and r._field == "score" ) |> max() |> yield(name: "mean" )
bottom(n:10, columns: [“_value”]) :根据columns进行排序并返回最上层n条记录。
count(column: “_value”) :统计_value列中的数据个数。
columns(column: “_value”) : 返回所有列标签名并存储在指定的列中默认为_value 通过column参数指定.
cumulativeSum(columns: [“_value”]) : 根据给定列对该列数据进行累加,模拟输出忽略 _start, _stop 等列.
1 2 3 4 5 6 7 8 9 10 11 12 13 _measurement _field 62 temperature wxm 62 temperature wxm 65 temperature wxm 81.5 temperature wxm 81.5 _measurement _field 62 temperature wxm 62 temperature wxm 127 temperature wxm 208.5 temperature wxm 290
group(columns: [“host”, “_measurement”], mode:”by”) : 按那些列进行分组操作默认值为[]。
1 2 3 - "by" , 按columns内指定的列进行分组. - "expect" , 按除了columns列中指定的列进行分组.
derivative(unit: 1s, nonNegative: true, columns: [“_value”], timeColumn: “_time”) :计算后续非空记录之间每单位时间的更改率。输出表架构将与输入表相同
unit 求多长时间内的变化速率。变化速率=(下一个值-上一个值)/(下一个时间-上一个时间)* unit 默认值1s nonNegative 变化速率是否可以是负值,如果是负数influxdb会假定前一个值为0 默认值true columns 指定计算变化速率的列 默认值 [“_value”] timeColumn 手动指定时间列 默认值 “_time”
difference(nonNegative: false, columns: [“_value”]) : 计算指定列中后续非null记录之间的差异。
nonNegative 是否允许差值为负数,如果是负数influxdb会假定前一个值为0 默认值false, 计算相邻两行的差值(next-pre) keepFirst 是否保留第一行,默认值为false
distinct(column: “host”): 按指定列去重.
InfluxQL - 关系型数据库查询 描述: InfluxDB 1.x数据存储在数据库(database)中,InfluxDB OSS 2.2中,数据存储在桶(bucket)中, 由于InfluxQL使用了1.x数据模型,在使用InfluxQL进行查询之前,必须将桶映射到一个数据库和保留策略(DBRP)。可以这样理解 InfluxQL 只有数据库才能使用,如果想要在桶上也能使用只有将桶映射成数据库。
使用InfluxQL查询桶数据,需要完成以下步骤:
1、确认桶有映射;
2、映射未映射的桶;
3、使用InfluxQL查询已映射的桶;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 influx v1 dbrp list influx v1 dbrp list --bucket-id 04deb39109ae7bc6 $ influx bucket ls -o demo -n demo-bucket $ influx v1 dbrp create \ --db test_db \ --rp test_rp \ --bucket-id 2d0184d3af5ec8b2 \ --org demo \ --default curl --get \ "http://10.98.134.121:8086/query" \ --header "Authorization: Token nxlkweOIxTOYQhNzI4QtuBHrKQtyOLFkA2KzJsBpO71hxZT7i6rmdyIgSuexuKbda1qL9x8vjJWUUH5rzBleKA==" \ --data-urlencode "q=SELECT * FROM test_db.test_rp.hobby" influx v1 dbrp delete --id 097f79ebcbee5000