전제 조건
에서 언급했듯이 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-prometheus git:(master) ✗ ls DCO README.md examples jsonnet scripts LICENSE build.sh experimental jsonnetfile.json sync-to-internal-registry.jsonnet Makefile code-of-conduct.md go.mod jsonnetfile.lock.json test.sh NOTICE docs go.sum kustomization.yaml tests OWNERS example.jsonnet hack manifests |
참고:
이 튜토리얼은 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 kind: ServiceMonitor metadata: name: couchbase namespace: default # <1> labels: app: couchbase spec: endpoints: - port: metrics # <2> interval: 5s # <3> namespaceSelector: matchNames: - default # <4> selector: matchLabels: app: couchbase # <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 kind: Service metadata: name: couchbase-metrics namespace: default # <1> labels: app: couchbase spec: ports: - name: metrics port: 9091 # <2> protocol: TCP selector: app: couchbase couchbase_cluster: cb-example # <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-prometheus git:(master) $ kubectl create -f manifests/setup namespace/monitoring created customresourcedefinition.apiextensions.k8s.io/alertmanagers.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/podmonitors.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/prometheuses.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/prometheusrules.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/servicemonitors.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/thanosrulers.monitoring.coreos.com created clusterrole.rbac.authorization.k8s.io/prometheus-operator created clusterrolebinding.rbac.authorization.k8s.io/prometheus-operator created deployment.apps/prometheus-operator created service/prometheus-operator created serviceaccount/prometheus-operator created |
다음 단계로 넘어가기 전에 몇 분 정도 기다리되, 모든 구성 요소가 성공적으로 생성되려면 명령을 여러 번 실행해야 할 수도 있습니다.
나머지 리소스 만들기
|
1 2 3 4 5 6 7 8 9 10 11 |
kube-prometheus git:(master) $ kubectl create -f manifests/ alertmanager.monitoring.coreos.com/main created secret/alertmanager-main created service/alertmanager-main created serviceaccount/alertmanager-main created servicemonitor.monitoring.coreos.com/alertmanager created service/couchbase-metrics created servicemonitor.monitoring.coreos.com/couchbase created ... servicemonitor.monitoring.coreos.com/kubelet created |
네임스페이스 모니터링 확인
그러면 Prometheus, AlertManager, NodeExporter 및 Grafana와 같은 구성 요소가 시작되어야 하며 네임스페이스에서 파드를 검사하여 이를 확인할 수 있습니다. 모니터링.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ kubectl get pods -n monitoring NAME READY STATUS RESTARTS AGE alertmanager-main-0 2/2 Running 0 69m alertmanager-main-1 2/2 Running 0 69m alertmanager-main-2 2/2 Running 0 69m grafana-75d8c76bdd-4l284 1/1 Running 0 69m kube-state-metrics-54dc88ccd8-nntts 3/3 Running 0 69m node-exporter-pk65z 2/2 Running 0 69m node-exporter-s9k9n 2/2 Running 0 69m node-exporter-vhjpw 2/2 Running 0 69m prometheus-adapter-8667948d79-vfcbv 1/1 Running 0 69m prometheus-k8s-0 3/3 Running 1 69m prometheus-k8s-1 3/3 Running 0 69m prometheus-operator-696554666f-9cnnv 2/2 Running 0 89m |
ServiceMonitor가 생성되었는지 확인합니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ kubectl get servicemonitors --all-namespaces NAMESPACE NAME AGE default couchbase 2m33s monitoring alertmanager 2m33s monitoring coredns 2m22s monitoring grafana 2m26s monitoring kube-apiserver 2m22s monitoring kube-controller-manager 2m22s monitoring kube-scheduler 2m21s monitoring kube-state-metrics 2m25s monitoring kubelet 2m21s monitoring node-exporter 2m25s monitoring prometheus 2m22s monitoring prometheus-operator 2m23s |
서비스가 생성되었는지 확인합니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ kubectl get svc --all-namespaces NAMESPACE NAME PORT(S) default cb-example 8091/TCP,8092/TCP,8093/TCP, default cb-example-srv 11210/TCP,11207/TCP default couchbase-metrics 9091/TCP default couchbase-operator 8080/TCP,8383/TCP default couchbase-operator-admission 443/TCP default kubernetes 443/TCP kube-system kube-dns 53/UDP,53/TCP kube-system kubelet 10250/TCP,10255/TCP,4194/TCP,... monitoring alertmanager-main 9093/TCP monitoring alertmanager-operated 9093/TCP,9094/TCP,9094/UDP monitoring grafana 3000/TCP monitoring kube-state-metrics 8443/TCP,9443/TCP monitoring node-exporter 9100/TCP monitoring prometheus-adapter 443/TCP monitoring prometheus-k8s 9090/TCP monitoring prometheus-operated 9090/TCP monitoring prometheus-operator 8443/TCP |
위의 출력에서는 서비스뿐만 아니라 포트도 볼 수 있습니다. 이 정보를 사용하여 Couchbase 관리 UI에서 했던 것처럼 이러한 서비스에 액세스하기 위해 이러한 포트를 전달할 것입니다.
Prometheus 운영자 배포에서 모든 것이 올바르게 작동하는지 확인하려면 다음 명령을 실행하여 로그를 확인합니다:
|
1 |
$ kubectl logs -f deployments/prometheus-operator -n monitoring prometheus-operator |
포트 포워딩
이전에 이미 한 CouchBase 노드에서 CouchBase 관리자 UI 포트 8091을 전달한 적이 있지만 이번에는 서비스 관점에서 다시 전달해드리겠습니다.
이 포트 외에도 실제로는 Grafana 서비스 액세스 포트 3000만 필요합니다. 하지만 Prometheus 서비스 포트 9090에도 액세스해 보겠습니다. 그러면 여러 내보내기의 모든 메트릭을 살펴보고 Prometheus 쿼리 언어인 PromQL도 사용해 볼 수 있습니다.
이제 위의 3가지로 충분할 것입니다. 그러나 각 개별 서비스의 메트릭도 살펴보면 몇 가지 추가적인 이점이 있습니다. Couchbase 내보내기는 포트 9091에 Couchbase 메트릭을 노출합니다. 따라서 해당 포트도 전달할 수 있습니다. 실제로는 Grafana에 대한 액세스 권한만 있으면 됩니다.
|
1 2 3 4 5 6 |
kubectl --namespace default port-forward svc/cb-example 8091 & kubectl --namespace monitoring port-forward svc/prometheus-k8s 9090 & kubectl --namespace monitoring port-forward svc/grafana 3000 & kubectl --namespace monitoring port-forward svc/alertmanager-main 9093 & kubectl --namespace monitoring port-forward svc/node-exporter 9100 & kubectl --namespace default port-forward svc/couchbase-metrics 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 |
# HELP cbbucketinfo_basic_dataused_bytes basic_dataused # TYPE cbbucketinfo_basic_dataused_bytes gauge cbbucketinfo_basic_dataused_bytes{bucket="pillow"} 1.84784896e+08 cbbucketinfo_basic_dataused_bytes{bucket="travel-sample"} 1.51648256e+08 # HELP cbbucketinfo_basic_diskfetches basic_diskfetches # TYPE cbbucketinfo_basic_diskfetches gauge cbbucketinfo_basic_diskfetches{bucket="pillow"} 0 cbbucketinfo_basic_diskfetches{bucket="travel-sample"} 0 # HELP cbbucketinfo_basic_diskused_bytes basic_diskused # TYPE cbbucketinfo_basic_diskused_bytes gauge cbbucketinfo_basic_diskused_bytes{bucket="pillow"} 1.98967788e+08 cbbucketinfo_basic_diskused_bytes{bucket="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{bucket="pillow",endpoint="metrics",instance="192.168.2.93:9091",job="couchbase-metrics",namespace="default",node="cb-example-0000.cb-example.default.svc:8091",pod="cb-example-0000",service="couchbase-metrics"} |
위의 예에서는 이러한 레이블에 관심이 있습니다: 버킷의 일부 노드 (가운데 부분) cb-예시 클러스터 이름인 pod. 또한 다음에도 관심이 있습니다. 서비스 를 사용하여 필터링할 수 있습니다. 이렇게 하면 버킷, 노드 또는 클러스터별로 메트릭을 볼 수 있는 대시보드를 디자인하는 데 도움이 됩니다.
샘플 대시보드
새 빈 샘플 대시보드를 만들어 보겠습니다.

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

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

이 세 가지 쿼리는 변경되지 않지만 정규식 표현식은 다음과 같습니다:
|
1 2 3 4 5 |
Query: {service="couchbase-metrics"} $node: Regex= .*pod="(.*?)".* $bucket: Regex= .*bucket="(.*?)".* $cluster: Regex=.*node=\".*\.(.*)\..*\..*: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-prometheus git:(master) $ kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup cao-2 $ kubectl delete -f pillowfight-data-loader.yaml cao-2 $ kubectl delete -f my-cluster.yaml cao-2 $ bin/cbopcfg | kubectl delete -f - cao-2 $ kubectl delete -f crd.yaml cao-2 $ eksctl delete cluster --region=us-east-1 --name=prasadCAO2 |
리소스:
- 쿠버네티스용 카우치베이스 자율 운영자 2.0 베타 다운로드
- 카우치베이스 자율 운영자 2.0 베타 시작하기
- 튜토리얼 - 자습서 EKS의 카우치베이스 자율 운영자
- 에 대한 의견을 공유하세요. 카우치베이스 포럼
