×

发现控制台地址

Red Hat OpenShift Service Mesh提供以下控制台来查看您的服务网格数据

  • Kiali控制台 - Kiali是Red Hat OpenShift Service Mesh的管理控制台。

  • Jaeger控制台 - Jaeger是Red Hat OpenShift分布式追踪平台的管理控制台。

  • Grafana控制台 - Grafana为服务网格管理员提供高级查询和指标分析以及Istio数据的仪表板。可选地,Grafana可用于分析服务网格指标。

  • Prometheus控制台 - Red Hat OpenShift Service Mesh使用Prometheus存储来自服务的遥测信息。

安装服务网格控制平面时,它会自动为每个已安装组件生成路由。获得路由地址后,您可以访问Kiali、Jaeger、Prometheus或Grafana控制台来查看和管理您的服务网格数据。

前提条件
  • 必须启用并安装组件。例如,如果您没有安装分布式追踪,则无法访问Jaeger控制台。

OpenShift控制台的操作步骤
  1. 以具有cluster-admin权限的用户身份登录到Red Hat OpenShift Service on AWS Web控制台。如果您使用Red Hat OpenShift Dedicated,则必须拥有具有`dedicated-admin`角色的帐户。

  2. 导航到网络路由

  3. 路由页面上,从命名空间菜单中选择服务网格控制平面项目,例如`istio-system`。

    位置列显示每个路由的链接地址。

  4. 如有必要,使用过滤器查找要访问其路由的组件控制台。单击路由位置以启动控制台。

  5. 单击使用OpenShift登录

CLI的操作步骤
  1. 以具有`cluster-admin`角色的用户身份登录到Red Hat OpenShift Service on AWS CLI。如果您使用Red Hat OpenShift Dedicated,则必须拥有具有`dedicated-admin`角色的帐户。

    $ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
  2. 切换到服务网格控制平面项目。在此示例中,`istio-system`是服务网格控制平面项目。运行以下命令

    $ oc project istio-system
  3. 要获取各种Red Hat OpenShift Service Mesh控制台的路由,请运行以下命令

    $ oc get routes

    此命令将返回Kiali、Jaeger、Prometheus和Grafana Web控制台以及服务网格中任何其他路由的URL。您应该看到类似于以下内容的输出

    NAME                    HOST/PORT                         SERVICES              PORT    TERMINATION
    bookinfo-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
  4. 将要访问的控制台的URL从`HOST/PORT`列复制到浏览器中以打开控制台。

  5. 单击使用OpenShift登录

访问Kiali控制台

您可以在Kiali控制台中查看应用程序的拓扑、运行状况和指标。如果您的服务遇到问题,Kiali控制台允许您查看数据流经您的服务。您可以查看不同级别(包括抽象应用程序、服务和工作负载)的网格组件的洞察信息。Kiali还提供实时交互式网格命名空间图形视图。

要访问Kiali控制台,您必须安装Red Hat OpenShift Service Mesh,并安装和配置Kiali。

安装过程会创建一个访问Kiali控制台的路由。

如果您知道Kiali控制台的URL,您可以直接访问它。如果您不知道URL,请使用以下说明。

管理员的操作步骤
  1. 使用管理员角色登录到Red Hat OpenShift Service on AWS Web控制台。

  2. 单击主页项目

  3. 项目页面上,如有必要,使用过滤器查找项目的名称。

  4. 单击项目的名称,例如`bookinfo`。

  5. 项目详情页面上的启动器部分,单击Kiali链接。

  6. 使用与访问Red Hat OpenShift Service on AWS控制台相同的用户名和密码登录到Kiali控制台。

    首次登录Kiali控制台时,您将看到概述页面,其中显示您有权查看的服务网格中的所有命名空间。

    如果您正在验证控制台安装并且尚未将命名空间添加到网格,则除了`istio-system`之外可能没有其他数据显示。

