DigitalOcean에서 Prometheus, Grafana 및 Alertmanager로 Kubernetes 모니터링 스택 설정하기

상태: 사용되지 않음

이 문서는 사용되지 않으며 더 이상 유지되지 않습니다.

이유

이 튜토리얼의 단계는 여전히 작동하지만, 이제 유지 관리가 불필요하게 어려운 구성을 생성합니다.

대신 참조

이 문서는 참조 자료로 여전히 유용할 수 있지만, 최선의 방법을 따르지 않을 수 있습니다. 더 최근의 문서를 사용하는 것이 좋습니다.

소개

트레이싱과 로깅과 더불어 모니터링과 경고는 Kubernetes 관측성 스택의 필수 구성 요소입니다. 디지털오션 Kubernetes 클러스터에 대한 모니터링 설정을 하면 리소스 사용량을 추적하고 응용 프로그램 오류를 분석하고 디버그할 수 있습니다.

A monitoring system usually consists of a time-series database that houses metric data and a visualization layer. In addition, an alerting layer creates and manages alerts, handing them off to integrations and external services as necessary. Finally, one or more components generate or expose the metric data that will be stored, visualized, and processed for alerts by the stack.

인기 있는 모니터링 솔루션 중 하나는 오픈 소스 Prometheus, Grafana, 그리고 Alertmanager 스택입니다. 이 스택은 kube-state-metricsnode_exporter와 함께 배포되어 클러스터 수준의 Kubernetes 객체 메트릭과 CPU 및 메모리 사용량과 같은 머신 수준 메트릭을 노출합니다.

이 모니터링 스택을 Kubernetes 클러스터에 롤아웃하려면 각 구성 요소, 매니페스트, Prometheus 메트릭 및 Grafana 대시 보드를 구성해야 하며 이는 다소 시간이 소요됩니다. 디지털오션 커뮤니티 개발자 교육팀이 발표한 DigitalOcean Kubernetes 클러스터 모니터링 퀵 스타트에는 Prometheus-Grafana-Alertmanager 클러스터 모니터링 스택을 위한 완전히 정의된 매니페스트뿐만 아니라 사전 구성된 경고 및 Grafana 대시 보드도 포함되어 있습니다. 이는 빠르게 시작할 수 있도록 도와주며 관측성 스택을 구축하는 견고한 기반을 형성합니다.

이 튜토리얼에서는 이 사전 구성된 스택을 디지털오션 Kubernetes에 배포하고 Prometheus, Grafana 및 Alertmanager 인터페이스에 액세스하는 방법 및 사용자 정의하는 방법에 대해 설명하겠습니다.

전제 조건

시작하기 전에, 사용 가능한 DigitalOcean Kubernetes 클러스터가 필요하며, 로컬 개발 환경에 다음 도구가 설치되어 있어야 합니다:

  • 로컬 머신에 설치된 kubectl 명령줄 인터페이스 및 클러스터에 연결하도록 구성된 것이 필요합니다. kubectl을 설치하고 구성하는 방법에 대한 자세한 내용은 kubectl의 공식 문서에서 확인할 수 있습니다. 여기를 참조하세요.
  • 로컬 머신에 설치된 버전 관리 시스템인 git이 필요합니다. Ubuntu 18.04에 git을 설치하는 방법은 Ubuntu 18.04에 Git 설치 방법을 참조하십시오.
  • 로컬 머신에 설치된 Coreutils base64 도구가 필요합니다. Linux 머신을 사용하는 경우 대부분 이미 설치되어 있을 것입니다. OS X를 사용하는 경우 기본적으로 설치된 openssl base64을 사용할 수 있습니다.

<$>[주의]
참고: 클러스터 모니터링 퀵스타트는 DigitalOcean Kubernetes 클러스터에서만 테스트되었습니다. 다른 Kubernetes 클러스터에서 퀵스타트를 사용하려면 매니페스트 파일에 일부 수정이 필요할 수 있습니다.
<$>

