使用JavaScript和InfluxDB 2.0入门
作者:Anais Dotis-Georgiou / 产品,用例,开发者
2020年4月13日
导航到
拥有200多个插件,Telegraf具有多种方法从InfluxDB中刮取、写入和查询数据。然而,有时用户需要在Telegraf的功能之外进行数据收集。也许他们需要收集自定义数据并监控应用程序性能。也许他们想利用外部工具和库为用户提供美观的基于Web的视觉展示。在这些情况下,利用InfluxDB的客户端库是有意义的。今天,我们将重点关注如何使用最新的InfluxDB JavaScript客户端库与InfluxDB 2.0一起使用。
重要提示:InfluxDB v1.8包括用于查询的Flux引擎以及InfluxDB v2 HTTP写入API。这意味着如果您今天还没有准备好使用InfluxDB v2,并且计划利用新的客户端库,您也可以使用!这些读取和写入兼容性选项可以让您的代码面向未来!
教程要求和设置
本教程在MacOS系统上执行,Node通过Homebrew安装,遵循Node.js文档。
#update brew before installing
brew update
brew install node
#check to make sure you have successfully installed Node and NPM
node -v
npm -v
开始使用InfluxDB v2 JavaScript客户端的最简单方法是克隆examples目录,该目录位于influxdb-client-js仓库中。
一旦成功克隆了目录,导航到它并运行
npm install
在index.html
和env.js
中指定您的授权参数。您需要指定组织、桶和令牌。现在我们准备在浏览器中使用客户端了
npm run browser
Npm将打开https://127.0.0.1:3001/examples/index.html,您将提示在行协议中写入数据点并通过UI查询它。您还可以注册用户并执行API健康检查。
授权参数
InfluxDB v2
为了使用客户端,您需要收集以下参数
- 令牌: 按照以下文档创建令牌:创建令牌。要查看您的令牌,可以使用UI或执行
influx auth find
- 组织: 要查看您的组织,可以使用UI或执行
influx org find
InfluxDB v1.8及以上版本
如果您计划使用这个新的客户端库与InfluxDB 1.8或更高版本一起使用,以下是一些关于收集所需授权参数的重要提示
- 桶名称: InfluxDB v1.x中没有桶的概念。然而,桶仅仅是数据库名称和其保留策略的组合。因此,您可以通过提供InfluxDB 1.x的数据库名称和保留策略(通过正斜杠(/)分隔)来指定此内容。如果不提供保留策略,则使用默认的保留策略。
例如:桶名称为telegraf/1week
允许您写入名为“telegraf”的InfluxDB 1.x数据库,其保留策略名为“1week”。同样,telegraf
/或telegraf
允许您写入名为“telegraf”的InfluxDB 1.x数据库和默认保留策略(通常是autogen
)。
- 令牌: InfluxDB v2中使用API令牌来访问平台及其所有功能。InfluxDB v1.x在访问HTTP API时使用用户名和密码组合。用冒号(:)分隔提供您的InfluxDB 1.x用户名和密码,以表示令牌。例如:
username:password
- 组织: 在兼容InfluxDB v1.x的模式下,忽略org参数,可以留空。
使用JavaScript客户端库向InfluxDB v2写入
示例中的点写入硬编码以包含测量值、标签键和标签值。该代码通过以下函数生成以下行协议temperature,example=index.html value=28.7
function writeExample(value) {
const writeApi = influxDB.getWriteApi(org, bucket)
// setup default tags for all writes through this API
writeApi.useDefaultTags({location: 'browser'})
log('\n*** WRITE ***')
const point1 = new Point('temperature')
.tag('example', 'index.html')
.floatField('value', value)
writeApi.writePoint(point1)
log(` ${point1}`)
// flush pending writes and close writeApi
writeApi
.close()
.then(() => {
log('WRITE FINISHED')
})
.catch(e => {
log('WRITE FAILED', e)
})
}
您将组织名和桶名提供给getWriteApi方法,该方法创建一个WriteApi。此方法还允许您包括一个精度参数以支持几种时间戳精度,默认是ns精度。
有几种数据格式化方法可以将行协议写入InfluxDB。
- useDefaultTags方法指示API使用默认标签,这些标签是在写入点时由用户定义的。
- writeRecord方法接受一个单独的行协议字符串。
- “writeRecords”方法接受一个行协议字符串数组。
有两种方法将行协议数据写入InfluxDB。
- “writePoint”支持单个记录。
- “writePoints”支持多个记录。
使用JavaScript客户端库查询InfluxDB v2
InfluxDB v2
在将一些随机温度数据写入我们的InfluxDB实例之后,我们现在可以查询它。
function queryExample(fluxQuery) {
log('\n*** QUERY ***')
const queryApi = influxDB.getQueryApi(org)
queryApi.queryRows(fluxQuery, {
next(row, tableMeta) {
const o = tableMeta.toObject(row)
if (o.example){
// custom output for example query
log(
`${o._time} ${o._measurement} in '${o.location}' (${o.example}): ${o._field}=${o._value}`
)
} else {
// default output
log(JSON.stringify(o, null, 2))
}
},
error(error) {
log('QUERY FAILED', error)
},
complete() {
log('QUERY FINISHED')
},
})
}
“getQueryApi”方法为指定的org创建一个QueryApi。查询方法执行查询,并以注解CSV的形式返回行,其中console.log(o)
输出
{result: "_result", table: "0", _start: "1970-01-01T00:00:00Z", _stop: "2020-04-03T20:39:23.761184Z", _time: "2020-04-03T18:31:33.95Z",
}
result: "_result"
table: "0"
_start: "1970-01-01T00:00:00Z"
_stop: "2020-04-03T20:39:23.761184Z"
_time: "2020-04-03T18:31:33.95Z"
_value: 29.9
_field: "value"
_measurement: "temperature"
example: "index.html"
location: "browser"
__proto__: Object
InfluxDB v1.8或更高版本
上面的示例同样适用,但连接URL不同。对于Flux查询端点,使用:http://<hostname>:8086/api/v2/query
健康检查
通过API监控数据库实例的健康状况是构建一个可信赖的管道的关键步骤。此浏览器示例还包含一个健康检查
const {InfluxDB} = require('@influxdata/influxdb-client')
const {HealthAPI} = require('@influxdata/influxdb-client-apis')
const {url, token} = require('./env')
console.log('*** HEALTH CHECK ***')
const influxDB = new InfluxDB({url, token})
const healthAPI = new HealthAPI(influxDB)
healthAPI
.getHealth()
.then((result /* : HealthCheck */) => {
console.log(JSON.stringify(result, null, 2))
console.log('\nFinished SUCCESS')
})
.catch(error => {
console.error(error)
console.log('\nFinished ERROR')
})
要获取实例的健康状况,您需要
用户入门
最后,此演示还包括一个用户入门示例。简单快捷的用户入门使应用开发者能够为寻求访问其时间序列数据的用户降低采用门槛。为了实现入门工具,您必须将用户的用户名和密码提供给./env。
const setupApi = new SetupAPI(new InfluxDB({url}))
setupApi
.getSetup()
.then(async ({allowed}) => {
if (allowed) {
await setupApi.postSetup({
body: {
org,
bucket,
username,
password,
token,
},
})
console.log(`InfluxDB '${url}' is now onboarded.`)
} else {
console.log(`InfluxDB '${url}' has been already onboarded.`)
}
console.log('\nFinished SUCCESS')
})
.catch(error => {
console.error(error)
console.log('\nFinished ERROR')
})
与健康检查类似,为了入门新用户,您需要
- 创建一个新的InfluxDB对象
- 从InfluxDB对象创建一个SetupAPI
- 使用getSetup方法设置初始用户、org和bucket
关于InfluxDB v2 JavaScript客户端的思考
需要注意的是,除了浏览器环境之外,还支持Node环境。此外,我想分享一些可能对JavaScript开发者有价值的一些额外资源。如果您喜欢InfluxDB UI并想利用复杂的时间序列数据可视化算法,我推荐您查看Giraffe和Clockface。 Giraffe是一个开源的React可视化库,用于实现InfluxDB Cloud 2.0用户界面(UI)。 Clockface是一个开源的React和TypeScript UI工具包,用于构建InfluxDB v2 UI和其他时间序列可视化应用程序。
希望这个教程能帮助您开始JavaScript和InfluxDB的旅程。像往常一样,我很乐意听取您的想法并回答您的问题。请在我们社区网站或Slack频道上发帖。