事件
為了可以更靈活地記錄大量的事件,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