21.5. OpenShift での Kafka メトリクスおよびダッシュボードの表示


Streams for Apache Kafka が OpenShift Container Platform にデプロイされると、ユーザー定義プロジェクトのモニタリング によりメトリクスが提供されます。この OpenShift 機能により、開発者は独自のプロジェクト (例: Kafka プロジェクト) を監視するために別の Prometheus インスタンスにアクセスできます。

ユーザー定義プロジェクトのモニタリングが有効な場合は、openshift-user-workload-monitoring プロジェクトには以下のコンポーネントが含まれます。

  • Prometheus operator
  • Prometheus インスタンス (Prometheus Operator によって自動的にデプロイされます)
  • Thanos Ruler インスタンス

Streams for Apache Kafka では、これらのコンポーネントを使用してメトリクスを消費します。

クラスター管理者は、ユーザー定義プロジェクトのモニタリングを有効にし、開発者およびその他のユーザーに自分のプロジェクトに含まれるアプリケーションを監視するパーミッションを付与する必要があります。

Grafana のデプロイメント

Grafana インスタンスを、Kafka クラスターが含まれるプロジェクトにデプロイできます。その後、サンプルの Grafana ダッシュボードを使用して、Grafana ユーザーインターフェイスで Streams for Apache Kafka の Prometheus メトリクスを視覚化できます。

重要

openshift-monitoring プロジェクトはコアプラットフォームコンポーネントをモニタリングできます。このプロジェクトの Prometheus および Grafana コンポーネントを使用して、OpenShift Container Platform 4.x 上の Streams for Apache Kafka の監視を設定 しないでください

手順の概要

OpenShift Container Platform で Streams for Apache Kafka の監視を設定するには、次の手順を順番に実行します。

21.5.1. 前提条件

  • YAML ファイルのサンプルを使用して、Prometheus メトリクス設定がデプロイされている
  • ユーザー定義プロジェクトの監視が有効になっている。クラスター管理者が OpenShift クラスターに cluster-monitoring-config の Config Map を作成している。
  • クラスター管理者は、monitoring-rules-edit または monitoring-edit ロールを割り当てている。

cluster-monitoring-config config map を作成し、ユーザーにユーザー定義プロジェクトを監視する権限を付与する方法の詳細は、OpenShift のドキュメント を参照してください。

21.5.2. Prometheus リソースのデプロイ

Prometheus を使用して、Kafka クラスターのモニタリングデータを取得します。

独自の Prometheus デプロイメントを使用することも、Streams for Apache Kafka に付属する サンプルのメトリクス設定ファイル を使用して Prometheus をデプロイすることもできます。サンプルファイルを使用するには、PodMonitor リソースを設定し、デプロイします。PodMonitors は、Apache Kafka、ZooKeeper、Operator、Kafka Bridge、および Cruise Control から直接データをスクレープします。

次に、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 が返されなければ、ユーザー定義プロジェクトのモニタリングは無効になっています。「OpenShift での Kafka メトリクスおよびダッシュボードの表示」 の前提条件を参照してください。

  2. 複数の PodMonitor リソースは、examples/metrics/prometheus-install/strimzi-pod-monitor.yaml で定義されます。

    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 のサービスアカウントの作成

Streams for Apache Kafka の Grafana インスタンスは、cluster-monitoring-view ロールが割り当てられたサービスアカウントで実行する必要があります。

Grafana を使用してモニタリングのメトリクスを表示する場合は、サービスアカウントを作成します。

手順

  1. Kafka クラスターを含むプロジェクトに Grafana の ServiceAccount を作成します。

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

    この例では、grafana-service-account という名前のサービスアカウントが my-project namespace に作成されます。

  2. cluster-monitoring-view ロールを Grafana ServiceAccount に割り当てる ClusterRoleBinding リソースを作成します。ここでは、リソースの名前は 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. サービスアカウントのトークンシークレットを作成します。

    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
    サービスアカウントトークンシークレットを指定します。
  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 サイドカーに対して認証を行う config map を作成します。datasource.yaml ファイルは config map のソースとして使用されます。

最後に、Kafka クラスターが含まれるプロジェクトにボリュームとしてマウントされた config map で 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 という名前の config map を作成します。

    oc create configmap grafana-config --from-file=datasource.yaml -n MY-PROJECT
  4. Deployment および Service で設定される Grafana アプリケーションを作成します。

    grafana-config config map はデータソース設定のボリュームとしてマウントされます。

    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 メトリックを視覚化します。

Streams for Apache Kafka には、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 データソースが作成済みであることを確認します。データソースは 「Prometheus データソースを使用した Grafana のデプロイ」 に作成されています。
  5. + アイコンをクリックしてから、Import をクリックします。
  6. examples/metrics/grafana-dashboards で、インポートするダッシュボードの JSON をコピーします。
  7. JSON をテキストボックスに貼り付け、Load をクリックします。
  8. 他の Grafana ダッシュボードのサンプル用に、ステップ 5-7 を繰り返します。

インポートされた Grafana ダッシュボードは、Dashboards ホームページから表示できます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.