단계 1 — GitHub 저장소 복제 및 환경 변수 구성

시작하려면 git을 사용하여 로컬 머신에 DigitalOcean Kubernetes 클러스터 모니터링 GitHub 저장소를 복제하십시오:

  1. git clone https://github.com/do-community/doks-monitoring.git

그런 다음, 리포지토리로 이동하십시오:

  1. cd doks-monitoring

다음 디렉토리 구조가 표시됩니다:

  1. ls
Output
LICENSE README.md changes.txt manifest

manifest 디렉토리에는 서비스 계정, 배포, 상태가 유지되는 세트, 구성 맵 등 모니터링 스택 구성 요소의 Kubernetes 매니페스트가 포함되어 있습니다. 이러한 매니페스트 파일에 대해 자세히 알아보고 구성하는 방법은 모니터링 스택 구성으로 건너뛰십시오.

작업을 시작하려면 먼저 APP_INSTANCE_NAMENAMESPACE 환경 변수를 설정하여 스택 구성 요소의 고유한 이름을 구성하고 스택이 배포 될 Namespace을 구성하십시오:

  1. export APP_INSTANCE_NAME=sammy-cluster-monitoring
  2. export NAMESPACE=default

이 튜토리얼에서는 APP_INSTANCE_NAMEsammy-cluster-monitoring으로 설정하여 모니터링 스택 Kubernetes 개체 이름의 모든 접두사로 사용합니다. 모니터링 스택에 대한 고유한 설명적 접두사로 대체해야합니다. 또한 네임스페이스를 default로 설정합니다. 모니터링 스택을 default가 아닌 다른 Namespace에 배포하려면 먼저 클러스터에 생성하십시오:

  1. kubectl create namespace "$NAMESPACE"

다음 출력을 확인해야합니다:

Output
namespace/sammy created

이 경우, NAMESPACE 환경 변수가 sammy로 설정되었습니다. 튜토리얼의 나머지 부분에서는 NAMESPACEdefault로 설정되었다고 가정합니다.

이제 안전한 Grafana 암호를 base64로 인코딩하기 위해 base64 명령을 사용하십시오. your_grafana_password에 선택한 암호를 대체하십시오:

  1. export GRAFANA_GENERATED_PASSWORD="$(echo -n 'your_grafana_password' | base64)"

macOS를 사용하는 경우 기본적으로 설치된 openssl base64 명령을 대체 할 수 있습니다.

이 시점에서 스택의 Kubernetes manifest를 가져 와서 필요한 환경 변수를 구성 했으므로 Kubernetes manifest 파일에 구성된 변수를 대체하고 Kubernetes 클러스터에 스택을 생성할 준비가되었습니다.

단계 2 — 모니터링 스택 생성

