InfluxDB學習(二):InfluxDB數據庫、database、measurement、tag、field等基本操作


一. InfluxDB命令介紹

InfluxDB安裝完成后,在安裝目錄的usr/bin下包含InfluxDB的日常使用和管理的二進制文件

$ ls -lh usr/bin/
total 164M
-rwxr-xr-x 1 tnuser dba 51M Apr 12 15:56 influx
-rwxr-xr-x 1 tnuser dba 63M Apr 12 15:56 influxd
-rwxr-xr-x 1 tnuser dba 19M Apr 12 15:56 influx_inspect
-rwxr-xr-x 1 tnuser dba 12M Apr 12 15:56 influx_stress
-rwxr-xr-x 1 tnuser dba 21M Apr 12 15:56 influx_tsm

 influx:客戶端命令行工具

influxd:服務啟動腳本

influx_inspect:數據導出、TSM、Series文件操作等

influx_stress:數據庫壓力測試

influx_tsm:數據庫格式轉換工具,用戶將b1 or bz1 format 轉化為 tsm1格式

二. 數據庫操作

使用influx客戶端命令時,建議加上"-precision rfc3339"參數,這樣交互界面返回的時間將不再是timestamp,而是符合rfc339時間格式的時間戳"YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ)"

新建數據庫

> create database database_name

 查看數據庫

> show databases
name: databases
name
----
_internal

注意:“_internal”數據庫為InfluxDB內部存放元數據的數據庫。

進入指定數據庫

> use database_name

三. measurement(表)操作

1. InfluxDB語法

向InfluxDB數據庫中指定的measurement(表)中插入數據時遵循以下語法格式

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

其中,向measurement(表)中插入數據時並不需要預先創建measurement,InfluxDB會自動創建。

"<tag-key>=<tag-value>..."中的tag為一個或者多個鍵值對,tag的鍵可以理解為列名而tag的值可以理解為這個列對應的值,這個tag標簽的鍵和值在查詢時可以通過SQL的where條件進行過濾,並且是可以進行索引的。

"<field-key>=<field-value>..."中的field也是一個或者多個鍵值對,同樣,field的鍵可以理解為列名而field的值可以理解為這個列對應的值,與tag不同的是,field字段where條件查詢時不走索引,在數據量較大的時候再where子句中將field字段作為過濾條件,會引起性能瓶頸。

"unix-nano-timestamp"時間戳是可選的,如果向measurement中插入數據時不指定timestamp,InfluxDB會將本地系統時間作為timestamp插入到數據庫中。

根據以上描述,可以這樣定義:根據篩選條件查詢出來的數據可以作為field字段,而所有的篩選條件作為tag字段,因為tag可以作為where的條件過濾來篩選出你要的查詢的值(field字段)

2. 向InfluxDB插入數據

舉例說明:

現在要統計aws的ec2三台服務器的資源使用率,包括cpu使用率、mem使用率,disk使用率等指標

我們向InfluxDB插入以下數據

insert cpu,dc=us-west-2,server=ec2-dcas-address-db-01 user=5.2,system=1.0,idle=90.7,wait=3.1
insert cpu,dc=us-west-2,server=ec2-dcsindexsvc-01 user=11.1,system=15.9,idle=73.0,wait=4.0
insert cpu,dc=us-west-2,server=ec2-autodenalicontentpoi-01 user=3.1,system=8.6,idle=85.5,wait=2.0
insert memory,dc=us-west-2,server=ec2-dcas-address-db-01 total=8009556,free=1429412,used=278416
insert memory,dc=us-west-2,server=ec2-dcsindexsvc-01 total=32394732,free=482728,used=10256020
insert memory,dc=us-west-2,server=ec2-autodenalicontentpoi-01 total=31960732,free=16169728,used=421492
insert disk,dc=us-west-2,server=ec2-dcas-address-db-01,device=nvme0n1p1,path=/,fstype=xfs total=10474240,used=4657264,free=5816976,used_percent=45
insert disk,dc=us-west-2,server=ec2-dcas-address-db-01,device=nvme1n1,path=/data/01,fstype=xfs total=3144448000,used=1706236084,free=1438211916,used_percent=55
insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=xvda1,path=/,fstype=ext4 total=10189112,used=6806312,free=2858564,used_percent=71
insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=xvdb1,path=/data/01,fstype=ext4 total=206290964,used=88052144,free=107753200,used_percent=45
insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=nvme0n1p1,path=/,fstype=xfs total=10474240,used=7232364,free=3241876,used_percent=70
insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=nvme1n1p1,path=/data/02,fstype=ext4 total=515927296,used=236115064,free=253581500,used_percent=49
insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=nvme2n1p1,path=/data/backup,fstype=ext4 total=206291944,used=61476,free=195728376,used_percent=1
insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=nvme4n1p1,path=/data/01,fstype=ext4 total=103079864,used=78398680,free=19421972,used_percent=81

