搜索

21.5. 在 OpenShift 中查看 Kafka 指标和仪表板

download PDF

当 Apache Kafka 的流部署到 OpenShift Container Platform 中时,通过 监控用户定义的项目 来提供指标数据。此 OpenShift 功能使开发人员能够访问单独的 Prometheus 实例,用于监控自己的项目(如 Kafka 项目)。

如果启用了对用户定义的项目的监控,openshift-user-workload-monitoring 项目将包含以下组件:

  • Prometheus operator
  • Prometheus 实例(由 Prometheus Operator 自动部署)
  • Thanos Ruler 实例

Apache Kafka 的流使用这些组件消耗指标。

集群管理员必须为用户定义的项目启用监控,然后授予开发人员和其他用户权限来监控其自己的项目中的应用程序。

Grafana 部署

您可以将 Grafana 实例部署到包含 Kafka 集群的项目中。然后,Grafana 仪表板示例可用于视觉化 Grafana 用户界面中 Apache Kafka 的 Streams 的 Prometheus 指标。

重要

openshift-monitoring 项目为核心平台组件提供监控。不要使用 此项目中的 Prometheus 和 Grafana 组件,在 OpenShift Container Platform 4.x 上为 Apache Kafka 配置监控。

流程概述

要在 OpenShift Container Platform 中设置 Apache Kafka 监控的 Streams,请按照以下步骤执行:

21.5.1. 先决条件

  • 您已使用示例 YAML 文件 部署了 Prometheus 指标配置
  • 启用对用户定义的项目的监控。集群管理员已在 OpenShift 集群中创建了一个 cluster-monitoring-config 配置映射。
  • 集群管理员已为您分配一个 monitoring-rules-editmonitoring-edit 角色。

有关创建 cluster-monitoring-config 配置映射并授予用户权限来监控用户定义的项目的的更多信息,请参阅 OpenShift 文档

21.5.2. 部署 Prometheus 资源

使用 Prometheus 获取 Kafka 集群中的监控数据。

您可以使用自己的 Prometheus 部署,或使用 Apache Kafka 的 Streams 提供的 指标配置文件 部署 Prometheus。要使用示例文件,请配置和部署 PodMonitor 资源。PodMonitor 直接从 Apache Kafka, ZooKeeper, Operators, Kafka Bridge, 和 Cruise Control 的 pod 中提取数据。

然后,您要为 Alertmanager 部署示例警报规则。

先决条件

流程

  1. 检查是否启用了监控用户定义的项目:

    oc get pods -n openshift-user-workload-monitoring

    如果启用,则返回监控组件的 pod。例如:

    NAME                                   READY   STATUS    RESTARTS   AGE
    prometheus-operator-5cc59f9bc6-kgcq8   1/1     Running   0          25s
    prometheus-user-workload-0             5/5     Running   1          14s
    prometheus-user-workload-1             5/5     Running   1          14s
    thanos-ruler-user-workload-0           3/3     Running   0          14s
    thanos-ruler-user-workload-1           3/3     Running   0          14s

    如果没有返回 pod,则禁用对用户定义的项目的监控。请参阅 第 21.5 节 “在 OpenShift 中查看 Kafka 指标和仪表板” 中的先决条件。

  2. examples/metrics/prometheus-install/strimzi-pod-monitor.yaml 中定义多个 PodMonitor 资源。

    对于每个 PodMonitor 资源,编辑 spec.namespaceSelector.matchNames 属性:

    apiVersion: monitoring.coreos.com/v1
    kind: PodMonitor
    metadata:
      name: cluster-operator-metrics
      labels:
        app: strimzi
    spec:
      selector:
        matchLabels:
          strimzi.io/kind: cluster-operator
      namespaceSelector:
        matchNames:
          - <project-name> 1
      podMetricsEndpoints:
      - path: /metrics
        port: http
    # ...
    1
    从其中提取指标的 pod 正在运行的项目,如 Kafka
  3. strimzi-pod-monitor.yaml 文件部署到运行 Kafka 集群的项目中:

    oc apply -f strimzi-pod-monitor.yaml -n MY-PROJECT
  4. 将示例 Prometheus 规则部署到同一项目中:

    oc apply -f prometheus-rules.yaml -n MY-PROJECT

21.5.3. 为 Grafana 创建服务帐户

Apache Kafka 的 Streams 的 Grafana 实例需要使用分配了 cluster-monitoring-view 角色的服务帐户运行。

如果您使用 Grafana 显示监控指标,请创建一个服务帐户。

流程

  1. 在包含 Kafka 集群的项目中为 Grafana 创建 ServiceAccount

     oc create sa grafana-service-account -n my-project

    在本例中,在 my-project 命名空间中创建一个名为 grafana-service-account 的服务帐户。

  2. 创建一个 ClusterRoleBinding 资源,将 cluster-monitoring-view 角色分配给 Grafana ServiceAccount。此处的资源名为 grafana-cluster-monitoring-binding

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: grafana-cluster-monitoring-binding
      labels:
        app: strimzi
    subjects:
      - kind: ServiceAccount
        name: grafana-service-account
        namespace: my-project
    roleRef:
      kind: ClusterRole
      name: cluster-monitoring-view
      apiGroup: rbac.authorization.k8s.io
  3. ClusterRoleBinding 部署到同一项目中:

    oc apply -f grafana-cluster-monitoring-binding.yaml -n my-project
  4. 为服务帐户创建令牌 secret:

    apiVersion: v1
    kind: Secret
    metadata:
      name: secret-sa
      annotations:
        kubernetes.io/service-account.name: "grafana-service-account" 1
    type: kubernetes.io/service-account-token 2
    1
    指定服务帐户。
    2
    指定服务帐户令牌 secret。
  5. 创建 Secret 对象和访问令牌:

    oc create -f <secret_configuration>.yaml

    部署 Grafana 时需要访问令牌。

