InfluxDB2 数据查询
InfluxDB 是一个高可用性分布式时序性数据库。InfluxDB2 是第二代 InfluxDB 版本,同时也是一个开源、云原生、分布式时序性数据库。InfluxDB2 的数据查询主要分为三个方面:选择数据、过滤器和排序。
选择数据:使用 SELECT
从数据库中选择数据。
<body>
<script src="https://unpkg.com/@influxdata/influxdb-client"></script>
<script>
const influxDB = new InfluxDB({url: "http://localhost:8086", token: "Your Token"});
const queryApi = influxDB.getQueryApi("organizationId", "bucketId");
const query = `
from(bucket: "my-bucket")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu" and
r._field == "usage_user" and
r.cpu == "cpu-total")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
`;
queryApi.queryRows(query, {
next(row, tableMeta) {
console.log(row);
},
error(error) {
console.error(error);
},
complete() {
console.log("Query Completed");
}
});
</script>
</body>
过滤器:使用 WHERE
过滤器,用逻辑操作符 AND
、OR
、NOT
,以及比较操作符 =
、!=
、<
、<=
、>
、>=
。
<body>
<script src="https://unpkg.com/@influxdata/influxdb-client"></script>
<script>
const influxDB = new InfluxDB({url: "http://localhost:8086", token: "Your Token"});
const queryApi = influxDB.getQueryApi("organizationId", "bucketId");
const query = `
from(bucket: "my-bucket")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu" and
r._field == "usage_user" and
r.cpu == "cpu-total" and
r.host =~ /.*server.*/
`;
queryApi.queryRows(query, {
next(row, tableMeta) {
console.log(row);
},
error(error) {
console.error(error);
},
complete() {
console.log("Query Completed");
}
});
</script>
</body>
排序:使用 ORDER BY
对查询结果排序。
<body>
<script src="https://unpkg.com/@influxdata/influxdb-client"></script>
<script>
const influxDB = new InfluxDB({url: "http://localhost:8086", token: "Your Token"});
const queryApi = influxDB.getQueryApi("organizationId", "bucketId");
const query = `
from(bucket: "my-bucket")
|> range(start: -2h)
|> filter(fn: (r) => r._measurement == "cpu" and
r._field == "usage_user" and
r.cpu == "cpu-total")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> sort(columns: ["_time"], desc: false)
`;
queryApi.queryRows(query, {
next(row, tableMeta) {
console.log(row);
},
error(error) {
console.error(error);
},
complete() {
console.log("Query Completed");
}
});
</script>
</body>
InfluxDB2 登录
InfluxDB2 的登录主要包括通过命令行登录和通过 UI 进行登录两种方式。 通过命令行登录:
influx login
通过 UI 登录: 在浏览器中输入服务器地址和端口,进入登录界面,输入用户名和密码即可进行登录。
InfluxDB2 插入数据
InfluxDB2 的数据插入主要使用 InfluxDB 相关语言或工具进行插入。下面以 Node.js 和 Python 为例,介绍 InfluxDB2 数据插入的代码示例。 Node.js:
const {InfluxDB, Point} = require('@influxdata/influxdb-client')
const influxDB = new InfluxDB({
url: 'http://localhost:8086',
token: 'my-token',
})
const writeApi = influxDB.getWriteApi('org-id', 'bucket-id')
writeApi.useDefaultTags({host: 'host1'})
const point = new Point('cpu')
.tag('cpu', 'cpu-total')
.floatField('usage_user', 0.5)
writeApi.writePoint(point)
writeApi
.close()
.then(() => {
console.log('Write complete!')
})
.catch(e => {
console.error(e)
console.log('\nFinished ERROR')
})
Python:
from influxdb_client import InfluxDBClient
from influxdb_client.client.write_api import SYNCHRONOUS
client = InfluxDBClient(url="http://localhost:8086", token="my-token")
write_api = client.write_api(write_options=SYNCHRONOUS)
write_api.write(bucket="bucket-id", record="water_level,location=north value=1.0 1000000000") # 插入指标
InfluxDB2 创建持续查询
持续查询会周期性地查询数据,并写入到新的桶中。InfluxDB2 支持通过命令行或 UI 界面创建持续查询。 通过命令行创建持续查询:
influx v1 dbrp PRCWTI DBRP_DDL -execute 'CREATE CONTINUOUS QUERY myquery ON DBRP_DDL BEGIN SELECT mean("value") INTO DBRP_DDL.ms FROM PRCWTI GROUP BY time(1d), "tag" END'
通过 UI 界面创建持续查询: 在 InfluxDB2 UI 界面中,点击左侧面板的 "Tasks",点击页面右上角的 "Create Task",填写任务名称、任务运行周期、任务类型、查询语句等信息,并高亮选择下方的 "Save" 按钮即可完成持续查询的创建。
InfluxDB2 备份及恢复数据
InfluxDB2 支持数据的备份和恢复,可以通过命令行或 UI 界面进行操作。 通过命令行备份数据:
influxd backup -portable /backuplocation
通过命令行恢复数据:
influxd restore -portable /backuplocation
通过 UI 界面备份及恢复数据: 在 InfluxDB2 UI 界面中,点击左侧面板的 "Backup",选择数据备份类型,填写相关信息,点击 "Backup" 即可完成备份。 在 InfluxDB2 UI 界面中,点击左侧面板的 "Restore",选择需要恢复的备份文件,填写相关信息,点击 "Restore" 即可完成恢复。
InfluxDB2 集群搭建
InfluxDB2 支持集群搭建,可以通过命令行或 UI 界面进行搭建。 通过命令行搭建集群:
influxd-ctl add-tsm-node Node 1 --host 127.0.0.1 --peer-port 8091 --http-port 8092 --config-path /etc/influxdb/influxdb.conf --new-node-hostname New_Node_1
通过 UI 界面搭建集群: 在 InfluxDB2 UI 界面中,点击左侧面板的 "Nodes",点击 "Add Node",按照页面提示完成集群搭建。
InfluxDB2 数据删除
InfluxDB2 支持删除已经存储的数据,可以通过命令行或 UI 界面进行删除。 通过命令行删除数据:
influx delete --bucket BUCKET_NAME --start 2021-01-01T00:00:00Z --stop 2021-01-01T00:00:00Z --predicate "_measurement='MEASUREMENT_NAME'"
通过 UI 界面删除数据: 在 InfluxDB2 UI 界面中,点击左侧面板的 "Explorer",选择需要删除的桶,点击 "Delete Data",按照页面提示完成数据删除。
InfluxDB2 数据可视化
InfluxDB2 支持多种数据可视化方式,包括 Grafana、Chronograf、Flux 等。 Grafana: Grafana 是一个大数据可视化和分析平台,它可以和 InfluxDB2 进行集成,帮助用户更好地展示数据。在 Grafana 中,用户可以选择不同的可视化方式,包括图表、表格、仪表盘等。 Chronograf: Chronograf 是一个可视化和监控平台,可以和 InfluxDB2 进行集成,提供实时数据流和数据故障检测、数据分析和监控、整合和探索功能。Chronograf 提供了仪表盘、脚本构建器和神经网络构建器等功能,可以帮助用户更好地展示数据。 Flux: Flux 是 InfluxDB2 的新一代查询语言,它可以与 Grafana 等其他平台进行集成。Flux 可以通过代码方式可视化数据,提供多种数据可视化方式。