5.14. Prometheus를 사용하여 기본 제공 모니터링 구성


이 가이드에서는 Prometheus Operator를 사용하여 Operator SDK에서 제공하는 기본 제공 모니터링 지원과 Go 기반 및 Ansible 기반 Operator의 작성자에 대한 세부 정보를 설명합니다.

중요

Operator 프로젝트의 관련 스캐폴딩 및 테스트 툴을 포함한 Red Hat 지원 버전의 Operator SDK CLI 툴은 더 이상 사용되지 않으며 향후 OpenShift Container Platform 릴리스에서 제거될 예정입니다. Red Hat은 현재 릴리스 라이프사이클 동안 이 기능에 대한 버그 수정 및 지원을 제공하지만 이 기능은 더 이상 개선 사항을 받지 않으며 향후 OpenShift Container Platform 릴리스에서 제거됩니다.

새 Operator 프로젝트를 생성하는 데 Red Hat 지원 버전의 Operator SDK는 권장되지 않습니다. 기존 Operator 프로젝트가 있는 Operator 작성자는 OpenShift Container Platform 4.17과 함께 릴리스된 Operator SDK CLI 툴 버전을 사용하여 프로젝트를 유지 관리하고 최신 버전의 OpenShift Container Platform을 대상으로 하는 Operator 릴리스를 생성할 수 있습니다.

Operator 프로젝트의 다음과 같은 관련 기본 이미지는 더 이상 사용되지 않습니다. 이러한 기본 이미지의 런타임 기능 및 구성 API는 버그 수정 및 CVE 문제를 해결하는 데 계속 지원됩니다.

  • Ansible 기반 Operator 프로젝트의 기본 이미지
  • Helm 기반 Operator 프로젝트의 기본 이미지

OpenShift Container Platform에서 더 이상 사용되지 않거나 삭제된 주요 기능의 최신 목록은 OpenShift Container Platform 릴리스 노트에서 더 이상 사용되지 않고 삭제된 기능 섹션을 참조하십시오.

지원되지 않는 커뮤니티 유지 관리 버전에 대한 자세한 내용은 Operator SDK(Operator Framework) 를 참조하십시오.

5.14.1. Prometheus Operator 지원

Prometheus는 오픈 소스 시스템 모니터링 및 경고 툴킷입니다. Prometheus Operator는 OpenShift Container Platform과 같은 Kubernetes 기반 클러스터에서 실행되는 Prometheus 클러스터를 생성, 구성, 관리합니다.

Helper 함수는 기본적으로 Operator SDK에 있으며 Prometheus Operator가 배포된 클러스터에서 사용하기 위해 생성한 Go 기반 Operator의 지표를 자동으로 설정합니다.

5.14.2. Go 기반 Operator에 대한 사용자 정의 메트릭 노출

Operator 작성자는 controller-runtime/pkg/metrics 라이브러리의 글로벌 Prometheus 레지스트리를 사용하여 사용자 정의 지표를 게시할 수 있습니다.

사전 요구 사항

  • Operator SDK를 사용하여 Go 기반 Operator가 생성됨
  • OpenShift Container Platform 클러스터에 기본적으로 배포되는 Prometheus Operator

프로세스

  1. Operator SDK 프로젝트에서 config/default/kustomization.yaml 파일에서 다음 행의 주석을 제거합니다.

    ../prometheus
  2. Operator에서 추가 지표를 게시하는 사용자 정의 컨트롤러 클래스를 생성합니다. 다음 예제에서는 위젯위젯Failures 수집기를 글로벌 변수로 선언한 다음, 컨트롤러의 패키지에 init() 함수에 등록합니다.

    예 5.34. controllers/memcached_controller_test_metrics.go file

    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. 기본 컨트롤러 클래스의 조정 루프의 일부에서 이러한 컬렉터에 기록하여 메트릭의 비즈니스 논리를 결정합니다.

    예 5.35. controllers/memcached_controller.go file

    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. OpenShift Container Platform 클러스터의 Prometheus 인스턴스에서 Operator의 서비스 모니터를 스크랩할 수 있도록 역할 및 역할 바인딩 정의를 생성합니다.

    서비스 계정에 네임스페이스 메트릭을 스크랩할 수 있는 권한이 있도록 역할을 할당해야 합니다.

    예 5.36. config/prometheus/role.yaml role

    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

    예 5.37. 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 웹 콘솔에서 메트릭을 쿼리하고 봅니다. 사용자 지정 컨트롤러 클래스에 설정된 이름(예: widgets_totalwidget_failures_total )을 사용할 수 있습니다.