开发人员的操作步骤
  1. 使用开发人员角色登录到Red Hat OpenShift Service on AWS Web控制台。

  2. 单击项目

  3. 项目详情页面上,如有必要,使用过滤器查找项目的名称。

  4. 单击项目的名称,例如`bookinfo`。

  5. 项目页面上的启动器部分,单击Kiali链接。

  6. 单击使用OpenShift登录

在Kiali控制台中查看服务网格数据

Kiali 图表提供了一个强大的服务网格流量可视化功能。拓扑图结合了实时请求流量和 Istio 配置信息,可以立即洞察服务网格的行为,帮助您快速查明问题。多种图表类型允许您将流量可视化为高级别服务拓扑、低级别工作负载拓扑或应用程序级别拓扑。

有多个图表可供选择

  • 应用程序图表 (App graph) 显示所有具有相同标签的应用程序的聚合工作负载。

  • 服务图表 (Service graph) 为服务网格中的每个服务显示一个节点,但排除图表中的所有应用程序和工作负载。它提供了一个高级别视图,并聚合了已定义服务的全部流量。

  • 版本化应用程序图表 (Versioned App graph) 为应用程序的每个版本显示一个节点。应用程序的所有版本都分组在一起。

  • 工作负载图表 (Workload graph) 为服务网格中的每个工作负载显示一个节点。此图表不需要您使用应用程序和版本标签。如果您的应用程序不使用版本标签,请使用此图表。

图表节点用各种信息进行装饰,指出了各种路由选项,例如虚拟服务和服务入口,以及诸如故障注入和断路器之类的特殊配置。它可以识别 mTLS 问题、延迟问题、错误流量等等。图表高度可配置,可以显示流量动画,并具有强大的查找和隐藏功能。

单击图例 (Legend) 按钮以查看有关图表中显示的形状、颜色、箭头和徽章的信息。

要查看指标摘要,请选择图表中的任何节点或边,以在其摘要详细信息面板中显示其指标详细信息。

更改 Kiali 中的图表布局

Kiali 图表的布局可能会根据您的应用程序架构和要显示的数据而有所不同。例如,图表节点的数量及其交互方式会决定 Kiali 图表的呈现方式。由于无法创建在所有情况下都能很好呈现的单个布局,因此 Kiali 提供了几种不同的布局供选择。

先决条件
  • 如果您没有安装自己的应用程序,请安装 Bookinfo 示例应用程序。然后通过多次输入以下命令来为 Bookinfo 应用程序生成流量。

    $ curl "http://$GATEWAY_URL/productpage"

    此命令模拟用户访问应用程序的productpage微服务。

步骤
  1. 启动 Kiali 控制台。

  2. 单击使用OpenShift登录

  3. 在 Kiali 控制台中,单击图表 (Graph) 以查看命名空间图表。

  4. 命名空间 (Namespace) 菜单中选择您的应用程序命名空间,例如bookinfo

  5. 要选择不同的图表布局,请执行以下一项或两项操作

    • 从图表顶部的菜单中选择不同的图表数据分组。

      • 应用程序图表 (App graph)

      • 服务图表 (Service graph)

      • 版本化应用程序图表 (Versioned App graph)(默认)

      • 工作负载图表 (Workload graph)

    • 从图表底部的图例中选择不同的图表布局。

      • 布局默认 dagre

      • 布局 1 cose-bilkent

      • 布局 2 cola

在 Kiali 控制台中查看日志

您可以在 Kiali 控制台中查看工作负载的日志。工作负载详细信息 (Workload Detail) 页面包含一个日志 (Logs) 选项卡,该选项卡显示统一的日志视图,其中显示应用程序和代理日志。您可以选择希望 Kiali 中的日志显示多久刷新一次。

要更改 Kiali 中显示的日志的日志记录级别,您可以更改工作负载或代理的日志记录配置。

先决条件
  • 已安装并配置服务网格。

  • 已安装并配置 Kiali。

  • Kiali 控制台的地址。

  • 已将应用程序或 Bookinfo 示例应用程序添加到网格。

