알림 정책 만들기

이 페이지에서는 베어메탈용 GKE 클러스터에 대해 측정항목 기반 알림 정책을 만드는 방법을 보여줍니다. 일반적인 시나리오의 알림 정책을 설정하는 데 도움이 되도록 다운로드 가능한 몇 가지 샘플을 제공합니다. 측정항목 기준 알림 정책에 대한 자세한 내용은 Google Cloud Observability 문서의 측정항목 임곗값 알림 정책 만들기를 참조하세요.

시작하기 전에

알림 정책을 만들려면 다음 권한이 있어야 합니다.

  • monitoring.alertPolicies.create
  • monitoring.alertPolicies.delete
  • monitoring.alertPolicies.update

이러한 권한은 다음 역할 중 하나에 포함됩니다.

  • monitoring.alertPolicyEditor
  • monitoring.editor
  • 프로젝트 편집자
  • 프로젝트 소유자

Google Cloud CLI를 사용하여 로그 기준 알림 정책을 만들려면 serviceusage.serviceUsageConsumer 역할도 있어야 합니다. 로그 기준 알림 정책을 설정하는 방법은 Google Cloud Observability 문서의 로그 기반 알림 구성을 참조하세요.

역할을 확인하려면 Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

정책 예시 만들기: API 서버 사용 불가

이 연습에서는 클러스터의 Kubernetes API 서버에 대한 알림 정책을 만듭니다. 이 정책을 사용하면 클러스터의 API 서버가 사용 불가능할 때마다 알림을 받을 수 있습니다.

  1. 정책 구성 파일 apiserver-unavailable.json을 다운로드합니다.

  2. 정책을 만듭니다.

    gcloud alpha monitoring policies create --policy-from-file=POLICY_CONFIG
    

    POLICY_CONFIG를 바로 전에 다운로드한 구성 파일의 경로로 바꿉니다.

  3. 알림 정책을 확인합니다.

    콘솔

    1. Google Cloud 콘솔에서 Monitoring 페이지로 이동합니다.

      Monitoring으로 이동

    2. 왼쪽에서 알림을 선택합니다.

    3. 정책 아래에서 알림 정책 목록을 볼 수 있습니다.

      목록에서 Anthos 클러스터 API 서버 사용 불가(중요)를 선택하여 새 정책에 대한 세부정보를 확인합니다. 조건에서 정책에 대한 설명을 확인할 수 있습니다. 예를 들면 다음과 같습니다.

      Policy violates when ANY condition is met
      Anthos cluster API server uptime is absent for 5m
      

    gcloud

    gcloud alpha monitoring policies list
    

    출력에 정책에 대한 자세한 정보가 표시됩니다. 예를 들면 다음과 같습니다.

    combiner: OR
    conditions:
    - conditionAbsent:
        aggregations:
        - alignmentPeriod: 60s
          crossSeriesReducer: REDUCE_MEAN
          groupByFields:
          - resource.label.project_id
          - resource.label.location
          - resource.label.cluster_name
          - resource.label.namespace_name
          - resource.label.container_name
          - resource.label.pod_name
          perSeriesAligner: ALIGN_MAX
        duration: 300s
        filter: resource.type = "k8s_container" AND metric.type = "kubernetes.io/anthos/container/uptime"
          AND resource.label."container_name"=monitoring.regex.full_match("kube-apiserver")
        trigger:
          count: 1
      displayName: Anthos cluster API server uptime is absent for 5m
      name: projects/…/alertPolicies/…/conditions/…
    displayName: Anthos cluster API server unavailable (critical)
    enabled: true
    mutationRecord:
      mutateTime: …
      mutatedBy: …
    name: projects/…/alertPolicies/…
    

추가 알림 정책 만들기

이 섹션에서는 일련의 권장 알림 정책에 대한 설명과 구성 파일을 제공합니다.

정책을 만들려면 이전 연습에 사용한 것과 동일한 단계를 따릅니다.

  1. 구성 파일을 다운로드하려면 오른쪽 열의 링크를 클릭합니다.

  2. 선택적으로 특정 요구에 맞게 조건을 조정할 수 있습니다. 예를 들어 클러스터 하위 집합에 대한 필터를 추가하거나 노이즈와 중요도 간의 균형을 맞추기 위해 임곗값을 조정할 수 있습니다.

  3. 정책을 만들려면 gcloud alpha monitoring policies create를 실행합니다.

다음 스크립트를 사용하여 이 문서에 설명된 모든 알림 정책 샘플을 다운로드하고 설치할 수 있습니다.

# 1. Create a directory named alert_samples:

mkdir alert_samples && cd alert_samples
declare -a alerts=("apiserver-unavailable.json" "controller-manager-unavailable.json" "scheduler-unavailable.json" \
  "pod-crash-looping.json" "pod-not-ready-1h.json" "container-cpu-usage-high-reaching-limit.json" \
  "container-memory-usage-high-reaching-limit.json" "persistent-volume-usage-high.json" "node-cpu-usage-high.json" \
  "node-disk-usage-high.json" "node-memory-usage-high.json" "node-not-ready-1h.json" "apiserver-error-ratio-high.json" \
  "etcd-leader-changes-or-proposal-failures-frequent.json" "etcd-server-not-in-quorum.yaml" "etcd-storage-usage-high.json")

# 2. Download all alert samples into the alert_samples/ directory:

for x in "${alerts[@]}"
do
  wget https://cloud.google.com/anthos/clusters/docs/bare-metal/latest/samples/${x}
done

# 3. (optional) Uncomment and provide your project ID to set the default project
# for gcloud commands:

# gcloud config set project <PROJECT_ID>

# 4. Create alert policies for each of the downloaded samples:

for x in "${alerts[@]}"
do
  gcloud alpha monitoring policies create --policy-from-file=${x}
done

제어 영역 구성요소 가용성

알림 이름 설명 Cloud Monitoring의 알림 정책 정의
API 서버 사용 불가(중요) API 서버 업타임 측정항목을 사용할 수 없음 apiserver-unavailable.json
스케줄러 사용 불가(중요) 스케줄러 업타임 측정항목을 사용할 수 없음 scheduler-unavailable.json
컨트롤러 관리자 사용 불가(중요) 컨트롤러 관리자 업타임 측정항목을 사용할 수 없음 controller-manager-unavailable.json

Kubernetes 시스템

알림 이름 설명 Cloud Monitoring의 알림 정책 정의
포드 비정상 종료 루프(경고) 포드가 계속 다시 시작되고 비정상 종료 루프 상태일 수 있음 pod-crash-looping.json
포드가 1시간 이상 준비되지 않음(중요) 포드가 1시간 이상 준비되지 않은 상태입니다. pod-not-ready-1h.json
컨테이너 CPU 사용량 80% 초과(경고) 컨테이너 CPU 사용량이 한도의 80%를 초과했습니다. container-cpu-usage-high-reaching-limit.json
컨테이너 메모리 사용량 85% 초과(경고) 컨테이너 메모리 사용량이 한도의 85%를 초과했습니다. container-memory-usage-high-reaching-limit.json
영구적인 높은 사용량(중요) 요청한 영구 볼륨의 여유 공간이 3% 미만임 persistent-volume-usage-high.json
노드 CPU 사용량 80% 초과(경고) 노드 CPU 사용량이 5분 동안 총 할당 가능량의 80%를 초과했습니다. node-cpu-usage-high.json
노드 디스크 사용량 85% 초과(경고) 디스크 마운트 지점당 15% 미만이 10분 동안 여유 공간으로 남아 있습니다. node-disk-usage-high.json
노드 메모리 사용량 80% 초과(경고) 노드 메모리 사용량이 5분 동안 총 할당 가능량의 80%를 초과했습니다. node-memory-usage-high.json
노드가 1시간 이상 준비되지 않음(중요) 노드가 1시간 이상 준비되지 않은 상태입니다. node-not-ready-1h.json

Kubernetes 성능

알림 이름 설명 Cloud Monitoring의 알림 정책 정의
API 서버 오류율 20% 초과(중요) API 서버에서 15분 동안 동사당 모든 요청의 20% 초과에 대해 5xx 또는 429 오류가 발생했습니다. apiserver-error-ratio-high.json
ETCD 리더 변경 또는 제안 실패가 너무 빈번함(경고) etcd 리더 변경 또는 제안 실패가 너무 자주 발생합니다. etcd-leader-changes-or-proposal-failures-frequent.json
ETCD 서버가 쿼럼에 없습니다(중요). 5분 동안 약정된 etcd 서버 제안이 없으므로 쿼럼이 손실되었을 수 있습니다. etcd-server-not-in-quorum.yaml
ETCD 스토리지 90% 한도 초과(경고) etcd 스토리지 사용량이 한도의 90%를 초과합니다. etcd-storage-usage-high.json

PromQL을 사용한 알림 정책

알림 정책의 쿼리를 MQL 대신 PromQL로 표현할 수도 있습니다. 예를 들어 API server error ratio exceeds 20 percent (critical) 정책의 PromQL 버전인 apiserver-error-ratio-high-promql.json을 다운로드할 수 있습니다.

자세한 내용은 베어메탈용 GKE 문서의 Prometheus용 관리형 서비스 사용 및 Cloud Monitoring 문서의 PromQL을 사용한 알림 정책을 참조하세요.

알림 받기

알림 정책을 만든 후 정책에 대해 하나 이상의 알림 채널을 정의할 수 있습니다. 알림 채널에는 여러 종류가 있습니다. 예를 들어 이메일, Slack 채널, 모바일 앱을 통해 알림을 받을 수 있습니다. 자신의 요구에 맞게 채널을 선택할 수 있습니다.

알림 채널을 구성하는 방법은 알림 채널 관리를 참조하세요.