一. 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
這里需要注意的是:
- "device"、"path"為tag,實際執行中應該將tag作為where子句的字段,而不能將field作為where子句的字段,因為field不能索引。
- 在查詢語句中,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