步骤
  1. 启动 Kiali 控制台。

  2. 单击使用OpenShift登录

    Kiali 概述页面显示已添加到网格且您有权查看的命名空间。

  3. 单击工作负载 (Workloads)

  4. 工作负载 (Workloads) 页面上,从命名空间 (Namespace) 菜单中选择项目。

  5. 如有必要,请使用过滤器查找要查看其日志的工作负载。单击工作负载名称 (Name)。例如,单击ratings-v1

  6. 工作负载详细信息 (Workload Details) 页面上,单击日志 (Logs) 选项卡以查看工作负载的日志。

如果您没有看到任何日志条目,您可能需要调整时间范围或刷新间隔。

在 Kiali 控制台中查看指标

您可以在 Kiali 控制台中查看应用程序、工作负载和服务的入站和出站指标。详细信息页面包括以下选项卡

  • 入站应用程序指标

  • 出站应用程序指标

  • 入站工作负载指标

  • 出站工作负载指标

  • 入站服务指标

这些选项卡显示预定义的指标仪表板,这些仪表板针对相关的应用程序、工作负载或服务级别量身定制。应用程序和工作负载详细信息视图显示请求和响应指标,例如数量、持续时间、大小或 TCP 流量。服务详细信息视图仅显示入站流量的请求和响应指标。

Kiali 允许您通过选择图表维度来自定义图表。Kiali 还可以显示源或目标代理指标报告的指标。为了进行故障排除,Kiali 可以将跟踪跨度叠加到指标上。

先决条件
  • 已安装并配置服务网格。

  • 已安装并配置 Kiali。

  • Kiali 控制台的地址。

  • (可选)已安装并配置分布式跟踪。

步骤
  1. 启动 Kiali 控制台。

  2. 单击使用OpenShift登录

    Kiali 概述页面显示已添加到网格且您有权查看的命名空间。

  3. 单击应用程序 (Applications)工作负载 (Workloads)服务 (Services)

  4. 应用程序 (Applications)工作负载 (Workloads)服务 (Services) 页面上,从命名空间 (Namespace) 菜单中选择项目。

  5. 如有必要,请使用过滤器查找要查看其日志的应用程序、工作负载或服务。单击名称 (Name)

  6. 应用程序详细信息 (Application Detail)工作负载详细信息 (Workload Details)服务详细信息 (Service Details) 页面上,单击入站指标 (Inbound Metrics)出站指标 (Outbound Metrics) 选项卡以查看指标。

分布式跟踪

分布式跟踪是通过跟踪应用程序中服务调用的路径来跟踪应用程序中各个服务性能的过程。每次用户在应用程序中采取操作时,都会执行一个请求,该请求可能需要许多服务交互才能生成响应。此请求的路径称为分布式事务。

Red Hat OpenShift Service Mesh 使用 Red Hat OpenShift 分布式跟踪平台,允许开发人员查看微服务应用程序中的调用流程。

配置 Red Hat OpenShift 分布式跟踪平台 (Tempo) 和 Red Hat 版本的 OpenTelemetry

您可以通过将命名元素和opentelemetry提供程序添加到ServiceMeshControlPlane中的spec.meshConfig.extensionProviders规范中来将跟踪数据公开到 Red Hat OpenShift 分布式跟踪平台 (Tempo)。然后,遥测自定义资源会配置 Istio 代理以收集跟踪跨度并将其发送到 OpenTelemetry Collector 端点。

您可以在网格命名空间中创建一个 Red Hat 版本的 OpenTelemetry 实例,并将其配置为将跟踪数据发送到跟踪平台后端服务。

先决条件
  • 您使用 Red Hat Tempo Operator 在tracing-system命名空间中创建了一个 TempoStack 实例。有关更多信息,请参阅“安装 Red Hat OpenShift 分布式跟踪平台 (Tempo)”。

  • 您已将 Red Hat 版本的 OpenTelemetry Operator 安装到推荐的命名空间或openshift-operators命名空间中。有关更多信息,请参阅“安装 Red Hat 版本的 OpenTelemetry”。

  • 如果使用的是 Red Hat OpenShift Service Mesh 2.5 或更早版本,请将ServiceMeshControlPlane资源的spec.tracing.type参数设置为None,以便可以将跟踪数据发送到 OpenTelemetry Collector。

