5.10. Prometheus를 사용하여 기본 제공 모니터링 구성
이 가이드에서는 Prometheus Operator 및 Operator 작성자 세부 정보를 사용하여 Operator SDK에서 제공하는 기본 제공 모니터링 지원에 대해 설명합니다.
5.10.1. Prometheus Operator 지원
Prometheus는 오픈 소스 시스템 모니터링 및 경고 툴킷입니다. Prometheus Operator는 OpenShift Container Platform과 같은 Kubernetes 기반 클러스터에서 실행되는 Prometheus 클러스터를 생성, 구성, 관리합니다.
Helper 함수는 기본적으로 Operator SDK에 있으며 Prometheus Operator가 배포된 클러스터에서 사용하기 위해 생성한 Go 기반 Operator의 지표를 자동으로 설정합니다.
5.10.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에서 액세스할 수 있습니다. 리더 Pod의 root
소유자가 삭제되면 Service
오브젝트가 가비지 수집됩니다.
다음 예제는 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.10.2.1. 지표 포트 수정
Operator 작성자는 지표가 표시되는 포트를 수정할 수 있습니다.
사전 요구 사항
- Operator SDK를 사용하여 Go 기반 Operator가 생성됨
- Kubernetes 기반 클러스터에 Prometheus Operator가 배포됨
프로세스
생성된 Operator의
cmd/manager/main.go
파일에서 다음 줄에 있는metricsPort
값을 변경합니다.var metricsPort int32 = 8383
5.10.3. 서비스 모니터
ServiceMonitor
는 Service
오브젝트에서 Endpoints
를 검색하고 해당 Pod를 모니터링하도록 Prometheus를 구성하는 Prometheus Operator에서 제공하는 사용자 정의 리소스입니다.
Operator SDK를 사용하여 생성한 Go 기반 Operator에서는 GenerateServiceMonitor()
도우미 함수에서 Service
오브젝트를 가져와서 이를 기반으로 ServiceMonitor
오브젝트를 생성할 수 있습니다.
추가 리소스
-
ServiceMonitor
CRD(사용자 정의 리소스 정의)에 대한 자세한 내용은 Prometheus Operator 설명서를 참조하십시오.
5.10.3.1. 서비스 모니터 생성
Operator 작성자는 metrics.CreateServiceMonitor()
도우미 함수를 사용하여 생성한 모니터링 서비스에 대한 서비스 대상 검색 기능을 추가하여 새로 생성한 서비스를 허용할 수 있습니다.
사전 요구 사항
- Operator SDK를 사용하여 Go 기반 Operator가 생성됨
- Kubernetes 기반 클러스터에 Prometheus Operator가 배포됨
프로세스
Operator 코드에
metrics.CreateServiceMonitor()
도우미 함수를 추가합니다.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. } ... }