検索

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

download PDF

以下では、Prometheus Operator を使用して Operator SDK いよって提供されるビルトインされたモニタリングサポートについて説明し、Operator 作成者がどのように使用できるかについて詳しく説明します。

5.11.1. Prometheus Operator のサポート

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

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

5.11.2. カスタムメトリクスの公開

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

前提条件

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

手順

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

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

    例5.6 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)
    }
  3. mainコントローラークラスの調整ループの任意の部分から、これらのコレクターに記録し、これをもとにメトリックのビジネスロジックを決定します。

    例5.7 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
    }
  4. Operator をビルドし、プッシュします。

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

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

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

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

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: prometheus-k8s-role
      namespace: <operator_namespace>
    rules:
      - apiGroups:
          - ""
        resources:
          - endpoints
          - pods
          - services
          - nodes
          - secrets
        verbs:
          - get
          - list
          - watch

    例5.9 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
  7. デプロイされた Operator にロールとロールバインディングを適用します。

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

    $ oc label namespace <operator_namespace> openshift.io/cluster-monitoring="true"

検証

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

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.