步骤
  1. 在网格命名空间中创建一个 OpenTelemetry Collector 实例。此示例使用bookinfo命名空间

    OpenTelemetry Collector 配置示例
    apiVersion: opentelemetry.io/v1alpha1
    kind: OpenTelemetryCollector
    metadata:
      name: otel
      namespace: bookinfo  (1)
    spec:
      mode: deployment
      config: |
        receivers:
          otlp:
            protocols:
              grpc:
                endpoint: 0.0.0.0:4317
        exporters:
          otlp:
            endpoint: "tempo-sample-distributor.tracing-system.svc.cluster.local:4317" (2)
            tls:
              insecure: true
        service:
          pipelines:
            traces:
              receivers: [otlp]
              processors: []
              exporters: [otlp]
    1 ServiceMeshMemberRoll成员列表中包含命名空间。
    2 在此示例中,TempoStack 实例运行在tracing-system命名空间中。您无需在ServiceMeshMemberRoll成员列表中包含 TempoStack 命名空间,例如`tracing-system`。
    • ServiceMeshMemberRoll成员命名空间之一中创建 OpenTelemetry Collector 的单个实例。

    • 您可以通过将sidecar.istio.io/inject: 'true'添加到OpenTelemetryCollector资源,将otel-collector作为网格的一部分添加。

  2. 检查otel-collector pod 日志并验证 pod 是否正在运行

    otel-collector pod 日志检查示例
    $ oc logs -n bookinfo  -l app.kubernetes.io/name=otel-collector
  3. istio-system命名空间中创建或更新现有的ServiceMeshControlPlane自定义资源 (CR)

    SMCP 自定义资源示例
    kind: ServiceMeshControlPlane
    apiVersion: maistra.io/v2
    metadata:
      name: basic
      namespace: istio-system
    spec:
      addons:
        grafana:
          enabled: false
        kiali:
          enabled: true
        prometheus:
          enabled: true
      meshConfig:
        extensionProviders:
          - name: otel
            opentelemetry:
              port: 4317
              service: otel-collector.bookinfo.svc.cluster.local
      policy:
        type: Istiod
      telemetry:
        type: Istiod
      version: v2.6

    从 SMCP 2.5 升级到 2.6 时,请将spec.tracing.type参数设置为None

    SMCP spec.tracing.type参数示例
    spec:
      tracing:
        type: None
  4. istio-system命名空间中创建 Telemetry 资源

    Telemetry 资源示例
    apiVersion: telemetry.istio.io/v1alpha1
    kind: Telemetry
    metadata:
      name: mesh-default
      namespace: istio-system
    spec:
      tracing:
      - providers:
        - name: otel
        randomSamplingPercentage: 100
  5. 验证istiod日志。

  6. 配置 Kiali 资源规范以启用 Kiali 工作负载跟踪仪表板。您可以使用此仪表板查看跟踪查询结果。

    Kiali 资源示例
    apiVersion: kiali.io/v1alpha1
    kind: Kiali
    # ...
    spec:
      external_services:
        tracing:
          query_timeout: 30 (1)
          enabled: true
          in_cluster_url: 'http://tempo-sample-query-frontend.tracing-system.svc.cluster.local:16685'
          url: '[Tempo query frontend Route url]'
          use_grpc: true (2)
    1 默认query_timeout整数值为 30 秒。如果将该值设置为超过 30 秒,则必须更新 Kiali CR 中的.spec.server.write_timeout,并将注释haproxy.router.openshift.io/timeout=50s添加到 Kiali 路由。.spec.server.write_timeouthaproxy.router.openshift.io/timeout=都必须大于query_timeout
    2 如果不使用默认的 HTTP 或 gRPC 端口,请将in_cluster_url:端口替换为您自定义的端口。

    Kiali 1.73 使用 Jaeger 查询 API,这会导致较长的响应时间,具体取决于 Tempo 资源限制。如果在 Kiali UI 中看到无法获取跨度错误消息,请检查您的 Tempo 配置或减少 Kiali 中每个查询的限制。

  7. 向您的应用程序发送请求。

  8. 验证istiod pod 日志和otel-collector pod 日志。

