如何在Ingress-NGINX日志中添加uri_category属性并替换动态数字?
实现方法
完全可以通过Ingress-NGINX的日志格式化功能实现这个需求,核心是利用NGINX的原生指令定义自定义变量,将路径中的数字段替换为USER_ID,再将该变量加入日志格式中。
具体操作步骤
1. 添加自定义变量定义
在Ingress-NGINX Controller的Chart配置(values.yaml)中,通过httpSnippets添加map指令,用来将$uri转换为目标格式的$uri_category变量:
controller: httpSnippets: | map $uri $uri_category { # 匹配 /xxx/数字/xxx 格式的路径 ~*^(/[^/]+)/\d+(/.*)$ $1/USER_ID$2; # 匹配 /xxx/数字 格式的路径 ~*^(/[^/]+)/\d+$ $1/USER_ID; # 匹配 /数字/xxx 格式的路径 ~*^/\d+(/.*)$ /USER_ID$1; # 匹配 /数字 格式的路径 ~*^/\d+$ /USER_ID; # 默认情况直接使用原uri default $uri; }
2. 更新日志格式配置
修改log-format-upstream字段,新增uri_category属性并引用上面定义的变量:
disable-access-log: "false" log-format-upstream: '{"time": "$time_iso8601", "remote_addr": "$proxy_protocol_addr", "x_forwarded_for": "$proxy_add_x_forwarded_for", "request_id": "$req_id", "remote_user": "$remote_user", "bytes_sent": $bytes_sent, "request_time": $request_time, "status": $status, "vhost": "$host", "request_proto": "$server_protocol", "path": "$uri", "request_query": "$args", "request_length": $request_length, "duration": $request_time,"method": "$request_method", "http_referrer": "$http_referer", "http_user_agent": "$http_user_agent", "uri_category": "$uri_category" }' ingressClass: nginx
3. 处理$http_referer的扩展场景
如果需要同时处理$http_referer中的路径(提取referrer里的URI部分并替换数字),可以再定义一组map变量:
controller: httpSnippets: | map $uri $uri_category { ~*^(/[^/]+)/\d+(/.*)$ $1/USER_ID$2; ~*^(/[^/]+)/\d+$ $1/USER_ID; ~*^/\d+(/.*)$ /USER_ID$1; ~*^/\d+$ /USER_ID; default $uri; } # 先提取http_referer中的URI部分(去掉域名) map $http_referer $referrer_uri { ~*^https?://[^/]+(/.*)$ $1; default ""; } # 对提取出的referrer URI做数字替换 map $referrer_uri $referrer_category { ~*^(/[^/]+)/\d+(/.*)$ $1/USER_ID$2; ~*^(/[^/]+)/\d+$ $1/USER_ID; ~*^/\d+(/.*)$ /USER_ID$1; ~*^/\d+$ /USER_ID; default $referrer_uri; }
然后在日志格式中按需添加该字段:
"referrer_category": "$referrer_category"
说明
- 上述
map指令覆盖了常见的数字段位置:路径开头、中间、结尾的纯数字段。如果你的路径有更复杂的数字模式(比如数字和字母混合),可以调整正则表达式,例如将\d+改为[0-9a-zA-Z]+来匹配含字母的动态段。 - 所有配置修改后,需要重新部署Ingress-NGINX Controller Chart才能生效。
内容的提问来源于stack exchange,提问作者user971741
相关产品推荐
相关产品推荐

