2.17. 指标、日志和追踪


将应用程序添加到网格后,您可以观察通过应用程序的数据流。如果您没有安装自己的应用程序,可以通过安装 Bookinfo 示例应用程序来了解 Red Hat OpenShift Service Mesh 中的可观察性如何工作。

2.17.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 控制台的步骤

  1. 以具有 cluster-admin 权限的用户身份登录到 OpenShift Container Platform web 控制台。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有 dedicated-admin 角色的帐户。
  2. 进入 Networking Routes
  3. Routes 页面中,从 Namespace 菜单中选择 Service Mesh control plane 项目,如 istio-system

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

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

通过 CLI 操作的步骤

  1. 以具有 cluster-admin 角色的用户身份登录 OpenShift Container Platform CLI。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有 dedicated-admin 角色的帐户。

    $ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
  2. 切换到 Service Mesh control plane 项目。在本例中,istio-system 是 Service Mesh control plane 项目。运行以下命令:

    $ 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
    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
  4. 将您要从 HOST/PORT 列访问的控制台的 URL 复制到浏览器中以打开控制台。
  5. 单击 Log In With OpenShift

2.17.2. 访问 Kiali 控制台

您可以在 Kiali 控制台中查看应用程序的拓扑、健康和指标。如果您的服务遇到问题,Kiali 控制台可让您通过服务查看数据流。您可以查看不同级别中的与网格组件相关的信息,包括抽象应用程序、服务以及负载。Kiali 还会实时提供命名空间的互动图形视图。

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

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

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

管理员的步骤

  1. 使用管理员角色登录 OpenShift Container Platform Web 控制台。
  2. Home Projects
  3. 如有必要,在 Projects 页面上,使用过滤器来查找项目的名称。
  4. 点项目的名称,例如 info
  5. Project details 页面中,点 Launcher 部分的 Kiali 链接。
  6. 使用与访问 OpenShift Container Platform 控制台相同的用户名和密码登录到 Kiali 控制台。

    第一次登录到 Kiali 控制台时,您会看到 Overview 页面,它会显示服务网格中您有权查看的所有命名空间。

    如果您验证了控制台安装,且命名空间还没有添加到网格中,则可能无法显示 istio-system 以外的任何数据。

开发人员的步骤

  1. 使用开发人员角色登录 OpenShift Container Platform Web 控制台。
  2. 单击 Project
  3. 如有必要,在 Project Details 页面上,使用过滤器来查找项目的名称。
  4. 点项目的名称,例如 info
  5. Project 页面中,点 Launcher 部分的 Kiali 链接。
  6. 单击 Log In With OpenShift

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

Kiali Graph 为您的网格流量提供了强大的视觉化功能。拓扑将实时请求流量与您的 Istio 配置信息相结合,可让您快速发现服务网格的行为。多种图形类型允许您将流量视觉化为高级别服务拓扑、低级工作负载拓扑或应用程序级别拓扑。

可以选择的几个图:

  • App 图显示所有标记相同应用程序的总工作负载。
  • Service 图显示网格中各个服务的节点,但所有应用程序和工作负载都不包括在这个图中。它提供了一个高级别的视图,并聚合了定义的服务的所有流量。
  • Versioned App 图 显示每个应用版本的节点。应用程序的所有版本都分组在一起。
  • Workload 图显示服务网格中每个工作负载的节点。此图不要求您使用应用程序和版本标签。如果您的应用程序没有使用 version 标签,请使用此图。

图形节点使用各种信息进行解码,指向虚拟服务和服务条目等各种路由路由选项,以及故障注入和断路器等特殊配置。它可以识别 mTLS 问题、延迟问题、错误流量等。Graph 高度可配置,可以显示流量动画,并具有强大的 Find 和 Hide 功能。

单击 Legend 按钮,以查看图中显示的有关图形、颜色、箭头和徽标的信息。

要查看指标的概述信息,请在图形中选择任意节点或边缘以便在概述详情面板中显示其指标详情。

2.17.3.1. 在 Kiali 中更改图形布局

Kiali 图形的布局可能会根据您的应用程序架构和要显示的数据的不同而有所不同。例如,图形节点的数量及其交互可以决定 Kiali 图形的呈现方式。因为无法创建出适合每种情况的单一布局,Kiali 提供了几种不同布局的选择。

先决条件

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

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

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

流程

  1. 启动 Kiali 控制台。
  2. 单击 Log In With OpenShift
  3. 在 Kiali 控制台中,点 Graph 查看命名空间图。
  4. Namespace 菜单中选择应用程序命名空间,例如 info
  5. 要选择不同的图形布局,请执行以下任一操作:

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

      • 应用程序图
      • 服务图
      • 版本化应用图(默认)
      • 工作负载图
    • 从图形底部的图标中选择不同的图形布局。

      • 布局默认 dagre
      • 布局 1 cose-bilkent
      • 布局 2 cola