在 mTLS 加密的 Service Mesh 成员命名空间中配置OpenTelemetryCollector

启用 Service Mesh dataPlane mTLS 加密后,所有流量都将进行 TLS 加密。

要使网格能够与OpenTelemetryCollector服务通信,请通过为OpenTelemetryCollector服务应用DestinationRule来禁用 TLS trafficPolicy

DestinationRule Tempo CR 示例
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: otel-disable-tls
spec:
  host: "otel-collector.bookinfo.svc.cluster.local"
  trafficPolicy:
    tls:
      mode: DISABLE

在 mTLS 加密的 Service Mesh 成员命名空间中配置 Red Hat OpenShift 分布式跟踪平台 (Tempo)

如果您在非 Service Mesh 成员命名空间中创建了 TempoStack 实例,则不需要此额外的DestinationRule配置。

启用 Service Mesh dataPlane mTLS 加密并在 Service Mesh 成员命名空间(例如tracing-system-mtls)中创建 TempoStack 实例时,所有流量都将进行 TLS 加密。Tempo 分布式服务不会预期此加密,并会返回 TLS 错误。

要修复 TLS 错误,请通过为 Tempo 和 Kiali 应用DestinationRule来禁用 TLS trafficPolicy

DestinationRule Tempo 示例
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: tempo
  namespace: tracing-system-mtls
spec:
  host: "*.tracing-system-mtls.svc.cluster.local"
  trafficPolicy:
    tls:
      mode: DISABLE
DestinationRule Kiali 示例
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: kiali
  namespace: istio-system
spec:
  host: kiali.istio-system.svc.cluster.local
  trafficPolicy:
    tls:
      mode: DISABLE

连接现有的分布式跟踪 Jaeger 实例

如果您已经在 Red Hat OpenShift Service on AWS 中拥有现有的 Red Hat OpenShift 分布式跟踪平台 (Jaeger) 实例,则可以配置您的ServiceMeshControlPlane资源以使用该实例进行分布式跟踪平台。

从 Red Hat OpenShift Service Mesh 2.5 开始,Red Hat OpenShift 分布式跟踪平台 (Jaeger) 和 OpenShift Elasticsearch Operator 已弃用,将在未来的版本中删除。Red Hat 将在当前版本生命周期内为这些功能提供错误修复和支持,但这些功能将不再接收增强功能,并将被删除。作为 Red Hat OpenShift 分布式跟踪平台 (Jaeger) 的替代方案,您可以改用 Red Hat OpenShift 分布式跟踪平台 (Tempo)。

先决条件
  • 已安装和配置 Red Hat OpenShift 分布式跟踪平台实例。

步骤
  1. 在 Red Hat OpenShift Service on AWS Web 控制台中,单击运算符已安装的运算符

  2. 单击项目菜单,然后选择安装 Service Mesh 控制平面的项目,例如istio-system

  3. 单击 Red Hat OpenShift Service Mesh 运算符。在Istio Service Mesh 控制平面列中,单击您的ServiceMeshControlPlane资源的名称,例如basic

  4. 将您的分布式跟踪平台 (Jaeger) 实例的名称添加到ServiceMeshControlPlane

    1. 单击YAML选项卡。

    2. 将您的分布式跟踪平台 (Jaeger) 实例的名称添加到您的ServiceMeshControlPlane资源中的spec.addons.jaeger.name。在下面的示例中,distr-tracing-production是分布式跟踪平台 (Jaeger) 实例的名称。

      分布式跟踪配置示例
      spec:
        addons:
          jaeger:
            name: distr-tracing-production
    3. 单击保存

  5. 单击重新加载以验证是否已正确配置ServiceMeshControlPlane资源。

