5.14. Prometheus による組み込みモニタリングの設定


本書では、Prometheus Operator を使用して Operator SDK が提供する組み込みの監視サポートについて説明し、Go ベースおよび Ansible ベースの Operator の作成者向けの使用法を詳説します。

5.14.1. Prometheus Operator のサポート

Prometheus はオープンソースのシステムモニタリングおよびアラートツールキットです。Prometheus Operator は、OpenShift Container Platform などの Kubernetes ベースのクラスターで実行される Prometheus クラスターを作成し、設定し、管理します。

ヘルパー関数は、デフォルトで Operator SDK に存在し、Prometheus Operator がデプロイされているクラスターで使用できるように生成された Go ベースの Operator にメトリックを自動的にセットアップします。

5.14.2. Go ベースの Operator のカスタムメトリックの公開

Operator の作成者は、controller-runtime/pkg/metrics ライブラリーのグローバル Prometheus レジストリーを使用してカスタムメトリックを公開できます。

前提条件

  • Operator SDK を使用して生成される Go ベースの Operator
  • Prometheus Operator。デフォルトで OpenShift Container Platform クラスターにデプロイされます

手順

  1. Operator SDK プロジェクトで、config/default/kustomization.yaml ファイルの次の行のコメントを解除します。

    ../prometheus
    Copy to Clipboard Toggle word wrap
  2. カスタムコントローラークラスを作成して、Operator からの追加のメトリックを公開します。次の例では、widgetswidgetFailures コレクターをグローバル変数として宣言してコントローラーのパッケージの init() 関数に登録します。

    例5.29 controllers/memcached_controller_test_metrics.go ファイル

    package controllers
    
    import (
    	"github.com/prometheus/client_golang/prometheus"
    	"sigs.k8s.io/controller-runtime/pkg/metrics"
    )
    
    
    var (
        widgets = prometheus.NewCounter(
            prometheus.CounterOpts{
                Name: "widgets_total",
                Help: "Number of widgets processed",
            },
        )
        widgetFailures = prometheus.NewCounter(
            prometheus.CounterOpts{
                Name: "widget_failures_total",
                Help: "Number of failed widgets",
            },
        )
    )
    
    func init() {
        // Register custom metrics with the global prometheus registry
        metrics.Registry.MustRegister(widgets, widgetFailures)
    }
    Copy to Clipboard Toggle word wrap
  3. main コントローラークラスの調整ループの任意の部分から、これらのコレクターに記録し、これをもとにメトリックのビジネスロジックを決定します。

    例5.30 controllers/memcached_controller.go ファイル

    func (r *MemcachedReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
    	...
    	...
    	// Add metrics
    	widgets.Inc()
    	widgetFailures.Inc()
    
    	return ctrl.Result{}, nil
    }
    Copy to Clipboard Toggle word wrap
  4. Operator をビルドし、プッシュします。

    $ make docker-build docker-push IMG=<registry>/<user>/<image_name>:<tag>
    Copy to Clipboard Toggle word wrap
  5. Operator をデプロイします。

    $ make deploy IMG=<registry>/<user>/<image_name>:<tag>
    Copy to Clipboard Toggle word wrap
  6. ロールおよびロールバインディング定義を作成して、Operator のサービスモニターが OpenShift Container Platform クラスターの Prometheus インスタンスによってスクレイプされるようにします。

    サービスアカウントに namespace のメトリックをスクレイプする権限が指定されるように、ロールを割り当てる必要があります。

    例5.31 config/prometheus/role.yaml ロール

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: prometheus-k8s-role
      namespace: memcached-operator-system
    rules:
      - apiGroups:
          - ""
        resources:
          - endpoints
          - pods
          - services
          - nodes
          - secrets
        verbs:
          - get
          - list
          - watch
    Copy to Clipboard Toggle word wrap

    例5.32 config/prometheus/rolebinding.yaml ロールバインディング

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: prometheus-k8s-rolebinding
      namespace: memcached-operator-system
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: prometheus-k8s-role
    subjects:
      - kind: ServiceAccount
        name: prometheus-k8s
        namespace: openshift-monitoring
    Copy to Clipboard Toggle word wrap
  7. デプロイされた Operator にロールとロールバインディングを適用します。

    $ oc apply -f config/prometheus/role.yaml
    Copy to Clipboard Toggle word wrap
    $ oc apply -f config/prometheus/rolebinding.yaml
    Copy to Clipboard Toggle word wrap
  8. スクレイプするネームスペースのラベルを設定します。これにより、そのネームスペースの OpenShift クラスターモニタリングが有効になります。

    $ oc label namespace <operator_namespace> openshift.io/cluster-monitoring="true"
    Copy to Clipboard Toggle word wrap

検証

  • OpenShift Container Platform Web コンソールでメトリックを照会および表示します。カスタムコントローラークラスで設定された名前 ( widgets_totalwidget_failures_total など) を使用できます。

5.14.3. Ansible ベースの Operator のカスタムメトリックの公開

Ansible ベースの Operator を作成する Operator 作成者は、Operator SDK の osdk_metrics モジュールを使用して、カスタムの Operator および Operand メトリックの公開、イベントの発行、ログのサポートが可能です。

前提条件

  • Operator SDK を使用して生成される Ansible ベースの Operator
  • Prometheus Operator。デフォルトで OpenShift Container Platform クラスターにデプロイされます