2.17.3.2. 在 Kiali 控制台中查看日志

您可以在 Kiali 控制台中查看工作负载的日志。Workload Detail 页面包含一个 Logs 选项卡,显示一个可显示应用程序和代理日志的统一日志视图。您可以选择在 Kiali 中显示日志的频率。

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

前提条件

  • 安装和配置 Service Mesh。
  • 已安装并配置了 Kiali。
  • Kiali 控制台的地址。
  • 在网格中添加了应用程序或 Bookinfo 示例应用程序。

流程

  1. 启动 Kiali 控制台。
  2. 单击 Log In With OpenShift

    Kiali Overview 页面会显示添加到具有权限的网格中的命名空间。

  3. 单击 Workloads
  4. Workloads 页面中,从 Namespace 菜单中选择项目。
  5. 如有必要,使用过滤器来查找您要查看的日志的工作负载。单击工作负载名称。例如,单击 ratings-v1
  6. Workload Details 页面中,单击 Logs 选项卡来查看工作负载的日志。
提示

如果没有看到任何日志条目,您可能需要调整 Time Range 或 Refresh 间隔。

2.17.3.3. 在 Kiali 控制台中查看指标

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

  • 入站应用程序指标
  • 出站应用指标
  • 入站工作负载指标
  • 出站工作负载指标
  • 入站服务指标

这些标签页显示预定义的指标仪表板,它们根据相关应用程序、工作负载或服务级别进行定制。应用程序和工作负载详情视图显示请求和响应指标,如卷、持续时间、大小或 TCP 流量。服务详情视图仅显示入站流量的请求和响应指标。

Kiali 允许您选择图表的尺寸来自定义 chart。Kiali 还可以显示源或目标代理指标报告的指标。另外,Kiali 可以覆盖指标上的 trace。

前提条件

  • 安装和配置 Service Mesh。
  • 已安装并配置了 Kiali。
  • Kiali 控制台的地址。
  • (可选)安装和配置了分布式追踪。

流程

  1. 启动 Kiali 控制台。
  2. 单击 Log In With OpenShift

    Kiali Overview 页面会显示添加到具有权限的网格中的命名空间。

  3. 单击 ApplicationsWorkloadsServices
  4. ApplicationsWorkloadsServices 页面上,从 Namespace 菜单中选择项目。
  5. 如有必要,使用过滤器来查找您要查看其日志的应用程序、工作负载或服务。单击 Name
  6. Application DetailstailWorkload DetailsService Details 页面中,单击 Inbound MetricsOutbound Metrics 选项卡来查看指标。

2.17.4. 分布式追踪

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

Red Hat OpenShift Service Mesh 使用 Red Hat OpenShift distributed tracing 平台来允许开发人员查看微服务应用程序中的调用流。

2.17.4.1. 配置 Red Hat OpenShift distributed tracing 平台(Tempo)和红帽构建的 OpenTelemetry

您可以通过将命名元素和 opentelemetry 供应商附加到 ServiceMeshControlPlane 中的 spec.meshConfig.extensionProviders 规格中,向 Red Hat OpenShift distributed tracing 平台(Tempo)公开追踪数据。然后,遥测自定义资源将 Istio 代理配置为收集 trace span,并将其发送到 OpenTelemetry Collector 端点。

您可以在网格命名空间中创建红帽构建的 OpenTelemetry 实例,并将其配置为将追踪数据发送到追踪平台后端服务。

先决条件

  • 您在 tracing-system 命名空间中使用 Red Hat Tempo Operator 创建 TempoStack 实例。如需更多信息,请参阅"安装 Red Hat OpenShift distributed tracing Platform (Tempo) "。
  • 您在推荐的命名空间或 openshift-operators 命名空间中安装了 Red Hat build of OpenTelemetry Operator。如需更多信息,请参阅"安装Red Hat build of OpenTelemetry"。
  • 如果使用 Red Hat OpenShift Service Mesh 2.5 或更早版本,请将 ServiceMeshControlPlane 资源的 spec.tracing.type 参数设置为 None,以便追踪数据可以发送到 OpenTelemetry Collector。