调整采样率

跟踪是服务网格中服务之间的执行路径。跟踪由一个或多个跨度组成。跨度是具有名称、开始时间和持续时间的逻辑工作单元。采样率决定跟踪持久化的频率。

默认情况下,Envoy 代理采样率设置为对服务网格中的 100% 跟踪进行采样。高采样率会消耗集群资源和性能,但在调试问题时非常有用。在生产环境中部署 Red Hat OpenShift Service Mesh 之前,请将该值设置为较小的跟踪比例。例如,将spec.tracing.sampling设置为100以对 1% 的跟踪进行采样。

将 Envoy 代理采样率配置为表示 0.01% 增量的比例整数。

在基本安装中,spec.tracing.sampling设置为10000,这将对 100% 的跟踪进行采样。例如

  • 将值设置为 10 将对 0.1% 的跟踪进行采样。

  • 将值设置为 500 将对 5% 的跟踪进行采样。

Envoy 代理采样率适用于可用于 Service Mesh 并使用 Envoy 代理的应用程序。此采样率决定了 Envoy 代理收集和跟踪的数据量。

Jaeger 远程采样率适用于位于 Service Mesh 外部且不使用 Envoy 代理的应用程序,例如数据库。此采样率决定了分布式跟踪系统收集和存储的数据量。

步骤
  1. 在 Red Hat OpenShift Service on AWS Web 控制台中,单击运算符已安装的运算符

  2. 单击项目菜单,然后选择安装控制平面的项目,例如istio-system

  3. 单击 Red Hat OpenShift Service Mesh 运算符。在Istio Service Mesh 控制平面列中,单击您的ServiceMeshControlPlane资源的名称,例如basic

  4. 要调整采样率,请为spec.tracing.sampling设置不同的值。

    1. 单击YAML选项卡。

    2. 在您的ServiceMeshControlPlane资源中设置spec.tracing.sampling的值。在下面的示例中,将其设置为100

      Jaeger 采样示例
      spec:
        tracing:
          sampling: 100
    3. 单击保存

  5. 单击重新加载以验证是否已正确配置ServiceMeshControlPlane资源。

访问 Jaeger 控制台

要访问 Jaeger 控制台,您必须已安装 Red Hat OpenShift Service Mesh 和 Red Hat OpenShift 分布式追踪平台 (Jaeger) 并已进行配置。

安装过程会创建一个访问 Jaeger 控制台的路由。

如果您知道 Jaeger 控制台的 URL,可以直接访问它。如果您不知道 URL,请使用以下说明。

从 Red Hat OpenShift Service Mesh 2.5 版本开始,Red Hat OpenShift 分布式追踪平台 (Jaeger) 和 OpenShift Elasticsearch Operator 已被弃用,将在未来版本中移除。Red Hat 将在当前版本生命周期内为该功能提供错误修复和支持,但此功能将不再接收增强功能,并将被移除。作为 Red Hat OpenShift 分布式追踪平台 (Jaeger) 的替代方案,您可以使用 Red Hat OpenShift 分布式追踪平台 (Tempo)。

OpenShift控制台的操作步骤
  1. 以具有cluster-admin权限的用户身份登录到Red Hat OpenShift Service on AWS Web控制台。如果您使用Red Hat OpenShift Dedicated,则必须拥有具有`dedicated-admin`角色的帐户。

  2. 导航到网络路由

  3. 路由页面上,从命名空间菜单中选择服务网格控制平面项目,例如`istio-system`。

    位置列显示每个路由的链接地址。

  4. 如有必要,使用过滤器查找jaeger路由。单击路由的**位置**以启动控制台。

  5. 单击使用OpenShift登录

从 Kiali 控制台的操作步骤
  1. 启动 Kiali 控制台。

  2. 单击左侧导航窗格中的**分布式追踪**。

  3. 单击使用OpenShift登录

