前言 InfluxDB 學習筆記,內容未整理,學到什麼記什麼
CLI CLI 中使用 where clause measurement 的 double quotes "
是必要的,但需要 escape
influx -execute "select * from \"netdata.ipv4.packets.delivered\" WHERE host = 'netdata' AND time > now() - 1m" -database 'opentsdb'
定時清理資料庫 可將以下的 command 寫成 shell script, 用 crontab 執行
influx -execute "delete WHERE time < now() - 1h" -database 'opentsdb'
串接 Node.js 安裝 npm install --save influx
串接檔範例 module .exports = (() => { const Influx = require ('influx/lib/src/index' ); const Netdata = new Influx .InfluxDB ({ database : 'opentsdb' , username : '' , password : '' , hosts : [{ host : 'IP' }], }); Netdata .getData = async (measurement, host, time = '1m' ) => { let toBeReturnedObject = []; let result = await Netdata .query ( `select * from "${measurement} " WHERE host = '${host} ' AND time > now() - ${time} ` ); result.map (dot => { let object = { host : dot.host , value : dot.value , time : Number (dot.time .getNanoTime ()) }; toBeReturnedObject.push (object); }); return toBeReturnedObject; }; return Netdata ; });
require 串接檔
後面需加上 ()
;const Netdata = require ('../models/netdatadb' )();
SHOW SHOW TAG VALUES SHOW TAG VALUES FROM "measurement" WITH KEY = "host"
SHOW TAG KEYS SHOW TAG KEYS on DBName from "measurement"
SHOW FIELD KEYS SHOW FIELD KEYS ON "database" FROM "measurement"
Downsampling and data retention 定義
Continuous query (QC): 自動且規律性的執行, 可以用來降低採樣率。 文件
Retention policies (RP): InfluxDB 資料結構的一部分, 決定 InfluxDB 要保留資料多長的時間 文件
建立 retention policies
語法範例
CREATE RETENTION POLICY "two_hours" ON "food_data" DURATION 2h REPLICATION 1 DEFAULT
在資料庫 food_data
中, 建立一個 RETENTION POLICY two_hours
, 並設定他的 DURATION 為 2h
, REPLICATION 1
為保留一台 node 的資料, DEFAULT
為此資料庫的預設 RP
當我們建立一個新的資料庫時, InfluxDB 會自動地產生一個 RP 叫做 autogen。 當我們建立另外一個 RP 並且設為 default 之後, autogen 將會被取代掉
建立 continuous query
語法範例
CREATE CONTINUOUS QUERY "cq_30m" ON "food_data" BEGIN SELECT mean("website") AS "mean_website",mean("phone") AS "mean_phone" INTO "a_year"."downsampled_orders" FROM "orders" GROUP BY time(30m) END
在資料庫 food_data
中建立一個 QC 名為 cq_30m
將 website
以及 phone
欄位的資料從 measurement orders
將上一行的資料匯入 retention policy a_year
中的 measurement downsampled_orders
計算區隔為每 30 分鐘
Retention Policy Duration 單位 | 解釋 — | ns | nanoseconds (1 billionth of a second) u or µ | microseconds (1 millionth of a second) ms | milliseconds (1 thousandth of a second) s | second m | minute h | hour d | day w | week
開啟身份驗證
開啟身份驗證之前, 請先建立至少一個 admin user
如果開啟了身份驗證, 但是沒有任何 admin user 的話, InfluxDB 將不會強制執行身份驗證, 並只會接受建立新的 admin user 的 query
打開設定檔
vim /etc/influxdb/influxdb.conf
將 [http] 中的 auth-enabled
更改為 true
[http] enabled = true bind-address = ":8086" auth-enabled = true # ✨ log-enabled = true write-tracing = false pprof-enabled = false https-enabled = true https-certificate = "/etc/ssl/influxdb.pem"
重新啟動 InfluxDB
systemctl restart influxdb
使用者權限管理 建立 admin 使用者 語法 CREATE USER <username> WITH PASSWORD '<password>' WITH ALL PRIVILEGES
範例 CREATE USER paul WITH PASSWORD 'timeseries4days' WITH ALL PRIVILEGES
給予現存使用者 admin 權限 語法 GRANT ALL PRIVILEGES TO <username>
範例 GRANT ALL PRIVILEGES TO "todd"
顯示目前所有使用者是否為 admin
建立一般使用者 語法 CREATE USER <username> WITH PASSWORD '<password>'
範例 CREATE USER todd WITH PASSWORD 'influxdb41yf3'
給予一般使用者非 admin 權限 語法 GRANT [READ,WRITE,ALL] ON <database_name> TO <username>
範例 GRANT READ ON "NOAA_water_database" TO "todd"
廢除一般使用者非 admin 權限 語法 REVOKE [READ,WRITE,ALL] ON <database_name> FROM <username>
範例 REVOKE ALL ON "NOAA_water_database" FROM "todd"
列出使用者權限 語法 SHOW GRANTS FOR <user_name>
範例
重新設定使用者密碼 語法 SET PASSWORD FOR <username> = '<password>'
範例 SET PASSWORD FOR <username> = '<password>'
刪除使用者 語法
範例
留言