手順

  1. Ansible ベースの Operator を生成します。この例では、testmetrics.com ドメインを使用しています。

    $ operator-sdk init \
        --plugins=ansible \
        --domain=testmetrics.com
    Copy to Clipboard Toggle word wrap
  2. metrics API を作成します。この例では、Testmetrics という名前の kind を使用しています。

    $ operator-sdk create api \
        --group metrics \
        --version v1 \
        --kind Testmetrics \
        --generate-role
    Copy to Clipboard Toggle word wrap
  3. roles/testmetrics/tasks/main.yml ファイルを編集し、osdk_metrics モジュールを使用して Operator プロジェクトのカスタムメトリックを作成します。

    例5.33 roles/testmetrics/tasks/main.yml ファイルの例

    ---
    # tasks file for Memcached
    - name: start k8sstatus
      k8s:
        definition:
          kind: Deployment
          apiVersion: apps/v1
          metadata:
            name: '{{ ansible_operator_meta.name }}-memcached'
            namespace: '{{ ansible_operator_meta.namespace }}'
          spec:
            replicas: "{{size}}"
            selector:
              matchLabels:
                app: memcached
            template:
              metadata:
                labels:
                  app: memcached
              spec:
                containers:
                - name: memcached
                  command:
                  - memcached
                  - -m=64
                  - -o
                  - modern
                  - -v
                  image: "docker.io/memcached:1.4.36-alpine"
                  ports:
                    - containerPort: 11211
    
    - osdk_metric:
        name: my_thing_counter
        description: This metric counts things
        counter: {}
    
    - osdk_metric:
        name: my_counter_metric
        description: Add 3.14 to the counter
        counter:
          increment: yes
    
    - osdk_metric:
        name: my_gauge_metric
        description: Create my gauge and set it to 2.
        gauge:
          set: 2
    
    - osdk_metric:
        name: my_histogram_metric
        description: Observe my histogram
        histogram:
          observe: 2
    
    - osdk_metric:
        name: my_summary_metric
        description: Observe my summary
        summary:
          observe: 2
    Copy to Clipboard Toggle word wrap

検証

  1. クラスターで Operator を実行します。たとえば、"run as a deployment" メソッドを使用するには、次のようにします。

    1. Operator イメージをビルドし、これをレジストリーにプッシュします。

      $ make docker-build docker-push IMG=<registry>/<user>/<image_name>:<tag>
      Copy to Clipboard Toggle word wrap
    2. Operator をクラスターにインストールします。

      $ make install
      Copy to Clipboard Toggle word wrap
    3. Operator をデプロイします。

      $ make deploy IMG=<registry>/<user>/<image_name>:<tag>
      Copy to Clipboard Toggle word wrap
  2. Testmetrics カスタムリソース (CR) を作成します。

    1. CR 仕様を定義します。

      例5.34 config/samples/metrics_v1_testmetrics.yaml ファイルの例

      apiVersion: metrics.testmetrics.com/v1
      kind: Testmetrics
      metadata:
        name: testmetrics-sample
      spec:
        size: 1
      Copy to Clipboard Toggle word wrap
    2. オブジェクトを作成します。

      $ oc create -f config/samples/metrics_v1_testmetrics.yaml
      Copy to Clipboard Toggle word wrap
  3. Pod の詳細を取得します。

    $ oc get pods
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                                    READY   STATUS    RESTARTS   AGE
    ansiblemetrics-controller-manager-<id>  2/2     Running   0          149m
    testmetrics-sample-memcached-<id>       1/1     Running   0          147m
    Copy to Clipboard Toggle word wrap

  4. エンドポイントの詳細を取得します。

    $ oc get ep
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                                                ENDPOINTS          AGE
    ansiblemetrics-controller-manager-metrics-service   10.129.2.70:8443   150m
    Copy to Clipboard Toggle word wrap

  5. カスタムメトリックトークンをリクエストします。

    $ token=`oc create token prometheus-k8s -n openshift-monitoring`
    Copy to Clipboard Toggle word wrap
  6. メトリック値を確認します。

    1. my_counter_metric 値を確認します。

      $ oc exec ansiblemetrics-controller-manager-<id> -- curl -k -H "Authoriza
      tion: Bearer $token" 'https://10.129.2.70:8443/metrics' | grep  my_counter
      Copy to Clipboard Toggle word wrap

      出力例

      HELP my_counter_metric Add 3.14 to the counter
      TYPE my_counter_metric counter
      my_counter_metric 2
      Copy to Clipboard Toggle word wrap

    2. my_gauge_metric 値を確認します。

      $ oc exec ansiblemetrics-controller-manager-<id> -- curl -k -H "Authoriza
      tion: Bearer $token" 'https://10.129.2.70:8443/metrics' | grep  gauge
      Copy to Clipboard Toggle word wrap

      出力例

      HELP my_gauge_metric Create my gauge and set it to 2.
      Copy to Clipboard Toggle word wrap

    3. my_histogram_metricmy_summary_metric の値を確認します。

      $ oc exec ansiblemetrics-controller-manager-<id> -- curl -k -H "Authoriza
      tion: Bearer $token" 'https://10.129.2.70:8443/metrics' | grep  Observe
      Copy to Clipboard Toggle word wrap

      出力例

      HELP my_histogram_metric Observe my histogram
      HELP my_summary_metric Observe my summary
      Copy to Clipboard Toggle word wrap

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat