이 문서에서는 운영자가 Google Cloud Managed Service for Prometheus를 구성하여 Google Kubernetes Engine (GKE) 클러스터 및 워크로드에서 특정 Kubernetes 측정항목을 필터링하고 수집하는 방법을 보여줍니다.
다음 사항을 숙지해야 합니다.
GKE의 측정항목 수집
GKE 클러스터의 시스템 구성요소는 Prometheus 측정항목을 내보내고 노출합니다. 기본적으로 모든 클러스터는 GKE에 특정한 시스템 측정항목을 수집합니다. 다양한 구성요소의 선별된 측정항목 모음을 수집하는 데 사용할 수 있는 추가 내장 측정항목 패키지가 있습니다.
기본 제공 GKE 측정항목 패키지와 별도로 Google Cloud Managed Service for Prometheus가 특정 Prometheus 측정항목을 수집하도록 수동으로 구성할 수 있습니다. 이 맞춤 구성은 다음과 같은 사용 사례에 적합합니다.
- 클러스터 및 워크로드에서 특정 신호를 모니터링합니다.
- 필요하지 않은 측정항목 패키지를 사용 중지하고 일부 측정항목만 수집하여 비용을 최적화합니다.
- 구성요소에서 내보내지만 측정항목 패키지에 포함되지 않은 측정항목을 수집합니다.
운영자의 경우 각 노드의 kubelet 프로세스에서 생성되는 노드 측정항목이 특정 신호에 대한 워크로드 및 노드를 모니터링하는 데 유용할 수 있습니다.
측정항목 수집 커스텀 리소스
특정 측정항목을 필터링하고 수집하려면 다음 맞춤 리소스 중 하나에서 Prometheus relabeling rules를 구성합니다.
PodMonitoring: 특정 네임스페이스의 포드에서 측정항목 수집을 구성합니다.ClusterPodMonitoring: 모든 네임스페이스의 포드에서 측정항목 수집을 구성합니다.ClusterNodeMonitoring:kubelet및 cAdvisor와 같은 노드 구성요소에서 측정항목 수집을 구성합니다.
측정항목 중복
클러스터의 활성 측정항목 패키지에 포함된 측정항목을 필터링하면 Google Cloud Managed Service for Prometheus에 측정항목이 여러 번 표시됩니다. 예를 들어 클러스터에 KUBELET 측정항목 패키지가 사용 설정되어 있고 kubelet_running_containers 측정항목 수집을 구성하면 중복 값이 표시됩니다.
중복을 방지하려면 수집하는 측정항목이 활성 측정항목 패키지 중 하나에 포함되어 있지 않은지 확인하세요. 포함된 측정항목에 대한 자세한 내용은 다음 측정항목 패키지를 참고하세요.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치했으면
gcloud components update명령어를 실행하여 최신 버전을 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.
- 이 문서에 필요한 권한이 있는지 확인합니다.
- 기존 GKE 클러스터를 사용하거나 새 클러스터를 만듭니다.
필요한 역할
측정항목을 수집하고 보는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
클러스터에서 Kubernetes 리소스를 만듭니다.
Kubernetes Engine 개발자 (
roles/container.developer) -
Monitoring에서 측정항목 보기: 모니터링 뷰어 (
roles/monitoring.viewer)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
Google Cloud Managed Service for Prometheus 사용 설정
Google Cloud Managed Service for Prometheus는 모든 GKE 클러스터에서 기본적으로 사용 설정되며 Autopilot 클러스터에서는 사용 중지할 수 없습니다. Autopilot 클러스터를 사용하는 경우 측정항목 수집 구성 섹션으로 건너뜁니다.
Standard 클러스터에서 Google Cloud Managed Service for Prometheus가 사용 설정되어 있는지 확인하려면 다음 옵션 중 하나를 선택하세요.
콘솔
Google Cloud 콘솔에서 Kubernetes 클러스터 페이지로 이동합니다.
확인하려는 클러스터의 행에서 작업 > 수정을 클릭합니다. 클러스터 세부정보 페이지가 열립니다.
기능 섹션에서 Managed Service for Prometheus 필드의 값을 확인합니다. 값이 사용 설정됨이면 측정항목 수집 구성 섹션으로 건너뜁니다. 값이 사용 중지됨이면 Google Cloud Managed Service for Prometheus를 사용 설정합니다.
- Managed Service for Prometheus 수정을 클릭합니다. Managed Service for Prometheus 수정 대화상자가 열립니다.
- Managed Service for Prometheus 사용 설정 체크박스를 선택합니다.
- 변경사항 저장을 클릭합니다.
gcloud
클러스터에서 Google Cloud Managed Service for Prometheus가 사용 설정되어 있는지 확인합니다.
gcloud container clusters describe CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--format='value(monitoringConfig.managedPrometheusConfig.enabled)'
다음을 바꿉니다.
CLUSTER_NAME: Standard 클러스터의 이름CONTROL_PLANE_LOCATION: 클러스터 컨트롤 플레인의 리전 또는 영역(예:us-central1또는us-central1-a)
출력이 True이면 Google Cloud Managed Service for Prometheus가 사용 설정된 것입니다.
출력이 False이면 Google Cloud Managed Service for Prometheus를 사용 설정합니다.
gcloud container clusters update CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--enable-managed-prometheus
측정항목 수집 구성
Google Cloud Managed Service for Prometheus가 특정 내보낸 측정항목을 수집하도록 구성하려면 측정항목에 대한 다음 정보가 필요합니다.
- 측정항목 이름입니다(예:
kubelet_working_pods). - 측정항목을 노출하는 엔드포인트(예:
/metrics/cadvisor또는/metrics)입니다.
측정항목을 찾고 수집을 구성하려면 다음 단계를 따르세요.
특정 구성요소의 참고 문서에서 측정항목을 찾습니다. 예를 들어 다음 리소스를 사용하여 노드 측정항목을 찾을 수 있습니다.
클러스터의 활성 측정항목 패키지를 확인합니다.
gcloud container clusters describe CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --flatten=monitoringConfig.componentConfig \ --format='value(enableComponents)'출력은 다음과 비슷합니다.
SYSTEM_COMPONENTS;STORAGE;POD;DEPLOYMENT;STATEFULSET;DAEMONSET;HPA;JOBSET;CADVISOR;KUBELET;DCGM사용 가능한 측정항목의 정보를 사용하여 수집하려는 측정항목이 이러한 활성 패키지 중 하나에 있는지 확인합니다. 측정항목이 활성 측정항목 패키지에 포함된 경우 Monitoring에 중복 측정항목이 표시될 수 있습니다. 측정항목이 활성 측정항목 패키지에 없으면 다음 단계로 진행합니다.
선택사항: 측정항목이 측정항목 엔드포인트에서 사용 가능한지 확인하려면
kubectl get --raw명령어를 사용하여 엔드포인트를 쿼리합니다. 예를 들어 다음 명령어는/metrics엔드포인트에서kubelet_working_pods측정항목을 쿼리합니다.kubectl get --raw "/api/v1/nodes/NODE_NAME/proxy/metrics" | grep "kubelet_working_pods"NODE_NAME을 쿼리할 노드 이름으로 바꿉니다.출력은 다음과 비슷하며, 측정항목을 사용할 수 있음을 나타냅니다.
# HELP kubelet_working_pods [ALPHA] Number of pods the kubelet is actually running, broken down by lifecycle phase, whether the pod is desired, orphaned, or runtime only (also orphaned), and whether the pod is static. An orphaned pod has been removed from local configuration or force deleted in the API and consumes resources that are not otherwise visible. # TYPE kubelet_working_pods gauge kubelet_working_pods{config="desired",lifecycle="sync",static=""} 8 kubelet_working_pods{config="desired",lifecycle="sync",static="true"} 1 kubelet_working_pods{config="desired",lifecycle="terminated",static=""} 0 kubelet_working_pods{config="desired",lifecycle="terminated",static="true"} 0 kubelet_working_pods{config="desired",lifecycle="terminating",static=""} 0 kubelet_working_pods{config="desired",lifecycle="terminating",static="true"} 0수집할 측정항목을 식별한 후 PodMonitoring, ClusterPodMonitoring 또는 ClusterNodeMonitoring 커스텀 리소스에서 Prometheus 재지정 규칙을 사용하여 해당 측정항목을 필터링합니다. 사용하는 커스텀 리소스는 측정항목 수집 커스텀 리소스 섹션에 설명된 대로 측정항목의 속성에 따라 달라집니다.
예를 들어 다음 ClusterNodeMonitoring 매니페스트를 검토합니다.
apiVersion: monitoring.googleapis.com/v1 kind: ClusterNodeMonitoring metadata: name: kubelet-pod-counts spec: selector: matchLabels: {} endpoints: - path: "/metrics" scheme: "https" interval: "30s" tls: insecureSkipVerify: true # metricRelabeling specifies the metrics to ingest. The metrics must be # available at the specified endpoint. metricRelabeling: - action: keep sourceLabels: [__name__] regex: kubelet_(active|working)_pods이 매니페스트에는 다음과 같은 속성이 있습니다.
selector.matchLabels필드는 모든 노드와 일치하는 빈 집합 ({})입니다.endpoints.path필드는 스크래핑할 측정항목 엔드포인트를 식별합니다.metricRelabeling필드는 수집할 특정 측정항목을 식별합니다. 이 예시에서 Google Cloud Managed Service for Prometheus는 엔드포인트에서 이름이kubelet_active_pods및kubelet_working_pods인 측정항목을 수집합니다.
커스텀 리소스를 배포하면 Google Cloud Managed Service for Prometheus가 지정된 구성과 일치하는 측정항목을 수집합니다. Cloud Monitoring과 같은 다른 측정항목에 사용하는 것과 동일한 메서드를 사용하여 이러한 측정항목을 보고 쿼리할 수 있습니다.
예시 측정항목의 측정항목 수집 확인
다음 단계에서는 kubelet에서 kubelet_runtime_operations_errors_total 측정항목을 수집하도록 Google Cloud Managed Service for Prometheus를 구성하는 방법을 보여줍니다.
이 예시 단계에서는 측정항목이 현재 수집되지 않는지 확인하고, kubelet이 노드 구성요소이므로 ClusterNodeMonitoring을 만든 다음, 측정항목이 Monitoring에 표시되는지 확인합니다.
kubelet_runtime_operations_errors_total측정항목이 Monitoring에 아직 없는지 확인합니다.Google Cloud 콘솔에서 측정항목 탐색기 페이지로 이동합니다.
쿼리 섹션의 측정항목 필드에서
prometheus/kubelet_runtime_operations_errors_total/counter측정항목을 선택합니다. 검색 결과가 표시되지 않으면 측정항목이 수집되지 않는 것입니다.
kubelet_runtime_operations_errors_total측정항목을 필터링하는 ClusterNodeMonitoring을 만듭니다.다음 ClusterNodeMonitoring 매니페스트를
kubelet-runtime-errors-collector.yaml로 저장합니다.apiVersion: monitoring.googleapis.com/v1 kind: ClusterNodeMonitoring metadata: name: kubelet-runtime-errors-collector spec: selector: matchLabels: {} endpoints: - path: /metrics scheme: https interval: 30s tls: insecureSkipVerify: true metricRelabeling: - action: keep sourceLabels: [__name__] regex: kubelet_runtime_operations_errors_totalClusterNodeMonitoring을 만듭니다.
kubectl apply -f kubelet-runtime-errors-collector.yaml
측정항목이 모니터링에 표시되는 데 최대 10분이 걸릴 수 있습니다.
Google Cloud 콘솔에서 측정항목이 Monitoring에 표시되는지 확인합니다.
측정항목 탐색기 페이지로 이동합니다.
쿼리 섹션의 측정항목 필드에서
prometheus/kubelet_runtime_operations_errors_total/counter측정항목을 선택합니다.선택사항: 필터 드롭다운 메뉴에서 클러스터를 선택합니다.
결과 섹션에는 수집된 측정항목이 포함된 차트가 표시됩니다.