Istio 1.8.3 环境下如何收集 Envoy 输出的 Access Log 访问日志
Istio Envoy访问日志自定义采集方案
基础日志导出配置
首先,根据Istio官方Wiki指引,我们可以从Envoy中输出访问日志,参考EnvoyFilter配置如下:
apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: gateway-access-log namespace: istio-system label: app: gateway-access-log spec: configPatches: - applyTo: NETWORK_FILTER match: context: GATEWAY listener: filterChain: filter: name: "envoy.filters.network.http_connection_manager" patch: operation: MERGE value: typed_config: "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager" access_log: - name: envoy.access_loggers.file typed_config: "@type": "type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog" path: /dev/stdout format: "[%START_TIME%] \"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%\" %RESPONSE_CODE% %RESPONSE_FLAGS% \n"
查看日志可执行以下命令:
kubectl logs -l app=gateway-access-log -n istio-system
自研日志系统对接最优方案
如果不想使用第三方商用日志工具,也不想用kubectl logs管道对接的方案,可选择以下两种生产级方案:
方案1:Envoy直接推送日志到自研中继服务(性能最优)
直接修改上述EnvoyFilter的access_log配置,将文件输出替换为HTTP/gRPC输出,不需要额外部署采集组件,日志直接从Envoy进程推送到自研中继服务接口,支持配置本地缓冲、重试策略,避免日志丢失。
示例修改access_log部分的配置如下:
access_log: - name: envoy.access_loggers.http typed_config: "@type": "type.googleapis.com/envoy.extensions.access_loggers.http.v3.HttpGrpcAccessLogConfig" common_config: log_name: istio-gateway-accesslog grpc_service: envoy_grpc: cluster_name: your_custom_log_service_cluster # 提前在Istio中注册你的中继服务集群 buffer_size_bytes: 1048576 # 1MB本地缓冲 retry_policy: num_retries: 3
方案2:DaemonSet采集Agent采集标准输出(兼容现有配置)
如果不想修改现有日志输出配置,保持日志输出到stdout,可在K8s集群中以DaemonSet模式部署轻量采集Agent,采集所有istio gateway Pod的标准输出日志,清洗后推送到自研日志系统。这种方案是K8s下的通用日志采集方案,支持断点续传、多Pod批量采集、异常自动重连,稳定性远高于kubectl logs管道方案。
内容的提问来源于stack exchange,提问作者himenon
相关产品推荐
相关产品推荐

