lua-resty-influx
OpenResty 客户端写入器,用于 InfluxDB
$ opm get samsk/lua-resty-influx
名称
lua-resty-influx - OpenResty 客户端写入器,用于 InfluxDB。
状态
该库处于积极开发中,被认为已准备好投入生产使用。
描述
该库提供 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 问题跟踪器创建工单来报告错误。
作者
SamB (samsk)
许可证
gpl3
版本
-
samsk/lua-resty-influx 0.2.1OpenResty 客户端写入器,用于 InfluxDB 2024-06-19 09:18:41