02 日志
在 Service Mesh 中,日志的采集是实现可观测性的重要手段之一。通过将所有服务的日志聚合到一处,可以便于统一管理和检索。为了实现这个目标,需要将每个服务的日志打印到 stdout 或 stderr,并使用日志代理将它们收集到中心日志系统中。阿里云服务网格 ASM 提供了日志过滤和日志格式化功能,可以根据需要对日志进行过滤和格式化,以便更好地进行检索和分析。
日志格式规则配置
在实际应用中,需要考虑到不同服务的日志格式可能不同,因此需要设置生成规则来控制日志的生成方式。部署在数据平面(即加入网格的 Kubernetes 集群)的 Envoy Proxy 可以输出所有访问日志。ASM 支持自定义 Envoy Proxy 输出的访问日志内容。
基于 Telemetry CRD,阿里云服务网格 ASM 提供了如下图所示的图形化界面,简化用户定义日志数据格式的配置。
对应地,生成的定义内容如下:
envoyFileAccessLog: logFormat: text: '{"bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","downstream_local_address":"%DOWNSTREAM_LOCAL_ADDRESS%","downstream_remote_address":"%DOWNSTREAM_REMOTE_ADDRESS%","duration":"%DURATION%","istio_policy_status":"%DYNAMIC_METADATA(istio.mixer:status)%","method":"%REQ(:METHOD)%","path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","protocol":"%PROTOCOL%","request_id":"%REQ(X-REQUEST-ID)%","requested_server_name":"%REQUESTED_SERVER_NAME%","response_code":"%RESPONSE_CODE%","response_flags":"%RESPONSE_FLAGS%","route_name":"%ROUTE_NAME%","start_time":"%START_TIME%","trace_id":"%REQ(X-B3-TRACEID)%","upstream_cluster":"%UPSTREAM_CLUSTER%","upstream_host":"%UPSTREAM_HOST%","upstream_local_address":"%UPSTREAM_LOCAL_ADDRESS%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_transport_failure_reason":"%UPSTREAM_TRANSPORT_FAILURE_REASON%","user_agent":"%REQ(USER-AGENT)%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","authority_for":"%REQ(:AUTHORITY)%","upstream_response_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","xff":"%REQ(X-FORWARDED-FOR)%","app_service_name":"%UPSTREAM_CLUSTER%"}' path: /dev/stdout
以及描述了过滤条件的配置内容:
accessLogging: - disabled: false filter: expression: response.code >= 400 providers: - name: envoy
数据面日志采集设置
此外,需要设置采集规则来控制日志的采集方式和储存有效期。
容器服务 ACK 集成了日志服务功能,可对服务网格数据平面集群的 AccessLog 进行采集。
采集控制平面日志及设置告警
ASM 支持采集控制平面日志和日志告警,例如采集 ASM 控制平面向数据平面 Sidecar 推送配置的相关日志。ASM 控制面组件的主要功能之一是推送网格的规则配置到数据面的 Sidecar 代理或者网关中。如果用户配置的网格规则内容存在一些冲突导致推送失败,代理或者网关就接收不到最新的配置内容。虽然代理或网关在不重启的情况下,可以使用已经接收到的配置继续运行,但是一旦这些 Pod 重启,很有可能导致 Sidecar 代理或网关启动失败。在很多实际场景中,经常出现用户误配置引发的网关或代理不可用的问题,因此启用控制面的日志告警,及时发现并解决问题十分必要。
03 监控指标
监控指标是 Service Mesh 中的另一个重要可观测性维度,用于描述请求的处理情况、服务之间的通信状况等等。Istio 采用 Prometheus 进行监控指标的采集和存储,每个服务的代理(Envoy)会生成大量的监控指标。这些指标可以用于实时监控服务的运行情况和性能指标,还可以用于异常检测和自动伸缩等场景。
指标数据生成规则配置
启用服务网格数据平面监控指标可以使服务网格数据平面(网关以及 Sidecar 代理)生成与其运行状态相关的指标数据,您可以通过将指标采集到阿里云 ARMS Prometheus 来直接查看监控报表(采集指标可能产生费用),或是自建 Prometheus 并从 ASM 数据平面抓取监控指标。
基于 Telemetry CRD,阿里云服务网格 ASM 提供了如下图所示的图形化界面,简化用户自定义指标配置。
对应地,生成的定义内容如下:
metrics: - overrides: - disabled: true match: metric: ALL_METRICS mode: CLIENT - disabled: false match: metric: ALL_METRICS mode: SERVER tagOverrides: {} - disabled: true match: metric: REQUEST_COUNT mode: CLIENT - disabled: false match: metric: REQUEST_COUNT mode: SERVER tagOverrides: {} - disabled: true match: metric: REQUEST_DURATION mode: CLIENT - disabled: false match: metric: REQUEST_DURATION mode: SERVER tagOverrides: {} - disabled: true match: metric: REQUEST_SIZE mode: CLIENT - disabled: false match: metric: REQUEST_SIZE mode: SERVER tagOverrides: {} - disabled: true match: metric: RESPONSE_SIZE mode: CLIENT - disabled: false match: metric: RESPONSE_SIZE mode: SERVER tagOverrides: {} - disabled: true match: metric: GRPC_REQUEST_MESSAGES mode: CLIENT - disabled: false match: metric: GRPC_REQUEST_MESSAGES mode: SERVER tagOverrides: {} - disabled: true match: metric: GRPC_RESPONSE_MESSAGES mode: CLIENT - disabled: false match: metric: GRPC_RESPONSE_MESSAGES mode: SERVER tagOverrides: {} - disabled: true match: metric: TCP_SENT_BYTES mode: CLIENT - disabled: false match: metric: TCP_SENT_BYTES mode: SERVER tagOverrides: {} - disabled: true match: metric: TCP_RECEIVED_BYTES mode: CLIENT - disabled: false match: metric: TCP_RECEIVED_BYTES mode: SERVER tagOverrides: {} - disabled: true match: metric: TCP_OPENED_CONNECTIONS mode: CLIENT - disabled: false match: metric: TCP_OPENED_CONNECTIONS mode: SERVER tagOverrides: {} - disabled: true match: metric: TCP_CLOSED_CONNECTIONS mode: CLIENT - disabled: false match: metric: TCP_CLOSED_CONNECTIONS mode: SERVER tagOverrides: {} providers: - name: prometheus
注意的是,第一次开启时的指标设置:
为了避免这些指标产生费用较大,第一次开启时的指标设置中全局范围内只开启 SERVER 侧指标,未开启 CLIENT 侧指标。请根据需要,自行进行开启,例如需要针对网关进行监控,则需要进行开启 CLIENT 侧指标。需要注意的是,如果已经开启过,重新开启之后的指标设置将保留使用上一次的设置规则。
ASM 网格拓扑功能相关的指标设置:
ASM 网格拓扑功能依赖于 Sidecar 上报的监控指标,若您开启了网格拓扑,关闭部分监控指标会对网格拓扑功能造成影响甚至不可用。
- 如果不启用 REQUEST_COUNT 的 SERVER 侧指标,将无法生成 HTTP/gRPC 服务的拓扑图。
- 如果不启用 TCP_SENT_BYTES 的 SERVER 侧指标,将无法生成 TCP 服务的拓扑图。
- 关闭 REQUEST_SIZE 和 REQUEST_DURATION 的 SERVER 侧,REQUEST_SIZE 的 CLIENT 侧指标会导致部分拓扑图节点的监控信息无法展示。