21.5.4. 使用 Prometheus 数据源部署 Grafana

部署 Grafana 以显示 Prometheus 指标。Grafana 应用程序需要配置 OpenShift Container Platform 监控堆栈。

OpenShift Container Platform 在 openshift-monitoring 项目中包含一个 Thanos Querier 实例。Thanos Querier 用于聚合平台指标。

要使用所需的平台指标,Grafana 实例需要一个可以连接到 Thanos Querier 的 Prometheus 数据源。要配置此连接,您可以创建一个配置映射来使用令牌进行身份验证,到与 Thanos Querier 一起运行的 oauth-proxy sidecar。datasource.yaml 文件被用作配置映射的来源。

最后,您可以使用作为卷挂载到包含 Kafka 集群的项目的配置映射部署 Grafana 应用程序。

流程

  1. 获取 Grafana ServiceAccount 的访问令牌:

    oc describe sa/grafana-service-account | grep Tokens:
    oc describe secret grafana-service-account-token-mmlp9 | grep token:

    在本例中,服务帐户名为 grafana-service-account。复制要在下一步中使用的访问令牌。

  2. 创建包含 Grafana 的 Thanos Querier 配置的 datasource.yaml 文件。

    将访问令牌粘贴到 httpHeaderValue1 属性中,如下所示。

    apiVersion: 1
    
    datasources:
    - name: Prometheus
      type: prometheus
      url: https://thanos-querier.openshift-monitoring.svc.cluster.local:9091
      access: proxy
      basicAuth: false
      withCredentials: false
      isDefault: true
      jsonData:
        timeInterval: 5s
        tlsSkipVerify: true
        httpHeaderName1: "Authorization"
      secureJsonData:
        httpHeaderValue1: "Bearer ${GRAFANA-ACCESS-TOKEN}" 1
      editable: true
    1
    GRAFANA-ACCESS-TOKEN :Grafana ServiceAccount 的访问令牌值。
  3. datasource.yaml 文件创建一个名为 grafana-config 的配置映射:

    oc create configmap grafana-config --from-file=datasource.yaml -n MY-PROJECT
  4. 创建由 DeploymentService 组成的 Grafana 应用程序。

    grafana-config 配置映射作为数据源配置的卷挂载。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: grafana
      labels:
        app: strimzi
    spec:
      replicas: 1
      selector:
        matchLabels:
          name: grafana
      template:
        metadata:
          labels:
            name: grafana
        spec:
          serviceAccountName: grafana-service-account
          containers:
          - name: grafana
            image: grafana/grafana:10.4.2
            ports:
            - name: grafana
              containerPort: 3000
              protocol: TCP
            volumeMounts:
            - name: grafana-data
              mountPath: /var/lib/grafana
            - name: grafana-logs
              mountPath: /var/log/grafana
            - name: grafana-config
              mountPath: /etc/grafana/provisioning/datasources/datasource.yaml
              readOnly: true
              subPath: datasource.yaml
            readinessProbe:
              httpGet:
                path: /api/health
                port: 3000
              initialDelaySeconds: 5
              periodSeconds: 10
            livenessProbe:
              httpGet:
                path: /api/health
                port: 3000
              initialDelaySeconds: 15
              periodSeconds: 20
          volumes:
          - name: grafana-data
            emptyDir: {}
          - name: grafana-logs
            emptyDir: {}
          - name: grafana-config
            configMap:
              name: grafana-config
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: grafana
      labels:
        app: strimzi
    spec:
      ports:
      - name: grafana
        port: 3000
        targetPort: 3000
        protocol: TCP
      selector:
        name: grafana
      type: ClusterIP
  5. 将 Grafana 应用程序部署到包含 Kafka 集群的项目中:

    oc apply -f <grafana-application> -n <my-project>

21.5.5. 创建到 Grafana 服务的路由

您可以通过公开 Grafana 服务的路由访问 Grafana 用户界面。

流程

  • 创建到 grafana 服务的边缘路由:

    oc create route edge <my-grafana-route> --service=grafana --namespace=KAFKA-NAMESPACE

21.5.6. 导入 Grafana 仪表板示例

使用 Grafana 在可自定义仪表板上提供 Prometheus 指标的视觉化。

Apache Kafka 的 Streams 以 JSON 格式提供 Grafana 的示例仪表板配置文件

  • examples/metrics/grafana-dashboards

此流程使用 Grafana 仪表板示例。

示例仪表板是监控关键指标的良好起点,但它们不会显示 Kafka 支持的所有指标。您可以根据基础架构修改示例仪表板或添加其他指标。

流程

  1. 获取到 Grafana 服务的路由详情。例如:

    oc get routes
    
    NAME               HOST/PORT                         PATH  SERVICES
    MY-GRAFANA-ROUTE   MY-GRAFANA-ROUTE-amq-streams.net        grafana
  2. 在 Web 浏览器中,使用 Route 主机和端口的 URL 访问 Grafana 登录屏幕。
  3. 输入您的用户名和密码,然后单击 Log In

    默认的 Grafana 用户名和密码都是 admin。第一次登录后,您可以更改密码。

  4. Configuration > Data Sources 中,检查是否创建了 Prometheus 数据源。数据源是在 第 21.5.4 节 “使用 Prometheus 数据源部署 Grafana” 中创建的。
  5. 单击 + 图标,然后单击 Import
  6. examples/metrics/grafana-dashboards 中,复制要导入的仪表板的 JSON。
  7. 将 JSON 粘贴到文本框中,然后点 Load
  8. 为其他 Grafana 仪表板重复步骤 5-7。

Dashboards 主页中查看导入的 Grafana 仪表板。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.