HTTP Log
#
用途說明傳送請求及回應日誌至 HTTP server。
日誌格式請參考下方:日誌格式。
#
欄位配置說明啟用時可以看到以下畫面:
對應的配置說明如下:
參數 | 類型 | 預設值 | 說明 | 必填 |
---|---|---|---|---|
http_endpoint | string | 日誌欲發送的 HTTP URL 端點(包括要使用的協定)。 例如: http://mockbin.org/bin/logs | V | |
method | string | POST | 用於將日誌發送到HTTP server的方法。 此欄位可填入的值為以下其一: POST 、PUT 和PATCH 。 | |
content_type | string | application/json | 表明發送的日誌數據類型。 唯一可用的類型選項是 application/json 。 | |
timeout | number | 10000 | 發送日誌到服務器的超時時間(以毫秒為單位)。 | |
keepalive | number | 60000 | 定義空閒連接關閉前的存活時間(以毫秒為單位)。 | |
retry_count | integer | 10 | 將日誌發送到服務器時重試的次數。 | |
queue_size | integer | 1 | 每次發送到服務器的最大日誌紀錄數量。 | |
flush_timeout | number | 2 | 如果設定的 queue_size > 1,則表示在發送的日誌記錄數量尚未達到 queue_size 之前的最大空閒連接過期時間。(以秒為單位)。 | |
custom_fields_by_lua | map | key-value pairs 列表,其中 key 是日誌字段的名稱,value 是一段 Lua 代碼,其返回 value sets 或替換日誌字段 value。 |
note
如果 http_endpoint
有包含帳號及密碼,例如:http://bob:password@example.com/logs
,則 GOC API Gateway 會在日誌請求中自動包含由帳號與密碼轉換 basic-auth 的 Authorization
header。
#
用法示例#
日誌格式如果參數 queue_size
設定 > 1,則日誌使用 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 Luacustom_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 中
外掛插件
頁面中,點選右上角的新增外掛插件
:
- 點選後,選擇
日誌
頁籤,並啟用 HTTP Log,填寫內容參考欄位配置說明,設定成功後,任何請求(不分服務、路由、用戶)的日誌都會透過 HTTP 請求發送給該服務。
#
在服務端上啟用插件- 從網站左邊 Menu 中
服務 > 服務列表
頁面中,選擇要啟用此插件的服務,假設為google
,點選對應的編輯按鈕:
- 在編輯畫面中,點選上方的
外掛插件
頁籤,再點選頁籤內容上方的新增外掛插件
按鈕:
點選後,選擇 日誌
頁籤,並啟用 HTTP Log,填寫內容參考欄位配置說明,設定成功後,僅有此服務(範例為google
)請求的日誌會透過 HTTP 請求發送給指定的服務。
#
在路由端上啟用插件可以由兩種方式來選擇路由,並啟用插件:
#
方式一:路由列表- 從網站左邊 Menu 中
服務 > 路由列表
頁面中,選擇要啟用此插件的路由,假設為google
,點選對應的編輯按鈕 :
#
方式二:服務 > 服務列表 > 路由列表- 從網站左邊 Menu 中
服務 > 服務列表
頁面中,選擇要啟用此插件的路由 所屬之服務(假設為google
),點選對應的編輯按鈕。
在編輯畫面中,點選上方的 路由
頁籤,選擇要啟用此插件的路由(假設為 google
),點選對應的編輯按鈕:
- 承第1步,點擊上述兩種方式之一的編輯按鈕後,在編輯畫面中,點選上方的
外掛插件
頁籤,再點選頁籤內容上方的新增外掛插件
按鈕:
點選新增外掛插件
按鈕後,選擇 日誌
頁籤,並啟用 HTTP Log,填寫內容參考欄位配置說明,設定成功後,僅有此路由(範例為google
)請求的日誌會透過HTTP請求發送給指定的服務。
#
在用戶端上啟用插件- 從網站左邊 Menu 中
訂閱用戶 > 用戶列表
頁面中,選擇要啟用此插件的用戶,假設為portaladmin
,點選對應的編輯按鈕 :
- 在編輯畫面中,點選上方的
外掛插件
頁籤,再點選頁籤內容上方的新增外掛插件
按鈕:
點選後,選擇 日誌
頁籤,並啟用 HTTP Log,填寫內容參考欄位配置說明,設定成功後,僅有此用戶(範例為 portaladmin
)請求的日誌會透過 HTTP 請求發送給指定的服務。
#
驗證假設目前對應收取日誌的 HTTP server URL 端點為 http://172.35.1.146/logs
,方法是使用 POST
,啟用此插件時,填入對應的 http_endpoint、method。
透過 GOC API Gateway 去呼叫服務,範例如下(使用 curl
命令來測試):
GOC API Gateway 在取得服務的回應後,會將該次的請求&回應之日誌,使用 POST
方法來傳送給 http://172.35.1.146/logs
。
觀察 HTTP server (http://172.35.1.146/logs 所在的服務)確實有接收到日誌,內容範例如下,即為設定驗證成功。