Loggly
用途說明#
通過 UDP 將請求和回應數據記錄到 Loggly server。
日誌格式請參考下方:日誌格式。
欄位配置說明#
啟用時可以看到以下畫面:

對應的配置說明如下:
| 參數 | 類型 | 預設值 | 說明 | 必填 |
|---|---|---|---|---|
| host | string | logs-01.loggly.com | Loggly server 的 IP 位址或主機名。 | |
| port | integer | 514 | 數據欲發送的 Loggly server 之端口。 可以填入的範圍為 0 至 65535。 | |
| key | string | Loggly 客戶權杖(token)。 | V | |
| tags | set of string elements | kong | 可選擇的標籤(tags)列表,支援分段和過濾日誌。 | |
| log_level | string | info | 可選擇的日誌紀錄嚴重性層級。 任何請求之 嚴重性比目前設定層級相等或更高的,都會記錄到系統日誌中。 可選的層級有: debug、info、notice、warning、err、crit、alert、emerg。 | |
| successful_severity | string | info | 指派給所有成功的請求(回應狀態代碼 < 400) ,其可選擇的日誌紀錄嚴重性層級,可選的層級有:debug、info、notice、warning、err、crit、alert、emerg。註:層級需 >= log_level 所設定的層級,才會判斷紀錄,例如:log_level設定為 info,則successful_severity需設定為 info 以上之層級。 | |
| client_errors_severity | string | info | 指派給所有失敗的請求(回應狀態代碼 >= 400 且 < 500) ,其可選擇的日誌紀錄嚴重性層級,可選的層級有:debug、info、notice、warning、err、crit、alert、emerg。註:層級需 >= log_level 所設定的層級,才會判斷紀錄,例如:log_level設定為 info,則client_errors_severity需設定為 info 以上之層級。 | |
| server_errors_severity | string | info | 指派給所有失敗的請求(回應狀態代碼 >= 500),其可選擇的日誌紀錄嚴重性層級,可選的層級有:debug、info、notice、warning、err、crit、alert、emerg。註:層級需 >= log_level 所設定的層級,才會判斷紀錄,例如:log_level設定為 info,則 server_errors_severity 需設定為 info 以上之層級。 | |
| timeout | number | 10000 | 發送日誌到服務器的超時時間(以毫秒為單位)。 | |
| custom_fields_by_lua | map | key-value pairs 列表,其中 key 是日誌字段的名稱,value 是一段 Lua 代碼,其返回 value sets 或替換日誌字段 value。 |
用法示例#
日誌格式#
日誌使用 JSON 的格式來組成,說明如下:
request包含有關客戶端發送的請求。response包含發送給客戶端的回應。tries包含負載均衡器對此請求進行的(成功和失敗)列表。route包含請求所對應之特定的 GOC API Gateway 路由設定資料。service包含請求所對應之 GOC API Gateway 路由關聯的服務設定資料。authenticated_entity如果已啟動身份認證插件,則會包含認證憑據。workspaces包含與請求的路由所屬的工作區資料。目前版本的 services 及 routes 資訊內的ws_id欄位會對應其所屬的 workspace ID 資訊。consumer如果已啟動身份認證插件,則會包含認證的用戶設定資料。latencies包含有關延遲的一些數據:proxy是最終服務處理請求所花費的時間。kong是運行所有插件所需的內部延遲。request是從客戶端讀取第一個字節到將最後一個字節發送到客戶端之間經過的時間。對於檢測速度較慢的客戶端很有用。
client_ip包含原始客戶端 IP 地址。started_at包含開始處理請求的時間的 UTC 時區時戳。
範例:
Custom Fields by Lua#
custom_fields_by_lua 配置允許使用 Lua 代碼動態修改日誌字段。
以下是刪除日誌中現有路由字段的範例配置:
同樣也可以添加新字段:
限制#
Lua 代碼運行在一個受限的沙箱環境中,其行為受 untrusted_lua 配置屬性的約束。
為了提高安全性,沙盒在 Lua 代碼的執行方式中包含幾個限制。 以下功能不可用,因為它們可以用來濫用系統:
string.rep:可用於在一次操作中分配數百萬 bytes。{set|get}metatable:可用於修改全局對象(字符串、數字)的 metatables。collectgarbage:可以被濫用來扼殺其他 workers 的效能。_G:是根節點,可以訪問所有函數。它被臨時 table 所屏蔽。load{file|string}:被認為是不安全的,因為它可以授予對全局環境的訪問權限。raw{get|set|equal}:可能不安全,因為沙盒依賴於一些 metatable 操作。string.dump:可以顯示機密的 server 信息(比如 functions 的實作內容)。math.randomseed:可以影響主機系統。 GOC API Gateway 已經正確地為隨機數生成器提供 seed。- 所有
os.*(os.clock、os.difftime和os.time除外)。os.execute可以顯著改變主機系統。 io.*:提供對硬碟驅動器的訪問。dofile|require:提供對硬碟驅動器的訪問。
排除 require 意味著插件只能使用 PDK functions,像是: kong.*。
ngx.* 抽象方法也可用,但不能保證在插件的未來版本中支援。
除上述限制外:
- 所有提供的模塊(如
string或table)都是唯讀的,不能修改。 - 禁用
Bytecode執行。
此外,由於代碼在 log phase 中運行,因此只能使用該 phase 可用的 PDK 方法。
在全局啟用插件#
- 從網站左邊 Menu 中
外掛插件頁面中,點選右上角的新增外掛插件:

