YAZONG 我的开源

Kubernetes(十三)istio(13.11)Istio中的Prometheus和Grafana和Envoy

  , , ,
0 评论0 浏览

本任务介绍如何通过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”

image.png

关于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”

image.png

#查询请求productpage 服务的总次数

istio_requests_total{destination_service="productpage.default.svc.cluster.local"}

根据这个(预定义)指标,一些label。请求120次。

image.png

#查询请求reviews 服务 V3 版本的总次数

istio_requests_total{destination_service="reviews.default.svc.cluster.local",destination_version="v3"}

image.png

#查询过去5 分钟 productpage 服务所有实例的请求频次

rate(istio_requests_total{destination_service=~"productpage.*", response_code="200"}[5m])

image.png

#刷新几次,就有数据过来了。

image.png

关于Prometheus 插件

==== 3. 关于 Prometheus 插件

Mixer 自带一个内嵌的 Prometheus 适配器,对外暴露一个端点,负责提供metrics值服务。Prometheus 插件是一个提前配置好的 Prometheus 服务,旨在通过 Mixer 端点收集对外暴露的metric。插件提供了持久化存储和 Istio metrics查询机制。

==== Prometheus 插件预配抓捕如下端点:

  1. istio-telemetry.istio-system:42422: istio-mesh 任务返回所有 Mixer 生成的度量指标。
  2. istio-telemetry.istio-system:15014: istio-telemetry 任务返回所有 Mixer 特殊的度量指标。该端点用于监控 Mixer 本身。
  3. istio-proxy:15090: envoy-stats 任务返回 Envoy 生成的原始状态。Prometheus 被配置来查找对外暴露了 envoy-prom 端点的 pods。在收集过程中,插件配置过滤掉大量 envoy 度量指标,从而限制插件进程的数据量。
  4. istio-pilot.istio-system:15014: pilot 任务返回 Pilot 生成的度量指标。
  5. istio-galley.istio-system:15014: galley 任务返回 Galley 生成的度量指标。
  6. istio-policy.istio-system:15014: istio-policy 任务返回所有策略相关的度量指标。
  7. 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控制平面

http://10.0.0.22:31300/”

image.png

istio的控制平面:核心组件。

服务网格,概览,性能相关。

image.png

image.png

image.png

image.png

关于Grafana插件

==== 2. 关于Grafana插件

Grafana 插件其实是一个 Grafana 的预配置实例。基础镜像已被修改为同时启动已安装的 Prometheus 数据源和 Istio Dashboard。Istio(特别是 Mixer)的基本安装文件附带了全局(用于每个服务的)指标的默认配置。Istio Dashboard 旨在与默认的 Istio 指标配置和 Prometheus 后端结合使用。

==== Istio Dashboard 包括三个主要部分:

  1. 网格摘要视图:这部分提供网格的全局摘要视图,并显示网格中(HTTP/gRPC 和 TCP)的工作负载。
  2. 单独的服务视图:这部分提供关于网格中每个单独的(HTTP/gRPC 和 TCP)服务的请求和响应指标。这部分也提供关于该服务的客户端和服务工作负载的指标。
  3. 单独的工作负载视图:这部分提供关于网格中每个单独的(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

image.png

image.png


标题:Kubernetes(十三)istio(13.11)Istio中的Prometheus和Grafana和Envoy
作者:yazong
地址:https://blog.llyweb.com/articles/2022/12/24/1671816482484.html