Istio_04_Istio可观测性
Istio_04_Istio可观测性
- Observability
- Metric
- Tracing
- Log
Observability
Observaility(可观测性): 收集、分析和展示服务网格的实时数据
- 本质: 以数据面代理Envoy的
Filter
扩展机制, 直接对接各指标数据 - 配置方式: IstioOperator、MeshConfig、EnvoyFilter、Telemetry API
如: Istio可观测性机制
- 指标数据需通过
Exporter
暴漏以便拉取 - 日志可设定输出到指定标准文件, 或
gRPC
标准接口上报 - 调用链是数据面代理Envoy埋点后直接上报到配置的调用链后端
Telemetry: 以单独部署独立资源管理可观测性数据(指标、日志和调用链)
Telemetry常用配置清单:
apiVersion: telemetry.istio.io/v1alpha1
kind: Telemetry
metadata:name: <String>namespace: <String>
spec:selector: <Object>targetRef: <Object> # Kubernetes网关, 与selector字段互斥metrics: <[]Object> # 指标数据tracing: <[]Object> # 调用链数据accessLogging: <[]Object> # 日志数据
- 若省略
spec.selector
, 则作用于Telemetry所在NS下的所有服务 spec.targetRef
指定的Kubernetes网关, 必须与Telemetry位于相同的NS
Metric
Metric(指标): 服务网格内服务不同维度的特征
- 本质: 每个数据面代理都开放标准的
Exporter
暴漏指标数据
如: Metric监控架构
- 数据面代理Envoy拦截服务访问, 完成管理和生成访问的指标数据
- 并通过
metadata_exchange
交换元数据信息以形成完整的指标数据 - 最后通过
Exporter
接口暴漏指标数据(数据面代理单独暴漏)
- 并通过
Prometheus
通过各个Exporter
接口拉取访问指标数据Prometheus
/Grafana
等检索访API分析指标数据
可自定义Pod额外指标数据:
reporter
source_namespace, source_workload, source_workload_namespace, source_principal, source_app, source_version, source_cluster
destination_namespace, destination_workload, destination_workload_namespace, destination_service_name, destination__service_namespace, destination_port, destination_cluster
request_protocol, request_operation, request_host
response_flags
grpc_response_status
connection_security_policy
source_canonical_service, source_canonical_revision
destination_canonical_service, destination_canonical_revision
- 需配置Pod的
sidecar.istio.io/extraStatTags
配置(多个值之间逗号相隔)
Tracing
Tracing(调用链): 服务网格内各服务之间调用埋点和数据上报
- 本质: 数据面代理拦截应用的请求, 并代替应用进行调用链埋点
- 调用链完整功能需应用修改少量代码(传递调用跟踪信息)
- Trace: 完整的分布式调用跟踪链路
- Span: 跨服务的一次调用
如: Istio中调用链原理(日志同理)
- 拦截出流量
- 请求头中没有调用跟踪信息, 创建Trace和根Span
- 反之从请求头中提取Trace的上下文信息并传递给应用服务
- 拦截入流量
- 请求头中没有调用跟踪信息, 创建根Span
- 反之从请求头中提取Span相关信息, 并基于该Span创建子Span合并在请求头中传递给应用服务
如: 调用链示例
- TraceId: Trace的ID, 关联多个请求的Span(首个Span创建时生成)
- SpanId: Span请求中的一段调用(Span创建时分配)
- ParentSpanId: 父SpanId(Span的前个阶段)
Log
Log(日志): 服务网格内的服务请求/访问的记录
- 本质: 数据面代理Envoy生成服务日志并直接上报给后端
- 日志通用配置: 采集路径、日志结构、日志格式、ALB服务
如: 日志流程和各个阶段
- 可在不同访问阶段输出日志, Istio将访问阶段分为6个
日志的默认格式:
[%START_TIME%] \"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%\" %RESPONSE_CODE% %RESPONSE_FLAGS% %RESPONSE_CODE_DETAILS% %CONNECTION_TERMINATION_DETAILS%
\"%UPSTREAM_TRANSPORT_FAILURE_REASON%\" %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% \"%REQ(X-FORWARDED-FOR)%\" \"%REQ(USER-AGENT)%\" \"%REQ(X-REQUEST-ID)%\"
\"%REQ(:AUTHORITY)%\" \"%UPSTREAM_HOST%\" %UPSTREAM_CLUSTER% %UPSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_REMOTE_ADDRESS% %REQUESTED_SERVER_NAME% %ROUTE_NAME%\n