跳转至

第六节 使用 Istio Dashboard Grafana / Prometheus

1、使用Istio Dashboard

Istio为服务网格提供了丰富的观察能力

Istio Dashboard是一个包含Istio定制模板的Grafana(https://grafanacom/)。

Grafana是一个通用的Dashboard源软件,支持Elasticsearch,ZabbixPrometheus, InfluxDB等多种数据源,并提供了条形图、饼图、表格、折线图等丰富的可视化组件,对其中的数据源和可视化组件都可以进行二次开发,用户可以将数据源和可视化组件结合起来定制自己的Dashboard

1-1 启用Grafana

Istio在默认清况下是没有启用Grafana的,

$ helm template istio \
 --name istio --set grafana.enabled=true \ 
 --namespace istio-system > default-grafana.yaml 

$ kubectl apply -f default-grafana.yaml 
...
configmap/istio-grafana-custom-resources created 
configmap/istio-grafana-configuration-dashboards 
created configmap/istio-grafana created 
configmap/istio-statsd-prom-bridge unchanged
...

1-2 访问Grafana

在创建成功之后,可以使用kubectl port-forward指令对Grafana pod进行端口转发, 这样就可以在不对外网开放服务的情况下使用Grafana

$ kubectl -n istio-system get pod -l app=grafana -o jsonpath='{.items[0].metadata.name}'

$ kubectl -n istio-system port-forward grafana-86f89dbd84-v7rrn 3000:3000
Forwarding from 127.0.0.1:3000 -> 3000
Forwarding from [::1]:3000 -> 3000 

接下来可以使用浏览器打开http://localhost:3000/,单击左上角的Home链接,在出现的页面中单击Istio文件夹,会列出Istio的内置Dashboard

Alt Image Text

单击Istio Mesh Dashboard

Alt Image Text

因为没有产生任何流量,所以这里所有的数据都是空的,我们进入 sleep pod 去产生一些流量

$ kubectl get pod -l app=sleep,version=v1 -o custom-columns='
Name:metadata.name'
Name
sleep-v1-548d87cc5c-fg9ng
$ kubectl exec -it -c sleep sleep-v1-548d87cc5c-fg9ng bash
bash-4.4# for i in 'seq 100';do http --body http://flaskapp/fetch?url=http://flaskapp/env/version >> /dev/null;done

Alt Image Text

1-3 开放Grafana服务

kubectl的端口转发方式是很不稳定的长期使用的话,可以考虑对Grafana服 务进行定制,例如在values.yaml中的grafana一节有如下定义

Grafana: 
    enabled: false 
    replicaCount: 1 
    image: 
        repository: grafana/grafana 
        tag: 5.2.3 
    persist: false 
    storageClassName: ""
    security: 
        enabled: false 
        adminUser: admin 
        adminpassword: admin 
    service: 
        annotations: {} 
        name: http 
        type: ClusterIP 
        externalport: 3000 
        internalPort: 3000 

我们可以将服务类型修改为LoadBalancer,或者为其创建Ingress对象,并设置用户名和密码

1-4 学习和定制

Istio提供为数众多的Darsboord模板数据来自Prometheus服务。了解这些Dashboard 的源码时可以发现很多有用的查询语句, 方便日后建立自己的监控体系, 例如我们可能更加关注的Istio Server Dashboard就包含了业务应用的相关信息

Alt Image Text

如果我们关心Incoming Requests by Source And Reponse Code这个折线图的空现就可以单击这个区域标题右侧的三角符号, 在弹出的菜单中选择Edit,会显示一组件的定制内容。

Alt Image Text

显示的内容表明数据来自名为Prometheus的数据源, 两个指标列的公式之也都清楚地展示出来我们可以根据达些内容, 学习各种Istio监控指标的用法,公式和展示方法以使定制自己的Dashboad

如果在仍群巾已经安装Grafana, 则还可以通过右上角工具栏的第二个按钮(Share Dashboad)获取Dashboard 的代码源,将其倒入其他Grafana

2、使用Prometheus

Prometheus (https//Pprometheus.io)是CNCF中的一个标志性的监控软件目前已经是云原生阵营中监控系统的事实标准。在Istio。中已经集成了Prometheus将其用作系统的监控组件

Grafana只是一个可视化的前端其数据都来自我们也需要直接到Prometheus中进行一些查询 Prometheus来获取一此,来Dashboard中没有体现的信息。

2-1 访问Prometheus

Prometheus服务是默认启用的因此在通常悄况下无须额外操作直接使用端口转发即可访问:

$ kubectl -n istio-system get pod -l  app=prometheus -o custom-columns='Name:metadata.name'
Name
prometheus-d44645598-xh8wn

$ kubectl -n istio-system  port-forward prometheus-d44645598-xh8wn 9090:9090

然后用浏览器打开http://localhost:9O9O会得到prometheus的查询界而在其中输人isito_requests_total就能排到一系列请求的总数指标值

Alt Image Text

点击Graph

Alt Image Text

2-2 开放Prometheus服务

Grafana一样,PrometheusService也可以通过values.yaml定制对服务开放方式。