Haproxy
如何僅以 haproxy 日誌格式轉義引號
我正在捕捉
user-agent
使用:http-request capture req.hdr(User-Agent) len 192
然後嘗試創建這樣的自定義
JSON
日誌格式:log-format '{"User-Agent":%{+Q,+E}[capture.req.hdr(0)]}'
它可以工作,但是當使用者代理包含方括號時,例如:
Dalvik/1.6.0 (Linux; U; Android 4.4.4; Ixion X LTE 4.5 [Build KTU84P])
該選項
+E
轉義方括號並阻止 JSON,它創建如下內容:"User-Agent": "Dalvik/1.6.0 (Linux; U; Android 4.4.4; Ixion X LTE 4.5 \[Build KTU84P])"
當 UA 包含額外的引號時沒有問題:
"User-Agent": "this \"works\" fine"
因此想知道是否有一種方法可以指定僅轉義雙引號或替代方法以使日誌格式
JSON
兼容
較新版本的 haproxy 具有內置的 json 編碼器,您可以使用它來定義 JSON 日誌格式。見https://www.haproxy.org/download/2.1/doc/configuration.txt
json([<input-code>])
轉義輸入字元串並生成準備用作 JSON 字元串的 ASCII 輸出字元串。轉換器嘗試根據
<input-code>
參數對輸入字元串進行解碼。它可以是“ascii
”、“utf8
”、“utf8s
”、“utf8p
”或“utf8ps”。“ascii”解碼器永遠不會失敗。….
範例:
capture request header Host len 15 capture request header user-agent len 150 log-format '{"ip":"%[src]","user-agent":"%[capture.req.hdr(1),json(utf8s)]"}'
來自客戶端 127.0.0.1 的輸入請求:
GET / HTTP/1.0 User-Agent: Very "Ugly" UA 1/2
輸出日誌:
{"ip":"127.0.0.1","user-agent":"Very \"Ugly\" UA 1\/2"}