InfluxDB 學習筆記

前言

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: '',
// 預設 port 號會自動設定為 8086
hosts: [{ host: 'IP' }],
});

// 在設定檔中新增 method
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, 並設定他的 DURATION2h, 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

SHOW USERS

建立一般使用者

語法

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>


範例

SHOW GRANTS FOR "todd"


重新設定使用者密碼

語法

SET PASSWORD FOR <username> = '<password>'


範例

SET PASSWORD FOR <username> = '<password>'


刪除使用者

語法

DROP USER <username>


範例

DROP USER "todd"


使用 Google Stackdriver 來除錯, 追蹤, 紀錄 以及部署紀錄點 Netdata 學習筆記

留言

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×