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.udpresty.http 将尝试连接到的主机。

port

默认值: 8086

设置 ngx.socket.udpresty.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 将用于定义时间戳的时间戳精度。目前,支持 mssnone;当配置为 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()

清除与当前对象关联的数据点的测量值、标签和字段。请注意,当调用 bufferwrite 时,将在内部调用此方法。

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()

写入与当前对象关联的数据点,而不清除现有对象缓冲区。这实际上是调用单个数据点的 bufferflush 的简写。请注意,先前缓冲的数据点仍然保留在缓冲区中,如果需要,必须通过 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

版本