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.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 问题跟踪器中创建工单来报告错误。

作者

Robert Paprocki (p0pr0ck5)

许可证

gpl3

版本