lua-resty-influx
InfluxDB 的 OpenResty 客户端写入器
$ opm get p0pr0ck5/lua-resty-influx
名称
lua-resty-influx - InfluxDB 的 OpenResty 客户端写入器。
状态
该库处于积极开发中,被认为已准备好用于生产环境。
描述
该库提供了一个 OpenResty 接口,用于通过 UDP 和 HTTP 接口将数据点写入 InfluxDB 服务器。提供了基于对象的和每个工作线程的缓冲接口。
概要
面向对象接口
http {
server {
access_by_lua_block {
local i = require "resty.influx.object"
local influx, err =i:new({
host = "127.0.0.1",
port = 8086,
proto = "http",
db = "db",
hostname = "localhost",
auth = "user:password",
})
if (not influx) then
ngx.say(err)
return
end
influx:set_measurement("foo")
influx:add_tag("foo", "bar")
influx:add_field("value", 1)
influx:buffer()
-- add and buffer additional data points
local ok, err = influx:flush()
if (not ok) then
ngx.say(err)
end
}
}
}
缓冲接口
http {
init_worker_by_lua_block {
local ibuf = require "resty.influx.buffer"
local ok, err = ibuf.init({
host = "127.0.0.1",
port = 8089,
proto = "udp",
})
if (not ok) then
ngx.log(ngx.ERR, err)
end
}
server {
access_by_lua_block {
local ibuf = require "resty.influx.buffer"
ibuf.buffer({
measurement = "foo",
tags = {
{ foo = "bar" }
},
fields = {
{ value = 1 }
}
})
}
log_by_lua_block {
local ibuf = require "resty.influx.buffer"
ibuf.flush()
}
}
}
用法
### 选项
lua-resty-influx 提供了一个纯面向对象的接口,以及一个每个工作线程的缓冲接口,它存储每个工作线程的数据点,然后通过 ngx.timer.at
异步缓冲。缓冲接口的创建应在 init_worker_by_lua
阶段通过 resty.influx.buffer.init
函数进行;面向对象的接口的创建应在适当的阶段处理程序中通过 resty.influx.object:new
进行。在这两种情况下,以下选项都可用
#### host
默认: 127.0.0.1
设置 ngx.socket.udp
和 resty.http
将尝试连接到的主机。
#### port
默认: 8086
设置 ngx.socket.udp
和 resty.http
将尝试连接到的端口。默认情况下为 8086
,因为默认协议是 HTTP。
#### db
默认: 'lua-resty-influx'
设置 resty.http
将尝试连接到的数据库。当 udp
是配置的协议时,此选项会被忽略。
#### hostname
默认: host
设置 resty.http
将为 HTTP 请求定义 Host
头部的主机名。默认情况下,它等于配置的 host
选项。当 udp
是配置的协议时,此选项会被忽略。
#### proto
默认: http
设置 resty.influx
将用于连接到远程服务器的协议。请注意,UDP 可以提供显著的性能提升,尤其是在发送大量小型数据点集时,但代价是错误处理和身份验证。
#### precision
默认: ms
设置 resty.influx
将用于定义时间戳的时间戳精度。目前,支持 ms
、s
和 none
;当配置为 none
时,不会将任何时间戳发送为行协议消息的一部分,远程 Influx 服务器将根据服务器本地时钟使用纳秒精度。
#### ssl
默认: false
将 HTTP 请求配置为在发送数据之前执行 TLS 握手。当 udp
是配置的协议时,此选项会被忽略。
#### auth
默认: ''
设置提供给远程 HTTP(S) 的用户名和密码。此值必须以 user:password
的格式提供单个字符串。当 udp
是配置的协议时,此选项会被忽略。
### 面向对象接口
以下方法可通过对象接口使用
#### influx:set_measurement
语法: influx:set_measurement(string)
设置与当前对象关联的数据点的测量值。
#### influx:add_tag
语法 influx:add_tag(key, value)
将数据点标签添加为键值对。键和值将根据 (https://docs.influxdb.org.cn/influxdb/v1.0/write_protocols/line_protocol_reference/) 进行转义。
#### influx:add_field
语法: influx:add_field(key, value)
将数据点字段添加为键值对。字段和值将根据 (https://docs.influxdb.org.cn/influxdb/v1.0/write_protocols/line_protocol_reference/) 进行转义。整数值(以 i
结尾的数字值)会正确地进行插值。
#### influx:stamp
语法: influx:stamp(time?)
对与当前对象关联的数据点进行时间戳标记,并使用可选的任意值(必须作为数字提供);否则,它将根据为对象接口的 new
提供的选项中指定的精度,使用适当的值对对象进行时间戳标记。
#### influx:clear
语法 influx:clear()
清除与当前对象关联的数据点上的测量值、标签和字段。请注意,在调用 buffer
或 write
时,它会在内部调用。
#### influx:buffer
语法: local ok, err = influx:buffer()
将与当前对象关联的数据点的内容缓冲起来,以便稍后刷新。成功时返回 true;否则,返回 false 和一个描述错误的字符串(例如,缓冲的无效条件)。
#### influx:flush
语法: local ok, err = influx:flush()
刷新与当前对象关联的所有缓冲数据点。成功时返回 true;否则,返回 false 和一个描述错误的字符串(例如,剩余数据等待缓冲,或者没有可用的缓冲数据点)。
#### influx:write
语法 local ok, err = inflush:write()
写入与当前对象关联的数据点,但不清除现有对象缓冲区。这实际上是调用单个数据点的 buffer
和 flush
的简写。请注意,之前缓冲的数据点仍然保留在缓冲区中,如果需要,必须通过 flush
发送出去。
### 缓冲接口
以下函数可通过缓冲接口使用
#### influx.buffer
语法: influx.buffer(data_table)
在每个工作线程的进程缓冲区中缓冲新的数据点。data_table
必须是一个包含以下键的表
measurement
: 表示数据点测量值的字符串tags
: 整数索引的表,包含表示标签元素的键值对的表。请参阅概要以了解示例。fields
: 整数索引的表,包含表示字段元素的键值对的表。请参阅概要以了解示例。
请注意,目前时间戳会自动使用 ms
精度设置。
#### influx.flush
语法 influx.flush()
将当前工作线程进程中缓冲的所有数据点写入配置的 influx 主机。成功时返回 true;否则,返回 false 和一个描述来自 ngx.timer.at
的错误的字符串。
此操作会立即返回,并异步运行
许可证
本程序是自由软件:您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它,无论是许可证的第 3 版,还是(由您选择)任何更高版本。
本程序按“原样”分发,没有任何明示或暗示的保证;甚至没有适销性或适用于特定用途的暗示保证。请参阅 GNU 通用公共许可证以获取更多详细信息。
您应该已经收到本程序的 GNU 通用公共许可证副本。如果没有,请参阅 https://gnu.ac.cn/licenses/
错误
请通过在 GitHub 问题跟踪器中创建工单来报告错误。
作者
Robert Paprocki (p0pr0ck5)
许可证
gpl3
版本
-
InfluxDB 的 OpenResty 客户端写入器 2016-12-02 01:47:01
-
InfluxDB 的 OpenResty 客户端写入器 2016-10-15 19:32:25