CLI的操作步骤
  1. 以具有`cluster-admin`角色的用户身份登录到Red Hat OpenShift Service on AWS CLI。如果您使用Red Hat OpenShift Dedicated,则必须拥有具有`dedicated-admin`角色的帐户。

    $ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
  2. 要使用命令行查询路由的详细信息,请输入以下命令。在此示例中,istio-system是服务网格控制平面命名空间。

    $ oc get route -n istio-system jaeger -o jsonpath='{.spec.host}'
  3. 启动浏览器并导航到https://<JAEGER_URL>,其中<JAEGER_URL>是您在上一步中发现的路由。

  4. 使用您用于访问 AWS 控制台上的 Red Hat OpenShift Service 的相同用户名和密码登录。

  5. 如果您已将服务添加到服务网格并已生成跟踪,则可以使用过滤器和**查找跟踪**按钮搜索您的跟踪数据。

    如果您正在验证控制台安装,则没有跟踪数据显示。

访问 Grafana 控制台

Grafana 是一款分析工具,您可以使用它来查看、查询和分析您的服务网格指标。在此示例中,istio-system是服务网格控制平面命名空间。要访问 Grafana,请执行以下操作

步骤
  1. 登录到 AWS Web 控制台上的 Red Hat OpenShift Service。

  2. 单击项目菜单,然后选择安装 Service Mesh 控制平面的项目,例如istio-system

  3. 单击**路由**。

  4. 单击**Grafana**行的**位置**列中的链接。

  5. 使用您的 AWS 凭据登录到 Grafana 控制台。

访问 Prometheus 控制台

Prometheus 是一款监控和警报工具,您可以使用它来收集有关微服务的多分量数据。在此示例中,istio-system是服务网格控制平面命名空间。

步骤
  1. 登录到 AWS Web 控制台上的 Red Hat OpenShift Service。

  2. 单击项目菜单,然后选择安装 Service Mesh 控制平面的项目,例如istio-system

  3. 单击**路由**。

  4. 单击**Prometheus**行的**位置**列中的链接。

  5. 使用您的 AWS 凭据登录到 Prometheus 控制台。

与用户工作负载监控集成

默认情况下,Red Hat OpenShift Service Mesh (OSSM) 会安装具有专用 Prometheus 实例的服务网格控制平面 (SMCP),用于从网格收集指标。但是,生产系统需要更高级的监控系统,例如 AWS 上的 Red Hat OpenShift Service 用于用户定义的项目。

以下步骤说明了如何将服务网格与用户工作负载监控集成。

先决条件
  • 已启用用户工作负载监控。

  • 已安装 Red Hat OpenShift Service Mesh Operator 2.4。

  • 已安装 Kiali Operator 1.65。

