1.15. 指标、日志和追踪
将应用程序添加到网格后,您可以观察通过应用程序的数据流。如果您没有安装自己的应用程序,可以通过安装 Bookinfo 示例应用程序来了解 Red Hat OpenShift Service Mesh 中的可观察性如何工作。
1.15.1. 发现控制台地址
Red Hat OpenShift Service Mesh 提供以下控制台来查看您的服务网格数据:
- Kiali 控制台 - Kiali 是 Red Hat OpenShift Service Mesh 的管理控制台。
- Jaeger 控制台 - Jaeger 是 Red Hat OpenShift distributed tracing 平台的管理控制台。
- Grafana 控制台 - Grafana 为网格管理员提供 Istio 数据的高级查询和指标分析和仪表板。另外,Grafana 可以用来分析服务网格指标。
- Prometheus 控制台 - Red Hat OpenShift Service Mesh 使用 Prometheus 存储来自服务的遥测信息。
安装 Service Mesh control plane 时,它会为每个安装的组件自动生成路由。获得路由地址后,您可以访问 Kiali、Jaeger、Prometheus 或 Grafana 控制台来查看和管理您的服务网格数据。
前提条件
- 必须启用并安装组件。例如,如果您没有安装分布式追踪,您将无法访问 Jaeger 控制台。
从 OpenShift 控制台的步骤
-
以具有 cluster-admin 权限的用户身份登录到 OpenShift Container Platform web 控制台。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有
dedicated-admin
角色的帐户。 -
进入 Networking
Routes。 在 Routes 页面中,从 Namespace 菜单中选择 Service Mesh control plane 项目,如
istio-system
。Location 列显示每个路由的链接地址。
- 如有必要,使用过滤器来查找您要访问的路由的组件控制台。单击路由 位置 以启动控制台。
- 单击 Log In With OpenShift。
通过 CLI 操作的步骤
以具有
cluster-admin
角色的用户身份登录 OpenShift Container Platform CLI。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有dedicated-admin
角色的帐户。$ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
切换到 Service Mesh control plane 项目。在本例中,
istio-system
是 Service Mesh control plane 项目。运行以下命令:$ oc project istio-system
要获取各种 Red Hat OpenShift Service Mesh 控制台的路由,请运行以下命令:
$ oc get routes
这个命令返回 Kiali、Jaeger、Prometheus 和 Grafana web 控制台以及服务网格中任何其他路由的 URL。您应该看到类似如下的输出:
NAME HOST/PORT SERVICES PORT TERMINATION info-gateway bookinfo-gateway-yourcompany.com istio-ingressgateway http2 grafana grafana-yourcompany.com grafana <all> reencrypt/Redirect istio-ingressgateway istio-ingress-yourcompany.com istio-ingressgateway 8080 jaeger jaeger-yourcompany.com jaeger-query <all> reencrypt kiali kiali-yourcompany.com kiali 20001 reencrypt/Redirect prometheus prometheus-yourcompany.com prometheus <all> reencrypt/Redirect
-
将您要从
HOST/PORT
列访问的控制台的 URL 复制到浏览器中以打开控制台。 - 单击 Log In With OpenShift。
1.15.2. 访问 Kiali 控制台
您可以在 Kiali 控制台中查看应用程序的拓扑、健康和指标。如果您的服务遇到问题,Kiali 控制台可让您通过服务查看数据流。您可以查看不同级别中的与网格组件相关的信息,包括抽象应用程序、服务以及负载。Kiali 还会实时提供命名空间的互动图形视图。
要访问 Kiali 控制台,您必须安装并配置了 Red Hat OpenShift Service Mesh。
安装过程创建了访问 Kiali 控制台的路由。
如果您知道 Kiali 控制台的 URL,您可以直接访问它。如果您不知道 URL,请使用以下指示:
管理员的步骤
- 使用管理员角色登录 OpenShift Container Platform Web 控制台。
-
点 Home
Projects。 - 如有必要,在 Projects 页面上,使用过滤器来查找项目的名称。
-
点项目的名称,例如
info
。 - 在 Project details 页面中,点 Launcher 部分的 Kiali 链接。
使用与访问 OpenShift Container Platform 控制台相同的用户名和密码登录到 Kiali 控制台。
第一次登录到 Kiali 控制台时,您会看到 Overview 页面,它会显示服务网格中您有权查看的所有命名空间。
如果您验证了控制台安装,且命名空间还没有添加到网格中,则可能无法显示
istio-system
以外的任何数据。
开发人员的步骤
- 使用开发人员角色登录 OpenShift Container Platform Web 控制台。
- 单击 Project。
- 如有必要,在 Project Details 页面上,使用过滤器来查找项目的名称。
-
点项目的名称,例如
info
。 - 在 Project 页面中,点 Launcher 部分的 Kiali 链接。
- 单击 Log In With OpenShift。
1.15.3. 在 Kiali 控制台中查看服务网格数据
Kiali Graph 为您的网格流量提供了强大的视觉化功能。拓扑将实时请求流量与您的 Istio 配置信息相结合,可让您快速发现服务网格的行为。多种图形类型允许您将流量视觉化为高级别服务拓扑、低级工作负载拓扑或应用程序级别拓扑。
可以选择的几个图:
- App 图显示所有标记相同应用程序的总工作负载。
- Service 图显示网格中各个服务的节点,但所有应用程序和工作负载都不包括在这个图中。它提供了一个高级别的视图,并聚合了定义的服务的所有流量。
- Versioned App 图 显示每个应用版本的节点。应用程序的所有版本都分组在一起。
- Workload 图显示服务网格中每个工作负载的节点。此图不要求您使用应用程序和版本标签。如果您的应用程序没有使用 version 标签,请使用此图。
图形节点使用各种信息进行解码,指向虚拟服务和服务条目等各种路由路由选项,以及故障注入和断路器等特殊配置。它可以识别 mTLS 问题、延迟问题、错误流量等。Graph 高度可配置,可以显示流量动画,并具有强大的 Find 和 Hide 功能。
单击 Legend 按钮,以查看图中显示的有关图形、颜色、箭头和徽标的信息。
要查看指标的概述信息,请在图形中选择任意节点或边缘以便在概述详情面板中显示其指标详情。
1.15.3.1. 在 Kiali 中更改图形布局
Kiali 图形的布局可能会根据您的应用程序架构和要显示的数据的不同而有所不同。例如,图形节点的数量及其交互可以决定 Kiali 图形的呈现方式。因为无法创建出适合每种情况的单一布局,Kiali 提供了几种不同布局的选择。
先决条件
如果您没有安装自己的应用程序,请安装 Bookinfo 示例应用程序。然后,通过多次输入以下命令为 Bookinfo 应用程序生成流量。
$ curl "http://$GATEWAY_URL/productpage"
此命令模拟访问应用的
productpage
微服务的用户。
流程
- 启动 Kiali 控制台。
- 单击 Log In With OpenShift。
- 在 Kiali 控制台中,点 Graph 查看命名空间图。
-
在 Namespace 菜单中选择应用程序命名空间,例如
info
。 要选择不同的图形布局,请执行以下任一操作:
从图顶部的菜单中选择不同的图形数据分组。
- 应用程序图
- 服务图
- 版本化应用图(默认)
- 工作负载图
从图形底部的图标中选择不同的图形布局。
- 布局默认 dagre
- 布局 1 cose-bilkent
- 布局 2 cola
1.15.3.2. 在 Kiali 控制台中查看日志
您可以在 Kiali 控制台中查看工作负载的日志。Workload Detail 页面包含一个 Logs 选项卡,显示一个可显示应用程序和代理日志的统一日志视图。您可以选择在 Kiali 中显示日志的频率。
要更改 Kiali 中显示的日志的日志级别,您可以更改工作负载或代理的日志配置。
前提条件
- 安装和配置 Service Mesh。
- 已安装并配置了 Kiali。
- Kiali 控制台的地址。
- 在网格中添加了应用程序或 Bookinfo 示例应用程序。
流程
- 启动 Kiali 控制台。
单击 Log In With OpenShift。
Kiali Overview 页面会显示添加到具有权限的网格中的命名空间。
- 单击 Workloads。
- 在 Workloads 页面中,从 Namespace 菜单中选择项目。
- 如有必要,使用过滤器来查找您要查看的日志的工作负载。单击工作负载名称。例如,单击 ratings-v1。
- 在 Workload Details 页面中,单击 Logs 选项卡来查看工作负载的日志。
如果没有看到任何日志条目,您可能需要调整 Time Range 或 Refresh 间隔。
1.15.3.3. 在 Kiali 控制台中查看指标
您可以在 Kiali 控制台中查看应用程序、工作负载和服务的入站和出站指标。详情页面包括以下标签页:
- 入站应用程序指标
- 出站应用指标
- 入站工作负载指标
- 出站工作负载指标
- 入站服务指标
这些标签页显示预定义的指标仪表板,它们根据相关应用程序、工作负载或服务级别进行定制。应用程序和工作负载详情视图显示请求和响应指标,如卷、持续时间、大小或 TCP 流量。服务详情视图仅显示入站流量的请求和响应指标。
Kiali 允许您选择图表的尺寸来自定义 chart。Kiali 还可以显示源或目标代理指标报告的指标。另外,Kiali 可以覆盖指标上的 trace。
前提条件
- 安装和配置 Service Mesh。
- 已安装并配置了 Kiali。
- Kiali 控制台的地址。
- (可选)安装和配置了分布式追踪。
流程
- 启动 Kiali 控制台。
单击 Log In With OpenShift。
Kiali Overview 页面会显示添加到具有权限的网格中的命名空间。
- 单击 Applications、Workloads 或 Services。
- 在 Applications、Workloads 或 Services 页面上,从 Namespace 菜单中选择项目。
- 如有必要,使用过滤器来查找您要查看其日志的应用程序、工作负载或服务。单击 Name。
- 在 Application Detailstail、Workload Details 或 Service Details 页面中,单击 Inbound Metrics 或 Outbound Metrics 选项卡来查看指标。
1.15.4. 分布式追踪
分布式追踪是通过跟踪应用中服务调用的路径来跟踪应用中各个服务的性能的过程。每次用户在应用中采取行动时,将执行请求,该请求可能需要许多服务进行交互来生成响应。此请求的路径称为分布式事务。
Red Hat OpenShift Service Mesh 使用 Red Hat OpenShift distributed tracing 平台来允许开发人员查看微服务应用程序中的调用流。
1.15.4.1. 连接现有的分布式追踪实例
如果您在 OpenShift Container Platform 中已有现有的 Red Hat OpenShift distributed tracing Platform (Jaeger) 实例,可以将 ServiceMeshControlPlane
资源配置为使用该实例进行分布式追踪平台。
先决条件
- 安装和配置 Red Hat OpenShift distributed tracing 平台实例。
流程
-
在 OpenShift Container Platform web 控制台中,点击 Operators
Installed Operators。 - 点 Project 菜单,选择安装 Service Mesh control plane 的项目,如 istio-system。
-
点 Red Hat OpenShift Service Mesh Operator。在 Istio Service Mesh Control Plane 列中,点
ServiceMeshControlPlane
资源的名称,例如basic
。 将分布式追踪平台(Jaeger)实例的名称添加到
ServiceMeshControlPlane
。- 点 YAML 标签。
将分布式追踪平台(Jaeger)实例的名称添加到
ServiceMeshControlPlane
资源中的spec.addons.jaeger.name
中。在以下示例中,distr-tracing-production
是分布式追踪平台(Jaeger)实例的名称。分布式追踪配置示例
spec: addons: jaeger: name: distr-tracing-production
- 点 Save。
-
点 Reload 来验证
ServiceMeshControlPlane
资源已被正确配置。
1.15.4.2. 调整抽样率
trace 是服务网格中服务间的执行路径。一个 trace 由一个或多个范围组成。span 是具有名称、开始时间和持续时间的逻辑工作单元。抽样率决定了 trace 的持久性频率。
Envoy 代理抽样率默认设置为服务网格中 trace 的 100%。高抽样率会消耗集群资源和性能,但在调试问题时很有用。在生产环境中部署 Red Hat OpenShift Service Mesh 前,请将值设置为较小的 trace 部分。例如,将 spec.tracing.sampling
设置为 100
来示例 trace 的 1%。
将 Envoy 代理抽样率配置为代表 0.01% 增量的扩展整数。
在基本安装中,spec.tracing.sampling
设置为 10000
,这代表 100% 的 trace 采样。例如:
- 将值设置为 10 个 trace 的 0.1% 样本。
- 将值设为 500 个样本 5% 的 trace.
Envoy 代理抽样率适用于 Service Mesh 可用的应用程序,并使用 Envoy 代理。这个抽样率决定了 Envoy 代理收集并跟踪的数据量。
Jaeger 远程抽样率适用于 Service Mesh 外部的应用程序,不要使用 Envoy 代理,如数据库。这种抽样率决定了分布式追踪系统收集和存储的数据量。如需更多信息,请参阅分布式追踪配置选项。
流程
-
在 OpenShift Container Platform web 控制台中,点击 Operators
Installed Operators。 - 点 Project 菜单并选择安装 control plane 的项目,如 istio-system。
-
点 Red Hat OpenShift Service Mesh Operator。在 Istio Service Mesh Control Plane 列中,点
ServiceMeshControlPlane
资源的名称,例如basic
。 要调整抽样率,请为
spec.tracing.sampling
设置不同的值。- 点 YAML 标签。
为
ServiceMeshControlPlane
资源中的spec.tracing.sampling
设置值。在以下示例中,将它设置为100
。Jaeger 抽样示例
spec: tracing: sampling: 100
- 点 Save。
-
点 Reload 来验证
ServiceMeshControlPlane
资源已被正确配置。
1.15.5. 访问 Jaeger 控制台
要访问 Jaeger 控制台,您必须安装并配置了 Red Hat OpenShift Service Mesh。
安装过程会创建路由来访问 Jaeger 控制台。
如果您知道 Jaeger 控制台的 URL,您可以直接访问它。如果您不知道 URL,请使用以下指示:
从 OpenShift 控制台的步骤
-
以具有 cluster-admin 权限的用户身份登录到 OpenShift Container Platform web 控制台。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有
dedicated-admin
角色的帐户。 -
进入 Networking
Routes。 在 Routes 页面中,从 Namespace 菜单中选择 Service Mesh control plane 项目,如
istio-system
。Location 列显示每个路由的链接地址。
-
如有必要,使用过滤器来查找
jaeger
路由。单击路由 位置 以启动控制台。 - 单击 Log In With OpenShift。
Kiali 控制台的步骤
- 启动 Kiali 控制台。
- 单击左侧导航窗格中的 Distributed Tracing。
- 单击 Log In With OpenShift。
通过 CLI 操作的步骤
以具有
cluster-admin
角色的用户身份登录 OpenShift Container Platform CLI。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有dedicated-admin
角色的帐户。$ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
要使用命令行查询路由详情,请输入以下命令。在本例中,
istio-system
是 Service Mesh control plane 命名空间。$ export JAEGER_URL=$(oc get route -n istio-system jaeger -o jsonpath='{.spec.host}')
-
启动浏览器并进入
https://<JAEGER_URL>
,其中<JAEGER_URL>
是您在上一步中发现的路由。 - 使用您用于访问 OpenShift Container Platform 控制台的相同用户名和密码登录。
如果您已将服务添加到服务网格中并生成了 trace,您可以使用过滤器和 Find Traces 按钮搜索 trace 数据。
如果您要验证控制台安装,则不会显示 trace 数据。
有关配置 Jaeger 的更多信息,请参阅分布式追踪文档。
1.15.6. 访问 Grafana 控制台
Grafana 是一个分析工具,可用于查看、查询和分析服务网格指标。在本例中,istio-system
是 Service Mesh control plane 命名空间。要访问 Grafana,请执行以下操作:
流程
- 登陆到 OpenShift Container Platform Web 控制台。
- 点 Project 菜单,选择安装 Service Mesh control plane 的项目,如 istio-system。
- 单击 Routes。
- 点击 Grafana 行的 Location 列中的链接。
- 使用 OpenShift Container Platform 凭证登录到 Grafana 控制台。
1.15.7. 访问 Prometheus 控制台
Prometheus 是一个监控和警报工具,可用于收集微服务相关的多维数据。在本例中,istio-system
是 Service Mesh control plane 命名空间。
流程
- 登陆到 OpenShift Container Platform Web 控制台。
- 点 Project 菜单,选择安装 Service Mesh control plane 的项目,如 istio-system。
- 单击 Routes。
- 单击 Prometheus 行的 Location 列中的链接。
- 使用 OpenShift Container Platform 凭证登录到 Prometheus 控制台。
1.15.8. 与用户工作负载监控集成
默认情况下,Red Hat OpenShift Service Mesh (OSSM)使用专用的 Prometheus 实例安装 Service Mesh control plane (sMCP),用于从网格收集指标。但是,生产系统需要更高级的监控系统,如 OpenShift Container Platform 监控用户定义的项目。
以下步骤演示了如何将 Service Mesh 与 user-workload 监控集成。
前提条件
- 启用 user-workload 监控。
- 安装了 Red Hat OpenShift Service Mesh Operator 2.4。
- 已安装 Kiali Operator 1.65。
流程
运行以下命令,为 Kiali 创建到 Thanos 的令牌:
运行以下命令来设置
SECRET
环境变量:$ SECRET=`oc get secret -n openshift-user-workload-monitoring | grep prometheus-user-workload-token | head -n 1 | awk '{print $1 }'`
运行以下命令设置
TOKEN
环境变量:$ TOKEN=`oc get secret $SECRET -n openshift-user-workload-monitoring -o jsonpath='{.data.token}' | base64 -d`
运行以下命令,为 Kiali 创建令牌:
$ oc create secret generic thanos-querier-web-token -n istio-system --from-literal=token=$TOKEN
为 user-workload 监控配置 Kiali:
apiVersion: kiali.io/v1alpha1 kind: Kiali metadata: name: kiali-user-workload-monitoring namespace: istio-system spec: external_services: istio: url_service_version: 'http://istiod-basic.istio-system:15014/version' config_map_name: istio-basic 1 prometheus: auth: token: secret:thanos-querier-web-token:token type: bearer use_kiali_token: false query_scope: mesh_id: "basic-istio-system" thanos_proxy: enabled: true url: https://thanos-querier.openshift-monitoring.svc.cluster.local:9091 version: v1.65
- 1
- 设置前缀为
istio-
的ServiceMeshControlPlane
名称。
为外部 Prometheus 配置 SMCP:
apiVersion: maistra.io/v2 kind: ServiceMeshControlPlane metadata: name: basic namespace: istio-system spec: addons: prometheus: enabled: false 1 grafana: enabled: false 2 kiali: name: kiali-user-workload-monitoring meshConfig: extensionProviders: - name: prometheus prometheus: {}
应用自定义网络策略以允许来自监控命名空间的入口流量:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: user-workload-access namespace: info 1 spec: ingress: - from: - namespaceSelector: matchLabels: network.openshift.io/policy-group: monitoring podSelector: {} policyTypes: - Ingress
- 1
- 自定义网络策略必须应用到所有命名空间。
应用
Telemetry
对象以启用 Istio 代理中的流量指标:apiVersion: telemetry.istio.io/v1alpha1 kind: Telemetry metadata: name: enable-prometheus-metrics namespace: istio-system 1 spec: selector: 2 matchLabels: app: info metrics: - providers: - name: prometheus
应用
ServiceMonitor
对象来监控 Istio control plane:apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: istiod-monitor namespace: istio-system 1 spec: targetLabels: - app selector: matchLabels: istio: pilot endpoints: - port: http-monitoring interval: 30s relabelings: - action: replace replacement: "basic-istio-system" 2 targetLabel: mesh_id
注意如果使用 user-workload 监控只有一个网格,则 Kiali 资源中的
mesh_id
重新标记和spec.prometheus.query_scope
字段都是可选的(但如果mesh_id
标签被删除,则此处给出的query_scope
字段应该被删除)。如果使用 user-workload 监控可能会有多个网格,则
mesh_id
重新标记s 和 Kiali 资源中的spec.prometheus.query_scope
字段都是必需的,以便 Kiali 只从关联的网格中看到指标。如果没有部署 Kiali,仍建议应用mesh_id
重新标记,以便来自不同网格的指标可以区分不同的网格。应用
PodMonitor
对象从 Istio 代理收集指标:apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: istio-proxies-monitor namespace: istio-system 1 spec: selector: matchExpressions: - key: istio-prometheus-ignore operator: DoesNotExist podMetricsEndpoints: - path: /stats/prometheus interval: 30s relabelings: - action: keep sourceLabels: [__meta_kubernetes_pod_container_name] regex: "istio-proxy" - action: keep sourceLabels: [__meta_kubernetes_pod_annotationpresent_prometheus_io_scrape] - action: replace regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}) replacement: '[$2]:$1' sourceLabels: [__meta_kubernetes_pod_annotation_prometheus_io_port, __meta_kubernetes_pod_ip] targetLabel: __address__ - action: replace regex: (\d+);((([0-9]+?)(\.|$)){4}) replacement: $2:$1 sourceLabels: [__meta_kubernetes_pod_annotation_prometheus_io_port, __meta_kubernetes_pod_ip] targetLabel: __address__ - action: labeldrop regex: "__meta_kubernetes_pod_label_(.+)" - sourceLabels: [__meta_kubernetes_namespace] action: replace targetLabel: namespace - sourceLabels: [__meta_kubernetes_pod_name] action: replace targetLabel: pod_name - action: replace replacement: "basic-istio-system" 2 targetLabel: mesh_id
注意如果使用 user-workload 监控只有一个网格,则 Kiali 资源中的
mesh_id
重新标记和spec.prometheus.query_scope
字段都是可选的(但如果mesh_id
标签被删除,则此处给出的query_scope
字段应该被删除)。如果使用 user-workload 监控可能会有多个网格,则
mesh_id
重新标记s 和 Kiali 资源中的spec.prometheus.query_scope
字段都是必需的,以便 Kiali 只从关联的网格中看到指标。如果没有部署 Kiali,仍建议应用mesh_id
重新标记,以便来自不同网格的指标可以区分不同的网格。- 打开 OpenShift Container Platform Web 控制台,检查指标是否可见。