lua-telegraf
Telegraf 的 Lua/OpenResty 客户端编写器
$ opm get lblasc/lua-telegraf
名称
lua-telegraf - 用于 Telegraf/InfluxDB 或任何与 InfluxDB 行协议 兼容的监听器的 Lua/LuaJIT/OpenResty 客户端编写器。
状态
此库被认为已准备好投入生产。
描述
此库实现了 InfluxDB 行协议的编写器接口。重点在于简单性和效率。根据运行时,它将找到最合适的后端/库来构建和写入指标。
在 OpenResty 的上下文中运行时,它将使用 cosocket API,这确保了 100% 的非阻塞行为,以及 nginx 时间原语来获取缓存时间(不涉及系统调用)。对 Lua、LuaJIT 和纳秒精度的支持由 ljsyscall 库提供。
安装
克隆到你的 Lua 模块路径或使用 opm
$ opm get lblasc/lua-telegraf
摘要
OpenResty
简单(无批量处理)
# you do not need the following line if you installed
# module with `opm`
lua_package_path "/path/to/lua-telegraf/?.lua;;";
http {
server {
access_by_lua_block {
local telegraf = require "telegraf"
local t = telegraf.new({
host = "127.0.0.1",
port = 8094,
global_tags = {
gtag = 1,
},
})
local ok, err = t:set('test', {field = 123}, {tag = 'tagged'})
if not ok then
ngx.say(err)
end
}
}
}
批量处理
创建一个简单的模块(例如 stats.lua),它将使用 lua 模块缓存来保留 lua-telegraf
实例并使其在所有阶段都可用。
local telegraf = require 'telegraf'
local t
local _M = {}
function _M.init(conf)
t = telegraf.new(conf)
return t
end
function _M.get()
assert(t)
return t
end
return _M
lua_package_path "/path/to/stats/module/?.lua;;";
http {
init_worker_by_lua_block {
local function flush_stats(premature)
if premature then
return
end
local t = require('stats').get()
t:flush()
end
local flush_every = 1 -- adjust flush interval (in seconds)
require("stats").init({
host = "127.0.0.1",
port = 8094,
batch_size = 20,
global_tags = {
gtag = 1,
},
})
local ok, err = ngx.timer.every(flush_every, flush_stats)
if not ok then
ngx.log(ngx.ERR, err)
return
end
}
server {
access_by_lua_block {
local t = require("stats").get()
t:set('test', {field = 123}, {tag = 'tagged'})
}
log_by_lua_block {
local t = require("stats").get()
t:set('nginx_stats', {
request_time = ngx.now() - ngx.req.start_time()
}, {tag = 'mytag'})
}
}
}
Lua
local telegraf = require "telegraf"
local t = telegraf.new({
host = "127.0.0.1",
port = 8094,
global_tags = {
gtag = 1,
},
})
local ok, err = t:set('test', {field = 123}, {tag = 'tagged'})
if not ok then
error(err)
end
方法
new
语法:t, err = telegraf.new(options?)
使用可选的 options 表创建 telegraf 实例。
选项
host
默认值:127.0.0.1
设置主机地址。
port
默认值:8094
设置主机端口。
proto
默认值:udp
设置协议,目前仅支持 udp。
precision
默认值:nil
设置时间戳精度。目前,支持 s
、ms
、u
和 ns
,当 precision 为 nil
(默认值)时,不会将时间戳作为行协议消息的一部分发送,远程服务器将根据服务器本地时钟设置时间戳。
global_tags
默认值:{}
将添加到每个指标的标签。字段需要在标签/值对集中定义。
batch_size
默认值:nil
预分配指定大小的批处理缓冲区并启用批处理。批处理缓冲区是 table
,如果未及时刷新,则会超出缓冲区大小,刷新是手动操作。默认情况下(nil
)禁用批处理,所有指标都会立即发送。
set
语法:ok, err = t:set(measurement, fields, tags?, timestamp?)
生成新的数据点,根据选项,数据点被推送到缓冲区或立即发送。
measurement
:表示数据点测量的字符串
fields
:表示字段元素的键值对表
tags
(可选):表示标签元素的键值对表
timestamp
(可选):数字
,覆盖生成的或使用UNIX 时间
格式提供的时间设置时间戳
flush
语法:t:flush()
刷新批处理缓冲区。如果缓冲区为空或未启用,则方法仅返回。
待办事项
http 支持
作者
Luka Blašković <lblasc@znode.net>
版权和许可证
见 LICENSE
作者
Luka Blaskovic (lblasc)
许可证
mit
版本
-
lblasc/lua-telegraf 1.1.2Telegraf 的 Lua/OpenResty 客户端编写器 2019-04-15 08:13:45
-
lblasc/lua-telegraf 1.1.1Telegraf 的 Lua/OpenResty 客户端编写器 2019-03-31 08:59:14
-
lblasc/lua-telegraf 1.1.0Telegraf 的 Lua/OpenResty 客户端编写器 2019-03-23 11:52:43
-
lblasc/lua-telegraf 1.0.0Telegraf 的 Lua/OpenResty 客户端编写器 2019-03-23 07:49:47