디지털오션 쿠버네티스 모니터링 퀵스타트 리포지토리에는 다음과 같은 모니터링, 스크래핑 및 시각화 구성 요소의 Manifest가 포함되어 있습니다:

  • Prometheus은 메트릭 엔드포인트를 폴링하고 이러한 엔드포인트가 노출한 데이터를 스크래핑하고 처리하는 시계열 데이터베이스 및 모니터링 도구입니다. 이를 통해 PromQL이라는 시계열 데이터 쿼리 언어를 사용하여이 데이터를 쿼리할 수 있습니다. Prometheus는 StatefulSet으로 클러스터에 배포될 것이며, 2개의 복제본을 사용하며 디지털오션의 영구 볼륨을 사용합니다. 또한 미리 구성된 일련의 Prometheus 경보, 규칙 및 작업이 ConfigMap으로 저장될 것입니다. 이에 대한 자세한 내용은 모니터링 스택 구성 섹션의 Prometheus로 건너뛰어서 알아보세요.
  • Alertmanager는 보통 Prometheus와 함께 배포되며 스택의 경고 레이어를 형성하며 Prometheus에서 생성된 경고를 처리하고 중복을 제거하고 그룹화하여 이메일 또는 PagerDuty와 같은 통합으로 경로를 지정합니다. Alertmanager는 2개의 복제본이 있는 StatefulSet으로 설치됩니다. Alertmanager에 대해 더 알아보려면 Prometheus 문서의 Alerting을 참조하십시오.
  • Grafana는 데이터 시각화 및 분석 도구로서 메트릭 데이터에 대한 대시보드 및 그래프를 작성할 수 있습니다. Grafana는 하나의 복제본이 있는 StatefulSet으로 설치됩니다. 또한 kubernetes-mixin에 의해 생성된 사전 구성된 대시보드 세트가 ConfigMap으로 저장됩니다.
  • kube-state-metrics는 Kubernetes API 서버를 수신하고 배포 및 Pod와 같은 Kubernetes 객체의 상태에 대한 메트릭을 생성하는 추가 에이전트입니다. 이러한 메트릭은 HTTP 엔드포인트에서 평문으로 제공되며 Prometheus에서 사용됩니다. kube-state-metrics는 하나의 복제본이 있는 자동 확장 가능한 Deployment으로 설치됩니다.
  • node-exporter는 클러스터 노드에서 실행되며 CPU 및 메모리 사용량과 같은 OS 및 하드웨어 메트릭을 Prometheus에 제공하는 Prometheus 내보내기자입니다. 이러한 메트릭은 또한 HTTP 엔드포인트에서 평문으로 제공되며 Prometheus에서 사용됩니다. node-exporter는 DaemonSet으로 설치됩니다.

기본적으로 node-exporter, kube-state-metrics 및 위에 나열된 다른 구성 요소에서 생성된 메트릭을 스크랩하는 Prometheus는 다음 구성 요소에서 메트릭을 스크랩하도록 구성됩니다:

  • kube-apiserver, Kubernetes API 서버.
  • kubelet, 노드에서 Pod 및 컨테이너를 관리하기 위해 kube-apiserver와 상호 작용하는 주요 노드 에이전트입니다.
  • cAdvisor, 실행 중인 컨테이너를 검색하고 그들의 CPU, 메모리, 파일 시스템 및 네트워크 사용량 메트릭을 수집하는 노드 에이전트입니다.

이러한 구성 요소 및 Prometheus 스크래핑 작업을 구성하는 방법에 대해 자세히 알아보려면 모니터링 스택 구성으로 건너뛰십시오. 이제 이전 단계에서 정의한 환경 변수를 리포지토리의 매니페스트 파일에 대체하고 개별 매니페스트를 단일 마스터 파일로 연결합니다.

