请教个Higress问题,当请求request带有spanid,希望转发请求到下游时候改变这个值,也就是在打印access log之后改变,accesslog打印原来头里的值,在打印完以后转到下游时改为新的值。有没有相关的envoyfilter配置参考?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
可以使用 EnvoyFilter 的 HTTP_LOG_REQUEST_ATTRS
过滤器来实现这个需求。具体配置如下:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: modify-spanid
spec:
workloadSelector:
labels:
app: your-app-name
filters:
- name: modify-spanid
typedConfig:
"@type": type.googleapis.com/envoy.extensions.filters.http.modify_request_headers.v3.ModifyRequestHeaders
headers:
- name: x-b3-spanid
value: "new-spanid"
requestHeaderOperations:
- replace:
operation: REPLACE
path: /x-b3-spanid
value: new-spanid
将上述配置应用到你的 ServiceEntry 或 VirtualService 中,即可实现在打印 access log 之后改变请求头中的 spanid 值。
在 Higress 中,您可以通过 EnvoyFilter 配置来修改请求中的 spanid。具体来说,这需要使用到 envoy.filters.http.header_to_metadata[0] 这个过滤器。这个过滤器可以将 HTTP 头信息转换为元数据,然后通过 EnvoyFilter 的配置来修改这些元数据。
以下是一个示例配置,展示了如何将请求中的 "spanid" 头信息修改为新的值:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: modify-spanid
spec:
workloadSelector:
labels:
app: myapp
filters:
- name: envoy.filters.http.header_to_metadata
config:
protoConfig:
http:
headers: [{"key": "spanid", "value": "new-spanid"}]
在这个示例中,我们首先定义了一个名为 "modify-spanid" 的 EnvoyFilter。然后,我们使用 workloadSelector
属性来选择要应用此过滤器的工作负载。在这个例子中,我们选择了标签为 "app=myapp" 的工作负载。最后,我们定义了一个过滤器配置,该配置指定了要将 "spanid" 头信息转换为元数据的过滤器,并将其值设置为 "new-spanid"。
请求结束才会打印日志,打印的就是修改后的值,你可以在修改逻辑里添加一个头来保留原始值,然后一并打印到日志里 ,此回答整理自钉群“Higress 社区交流1群(2群: 30735012403)”
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。