1. 程式人生 > >配置 influxDB 鑑權及 HTTP API 寫資料的方法

配置 influxDB 鑑權及 HTTP API 寫資料的方法

本文簡要描述如何為 InfluxDB 開啟鑑權和配置使用者管理許可權(安裝後預設不需要登入),以及開啟鑑權後如何使用 HTTP API 寫資料。

建立 InfluxDB 管理員賬號

建立 admin 帳號密碼並賦予所有資料庫許可權

  1. 建立

    CREATE USER admin WITH PASSWORD ‘admin‘
    
  2. 賦權

    GRANT ALL PRIVILEGES TO admin
    

其他命令

  • 修改使用者(密碼)

    SET PASSWORD FOR admin = ‘admin‘
    
  • 刪除使用者

    DROP USER admin
    
  • 撤消許可權

    REVOKE ALL  ON  mydb   FROM admin
    
  • 檢視許可權

    SHOW GRANTS FOR admin
    

開啟認證

vi /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 = false  
https-certificate = "/etc/ssl/influxdb.pem"

重啟 InfluxDB

命令列 CLI 登入

$ influx -username admin -password admin
Connected to http://localhost:8086 version 0.13.x
InfluxDB shell 0.13.x
>

或者

$ influx
Connected to http://localhost:8086 version 0.13.x
InfluxDB shell 0.13.x
> auth
username: admin
password:
>

HTTP API 查詢的方式變為

curl -G "http://localhost:8086/query" -u admin:admin --data-urlencode "q=SHOW DATABASES"
curl -G "http://localhost:8086/query" --data-urlencode "u=admin" --data-urlencode "p=admin" --data-urlencode "q=SHOW DATABASES"
curl -G "http://localhost:8086/query?u=admin&p=admin&q=SHOW+DATABASES"

開啟鑑權後如何寫資料

使用insert命令列寫資料:

> INSERT cpu_load_short,host=server01,region=us-west value=0.64,value2=0.86 1434055562000000000

使用HTTP API寫資料:

  • 使用者名稱密碼寫在 URL 中

    curl -i -X POST "http://localhost:8086/write?db=mydb&u=admin&p=admin" --data-binary "cpu_load_short,host=server01,region=us-west value=0.64,value2=0.86 1434055562000000000"
    
  • 使用者名稱密碼寫在 HTTP 頭 Authorization 選項

    curl -i -X POST "http://localhost:8086/write?db=mydb" -u admin:admin --data-binary "cpu_load_short,host=server01,region=us-west value=0.64,value2=0.86 1434055562000000000" 
    

除了命令關鍵字不同,資料部分基本相同,僅觀察一下資料部分:

cpu_load_short,host=server01,region=us-west value=0.64,value2=0.86 1434055562000000000

這行資料含有兩個空格,將之分為三個部分:

  • 第一部分: cpu_load_short,host=server01,region=us-west
    第一部分稱為key,key中包含了measurement name和tags(tags又分為tag key和tag value,tags可以有多個),例子中的“cpu_load_short”就是measurement name,“host”和“reginon”是tag key,“server01”和“us-west”是對應的tag value。在我看來,measurement name和MySQL資料庫的表名是等同的。另外,在tag value中的空格應以“/”加上空格表示,若有多個tag value,可以使用逗號隔開,但是應以“/”加逗號表示。

  • 第二部分:value=0.64,value2=0.86
    第二部分稱為Field,同樣和tags的形式相同,都是鍵值對的形式,但是tags中的值必須是string型別,而Field中的值可以為Integer、float、Boolean、string型別,若為Integer型別,則值後必須加“i”,否則該值為float型別,比如value=23意味著這個值23是float型別,而value=23i,意味著值23是Integer型別。Boolean型別的值的表示方式有很多,直接寫成:t, T, true, TRUE, f, F, false或 FALSE都可以。

  • 第三部分(可選):1434055562000000000
    第三部分稱為Timestamp,是時間戳,如果該部分省略,則預設將當前時間的時間戳插入資料庫,否則按照使用者輸入的時間戳插入。

第一種寫資料方式
產生 HTTP 包(使用 Chrome 外掛 Postman 生成)

POST /write?db=mydb HTTP/1.1
Host: 192.168.6.93:8086
Authorization: Basic YWRtaW46YWRtaW4=
Cache-Control: no-cache
Postman-Token: d3ce583a-1e11-63ec-a818-034aeaa91f10

cpu_load_short,host=server01,region=us-west value=0.64,value2=0.86 1434055565000000000

第二種寫資料方式
產生 HTTP 包

POST /write?db=mydb&u=admin&p=admin HTTP/1.1
Host: 192.168.6.93:8086
Cache-Control: no-cache
Postman-Token: 6773f66a-de4c-435d-6469-0a1194752a86

cpu_load_short,host=server01,region=us-west value=0.64,value2=0.86 1434055565000000000