awkenvsubst를 사용하여 저장소의 매니페스트 파일에 있는 APP_INSTANCE_NAME, NAMESPACE, 그리고 GRAFANA_GENERATED_PASSWORD 변수를 채웁니다. 변수 값을 대체한 후 파일을 결합하여 sammy-cluster-monitoring_manifest.yaml이라는 마스터 매니페스트 파일에 저장합니다.

  1. awk 'FNR==1 {print "---"}{print}' manifest/* \
  2. | envsubst '$APP_INSTANCE_NAME $NAMESPACE $GRAFANA_GENERATED_PASSWORD' \
  3. > "${APP_INSTANCE_NAME}_manifest.yaml"

모니터링 스택의 변경 사항을 추적하고 이전 버전으로 롤백할 수 있도록 이 파일을 버전 관리에 저장하는 것이 좋습니다. 이렇게 하려면 버전 관리에 Grafana 암호를 체크하지 않도록 admin-password 변수를 제거해야 합니다.

마스터 매니페스트 파일을 생성했으므로 kubectl apply -f를 사용하여 매니페스트를 적용하고 구성한 Namespace에 스택을 생성합니다:

  1. kubectl apply -f "${APP_INSTANCE_NAME}_manifest.yaml" --namespace "${NAMESPACE}"

다음과 유사한 출력이 표시됩니다:

Output
serviceaccount/alertmanager created configmap/sammy-cluster-monitoring-alertmanager-config created service/sammy-cluster-monitoring-alertmanager-operated created service/sammy-cluster-monitoring-alertmanager created . . . clusterrolebinding.rbac.authorization.k8s.io/prometheus created configmap/sammy-cluster-monitoring-prometheus-config created service/sammy-cluster-monitoring-prometheus created statefulset.apps/sammy-cluster-monitoring-prometheus created

스택의 배포 진행 상황을 kubectl get all을 사용하여 추적할 수 있습니다. 모든 스택 구성 요소가 RUNNING 상태가 되면 미리 구성된 Grafana 대시보드에 Grafana 웹 인터페이스를 통해 액세스할 수 있습니다.

단계 3 — Grafana 접속 및 메트릭 데이터 탐색

Grafana 서비스 매니페스트는 Grafana를 ClusterIP 서비스로 노출시킵니다. 즉, 클러스터 내부 IP 주소를 통해서만 접근할 수 있습니다. Kubernetes 클러스터 외부에서 Grafana에 액세스하려면 kubectl patch를 사용하여 서비스를 NodePort 또는 LoadBalancer와 같은 공개용 유형으로 업데이트하거나 kubectl port-forward를 사용하여 로컬 포트를 Grafana Pod 포트로 전달할 수 있습니다. 이 튜토리얼에서는 포트를 전달할 것이므로 로 이동하여 로컬 포트를 사용하여 Grafana 서비스에 액세스할 수 있습니다. Grafana를 외부에 노출하는 다음 섹션은 참조 목적으로 포함되어 있습니다.

로드 밸런서를 사용하여 Grafana 서비스 노출하기 (옵션)

외부 공용 IP를 사용하여 DigitalOcean 로드 밸런서를 생성하려면 기존 Grafana 서비스를 LoadBalancer 서비스 유형으로 kubectl patch를 사용하여 업데이트하십시오:

  1. kubectl patch svc "$APP_INSTANCE_NAME-grafana" \
  2. --namespace "$NAMESPACE" \
  3. -p '{"spec": {"type": "LoadBalancer"}}'

kubectl patch 명령어를 사용하면 Kubernetes 객체를 장소를 변경하여 객체를 다시 배포하지 않고 변경할 수 있습니다. 또한, type: LoadBalancer 매개변수를 Grafana 서비스 사양에 직접 추가하여 마스터 매니페스트 파일을 수정할 수도 있습니다. kubectl patch 및 Kubernetes 서비스 유형에 대해 자세히 알아보려면 공식 Kubernetes 문서의 kubectl patch를 사용하여 API 객체를 현지에서 업데이트서비스 리소스를 참조하십시오.

위의 명령을 실행한 후에는 다음이 표시됩니다:

Output
service/sammy-cluster-monitoring-grafana patched

로드 밸런서를 생성하고 공용 IP를 할당하는 데 몇 분이 걸릴 수 있습니다. 변경 사항을 감시하기 위해 다음 명령을 -w 플래그와 함께 사용하여 진행 상황을 확인할 수 있습니다:

  1. kubectl get service "$APP_INSTANCE_NAME-grafana" -w

디지털오션 로드 밸런서가 생성되고 외부 IP 주소가 할당되면 다음 명령을 사용하여 외부 IP를 가져올 수 있습니다:

  1. SERVICE_IP=$(kubectl get svc $APP_INSTANCE_NAME-grafana \
  2. --namespace $NAMESPACE \
  3. --output jsonpath='{.status.loadBalancer.ingress[0].ip}')
  4. echo "http://${SERVICE_IP}/"

SERVICE_IP로 이동하여 Grafana UI에 액세스할 수 있습니다. http://를 사용합니다.

Grafana 서비스에 액세스하기 위한 로컬 포트 전달

만약 그라파나 서비스를 외부에 노출시키고 싶지 않다면, kubectl port-forward를 사용하여 로컬 포트 3000을 클러스터 내에서 직접 그라파나 파드로 전달할 수도 있습니다.

  1. kubectl port-forward --namespace ${NAMESPACE} ${APP_INSTANCE_NAME}-grafana-0 3000

다음과 같은 출력이 나타날 것입니다:

Output
Forwarding from 127.0.0.1:3000 -> 3000 Forwarding from [::1]:3000 -> 3000

이 명령은 로컬 포트 3000을 그라파나 파드 sammy-cluster-monitoring-grafana-0containerPort 3000으로 전달합니다. 쿠버네티스 클러스터로 포트를 전달하는 방법에 대해 더 알아보려면 클러스터 내 애플리케이션에 접근하기 위한 포트 전달 사용을 참조하십시오.

웹 브라우저에서 http://localhost:3000을 방문하십시오. 다음과 같은 그라파나 로그인 페이지가 표시됩니다:

로그인하려면 기본 사용자 이름인 admin을 사용하십시오 (admin-user 매개변수를 수정하지 않았다면) 그리고 단계 1에서 구성한 비밀번호를 사용하십시오.

다음 홈 대시보드로 이동합니다:

왼쪽 탐색 막대에서 대시보드 버튼을 선택한 다음 관리를 클릭하십시오:

대시보드 구성 파일인 dashboards-configmap.yaml에 구성된 대시보드가 나열된 다음 대시보드 관리 인터페이스로 이동합니다:

이 대시보드들은 kubernetes-mixin에 의해 생성되었습니다. 이는 표준화된 클러스터 모니터링 Grafana 대시보드와 Prometheus 경고를 생성할 수 있는 오픈 소스 프로젝트입니다. 더 자세한 정보는 kubernetes-mixin GitHub 저장소를 참조하십시오.

Kubernetes / Nodes 대시보드로 이동하여 특정 노드의 CPU, 메모리, 디스크 및 네트워크 사용량을 시각화합니다:

이 대시보드를 사용하는 방법에 대한 설명은 이 튜토리얼의 범위를 벗어나지만, 더 자세한 정보를 얻으려면 다음 리소스를 참조할 수 있습니다:

다음 단계에서는 Prometheus 모니터링 시스템에 연결하고 탐색하는 유사한 프로세스를 따를 것입니다.

단계 4 — Prometheus 및 Alertmanager에 액세스하기

Prometheus Pods에 연결하려면 로컬 포트로 전달하기 위해 kubectl port-forward를 사용할 수 있습니다. Grafana를 탐색하는 것이 완료되면 CTRL-C를 눌러 포트 포워드 터널을 닫을 수 있습니다. 또는 새 쉘을 열고 새로운 포트 포워드 연결을 생성할 수 있습니다.

default 네임스페이스에서 실행 중인 Pods를 나열하여 시작하십시오:

  1. kubectl get pod -n default

다음과 같은 Pods를 볼 수 있어야 합니다:

Output
sammy-cluster-monitoring-alertmanager-0 1/1 Running 0 17m sammy-cluster-monitoring-alertmanager-1 1/1 Running 0 15m sammy-cluster-monitoring-grafana-0 1/1 Running 0 16m sammy-cluster-monitoring-kube-state-metrics-d68bb884-gmgxt 2/2 Running 0 16m sammy-cluster-monitoring-node-exporter-7hvb7 1/1 Running 0 16m sammy-cluster-monitoring-node-exporter-c2rvj 1/1 Running 0 16m sammy-cluster-monitoring-node-exporter-w8j74 1/1 Running 0 16m sammy-cluster-monitoring-prometheus-0 1/1 Running 0 16m sammy-cluster-monitoring-prometheus-1 1/1 Running 0 16m

로컬 포트 9090sammy-cluster-monitoring-prometheus-0 Pod의 포트 9090으로 전달할 예정입니다:

  1. kubectl port-forward --namespace ${NAMESPACE} sammy-cluster-monitoring-prometheus-0 9090

다음과 같은 출력을 볼 수 있어야 합니다:

Output
Forwarding from 127.0.0.1:9090 -> 9090 Forwarding from [::1]:9090 -> 9090

로컬 포트 9090이 Prometheus Pod로 성공적으로 전달되고 있음을 나타냅니다.

웹 브라우저에서 http://localhost:9090을 방문하십시오. 다음과 같은 Prometheus 그래프 페이지를 볼 수 있어야 합니다:

여기에서 PromQL, Prometheus 쿼리 언어를 사용하여 데이터베이스에 저장된 시계열 메트릭을 선택하고 집계할 수 있습니다. PromQL에 대해 더 알아보려면 공식 Prometheus 문서에서 Prometheus 쿼리를 참조하십시오.

표현 필드에 kubelet_node_name을 입력하고 실행을 클릭하십시오. 쿠버네티스 클러스터에서 노드를 보고하는 메트릭 kubelet_node_name의 시계열 목록이 표시됩니다. 메트릭 레이블에서 메트릭을 생성한 노드 및 메트릭을 스크랩한 작업을 확인할 수 있습니다:

마지막으로 상단 내비게이션 바에서 상태를 클릭한 다음 대상을 클릭하여 Prometheus가 스크랩하도록 구성된 대상 목록을 볼 수 있습니다. 단계 2의 처음에 설명된 모니터링 엔드포인트 목록에 해당하는 대상 목록이 표시됩니다.

Prometheus 및 클러스터 메트릭을 쿼리하는 방법에 대한 자세한 내용은 공식 Prometheus 문서를 참조하십시오.

Alertmanager에 연결하려면 Prometheus에 연결하는 방법과 유사한 프로세스를 따를 것입니다. 일반적으로 Prometheus 상단 내비게이션 바에서 알림을 클릭하여 Alertmanager 알림을 살펴볼 수 있습니다.

Alertmanager 팟에 연결하려면 다시 한 번 로컬 포트로 포트를 전달하기 위해 kubectl port-forward를 사용할 것입니다. Prometheus를 탐색하는 것을 마치면 포트 포워드 터널을 닫기 위해 CTRL-C를 누르거나 새로운 쉘을 열어 새 연결을 만들 수 있습니다.

우리는 로컬 포트 9093sammy-cluster-monitoring-alertmanager-0 Pod의 포트 9093으로 전달할 예정입니다:

  1. kubectl port-forward --namespace ${NAMESPACE} sammy-cluster-monitoring-alertmanager-0 9093

다음 출력을 확인해야 합니다:

Output
Forwarding from 127.0.0.1:9093 -> 9093 Forwarding from [::1]:9093 -> 9093

이는 로컬 포트 9093이 Alertmanager Pod로 성공적으로 전달되고 있음을 나타냅니다.

웹 브라우저에서 http://localhost:9093을(를) 방문하십시오. 다음과 같은 Alertmanager 알림 페이지가 표시됩니다:

여기서 알림을 활성화하고 선택적으로 음소거할 수 있습니다. Alertmanager에 대한 자세한 내용은 공식 Alertmanager 문서를 참조하십시오.

다음 단계에서는 모니터링 스택 구성 요소 중 일부를 선택적으로 구성하고 확장하는 방법을 배우게 됩니다.

단계 6 — 모니터링 스택 구성 (선택 사항)

DigitalOcean Kubernetes 클러스터 모니터링 퀵스타트 저장소에 포함된 Manifest 파일은 다른 컨테이너 이미지, 다른 Pod 복제본 수, 다른 포트 및 사용자 지정 구성 파일을 사용하도록 수정할 수 있습니다.

이 단계에서는 각 Manifest 파일의 목적에 대한 고수준 개요를 제공하고, 마스터 Manifest 파일을 수정하여 Prometheus를 최대 3개의 복제본으로 확장하는 방법을 설명합니다.

시작하려면 리포지토리의 manifests 하위 디렉토리로 이동하고 디렉토리 내용을 나열하십시오:

  1. cd manifest
  2. ls
Output
alertmanager-0serviceaccount.yaml alertmanager-configmap.yaml alertmanager-operated-service.yaml alertmanager-service.yaml . . . node-exporter-ds.yaml prometheus-0serviceaccount.yaml prometheus-configmap.yaml prometheus-service.yaml prometheus-statefulset.yaml

여기에는 다양한 모니터링 스택 구성 요소에 대한 매니페스트가 있습니다. 매니페스트에서 특정 매개변수에 대해 자세히 알아보려면 링크로 이동하여 YAML 파일 전체에 포함된 주석을 참조하십시오:

Alertmanager

  • alertmanager-0serviceaccount.yaml: Alertmanager 서비스 계정으로, Alertmanager Pods에 Kubernetes 식별을 제공하는 데 사용됩니다. Pod용 서비스 계정에 대해 자세히 알아보려면 Pods용 서비스 계정 구성을 참조하십시오.

  • alertmanager-configmap.yaml: 최소한의 Alertmanager 구성 파일을 포함하는 ConfigMap이며, alertmanager.yml로 불립니다. Alertmanager 구성은 이 튜토리얼의 범위를 벗어나지만, Alertmanager 문서의 구성 섹션을 참조하여 더 많은 정보를 얻을 수 있습니다.

  • alertmanager-operated-service.yaml: 현재 2-복제 고가용성 구성에서 Alertmanager Pod 간의 요청을 라우팅하는 데 사용되는 Alertmanager mesh 서비스입니다.

  • alertmanager-service.yaml: 이전 단계에서 수행한 것처럼 Alertmanager 웹 인터페이스에 액세스하는 데 사용되는 Alertmanager web 서비스입니다.

  • alertmanager-statefulset.yaml: 2개의 레플리카로 구성된 Alertmanager StatefulSet입니다.

Grafana

kube-state-metrics

node-exporter

  • node-exporter-0serviceaccount.yaml: 노드 익스포터 서비스 계정입니다.

  • node-exporter-ds.yaml: 노드 익스포터 데몬셋 매니페스트입니다. 노드 익스포터가 데몬셋이기 때문에 클러스터의 각 노드에서 노드 익스포터 팟이 실행됩니다.

###Prometheus

  • prometheus-0serviceaccount.yaml: 프로메테우스 서비스 계정, 클러스터 역할 및 클러스터 역할 할당입니다.

  • prometheus-configmap.yaml: 세 가지 구성 파일을 포함하는 ConfigMap:

    • alerts.yaml: kubernetes-mixin에 의해 생성된 미리 구성된 경고 집합을 포함합니다(이는 Grafana 대시 보드를 생성하는 데도 사용되었습니다). 경고 규칙을 구성하는 방법에 대한 자세한 내용은 프로메테우스 문서의 경고 규칙을 참조하십시오.
    • prometheus.yaml: 프로메테우스의 주 구성 파일입니다. 프로메테우스는 단계 2의 시작 부분에 나열된 모든 구성 요소를 스크랩하는 데 사전 구성되어 있습니다. 프로메테우스를 구성하는 것은 이 문서의 범위를 벗어납니다만, 자세한 내용은 공식 프로메테우스 문서의 구성을 참조할 수 있습니다.
    • rules.yaml: 프로메테우스가 자주 필요한 또는 계산 비용이 많이 드는 표현식을 계산하고 결과를 새로운 시계열 집합으로 저장할 수 있게 하는 프로메테우스 기록 규칙 세트입니다. 이 또한 kubernetes-mixin에 의해 생성되며, 이를 구성하는 것은 이 문서의 범위를 벗어납니다. 자세한 내용은 공식 프로메테우스 문서의 기록 규칙을 참조하십시오.
  • prometheus-service.yaml: 프로메테우스 StatefulSet을 노출하는 서비스입니다.

  • prometheus-statefulset.yaml: 2개의 복제본으로 구성된 프로메테우스 StatefulSet입니다. 이 매개변수는 필요에 따라 확장할 수 있습니다.

예: 프로메테우스 확장

모니터링 스택을 수정하는 방법을 보여주기 위해, 프로메테우스 복제본의 수를 2에서 3으로 확장해 보겠습니다.

원하는 편집기를 사용하여 sammy-cluster-monitoring_manifest.yaml 마스터 매니페스트 파일을 엽니다:

  1. nano sammy-cluster-monitoring_manifest.yaml

매니페스트의 프로메테우스 StatefulSet 섹션으로 스크롤합니다:

Output
. . . apiVersion: apps/v1beta2 kind: StatefulSet metadata: name: sammy-cluster-monitoring-prometheus labels: &Labels k8s-app: prometheus app.kubernetes.io/name: sammy-cluster-monitoring app.kubernetes.io/component: prometheus spec: serviceName: "sammy-cluster-monitoring-prometheus" replicas: 2 podManagementPolicy: "Parallel" updateStrategy: type: "RollingUpdate" selector: matchLabels: *Labels template: metadata: labels: *Labels spec: . . .

복제본 수를 2에서 3으로 변경합니다:

Output
. . . apiVersion: apps/v1beta2 kind: StatefulSet metadata: name: sammy-cluster-monitoring-prometheus labels: &Labels k8s-app: prometheus app.kubernetes.io/name: sammy-cluster-monitoring app.kubernetes.io/component: prometheus spec: serviceName: "sammy-cluster-monitoring-prometheus" replicas: 3 podManagementPolicy: "Parallel" updateStrategy: type: "RollingUpdate" selector: matchLabels: *Labels template: metadata: labels: *Labels spec: . . .

작업을 완료하면 파일을 저장하고 닫습니다.

kubectl apply -f를 사용하여 변경 사항을 적용하십시오.

  1. kubectl apply -f sammy-cluster-monitoring_manifest.yaml --namespace default

kubectl get pods를 사용하여 진행 상황을 추적할 수 있습니다. 이 같은 기술을 사용하여이 관찰 가능한 스택의 많은 Kubernetes 매개 변수 및 구성을 업데이트할 수 있습니다.

결론

이 튜토리얼에서는 DigitalOcean Kubernetes 클러스터에 Prometheus, Grafana 및 Alertmanager 모니터링 스택을 표준 대시 보드, Prometheus 규칙 및 경보와 함께 설치했습니다.

또한 이 모니터링 스택을 Helm Kubernetes 패키지 관리자를 사용하여 배포할 수도 있습니다. 자세한 내용은 Helm 및 Prometheus를 사용하여 DigitalOcean Kubernetes 클러스터 모니터링 설정하는 방법을 참조하십시오. 유사한 스택을 설정하고 실행하는 대체 방법은 현재 베타 버전인 DigitalOcean Marketplace Kubernetes Monitoring Stack 솔루션을 사용하는 것입니다.

디지털오션 쿠버네티스 클러스터 모니터링 퀵스타트 저장소는 Google Cloud Platform의 클릭하여 배포하는 프로메테우스 솔루션을 기반으로 크게 수정된 것입니다. 원본 저장소와의 수정 사항에 대한 전체 명세는 퀵스타트 저장소의 changes.md 파일에서 확인할 수 있습니다.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-kubernetes-monitoring-stack-with-prometheus-grafana-and-alertmanager-on-digitalocean