本任务介绍如何通过Prometheus 查询 Istio 度量指标。作为任务的一部分,你将通过 web 界面查询度量指标值。
发送测试流量
# 验证自身集群中运行着 prometheus 服务。
[root@node-2 istio-1.9.5]# kubectl -n istio-system get svc prometheus
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus ClusterIP 10.200.41.45 <none> 9090/TCP 26h
# 初始化VirtualService
#把所有流量引向v1版本
[root@node-2 istio-1.9.5]# kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml
virtualservice.networking.istio.io/productpage created
virtualservice.networking.istio.io/reviews created
virtualservice.networking.istio.io/ratings created
virtualservice.networking.istio.io/details created
# 向网格发送流量
[root@node-2 istio-1.9.5]# curl http://$GATEWAY_URL/productpage
[root@node-2 istio-1.9.5]# kubectl get svc -n istio-system istio-ingressgateway -o yaml|less
#访问
“http://10.0.0.22:32274/productpage”
关于prometheus****查询指标
先修改prometheus的service为nodeport.
[root@node-2 istio-1.9.5]# kubectl apply -f - << EOF
apiVersion: v1
kind: Service
metadata:
labels:
app: prometheus
chart: prometheus-11.16.2
component: server
heritage: Helm
release: prometheus
name: prometheus
namespace: istio-system
spec:
ports:
- name: http
port: 9090
nodePort: 31090
protocol: TCP
targetPort: 9090
selector:
app: prometheus
component: server
release: prometheus
type: NodePort
EOF
#发现prometheus的service类型是ClusterIP,无法从外部直接访问。
#所以要先修改其类型变成NodePort,暴露出一个端口,以便于可以通过浏览器直接访问。
[root@node-2 istio-1.9.5]# kubectl -n istio-system get svc prometheus
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus NodePort 10.200.252.47 <none> 9090:31090/TCP 3h4m
“修改完成后即可通过 http://<node-ip>:31090/ 访问prometheus页面”
“http://10.0.0.22:31090/graph”
#查询请求productpage 服务的总次数
istio_requests_total{destination_service="productpage.default.svc.cluster.local"}
根据这个(预定义)指标,一些label。请求120次。
#查询请求reviews 服务 V3 版本的总次数
istio_requests_total{destination_service="reviews.default.svc.cluster.local",destination_version="v3"}
#查询过去5 分钟 productpage 服务所有实例的请求频次
rate(istio_requests_total{destination_service=~"productpage.*", response_code="200"}[5m])
#刷新几次,就有数据过来了。
关于Prometheus 插件
==== 3. 关于 Prometheus 插件
Mixer 自带一个内嵌的 Prometheus 适配器,对外暴露一个端点,负责提供metrics值服务。Prometheus 插件是一个提前配置好的 Prometheus 服务,旨在通过 Mixer 端点收集对外暴露的metric。插件提供了持久化存储和 Istio metrics查询机制。
==== Prometheus 插件预配抓捕如下端点:
- istio-telemetry.istio-system:42422: istio-mesh 任务返回所有 Mixer 生成的度量指标。
- istio-telemetry.istio-system:15014: istio-telemetry 任务返回所有 Mixer 特殊的度量指标。该端点用于监控 Mixer 本身。
- istio-proxy:15090: envoy-stats 任务返回 Envoy 生成的原始状态。Prometheus 被配置来查找对外暴露了 envoy-prom 端点的 pods。在收集过程中,插件配置过滤掉大量 envoy 度量指标,从而限制插件进程的数据量。
- istio-pilot.istio-system:15014: pilot 任务返回 Pilot 生成的度量指标。
- istio-galley.istio-system:15014: galley 任务返回 Galley 生成的度量指标。
- istio-policy.istio-system:15014: istio-policy 任务返回所有策略相关的度量指标。
- istio-citadel.istio-system:15014: istio-citadel 任务返回所有 Citadel 生成的度量指标。
因为istio准备好了各种配置文件,初始化配置,抓取的endpoint,都实现定义好了,所以才能采集到数据过来。
使用Grafana 可视化指标
== 使用 Grafana 可视化指标
此任务展示了如何设置和使用Istio Dashboard 监控网格流量。作为此任务的一部分,您将使用 Grafana 的 Istio 附加组件和基于 Web 的界面来查看服务网格流量数据。
==== 1. 访问Grafana
验证 Grafana 服务正在集群中运行。
[root@node-2 istio-1.9.5]# kubectl get svc grafana -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana ClusterIP 10.200.167.36 <none> 3000/TCP 3h9m
#修改grafana的svc为nodePort类型
#修改为NodePort,让其可以浏览器访问。
#一边发送流量一边查看 istio 相关的dashboard
[root@node-2 istio-1.9.5]# kubectl apply -f - << EOF
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/instance: grafana
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: grafana
app.kubernetes.io/version: 7.2.1
helm.sh/chart: grafana-5.8.10
name: grafana
namespace: istio-system
spec:
ports:
- name: service
port: 3000
protocol: TCP
targetPort: 3000
nodePort: 31300
selector:
app.kubernetes.io/instance: grafana
app.kubernetes.io/name: grafana
type: NodePort
EOF
service/grafana configured
关于Grafana控制平面
istio的控制平面:核心组件。
服务网格,概览,性能相关。
关于Grafana插件
==== 2. 关于Grafana插件
Grafana 插件其实是一个 Grafana 的预配置实例。基础镜像已被修改为同时启动已安装的 Prometheus 数据源和 Istio Dashboard。Istio(特别是 Mixer)的基本安装文件附带了全局(用于每个服务的)指标的默认配置。Istio Dashboard 旨在与默认的 Istio 指标配置和 Prometheus 后端结合使用。
==== Istio Dashboard 包括三个主要部分:
- 网格摘要视图:这部分提供网格的全局摘要视图,并显示网格中(HTTP/gRPC 和 TCP)的工作负载。
- 单独的服务视图:这部分提供关于网格中每个单独的(HTTP/gRPC 和 TCP)服务的请求和响应指标。这部分也提供关于该服务的客户端和服务工作负载的指标。
- 单独的工作负载视图:这部分提供关于网格中每个单独的(HTTP/gRPC 和 TCP)工作负载的请求和响应指标。这部分也提供关于该工作负载的入站工作负载和出站服务的指标。
关于Envoy的访问日志
Envoy 代理提供了一种记录访问日志的功能。Envoy 容器的标准输出能够通过 kubectl logs 命令打印出来。
使用demo配置部署的istio自动启用了 Envoy的访问日志,并将其输出到标准输出。
#查看当前运行的pods
[root@node-2 istio-1.9.5]# kubectl get pods
NAME READY STATUS RESTARTS AGE
details-v1-79f774bdb9-gmgjv 2/2 Running 2 5h1m
#选择一个pod查看它的访问日志
[root@node-2 istio-1.9.5]# kubectl logs -f --tail 100 details-v1-79f774bdb9-gmgjv -c istio-proxy
标题:Kubernetes(十三)istio(13.11)Istio中的Prometheus和Grafana和Envoy
作者:yazong
地址:https://blog.llyweb.com/articles/2022/12/24/1671816482484.html