步骤
  1. cluster-monitoring-view角色授予 Kiali 服务帐户

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: kiali-monitoring-rbac
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-monitoring-view
    subjects:
    - kind: ServiceAccount
      name: kiali-service-account
      namespace: istio-system
  2. 为用户工作负载监控配置 Kiali

    apiVersion: kiali.io/v1alpha1
    kind: Kiali
    metadata:
      name: kiali
      namespace: istio-system
    spec:
      auth:
        strategy: openshift
      deployment:
        accessible_namespaces:   #restricted setting for ROSA
          - istio-system
        image_pull_policy: ''
        ingress_enabled: true
        namespace: istio-system
    • 如果您使用 Istio Operator 2.4,请使用此配置为用户工作负载监控配置 Kiali

      apiVersion: kiali.io/v1alpha1
      kind: Kiali
      metadata:
        name: kiali-user-workload-monitoring
        namespace: istio-system
      spec:
        external_services:
          istio:
            config_map_name: istio-<smcp-name>
            istio_sidecar_injector_config_map_name: istio-sidecar-injector-<smcp-name>
            istiod_deployment_name: istiod-<smcp-name>
            url_service_version: 'http://istiod-<smcp-name>.istio-system:15014/version'
          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

      AWS 上的 Red Hat OpenShift Service 对您可以创建资源的位置施加了额外的限制,并且不允许您在 Red Hat 管理的命名空间中创建 Kiali 资源。

      这意味着以下spec.deployment.accessible_namespaces的常用设置在 OpenShift 专用集群中不允许

      • ['**'](所有命名空间)

      • 默认

      • codeready-*

      • openshift-*

      • redhat-*

      验证错误消息提供了所有受限命名空间的完整列表。

  3. 为外部 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: {}
    1 禁用 OSSM 提供的默认 Prometheus 实例。
    2 禁用 Grafana。它不支持外部 Prometheus 实例。
  4. 应用自定义网络策略以允许来自监控命名空间的入站流量

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: user-workload-access
      namespace: istio-system (1)
    spec:
      ingress:
      - from:
        - namespaceSelector:
            matchLabels:
              network.openshift.io/policy-group: monitoring
      podSelector: {}
      policyTypes:
      - Ingress
    1 自定义网络策略必须应用于所有命名空间。
  5. 应用Telemetry对象以启用 Istio 代理中的流量指标

    apiVersion: telemetry.istio.io/v1alpha1
    kind: Telemetry
    metadata:
      name: enable-prometheus-metrics
      namespace: istio-system (1)
    spec:
      selector: (2)
        matchLabels:
          app: bookinfo
      metrics:
      - providers:
        - name: prometheus
    1 在控制平面命名空间中创建的Telemetry对象适用于网格中的所有工作负载。要仅将遥测应用于一个命名空间,请在目标命名空间中创建该对象。
    2 可选:设置selector.matchLabels规范会将Telemetry对象应用于目标命名空间中的特定工作负载。
  6. 应用ServiceMonitor对象以监控 Istio 控制平面

    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
    1 在 Istio 控制平面命名空间中创建此ServiceMonitor对象,因为它监控 Istiod 服务。在此示例中,命名空间为istio-system
    2 字符串"basic-istio-system"是 SMCP 名称及其命名空间的组合,但只要每个在集群中使用用户工作负载监控的网格的标签唯一,就可以使用任何标签。步骤 2 中配置的 Kiali 资源的spec.prometheus.query_scope需要与该值匹配。

    如果只有一个网格使用用户工作负载监控,则mesh_id重新标记和 Kiali 资源中的spec.prometheus.query_scope字段都是可选的(但是,如果删除了mesh_id标签,则应删除此处给出的query_scope字段)。

    如果集群上的多个网格实例可能使用用户工作负载监控,则需要mesh_id重新标记和 Kiali 资源中的spec.prometheus.query_scope字段。这可确保 Kiali 只看到与其关联的网格的指标。

    如果您没有部署 Kiali,您仍然可以应用mesh_id重新标记,以便可以区分不同网格的指标。

  7. 应用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
    1 由于 AWS 上的 Red Hat OpenShift Service 会忽略ServiceMonitorPodMonitor对象中的namespaceSelector规范,因此必须在所有网格命名空间(包括控制平面命名空间)中应用PodMonitor对象。
    2 字符串"basic-istio-system"是 SMCP 名称及其命名空间的组合,但只要每个在集群中使用用户工作负载监控的网格的标签唯一,就可以使用任何标签。步骤 2 中配置的 Kiali 资源的spec.prometheus.query_scope需要与该值匹配。

    如果只有一个网格使用用户工作负载监控,则mesh_id重新标记和 Kiali 资源中的spec.prometheus.query_scope字段都是可选的(但是,如果删除了mesh_id标签,则应删除此处给出的query_scope字段)。

    如果集群上的多个网格实例可能使用用户工作负载监控,则需要mesh_id重新标记和 Kiali 资源中的spec.prometheus.query_scope字段。这可确保 Kiali 只看到与其关联的网格的指标。

    如果您没有部署 Kiali,您仍然可以应用mesh_id重新标记,以便可以区分不同网格的指标。

  8. 打开 AWS Web 控制台上的 Red Hat OpenShift Service,并检查指标是否可见。