5.14.3. Ansible 기반 Operator에 대한 사용자 정의 메트릭 노출

Ansible 기반 Operator를 생성하는 Operator 작성자는 Operator SDK의 osdk_metrics 모듈을 사용하여 사용자 정의 Operator 및 Operand 지표를 노출하고 이벤트를 발송하고 로깅을 지원할 수 있습니다.

사전 요구 사항

  • Operator SDK를 사용하여 Ansible 기반 Operator 생성
  • OpenShift Container Platform 클러스터에 기본적으로 배포되는 Prometheus Operator

프로세스

  1. Ansible 기반 Operator를 생성합니다. 이 예에서는 testmetrics.com 도메인을 사용합니다.

    $ operator-sdk init \
        --plugins=ansible \
        --domain=testmetrics.com
  2. 메트릭 API를 생성합니다. 이 예에서는 Testmetrics 라는 종류를 사용합니다.

    $ operator-sdk create api \
        --group metrics \
        --version v1 \
        --kind Testmetrics \
        --generate-role
  3. roles/testmetrics/tasks/main.yml 파일을 편집하고 osdk_metrics 모듈을 사용하여 Operator 프로젝트에 대한 사용자 정의 지표를 생성합니다.

    예 5.38. 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

검증

  1. 클러스터에서 Operator를 실행합니다. 예를 들어 "run을 배포로 실행" 방법을 사용하려면 다음을 수행합니다.

    1. Operator 이미지를 빌드하고 레지스트리로 내보냅니다.

      $ make docker-build docker-push IMG=<registry>/<user>/<image_name>:<tag>
    2. 클러스터에 Operator를 설치합니다.

      $ make install
    3. Operator를 배포합니다.

      $ make deploy IMG=<registry>/<user>/<image_name>:<tag>
  2. Testmetrics CR(사용자 정의 리소스)을 생성합니다.

    1. CR 사양을 정의합니다.

      예 5.39. Example config/samples/metrics_v1_testmetrics.yaml file

      apiVersion: metrics.testmetrics.com/v1
      kind: Testmetrics
      metadata:
        name: testmetrics-sample
      spec:
        size: 1
    2. 오브젝트를 생성합니다.

      $ oc create -f config/samples/metrics_v1_testmetrics.yaml
  3. Pod 세부 정보를 가져옵니다.

    $ oc get pods

    출력 예

    NAME                                    READY   STATUS    RESTARTS   AGE
    ansiblemetrics-controller-manager-<id>  2/2     Running   0          149m
    testmetrics-sample-memcached-<id>       1/1     Running   0          147m

  4. 끝점 세부 정보를 가져옵니다.

    $ oc get ep

    출력 예

    NAME                                                ENDPOINTS          AGE
    ansiblemetrics-controller-manager-metrics-service   10.129.2.70:8443   150m

  5. 사용자 정의 메트릭 토큰을 요청합니다.

    $ token=`oc create token prometheus-k8s -n openshift-monitoring`
  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

      출력 예

      HELP my_counter_metric Add 3.14 to the counter
      TYPE my_counter_metric counter
      my_counter_metric 2

    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

      출력 예

      HELP my_gauge_metric Create my gauge and set it to 2.

    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

      출력 예

      HELP my_histogram_metric Observe my histogram
      HELP my_summary_metric Observe my summary

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.