如何通过map指令在日志处理中实现复杂请求路径的脱敏与分类?
- 内容介绍
- 相关推荐
本文共计891个文字,预计阅读时间需要4分钟。
使用`map`指令对请求路径进行脱敏或归类,核心是将复杂的`$request_uri`或`$uri`映射成简洁、可读、带业务语义的标签,既保护接口细节,又支持日志分析和监控归类。
提取业务线/模块名,实现路径归类
真实请求路径往往携带大量动态参数或ID(如 /api/v2/order/123456789/items?limit=20),直接记录不利于聚合统计。可用 map 从路径中提取稳定前缀,映射为统一业务标识:
- 定义在
http块顶层:
map $uri $log_service { ~^/api/v1/user/ user; ~^/api/v1/order/ order; ~^/api/v1/pay/ pay; ~^/admin/api/ admin; default unknown; }
- 该配置不依赖参数,只看路径开头;正则匹配优先级从上到下,第一个命中即生效
- 归类后可在
log_format中直接引用$log_service,例如:log_format main '$remote_addr [$time_local] $log_service "$request_method $uri" $status';
掩码动态ID段,保留结构不暴露敏感值
有些路径中嵌入了用户ID、订单号等不可推导但需脱敏的字段(如 /user/889900123/profile)。
本文共计891个文字,预计阅读时间需要4分钟。
使用`map`指令对请求路径进行脱敏或归类,核心是将复杂的`$request_uri`或`$uri`映射成简洁、可读、带业务语义的标签,既保护接口细节,又支持日志分析和监控归类。
提取业务线/模块名,实现路径归类
真实请求路径往往携带大量动态参数或ID(如 /api/v2/order/123456789/items?limit=20),直接记录不利于聚合统计。可用 map 从路径中提取稳定前缀,映射为统一业务标识:
- 定义在
http块顶层:
map $uri $log_service { ~^/api/v1/user/ user; ~^/api/v1/order/ order; ~^/api/v1/pay/ pay; ~^/admin/api/ admin; default unknown; }
- 该配置不依赖参数,只看路径开头;正则匹配优先级从上到下,第一个命中即生效
- 归类后可在
log_format中直接引用$log_service,例如:log_format main '$remote_addr [$time_local] $log_service "$request_method $uri" $status';
掩码动态ID段,保留结构不暴露敏感值
有些路径中嵌入了用户ID、订单号等不可推导但需脱敏的字段(如 /user/889900123/profile)。

