21.5. 在 OpenShift 中查看 Kafka 指标和仪表板
当 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-edit
或monitoring-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 部署示例警报规则。
先决条件
- 正在运行的 Kafka 集群。
- 检查 流为 Apache Kafka 提供的示例警报规则。
流程
检查是否启用了监控用户定义的项目:
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 指标和仪表板” 中的先决条件。
在
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
。
将
strimzi-pod-monitor.yaml
文件部署到运行 Kafka 集群的项目中:oc apply -f strimzi-pod-monitor.yaml -n MY-PROJECT
将示例 Prometheus 规则部署到同一项目中:
oc apply -f prometheus-rules.yaml -n MY-PROJECT
21.5.3. 为 Grafana 创建服务帐户
Apache Kafka 的 Streams 的 Grafana 实例需要使用分配了 cluster-monitoring-view
角色的服务帐户运行。
如果您使用 Grafana 显示监控指标,请创建一个服务帐户。
先决条件
流程
在包含 Kafka 集群的项目中为 Grafana 创建
ServiceAccount
:oc create sa grafana-service-account -n my-project
在本例中,在
my-project
命名空间中创建一个名为grafana-service-account
的服务帐户。创建一个
ClusterRoleBinding
资源,将cluster-monitoring-view
角色分配给 GrafanaServiceAccount
。此处的资源名为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
将
ClusterRoleBinding
部署到同一项目中:oc apply -f grafana-cluster-monitoring-binding.yaml -n my-project
为服务帐户创建令牌 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
创建
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 应用程序。
流程
获取 Grafana
ServiceAccount
的访问令牌:oc describe sa/grafana-service-account | grep Tokens: oc describe secret grafana-service-account-token-mmlp9 | grep token:
在本例中,服务帐户名为
grafana-service-account
。复制要在下一步中使用的访问令牌。创建包含 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
:GrafanaServiceAccount
的访问令牌值。
从
datasource.yaml
文件创建一个名为grafana-config
的配置映射:oc create configmap grafana-config --from-file=datasource.yaml -n MY-PROJECT
创建由
Deployment
和Service
组成的 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
将 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 支持的所有指标。您可以根据基础架构修改示例仪表板或添加其他指标。
流程
获取到 Grafana 服务的路由详情。例如:
oc get routes NAME HOST/PORT PATH SERVICES MY-GRAFANA-ROUTE MY-GRAFANA-ROUTE-amq-streams.net grafana
- 在 Web 浏览器中,使用 Route 主机和端口的 URL 访问 Grafana 登录屏幕。
输入您的用户名和密码,然后单击 Log In。
默认的 Grafana 用户名和密码都是
admin
。第一次登录后,您可以更改密码。- 在 Configuration > Data Sources 中,检查是否创建了 Prometheus 数据源。数据源是在 第 21.5.4 节 “使用 Prometheus 数据源部署 Grafana” 中创建的。
- 单击 + 图标,然后单击 Import。
-
在
examples/metrics/grafana-dashboards
中,复制要导入的仪表板的 JSON。 - 将 JSON 粘贴到文本框中,然后点 Load。
- 为其他 Grafana 仪表板重复步骤 5-7。
从 Dashboards 主页中查看导入的 Grafana 仪表板。