전제 조건
에서 언급했듯이 1부 블로그의 경우, Amazon EKS의 Kubernetes 환경에서 Prometheus와 Grafana를 실행해야 합니다. 권장되는 방법은 큐브-프로메테우스오픈 소스 프로젝트입니다. 이렇게 하면 배포가 간소화될 뿐만 아니라 다음과 같은 훨씬 더 많은 구성 요소가 추가됩니다. Prometheus 노드 익스포터 는 Linux 호스트 메트릭을 모니터링하며 일반적으로 Kubernetes 환경에서 사용됩니다.
복제 https://github.com/coreos/kube-prometheus 리포지토리에 저장하되 아직 매니페스트는 만들지 마세요.
이 패키지에 포함된 구성 요소:
- 그리고 프로메테우스 운영자
- 높은 가용성 프로메테우스
- 높은 가용성 알림 관리자
- Prometheus 노드 익스포터
- Kubernetes 메트릭 API용 Prometheus 어댑터
- 큐브-상태-메트릭스
- Grafana
|
1 2 3 4 5 6 |
➜ kube-프로메테우스 git:(마스터) ✗ ls DCO README.md 예제 jsonnet 스크립트 라이선스 빌드.sh 실험적 제이슨넷파일.json 동기화-에-내부-레지스트리.jsonnet 메이크파일 코드-의-행동.md go.mod 제이슨넷파일.잠금.json 테스트.sh 알림 문서 go.합계 사용자 지정.yaml 테스트 소유자 예제.jsonnet 해킹 매니페스트 |
참고:
이 튜토리얼은 Prometheus Operator에 대한 관련 리소스를 불러오는 매니페스트가 여전히 폴더에 있다는 것을 전제로 작동합니다. 매니페스트.
리포지토리는 실험 중이며 변경될 수 있으므로 변경 사항이 있는 경우 그에 따라 조정하세요.
카우치베이스 서비스모니터 만들기
ServiceMonitor는 카우치베이스 내보내기가 제공하는 들어오는 메트릭에 대해 Prometheus가 스크랩하는 엔드포인트를 정의하는 서비스 리소스를 모니터링하도록 Prometheus에 지시합니다. 이 파일입니다,couchbase-serviceMonitor.yaml는 다음과 같아야 합니다. 큐브-프로메테우스/매니페스트 디렉터리로 이동합니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
apiVersion: monitoring.coreos.com/v1 종류: 서비스 모니터 메타데이터: 이름: 카우치베이스 네임스페이스기본 # <1> 레이블: 앱: 카우치베이스 사양: 엔드포인트: - 포트: 메트릭 # <2> 간격: 5초 # <3> 네임스페이스 선택자: matchNames: - 기본값 # 선택기: matchLabels: 앱: 카우치베이스 # <5> |
범례:
- 카우치베이스를 포함할 수 있습니다.
서비스 모니터에서모니터링네임스페이스와 함께 다른서비스 모니터. 이 튜토리얼의 예제를 위해 방금 만든기본값네임스페이스를 사용하여 쉽게 사용할 수 있습니다. - 그리고
포트는 문자열 값일 수 있으며 이름이 일치하는 한 서비스의 다른 포트 번호에서도 작동합니다. 간격는 프로메테우스에게 엔드포인트를 얼마나 자주 스크래핑할지 알려줍니다. 여기서는 네임스페이스와 일치시키려고 합니다.서비스다음 단계에서 만들게 될 것입니다,- 네임스페이스는
서비스가 실행될 네임스페이스는 메트릭을 스크랩하려는 Couchbase 클러스터의 네임스페이스와 동일해야 합니다. - 유사하게
네임스페이스 선택자이 간단한레이블 선택기를 클릭하면 생성할 서비스를 선택할 수 있습니다.
Couchbase 메트릭 서비스 만들기
그리고 서비스 에서 서비스 모니터에 설명한 포트를 정의합니다. spec.endpoint[0].port 아까 그 파일요couchbase-service.yaml는 다음과 같아야 합니다. 큐브-프로메테우스/매니페스트 디렉터리로 이동합니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
apiVersion: v1 종류: 서비스 메타데이터: 이름: 카우치베이스-메트릭스 네임스페이스기본 # <1> 레이블: 앱: 카우치베이스 사양: 포트: - 이름: 메트릭 포트: 9091 # <2> 프로토콜: TCP 선택기: 앱: 카우치베이스 카우치베이스_클러스터: cb-예시 # <3> |
범례:
- 앞서 언급했듯이
서비스가 메트릭을 스크랩하려는 Couchbase 클러스터와 동일한 네임스페이스에 있는지 확인해야 하며, 그렇지 않으면 파드가 선택되지 않고 Prometheus Targets에 엔드포인트가 표시되지 않습니다. 또한 이 값이 다음 값과 일치하는지 확인하세요.spec.namespaceSelector에서서비스 모니터. - 이 포트는 카우치베이스 익스포터가 내보낼 포트이므로 기본값인 9091로 유지하세요.
- 동일한 네임스페이스에서 둘 이상의 Couchbase 클러스터가 실행되는 시나리오에서는 선택기에 더 세분화된 수준을 추가할 수 있습니다.
프로메테우스 동적 서비스 검색
Prometheus는 ServiceMonitor의 레이블을 클러스터와 엔드포인트(이 경우 포트 9091)를 지정하는 서비스와 일치시켜 모니터링 엔드포인트를 동적으로 검색합니다.