流程

  1. 在网格命名空间中创建 OpenTelemetry Collector 实例。这个示例使用 info 命名空间:

    OpenTelemetry Collector 配置示例

    apiVersion: opentelemetry.io/v1alpha1
    kind: OpenTelemetryCollector
    metadata:
      name: otel
      namespace: info  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 的单一实例。
    • 您可以通过在 OpenTelemetryCollector 资源中添加 sidecar.istio.io/inject: 'true' 来添加 otel-collector 作为网格的一部分。
  2. 检查 otel-collector pod 日志并验证 pod 是否正在运行:

    otel-collector pod 日志检查示例

    $ oc logs -n info  -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.info.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 Query API,这会导致根据 Tempo 资源限制造成较长的响应时间。如果您在 Kiali UI 中看到 Could not fetch span 错误消息,请检查 Tempo 配置,或减少 Kiali 中每个查询的限制。

  7. 将请求发送到您的应用。
  8. 验证 istiod pod 日志和 otel-collector pod 日志。
2.17.4.1.1. 在 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.info.svc.cluster.local"
  trafficPolicy:
    tls:
      mode: DISABLE

2.17.4.1.2. 在 mTLS 加密 Service Mesh 成员命名空间中配置 Red Hat OpenShift distributed tracing Platform (Tempo)
注意

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

当您启用 Service Mesh dataPlane mTLS 加密并在 Service Mesh 成员命名空间中创建 TempoStack 实例时,所有流量都是 TLS 加密,如 tracing-system-mtls。这个加密没有预期来自 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

2.17.4.2. 连接现有的分布式追踪 Jaeger 实例

如果您在 OpenShift Container Platform 中已有现有的 Red Hat OpenShift distributed tracing Platform (Jaeger) 实例,可以将 ServiceMeshControlPlane 资源配置为使用该实例进行分布式追踪平台。

重要

从 Red Hat OpenShift Service Mesh 2.5 开始,Red Hat OpenShift distributed tracing Platform (Jaeger) 和 OpenShift Elasticsearch Operator 已被弃用,并将在以后的发行版本中删除。红帽将在当前发行生命周期中为这些功能提供程序错误修正和支持,但此功能将不再获得改进,并将被删除。作为 Red Hat OpenShift distributed tracing Platform (Jaeger) 的替代选择,您可以使用 Red Hat OpenShift distributed tracing Platform (Tempo)。

先决条件

  • 安装和配置 Red Hat OpenShift distributed tracing 平台实例。

流程

  1. 在 OpenShift Container Platform web 控制台中,点击 Operators Installed Operators
  2. Project 菜单,选择安装 Service Mesh control plane 的项目,如 istio-system
  3. 点 Red Hat OpenShift Service Mesh Operator。在 Istio Service Mesh Control Plane 列中,点 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. Save
  5. Reload 来验证 ServiceMeshControlPlane 资源已被正确配置。

2.17.4.3. 调整抽样率

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 代理,如数据库。这种抽样率决定了分布式追踪系统收集和存储的数据量。如需更多信息,请参阅分布式追踪配置选项

流程

  1. 在 OpenShift Container Platform web 控制台中,点击 Operators Installed Operators
  2. Project 菜单并选择安装 control plane 的项目,如 istio-system
  3. 点 Red Hat OpenShift Service Mesh Operator。在 Istio Service Mesh Control Plane 列中,点 ServiceMeshControlPlane 资源的名称,例如 basic
  4. 要调整抽样率,请为 spec.tracing.sampling 设置不同的值。

    1. YAML 标签。
    2. ServiceMeshControlPlane 资源中的 spec.tracing.sampling 设置值。在以下示例中,将它设置为 100

      Jaeger 抽样示例

      spec:
        tracing:
          sampling: 100

    3. Save
  5. Reload 来验证 ServiceMeshControlPlane 资源已被正确配置。

2.17.5. 访问 Jaeger 控制台

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

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

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

重要

从 Red Hat OpenShift Service Mesh 2.5 开始,Red Hat OpenShift distributed tracing Platform (Jaeger) 和 OpenShift Elasticsearch Operator 已被弃用,并将在以后的发行版本中删除。红帽将在当前发行生命周期中提供对这个功能的程序漏洞修复和支持,但这个功能将不再获得改进,并将被删除。作为 Red Hat OpenShift distributed tracing Platform (Jaeger) 的替代选择,您可以使用 Red Hat OpenShift distributed tracing Platform (Tempo)。

从 OpenShift 控制台的步骤

  1. 以具有 cluster-admin 权限的用户身份登录到 OpenShift Container Platform web 控制台。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有 dedicated-admin 角色的帐户。
  2. 进入 Networking Routes
  3. Routes 页面中,从 Namespace 菜单中选择 Service Mesh control plane 项目,如 istio-system

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

  4. 如有必要,使用过滤器来查找 jaeger 路由。单击路由 位置 以启动控制台。
  5. 单击 Log In With OpenShift

