5.9. Prometheus による組み込みモニターリングの設定
以下では、Prometheus Operator を使用して Operator SDK いよって提供されるビルトインされたモニタリングサポートについて説明し、Operator 作成者がどのように使用できるかについて詳しく説明します。
5.9.1. Prometheus Operator のサポート
Prometheus はオープンソースのシステムモニタリングおよびアラートツールキットです。Prometheus Operator は、 OpenShift Container Platform などの Kubernetes ベースのクラスターで実行される Prometheus クラスターを作成し、設定し、管理します。
ヘルパー関数は、デフォルトで Operator SDK に存在し、Prometheus Operator がデプロイされているクラスターで使用できるように生成された Go ベースの Operator にメトリクスを自動的にセットアップします。
5.9.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()) } ... }
5.9.2.1. メトリクスポートの変更
Operator の作成者は、メトリクスが公開されるポートを変更できます。
前提条件
- Operator SDK を使用して生成される Go ベースの Operator
- Prometheus Operator がデプロイされた Kubernetes ベースのクラスター
手順
生成された Operator の
cmd/manager/main.go
ファイルで、以下の行のmetricsPort
の値を変更します。var metricsPort int32 = 8383
5.9.3. サービスモニター
ServiceMonitor
は、Prometheus Operator によって提供されるカスタマーリソースであり、 Service
オブジェクトで Endpoints
を検出し、Prometheus がこれらの Pod を監視するように設定します。
Operator SDK を使用して生成される Go ベースの Operator では、GenerateServiceMonitor()
ヘルパー関数は Service
オブジェクトを取り、これに基づいて ServiceMonitor
オブジェクトを生成することができます。
関連情報
-
ServiceMonitor
カスタムリソース定義 (CRD) についての詳細は、 Prometheus Operator ドキュメント を参照してください。
5.9.3.1. サービスモニターの作成
Operator の作成者は、新規に作成されるサービスを受け入れる metrics.CreateServiceMonitor()
ヘルパー関数を使用して、作成されたモニターリングサービスのサービスターゲット検出を追加できます。
前提条件
- Operator SDK を使用して生成される Go ベースの Operator
- Prometheus Operator がデプロイされた Kubernetes ベースのクラスター
手順
metrics.CreateServiceMonitor()
ヘルパー関数を Operator コードに追加します。import( "k8s.io/api/core/v1" "github.com/operator-framework/operator-sdk/pkg/metrics" "machine.openshift.io/controller-runtime/pkg/client/config" ) func main() { ... // Populate below with the Service(s) for which you want to create ServiceMonitors. services := []*v1.Service{} // Create one ServiceMonitor per application per namespace. // Change the below value to name of the Namespace you want the ServiceMonitor to be created in. ns := "default" // restConfig is used for talking to the Kubernetes apiserver restConfig := config.GetConfig() // Pass the Service(s) to the helper function, which in turn returns the array of ServiceMonitor objects. serviceMonitors, err := metrics.CreateServiceMonitors(restConfig, ns, services) if err != nil { // Handle errors here. } ... }