influxes 基本概念
1.安裝
兩種,虛機的話直接下載二進位文件起就好了,容器也很方便,存儲掛載到/var/lib/influxdb 起就ok,配置文件可以通過configmap掛載進去。
2. 概念
2.1 database
CREATE DATABASE xx
SHOW DATABASES
USE mydb
2.2 measurement
相當於sql裡面的table概念。
寫數據格式:
<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]
例如:
cpu,host=serverA,region=us_west value=0.64
payment,device=mobile,product=Notepad,method=credit billed=33,licenses=3i 1434067467100293230
stock,symbol=AAPL bid=127.46,ask=127.48
temperature,machine=unit42,type=assembly external=25,internal=37 1434067467000000000
跟普通sql來說就多了tags ,多了k/v的數據
Cli 裡面可以用insert 插入
> create database mydb
> use mydb
Using database mydb
> INSERT cpu,host=serverA,region=us_west value=0.64
> SELECT "host", "region", "value" FROM "cpu"
name: cpu
time host region value
---- ---- ------ -----
1577934903004849943 serverA us_west 0.64
插入了一行到cpu這個指標,標籤上host,region。
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
> select * from temperature
name: temperature
time external internal machine type
---- -------- -------- ------- ----
1577935315876294939 25 37 unit42 assembly
influxdb還有個RETENTION的概念,就是創建database的時候能指定retention
CREATE DATABASE <database_name> [WITH [DURATION <duration>] [REPLICATION <n>] [SHARD DURATION <duration>] [NAME <retention-policy-name>]]
如果不指定,會默認使用autogen,
> show retention policies
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
這是一個很重要的特性,通過他能自動刪老舊數據。
3. the Time-Structured Merge Tree (TSM)
比B+ 或者lsm樹更高的壓縮比,(壓縮比有多高? 那個文檔里寫了提升45倍的壓縮包 ),高寫入高讀取。
非常完善的一個stroge engine ,包括wal database才有的特性,可以研讀一下程式碼。
細節可以看
//docs.influxdata.com/influxdb/v1.7/concepts/storage_engine/
//docs.influxdata.com/influxdb/v1.7/query_language/database_management/#retention-policy-management
4. 聚合
基本上跟sql的差不多。都是select 開頭,提供了豐富的聚合函數。
詳細文檔: //docs.influxdata.com/influxdb/v1.7/query_language/functions/#aggregations
5. 資源分配
cpu來看差不多需要1個cpu ,優化的還是挺好的。
記憶體佔用就看數據量和tags了。tag數量越多,數據越多,佔用記憶體越大,這個要注意的,
這個database數據量(達到一個很大的規模,這個我忘了具體多少了)上去了以後還是會掛的,變得很不穩定。
6. Prometheus 使用influxdb做remote read,write
這個我看有些部落格說是要編譯adatper ,早期可能需要, 現在其實不用了,官方早已支援的很好。
//docs.influxdata.com/influxdb/v1.7/supported_protocols/prometheus/
remote_write:
- url: "//localhost:8086/api/v1/prom/write?db=prometheus&u=username&p=password"
remote_read:
- url: "//localhost:8086/api/v1/prom/read?db=prometheus&u=username&p=password"
如果沒有用戶名密碼認證的話,把username和password去掉即可。
這裡有個小tips,prometheus內部維護了一個metric,用來記錄沒有寫成功的count,prometheus_remote_storage_failed_samples_total , 這個值要看一下是否有失敗。
參考
//docs.influxdata.com/influxdb/v1.7/introduction/getting-started/
//docs.influxdata.com/influxdb/v1.7/concepts/storage_engine/