- 點選後,選擇
日誌頁籤,並啟用 Loggly,填寫內容參考欄位配置說明,設定成功後,任何請求(不分服務、路由、用戶)的日誌都會發送到所配置的 Loggly 遠端主機上。
在服務端上啟用插件#
- 從網站左邊 Menu 中
服務 > 服務列表頁面中,選擇要啟用此插件的服務,假設為google,點選對應的編輯按鈕:

- 在編輯畫面中,點選上方的
外掛插件頁籤,再點選頁籤內容上方的新增外掛插件按鈕:

點選後,選擇 日誌 頁籤,並啟用 Loggly,填寫內容參考欄位配置說明,設定成功後,僅有此服務(範例為google)請求的日誌會發送到所配置的 Loggly 遠端主機上。
在路由端上啟用插件#
可以由兩種方式來選擇路由,並啟用插件:
方式一:路由列表#
- 從網站左邊 Menu 中
服務 > 路由列表頁面中,選擇要啟用此插件的路由,假設為google,點選對應的編輯按鈕 :

方式二:服務 > 服務列表 > 路由列表#
- 從網站左邊 Menu 中
服務 > 服務列表頁面中,選擇要啟用此插件的路由 所屬之服務(假設為google),點選對應的編輯按鈕。
在編輯畫面中,點選上方的 路由 頁籤,選擇要啟用此插件的路由(假設為 google),點選對應的編輯按鈕:

- 承第1步,點擊上述兩種方式之一的編輯按鈕後,在編輯畫面中,點選上方的
外掛插件頁籤,再點選頁籤內容上方的新增外掛插件按鈕:

點選新增外掛插件 按鈕後,選擇 日誌 頁籤,並啟用 Loggly,填寫內容參考欄位配置說明,設定成功後,僅有此路由(範例為google)請求的日誌會發送到所配置的 Loggly 遠端主機上。
在用戶端上啟用插件#
- 從網站左邊 Menu 中
訂閱用戶 > 用戶列表頁面中,選擇要啟用此插件的用戶,假設為portaladmin,點選對應的編輯按鈕 :

- 在編輯畫面中,點選上方的
外掛插件頁籤,再點選頁籤內容上方的新增外掛插件按鈕:

點選後,選擇 日誌 頁籤,並啟用 Loggly,填寫內容參考欄位配置說明,設定成功後,僅有此用戶(範例為 portaladmin)請求的日誌會發送到所配置的 Loggly 遠端主機上。
驗證#
假設有個 Loggly Server,host 為10.18.66.1,port為 30544,consumer token 可以從 Loggly 頁面中取得 (uuid格式),啟用此插件時,填入對應的 host、port 以及 key。
透過 GOC API Gateway 去呼叫服務,可以從 Loggly 頁面的日誌區塊看到的資訊類似如下,即為設定驗證成功。