적하목록 생성
에 주어진 특정 명령을 따르십시오. Github README 를 클릭하면 생성된 리소스와 함께 제공된 다른 기본 매니페스트를 불러올 수 있습니다.
그러면 Prometheus, AlertManager, NodeExporter 및 Grafana와 같은 구성 요소가 시작되어야 하며 네임스페이스에서 파드를 검사하여 이를 확인할 수 있습니다. 모니터링.
시작하겠습니다.
쿠버네티스 네임스페이스 및 CRD 생성하기
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
kube-프로메테우스 git:(마스터) $ kubectl create -f 매니페스트/설정 네임스페이스/모니터링 생성 사용자 정의리소스 정의.apiextensions.k8s.io/알림 관리자.monitoring.coreos.com 생성 사용자 정의리소스 정의.apiextensions.k8s.io/podmonitors.monitoring.coreos.com 생성 사용자 정의리소스 정의.apiextensions.k8s.io/프로메테우스.monitoring.coreos.com 생성 사용자 정의리소스 정의.apiextensions.k8s.io/프로메테우스 규칙.monitoring.coreos.com 생성 사용자 정의리소스 정의.apiextensions.k8s.io/서비스 모니터.monitoring.coreos.com 생성 사용자 정의리소스 정의.apiextensions.k8s.io/thanosrulers.monitoring.coreos.com 생성 클러스터 역할.rbac.authorization.k8s.io/프로메테우스-연산자 생성 클러스터 역할 바인딩.rbac.authorization.k8s.io/프로메테우스-연산자 생성 배포.apps/프로메테우스-연산자 생성 서비스/프로메테우스-연산자 생성 서비스 계정/프로메테우스-연산자 생성 |
다음 단계로 넘어가기 전에 몇 분 정도 기다리되, 모든 구성 요소가 성공적으로 생성되려면 명령을 여러 번 실행해야 할 수도 있습니다.
나머지 리소스 만들기
|
1 2 3 4 5 6 7 8 9 10 11 |
kube-프로메테우스 git:(마스터) $ kubectl create -f 매니페스트/ 알림 관리자.monitoring.coreos.com/메인 생성 비밀/알림 관리자-메인 생성 서비스/알림 관리자-메인 생성 서비스 계정/알림 관리자-메인 생성 서비스 모니터.monitoring.coreos.com/알림 관리자 생성 서비스/카우치베이스-메트릭 생성 서비스 모니터.monitoring.coreos.com/카우치베이스 생성 ... 서비스 모니터.monitoring.coreos.com/kubelet 생성 |
네임스페이스 모니터링 확인
그러면 Prometheus, AlertManager, NodeExporter 및 Grafana와 같은 구성 요소가 시작되어야 하며 네임스페이스에서 파드를 검사하여 이를 확인할 수 있습니다. 모니터링.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ kubectl get 포드 -n 모니터링 이름 READY 상태 다시 시작 AGE 알림 관리자-메인-0 2/2 실행 중 0 69m 알림 관리자-메인-1 2/2 실행 중 0 69m 알림 관리자-메인-2 2/2 실행 중 0 69m 그라파나-75d8c76bdd-4l284 1/1 실행 중 0 69m kube-상태-메트릭-54dc88ccd8-nntts 3/3 실행 중 0 69m 노드-수출자-pk65z 2/2 실행 중 0 69m 노드-수출자-s9k9n 2/2 실행 중 0 69m 노드-수출자-vhjpw 2/2 실행 중 0 69m 프로메테우스-어댑터-8667948d79-vfcbv 1/1 실행 중 0 69m 프로메테우스-k8s-0 3/3 실행 중 1 69m 프로메테우스-k8s-1 3/3 실행 중 0 69m 프로메테우스-연산자-696554666f-9cnnv 2/2 실행 중 0 89m |
ServiceMonitor가 생성되었는지 확인합니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ kubectl get 서비스 모니터 --모두-네임스페이스 네임스페이스 이름 AGE 기본값 카우치베이스 2m33초 모니터링 알림 관리자 2m33초 모니터링 coredns 2m22초 모니터링 그라파나 2m26초 모니터링 kube-apiserver 2m22초 모니터링 kube-컨트롤러-관리자 2m22초 모니터링 kube-스케줄러 2m21초 모니터링 kube-상태-메트릭 2m25초 모니터링 kubelet 2m21초 모니터링 노드-수출자 2m25초 모니터링 프로메테우스 2m22초 모니터링 프로메테우스-연산자 2m23초 |
서비스가 생성되었는지 확인합니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ kubectl get svc --모두-네임스페이스 네임스페이스 이름 PORT(S) 기본값 cb-예제 8091/TCP,8092/TCP,8093/TCP, 기본값 cb-예제-srv 11210/TCP,11207/TCP 기본값 카우치베이스-메트릭 9091/TCP 기본값 카우치베이스-연산자 8080/TCP,8383/TCP 기본값 카우치베이스-연산자-입학 443/TCP 기본값 쿠버네티스 443/TCP kube-시스템 kube-dns 53/UDP,53/TCP kube-시스템 kubelet 10250/TCP,10255/TCP,4194/TCP,... 모니터링 알림 관리자-메인 9093/TCP 모니터링 알림 관리자-운영 9093/TCP,9094/TCP,9094/UDP 모니터링 그라파나 3000/TCP 모니터링 kube-상태-메트릭 8443/TCP,9443/TCP 모니터링 노드-수출자 9100/TCP 모니터링 프로메테우스-어댑터 443/TCP 모니터링 프로메테우스-k8s 9090/TCP 모니터링 프로메테우스-운영 9090/TCP 모니터링 프로메테우스-연산자 8443/TCP |
위의 출력에서는 서비스뿐만 아니라 포트도 볼 수 있습니다. 이 정보를 사용하여 Couchbase 관리 UI에서 했던 것처럼 이러한 서비스에 액세스하기 위해 이러한 포트를 전달할 것입니다.
Prometheus 운영자 배포에서 모든 것이 올바르게 작동하는지 확인하려면 다음 명령을 실행하여 로그를 확인합니다:
|
1 |
$ kubectl 로그 -f 배포/프로메테우스-연산자 -n 모니터링 프로메테우스-연산자 |
포트 포워딩
이전에 이미 한 CouchBase 노드에서 CouchBase 관리자 UI 포트 8091을 전달한 적이 있지만 이번에는 서비스 관점에서 다시 전달해드리겠습니다.
이 포트 외에도 실제로는 Grafana 서비스 액세스 포트 3000만 필요합니다. 하지만 Prometheus 서비스 포트 9090에도 액세스해 보겠습니다. 그러면 여러 내보내기의 모든 메트릭을 살펴보고 Prometheus 쿼리 언어인 PromQL도 사용해 볼 수 있습니다.
이제 위의 3가지로 충분할 것입니다. 그러나 각 개별 서비스의 메트릭도 살펴보면 몇 가지 추가적인 이점이 있습니다. Couchbase 내보내기는 포트 9091에 Couchbase 메트릭을 노출합니다. 따라서 해당 포트도 전달할 수 있습니다. 실제로는 Grafana에 대한 액세스 권한만 있으면 됩니다.
|
1 2 3 4 5 6 |
kubectl --네임스페이스 기본값 포트-앞으로 svc/cb-예제 8091 & kubectl --네임스페이스 모니터링 포트-앞으로 svc/프로메테우스-k8s 9090 & kubectl --네임스페이스 모니터링 포트-앞으로 svc/그라파나 3000 & kubectl --네임스페이스 모니터링 포트-앞으로 svc/알림 관리자-메인 9093 & kubectl --네임스페이스 모니터링 포트-앞으로 svc/노드-수출자 9100 & kubectl --네임스페이스 기본값 포트-앞으로 svc/카우치베이스-메트릭 9091 & |
프로메테우스 타깃 확인
액세스: https://localhost:9090/targets

모든 Prometheus 타깃이 UP되어야 합니다. Kube-Prometheus가 많은 내보내기를 배포했기 때문에 이러한 타깃이 꽤 많이 있습니다.
Couchbase 원시 메트릭을 확인하세요.
액세스: https://localhost:9091/metrics
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# 도움말 cbbucketinfo_basic_dataused_bytes 기본_데이터사용량 # 유형 씨버킷인포_기본_데이터사용량_바이트 게이지 CBUCKET_INFO_BASIC_DATA_USED_BYTE{버킷="pillow"} 1.84784896e+08 CBUCKET_INFO_BASIC_DATA_USED_BYTE{버킷="travel-sample"} 1.51648256e+08 # 도움말 cbbucketinfo_basic_diskfetches basic_diskfetches # 유형 씨버킷인포_기본_디스크페치 게이지 cbbucketinfo_basic_diskfetches{버킷="pillow"} 0 cbbucketinfo_basic_diskfetches{버킷="travel-sample"} 0 # 도움말 cbbucketinfo_basic_diskused_bytes 기본_사용되지 않음 # 유형 씨버킷인포_기본_디스크사용_바이트 게이지 CBUCKET_INFO_BASIC_DISCUSED_BYTE{버킷="pillow"} 1.98967788e+08 CBUCKET_INFO_BASIC_DISCUSED_BYTE{버킷="travel-sample"} 1.91734038e+08 |
이 출력은 목록을 빠르게 검색할 수 있어 유용합니다.
기본적인 PromQL 쿼리를 사용해 보세요.

위의 UI에서 그래프 먼저.
드롭박스에서 스크랩한 메트릭 목록을 확인할 수 있습니다. 다음은 전체 목록입니다. 모두 에 의해 스크랩된 메트릭 모두 내보내려면 꽤 많은 목록이 필요합니다. 물론 앞서 설명한 대로 9091 엔드포인트에 액세스하여 Couchbase 메트릭으로만 목록을 좁힐 수 있는 한 가지 방법이 있습니다.
Grafana 확인
액세스: https://localhost:3000

사용자 아이디와 비밀번호: admin/admin
Grafana의 큐브-프로메테우스 배포 이미 에는 Prometheus 데이터 소스가 정의되어 있으며 기본 대시보드. 를 확인해 보겠습니다. 기본 노드 대시보드

카우치베이스 메트릭을 모니터링하는 샘플 Grafana 대시보드 만들기
완전한 대시보드는 만들지 않고 몇 개의 패널로 구성된 작은 샘플을 만들어서 그 작동 방식을 보여드리겠습니다. 이 대시보드는 버킷에 있는 항목 수와 GET 및 SET 작업의 수를 모니터링합니다.
참고: 1부에서 설명한 대로 베개 싸움 애플리케이션을 실행하세요. 이렇게 하면 모니터링하고자 하는 작업이 생성됩니다.
프로메테우스 메트릭
액세스: https://localhost:9091/그래프

우리는 버킷의 현재 항목에 관심이 있습니다. 이를 제공하는 몇 가지 메트릭이 있는데, 클러스터 전체와 노드별로 제공됩니다. 노드별 메트릭을 사용하겠습니다. 그러면 모범 사례에 따라 Prometheus가 모든 집계를 처리하도록 할 수 있습니다. 또 다른 장점은 데이터 세트가 왜곡되어 있는지 확인하기 위해 버킷의 현재 항목을 노드별로 표시할 수도 있다는 것입니다.
한 가지 요소를 살펴보겠습니다:
|
1 |
CBPERNODEBUCKET_CURR_ITEMS{버킷="pillow",엔드포인트="metrics",인스턴스="192.168.2.93:9091",job="couchbase-metrics",네임스페이스="default",노드="cb-example-0000.cb-example.default.svc:8091",pod="cb-example-0000",서비스="couchbase-metrics"} |
위의 예에서는 이러한 레이블에 관심이 있습니다: 버킷의 일부 노드 (가운데 부분) cb-예시 클러스터 이름인 pod. 또한 다음에도 관심이 있습니다. 서비스 를 사용하여 필터링할 수 있습니다. 이렇게 하면 버킷, 노드 또는 클러스터별로 메트릭을 볼 수 있는 대시보드를 디자인하는 데 도움이 됩니다.
샘플 대시보드
새 빈 샘플 대시보드를 만들어 보겠습니다.

변수 추가
버킷, 노드 및 클러스터별 메트릭이 필요하므로 이러한 변수를 추가하여 드롭박스에서 선택할 수 있도록 하겠습니다.

위의 예는 변수 버킷을 생성합니다. 쿼리 및 정규식 표현식에 주목하세요.
변수를 2개 더 생성하여 3개의 변수를 만들어 보겠습니다:

이 세 가지 쿼리는 변경되지 않지만 정규식 표현식은 다음과 같습니다:
|
1 2 3 4 5 |
쿼리: {서비스="couchbase-metrics"} $노드: 정규식= .*pod="(.*?)".* $버킷: 정규식= .*버킷="(.*?)".* $클러스터: 정규식=.*노드=\".*\.(.*)\..*\..*:8091\".* |
패널 만들기
현재 항목, GET 및 SET에 대한 3개의 패널 만들기
각 패널을 복제하여 편집할 수 있습니다. 다음은 쿼리입니다:

항목 패널: 합계(cbpernodebucket_curr_items{버킷=~"$버킷",포드=~"$노드"}) by (버킷)
GETs 패널: sum(cbpernodebucket_cmd_get{버킷=~"$버킷",포드=~"$노드"}) by (버킷)
SETs 패널: 합계(cbpernodebucket_cmd_set{버킷=~"$버킷",포드=~"$노드"}) by (버킷)
완성된 샘플 Grafana 대시보드
최종 샘플 대시보드의 모습은 다음과 같습니다.
정리
마지막으로 배포를 정리합니다:
|
1 2 3 4 5 6 7 |
kube-프로메테우스 git:(마스터) $ kubectl 삭제 --무시-not-발견=true -f 매니페스트/ -f 매니페스트/설정 cao-2 $ kubectl 삭제 -f 베개 싸움-데이터-로더.yaml cao-2 $ kubectl 삭제 -f my-클러스터.yaml cao-2 $ bin/cbopcfg | kubectl 삭제 -f - cao-2 $ kubectl 삭제 -f crd.yaml cao-2 $ eksctl 삭제 클러스터 --지역=우리-east-1 --이름=prasadCAO2 |
리소스:
- 쿠버네티스용 카우치베이스 자율 운영자 2.0 베타 다운로드
- 카우치베이스 자율 운영자 2.0 베타 시작하기
- 튜토리얼 - 자습서 EKS의 카우치베이스 자율 운영자
- 에 대한 의견을 공유하세요. 카우치베이스 포럼
