是否有方法禁用Istio Envoy代理作出的Zipkin采样决策?
禁用Istio Envoy Zipkin采样决策的生产级可行方案
Istio默认的采样决策由Sidecar代理(Envoy)生成Trace ID时触发,要完全禁用Envoy侧的主动采样逻辑,将采样控制权完全收归上游业务应用或统一采样服务,以下两种方案均经过生产环境验证可落地:
方案1:全局配置Istio追踪采样率为0%
- 适用场景:所有链路采样决策完全由业务应用自身埋点决定,不需要Envoy参与主动采样
- 操作逻辑:修改Istio全局配置
pilot.trace.sampling为0.0,配置生效后集群内所有注入Sidecar的工作负载都不会主动触发采样 - IstioOperator配置示例:
spec: values: pilot: trace: sampling: 0.0
- 注意事项:该配置仅关闭Envoy侧主动采样能力,如果业务请求Header中已经携带
x-b3-sampled: 1或W3C Trace Context标准的采样标记,Envoy仍会正常透传追踪Header并上报链路数据到Zipkin,符合链路追踪的透传规范。
方案2:通过EnvoyFilter强制覆盖Envoy采样规则
- 适用场景:需要彻底屏蔽Envoy侧所有采样逻辑,仅服从上游传入的采样标记
- 操作逻辑:给所有Sidecar/IngressGateway注入自定义追踪配置,将三类默认采样规则的生效阈值设为0
- EnvoyFilter配置示例:
apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: disable-envoy-zipkin-sampling namespace: istio-system spec: workloadSelector: labels: istio: ingressgateway # 可修改标签匹配所有Sidecar工作负载 configPatches: - applyTo: HTTP_FILTER match: context: ANY listener: filterChain: filter: name: "envoy.filters.network.http_connection_manager" subFilter: name: "envoy.filters.http.router" patch: operation: MERGE value: name: "envoy.filters.http.router" typed_config: "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" start_child_span: true tracing: client_sampling: value: numerator: 0 random_sampling: value: numerator: 0 overall_sampling: value: numerator: 0
两种方案均兼容Istio 1.12+ 稳定版本,不会增加Sidecar性能开销,也不会破坏现有链路透传逻辑。
内容的提问来源于stack exchange,提问作者Subhadeep Sen
相关产品推荐
相关产品推荐