Kiali 控制台的步骤

  1. 启动 Kiali 控制台。
  2. 单击左侧导航窗格中的 Distributed Tracing
  3. 单击 Log In With OpenShift

通过 CLI 操作的步骤

  1. 以具有 cluster-admin 角色的用户身份登录 OpenShift Container Platform CLI。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有 dedicated-admin 角色的帐户。

    $ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
  2. 要使用命令行查询路由详情,请输入以下命令。在本例中,istio-system 是 Service Mesh control plane 命名空间。

    $ oc get route -n istio-system jaeger -o jsonpath='{.spec.host}'
  3. 启动浏览器并进入 https://<JAEGER_URL>,其中 <JAEGER_URL> 是您在上一步中发现的路由。
  4. 使用您用于访问 OpenShift Container Platform 控制台的相同用户名和密码登录。
  5. 如果您已将服务添加到服务网格中并生成了 trace,您可以使用过滤器和 Find Traces 按钮搜索 trace 数据。

    如果您要验证控制台安装,则不会显示 trace 数据。

有关配置 Jaeger 的更多信息,请参阅分布式追踪文档

2.17.6. 访问 Grafana 控制台

Grafana 是一个分析工具,可用于查看、查询和分析服务网格指标。在本例中,istio-system 是 Service Mesh control plane 命名空间。要访问 Grafana,请执行以下操作:

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. Project 菜单,选择安装 Service Mesh control plane 的项目,如 istio-system
  3. 单击 Routes
  4. 点击 Grafana 行的 Location 列中的链接。
  5. 使用 OpenShift Container Platform 凭证登录到 Grafana 控制台。

2.17.7. 访问 Prometheus 控制台

Prometheus 是一个监控和警报工具,可用于收集微服务相关的多维数据。在本例中,istio-system 是 Service Mesh control plane 命名空间。

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. Project 菜单,选择安装 Service Mesh control plane 的项目,如 istio-system
  3. 单击 Routes
  4. 单击 Prometheus 行的 Location 列中的链接。
  5. 使用 OpenShift Container Platform 凭证登录到 Prometheus 控制台。

2.17.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。

流程

  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. 为 user-workload 监控配置 Kiali:

    apiVersion: kiali.io/v1alpha1
    kind: Kiali
    metadata:
      name: kiali-user-workload-monitoring
      namespace: istio-system
    spec:
      external_services:
        prometheus:
          auth:
            type: bearer
            use_kiali_token: true
          query_scope:
            mesh_id: "basic-istio-system"
          thanos_proxy:
            enabled: true
          url: https://thanos-querier.openshift-monitoring.svc.cluster.local:9091
    • 如果使用 Istio Operator 2.4,请使用此配置为 user-workload 监控配置 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
  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: info
      metrics:
      - providers:
        - name: prometheus
    1
    在 control plane 命名空间中创建的 Telemetry 对象应用到网格中的所有工作负载。要将遥测应用到一个命名空间,请在目标命名空间中创建对象。
    2
    可选:设置 selector.matchLabels spec,将 Telemetry 对象应用到目标命名空间中的特定工作负载。
  6. 应用 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
    1
    在 Istio control plane 命名空间中创建此 ServiceMonitor 对象,因为它监控 Istiod 服务。在本例中,命名空间是 istio-system
    2
    字符串 "basic-istio-system" 是 SMCP 名称及其命名空间的组合,但只要使用集群中用户工作负载监控的每个网格都是唯一的,可以使用任何标签。第 2 步中配置的 Kiali 资源的 spec.prometheus.query_scope 需要匹配这个值。
    注意

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

    如果集群中的多个网格实例可能会使用 user-workload 监控,则需要 Kiali 资源中的 mesh_id relabelings 和 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
    由于 OpenShift Container Platform 监控会忽略 ServiceMonitorPodMonitor 对象中的 namespaceSelector spec,所以您必须在所有网格命名空间中应用 PodMonitor 对象,包括 control plane 命名空间。
    2
    字符串 "basic-istio-system" 是 SMCP 名称及其命名空间的组合,但只要使用集群中用户工作负载监控的每个网格都是唯一的,可以使用任何标签。第 2 步中配置的 Kiali 资源的 spec.prometheus.query_scope 需要匹配这个值。
    注意

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

    如果集群中的多个网格实例可能会使用 user-workload 监控,则需要 Kiali 资源中的 mesh_id relabelings 和 spec.prometheus.query_scope 字段。这样可确保 Kiali 只查看其关联的网格中的指标。

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

  8. 打开 OpenShift Container Platform Web 控制台,检查指标是否可见。

2.17.9. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.