理解Istio可观察性
kiali
Istio默认自带了Kiali可视化系统
$ istioctl dashboard kiali
分布式追踪
分布式追踪可以让用户对跨多个分布式服务网格的 1 个请求进行追踪分析。
Istio 利用 Envoy 的分布式追踪功能提供了开箱即用的追踪集成。
原理:Istio利用应用程序传入请求和传出的请求中的请求头信息,proxy将相关span信息发送至后端服务,然后通过span信息将服务间调用信息串联起来
请求头信息列表:
- x-request-id
- x-b3-traceid
- x-b3-spanid
- x-b3-parentspanid
- x-b3-sampled
- x-b3-flags
- x-ot-span-context
在业务应用中增加信息:
@GET
@Path("/reviews/{productId}")
public Response bookReviewsById(@PathParam("productId") int productId,
@HeaderParam("end-user") String user,
@HeaderParam("x-request-id") String xreq,
@HeaderParam("x-b3-traceid") String xtraceid,
@HeaderParam("x-b3-spanid") String xspanid,
@HeaderParam("x-b3-parentspanid") String xparentspanid,
@HeaderParam("x-b3-sampled") String xsampled,
@HeaderParam("x-b3-flags") String xflags,
@HeaderParam("x-ot-span-context") String xotspan) {
if (ratings_enabled) {
JsonObject ratingsResponse = getRatings(Integer.toString(productId), user, xreq, xtraceid, xspanid, xparentspanid, xsampled, xflags, xotspan);
Istio默认对每条请求都进行采样,可以通过参数values.pilot.traceSampling调整采样率
部署:
istioctl manifest apply --set profile=demo --set values.tracing.enabled=true
打开Jaeger页面:
istioctl dashboard jaeger
Istio默认后端为Jaeger
刷新几次http://localhost:5678/productpage后,可以就可以看到Jaeger中的调用跟踪数据了
Mixer
新版本的Istio默认未启用Mixer,采样更优方案Proxy-wasm替代
打开Mixer:
$ istioctl manifest apply --set profile=demo --set values.prometheus.enabled=true --set values.telemetry.v1.enabled=true --set values.telemetry.v2.enabled=false --set components.citadel.enabled=true --set components.telemetry.enabled=true --set values.tracing.enabled=true
日志
配置Mixer:
$ kubectl apply -f samples/bookinfo/telemetry/log-entry.yaml
- instances,定义需要采样哪些指标属性
- handlers,定义指标处理后端系统
- rules,定义instance和handler的绑定关系
$ istioctl dashboard prometheus
监控
配置Mixer:
$ kubectl apply -f samples/bookinfo/telemetry/metrics.yaml
$ istioctl dashboard grafana
Istio默认提供了系统各个组件的监控看板