4.7.2. メトリクスヘルパー

Operator SDK を使用して生成される Go ベース Operator では、以下の関数が実行中のプログラムについての一般的なメトリクスを公開します。

func ExposeMetricsPort(ctx context.Context, port int32) (*v1.Service, error)

これらのメトリクスは controller-runtime ライブラリー API から継承されます。メトリクスはデフォルトで 0.0.0.0:8383/metrics で提供されます。

Service オブジェクトは、メトリクスポートが公開された状態で作成されます。これはその後 Prometheus によってアクセスされます。Service オブジェクトは、リーダー Pod の root オーナーが削除されるとガベージコレクションの対象になります。

以下のサンプルは、Operator SDK を使用して生成されるすべての Operator の cmd/manager/main.go ファイルにあります。

import(
    "github.com/operator-framework/operator-sdk/pkg/metrics"
    "machine.openshift.io/controller-runtime/pkg/manager"
)

var (
    // Change the below variables to serve metrics on a different host or port.
    metricsHost       = "0.0.0.0" 1
    metricsPort int32 = 8383 2
)
...
func main() {
    ...
    // Pass metrics address to controller-runtime manager
    mgr, err := manager.New(cfg, manager.Options{
        Namespace:          namespace,
        MetricsBindAddress: fmt.Sprintf("%s:%d", metricsHost, metricsPort),
    })

    ...
    // Create Service object to expose the metrics port.
    _, err = metrics.ExposeMetricsPort(ctx, metricsPort)
    if err != nil {
        // handle error
        log.Info(err.Error())
    }
    ...
}
1
メトリクスの公開に使用されるホスト。
2
メトリクスの公開に使用されるポート。

4.7.2.1. メトリクスポートの変更

Operator の作成者は、メトリクスが公開されるポートを変更できます。

前提条件

  • Operator SDK を使用して生成される Go ベースの Operator
  • Prometheus Operator がデプロイされた Kubernetes ベースのクラスター

手順

  • 生成された Operator の cmd/manager/main.go ファイルで、以下の行の metricsPort の値を変更します。

    var metricsPort int32 = 8383