以上命令執行完成后,會在當前數據庫下新建三張measurement(表),查看當前數據庫中的measurement,可以看到我們當前有cpu、disk、memory三張measurement(表)

> show measurements
name: measurements
name
----
cpu
disk
memory

我們向三張measurement插入了不少數據,如何判斷每個字段是field或者是tag呢,例如存放cpu的measurement,我們插入的數據時就可以判斷,dc和server即為tag的鍵,而user、system、idle、wait為field,也可通過如下命令查看一個measurement中的tag和field字段

> show tag keys from disk
name: disk
tagKey
------
dc
device
fstype
path
server
> show field keys from disk
name: disk
fieldKey     fieldType
--------     ---------
free         float
total        float
used         float
used_percent float

3. 從Influxdb查詢數據

1. 從名稱為disk的measurement中查詢所有的數據

> select * from "disk"
name: disk
time                           dc        device    free       fstype path         server                      total      used       used_percent
----                           --        ------    ----       ------ ----         ------                      -----      ----       ------------
2020-04-19T15:16:40.866657083Z us-west-2 nvme0n1p1 5816976    xfs    /            ec2-dcas-address-db-01      10474240   4657264    45
2020-04-19T15:16:40.910642698Z us-west-2 nvme1n1   1438211916 xfs    /data/01     ec2-dcas-address-db-01      3144448000 1706236084 55
2020-04-19T15:16:40.930617525Z us-west-2 xvda1     2858564    ext4   /            ec2-autodenalicontentpoi-01 10189112   6806312    71
2020-04-19T15:16:40.950442939Z us-west-2 xvdb1     107753200  ext4   /data/01     ec2-autodenalicontentpoi-01 206290964  88052144   45
2020-04-19T15:16:40.970310916Z us-west-2 nvme0n1p1 3241876    xfs    /            ec2-dcsindexsvc-01          10474240   7232364    70
2020-04-19T15:16:40.99050202Z  us-west-2 nvme1n1p1 253581500  ext4   /data/02     ec2-dcsindexsvc-01          515927296  236115064  49
2020-04-19T15:16:41.010722937Z us-west-2 nvme2n1p1 195728376  ext4   /data/backup ec2-dcsindexsvc-01          206291944  61476      1
2020-04-19T15:16:41.660406121Z us-west-2 nvme4n1p1 19421972   ext4   /data/01     ec2-dcsindexsvc-01          103079864  78398680   81

2.根據過濾條件查詢數據

查詢server名稱為"ec2-dcsindexsvc-01"的磁盤總大小

> select "device", "path", "total" from "disk" where "server" = 'ec2-dcsindexsvc-01'
name: disk
time                           device    path         total
----                           ------    ----         -----
2020-04-19T15:16:40.970310916Z nvme0n1p1 /            10474240
2020-04-19T15:16:40.99050202Z  nvme1n1p1 /data/02     515927296
2020-04-19T15:16:41.010722937Z nvme2n1p1 /data/backup 206291944
2020-04-19T15:16:41.660406121Z nvme4n1p1 /data/01     103079864

這里需要注意的是:

  1. "device"、"path"為tag,實際執行中應該將tag作為where子句的字段,而不能將field作為where子句的字段,因為field不能索引。
  2. 在查詢語句中,tag、field鍵名需要用雙引號引起來,而將鍵值用單引號引起來,否則查詢的數據為空,或者報錯"ERR: error parsing query: found ******, expected identifier, string, number, bool at ******"

3. 根據聚合函數查詢

分別查詢disk中field total字段求和、最大值、平均值、最小值、時間戳最早的值、時間戳最近的值

> select sum("total"), max("total"), mean("total"), min("total"), first("total"), last("total") from disk
name: disk
time                 sum        max        mean        min      first    last
----                 ---        ---        ----        ---      -----    ----
1970-01-01T00:00:00Z 4207175660 3144448000 525896957.5 10189112 10474240 103079864


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM