influxDB的使用

简介

InfluxDB是一个开源分布式时序、事件和指标数据库。使用Go语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。

win 使用docker 安装 influxDB

https://dl.influxdata.com/influxdb/releases/influxdb-1.7.7_windows_amd64.zip

1
docker pull influxdb:latest
1
2
3
4
5
docker run -d \
--name influxdb \
-p 8086:8086 \
--volume /var/docker/influxdb2.0:/var/lib/influxdb2 \
influxdb:latest
1
docker exec  -it 9a78e3803fda /bin/bash

image-20231118224557414

image-20231118213142006

token

1
7I2YKdt2QXHLeNu72LSkTp-MloUTTE5rhVDXL8gFmL95NO7C-5Ot4-bZon8PJwgrcsDamNWeIUOXPdVN90lwjA==
1
influx auth create -o org-name -all-access
1
O3TZy1oUlst_lzWhPbc4Fg9BNKb3HYNY_0g1S5E6liGghZTEpSgJgdKtQ2OHdXHtKl2_Uj4SVPc7OsL7t-x0Lg==
1
influx config ls

怎么部署性能监控平台,大佬指定一下 · TesterHome

Docker-Compose 轻松搭建 Grafana+InfluxDb 实用 Jmeter 监控面板 · TesterHome

查看配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package main

import (
"context"
"fmt"
influxdb2 "github.com/influxdata/influxdb-client-go/v2"
"time"
)

func main() {
// Create a new client using an InfluxDB server base URL and an authentication token
client := influxdb2.NewClient("http://localhost:8086", "Ki-3lIwR1A8WIJuXIa1od_nH2B164qs0i4_yS7H1mJ_NqiAs_6AIJ8ZUYAtT69eWvx9RIVSGFVtzZyPQ7DgdgA==")
// Use blocking write client for writes to desired bucket
writeAPI := client.WriteAPIBlocking("initOrgName", "initBucketName")
// Create point using full params constructor
p := influxdb2.NewPoint("stat",
map[string]string{"unit": "temperature"},
map[string]interface{}{"avg": 24.5, "max": 45.0},
time.Now())
// write point immediately
writeAPI.WritePoint(context.Background(), p)
// Create point using fluent style
p = influxdb2.NewPointWithMeasurement("stat").
AddTag("unit", "temperature").
AddField("avg", 23.2).
AddField("max", 45.0).
SetTime(time.Now())
err := writeAPI.WritePoint(context.Background(), p)
if err != nil {
panic(err)
}
// Or write directly line protocol
line := fmt.Sprintf("stat,unit=temperature avg=%f,max=%f", 23.5, 45.0)
err = writeAPI.WriteRecord(context.Background(), line)
if err != nil {
panic(err)
}

// Get query client
queryAPI := client.QueryAPI("initOrgName")
// Get parser flux query result
result, err := queryAPI.Query(context.Background(), `from(bucket:"initBucketName")|> range(start: -1h) |> filter(fn: (r) => r._measurement == "stat")`)
if err == nil {
// Use Next() to iterate over query result lines
for result.Next() {
// Observe when there is new grouping key producing new table
if result.TableChanged() {
fmt.Printf("table: %s\n", result.TableMetadata().String())
}
// read result
fmt.Printf("row: %s\n", result.Record().String())
}
if result.Err() != nil {
fmt.Printf("Query error: %s\n", result.Err().Error())
}
} else {
panic(err)
}
// Ensures background processes finishes
defer client.Close()
}

概念(总结自StackOverflow)

  • A bucket is named location with retention policy where time-series data is stored.
  • A series is a logical grouping of data defined by shared measurement, tag and field.
  • A measurement is similar to an SQL database table.
  • A tag is similar to indexed columns in an SQL database.
  • A field is similar to unindexed columns in an SQL database.
  • A point is similar to SQL row.

For example, a SQL table workdone:

Email Status time Completed
lorr@influxdb.com start 1636775801000000000 76
lorr@influxdb.com finish 1636775868000000000 120
marv@influxdb.com start 1636775801000000000 0
marv@influxdb.com finish 1636775868000000000 20
cliff@influxdb.com start 1636775801000000000 54
cliff@influxdb.com finish 1636775868000000000 56

The columns Email and Status are indexed.

Hence:

  • Measurement: workdone
  • Tags: Email, Status
  • Field: Completed
  • Series (Cardinality = 3 x 2 = 6):
    1. Measurement: workdone; Tags: Email: lorr@influxdb.com, Status: start; Field: Completed
    2. Measurement: workdone; Tags: Email: lorr@influxdb.com, Status: finish; Field: Completed
    3. Measurement: workdone; Tags: Email: marv@influxdb.com, Status: start; Field: Completed
    4. Measurement: workdone; Tags: Email: marv@influxdb.com, Status: finish; Field: Completed
    5. Measurement: workdone; Tags: Email: cliff@influxdb.com, Status: start; Field: Completed
    6. Measurement: workdone; Tags: Email: cliff@influxdb.com, Status: finish; Field: Completed
1
.\influx.exe bucket list -o initOrgName -t Ki-3lIwR1A8WIJuXIa1od_nH2B164qs0i4_yS7H1mJ_NqiAs_6AIJ8ZUYAtT69eWvx9RIVSGFVtzZyPQ7DgdgA==
1
config create --config-name example-config-name --host-url https://us-west-2-1.aws.cloud2.influxdata.com --org example-org --token 3lIwR1A8WIJuXIa1od_nH2B164qs0i4_yS7H1mJ_NqiAs_6AIJ8ZUYAtT69eWvx9RIVSGFVtzZyPQ7DgdgA==

influxDB的使用
http://example.com/2023/11/18/influxDB的使用/
作者
Forrest
发布于
2023年11月18日
许可协议