事件
为了可以更灵活地记录大量的事件,OpenResty Edge 中提供了不同于“告警”的事件记录。事件存储于 Log Server DB 而不是 Admin DB,并且页面上也提供了更加细化的过滤规则。不过暂未提供发送邮件通知等功能。
- 来自(From):事件来源。
- 日志级别:当前支持 4 个级别:INFO、WARNING、ERROR、CRITICAL。
- 信息:详细的事件信息。
- 类型:事件类型,通常使用下划线进行连接。这是实时获取的,因此没有事件时,过滤选项也会为空。
- 类型描述:用于描述事件类型。
- 关键字:基于事件信息和事件类型描述进行过滤。
除了提供展示功能,OpenResty Edge 还开放了自定义事件的功能,这也是事件类型需要实时获取的原因。
发送自定义事件
想要发送自定义事件,需要进行以下几个步骤:
- 定义全局 Lua 模块,在此模块中进行事件定义及发送。
- 在应用中引用全局 Lua 模块
- 发送请求触发事件
接下来我们使用一个实例来演示以上步骤。
定义全局 Lua 模块
代码如下:
local ev = require("events")
local isempty = require "table.isempty"
local _M = {}
local function aggr(a, b)
if isempty(a) then
return b
end
if isempty(b) then
return a
end
a_count = a[3] or 0
b_count = b[3] or 0
a[3] = a_count + b_count
return a
end
function _M.go()
local typ = "edge_custom_event"
local desc = "Custom Event"
local level = "ERROR"
local key = "custom_event_key_1"
local interval = 3
local msg_fmt = "custom event, host: %s(rule id: %s), count: %s"
local msg_args = {
"test.com", -- host
1, -- rule id
1,
}
local res, err = ev.send_event(typ, desc, level, key, msg_fmt, msg_args, aggr, interval)
if not res then
ngx.log(ngx.ERR, "failed to send event, error: ", err)
end
return ngx.say("hello world")
end
return _M
send_event 方法的参数:
- typ:事件类型,命名以下划线(_)连接。
- desc:事件类型描述,可以为空(nil 或 “")。
- level:事件级别,取值:INFO、WARNING、ERROR、CRITICAL。
- key:关键字,相同的关键字表示同一类事件,可以被聚合。
- msg_fmt:事件信息的格式,当
msg_args
为空时,msg_fmt
将会直接作为事件信息。 - msg_args:信息参数,用于最终渲染出事件信息。
- aggr:聚合函数,可以把相同 key 的事件进行聚合。
- interval:消息上报间隔,应为正整数。
引用全局 Lua 模块
发送请求触发事件
$ curl test.com
hello world