샘플 정책

이 페이지에서는 영감을 얻고 고유한 디자인 정책을 부트스트랩하는 데 사용할 수 있는 특정 알림 정책 모음을 제공합니다.

JSON 또는 YAML 형식으로 정책 표현

JSON과 YAML의 두 가지 데이터 형식으로 알림 정책을 나타낼 수 있습니다. Cloud SDK는 두 형식을 모두 읽고 쓸 수 있습니다. REST API는 JSON을 읽을 수 있습니다.

기존 알림 정책과 알림 채널의 YAML(기본값) 표현을 생성하려면 gcloud alpha monitoring policies listdescribe 명령어나 gcloud alpha monitoring channels listdescribe 명령어를 각각 사용합니다.

예를 들어 이 명령어는 단일 정책을 검색하고 test-policy.yaml 파일에서 출력을 캡처합니다.

gcloud alpha monitoring policies describe projects/a-gcp-project/alertPolicies/12669073143329903307 > test-policy.yaml

기존 알림 정책과 알림 채널의 JSON 표현을 생성하려면 다음 안내를 따르세요.

정책 복사

백업/복원 예에 설명된 대로 저장된 정책을 사용하여 저장된 정책의 새 사본을 만들 수 있습니다. 또한 저장된 정책과 비슷한 정책을 만들기 위한 시작점으로 사용할 수도 있습니다.

한 프로젝트에 저장된 정책을 사용하여 다른 프로젝트에 새 정책이나 비슷한 정책을 만들 수 있습니다. 하지만 저장된 정책 사본을 다음과 같이 먼저 변경해야 합니다.

  • 알림 채널에서 다음 필드를 삭제합니다.
    • name
    • verificationStatus
  • 알림 채널을 만든 다음 알림 정책에서 채널을 참조합니다. 새 채널 식별자가 있어야 합니다.
  • 다시 만드는 모든 알림 정책에서 다음 필드를 삭제합니다.
    • name
    • condition.name
    • creationRecord
    • mutationRecord

정책 샘플

이 샘플의 정책은 Google Cloud Console에서 사용하는 용어와 동일한 용어(예: 'rate-of-change policy')를 사용하여 구성되지만 실제로 이러한 모든 분류를 기반으로 하는 조건은 다음 두 가지 유형뿐입니다.

  • 임계 조건: UI에 언급된 거의 모든 정책 유형이 임계 조건의 변이입니다.
  • 부재 조건

여기에 있는 샘플에서 conditionThresholdconditionAbsent 조건으로 표시됩니다. 자세한 내용은 Condition의 참조 페이지를 확인하세요.

이러한 정책 대부분을 Google Cloud Console을 사용하여 수동으로 만들 수 있지만 일부는 Monitoring API를 통해서만 만들 수 있습니다. 자세한 내용은 알림 정책 만들기(UI) 또는 정책 만들기(API)를 참조하세요.

측정항목 임계값 정책

측정항목 임계값 정책은 어떤 값이 미리 정의된 경계를 넘을 때 이를 감지하는 정책입니다. 임계값 정책은 조치를 취할 수 있도록 무언가가 중요한 점에 접근하고 있음을 알려줍니다. 예를 들어 사용 가능한 디스크 공간이 전체 디스크 공간의 10% 아래로 떨어지면 시스템의 디스크 공간이 곧 부족해질 수 있습니다.

다음 정책에서는 VM 그룹 상태의 표시기로 평균 CPU 사용량을 사용합니다. 60초 이상의 간격으로 측정되는 인스턴스 및 영역 내 VM 그룹의 평균 CPU 사용률이 15분(900초) 동안 사용률 임계값인 90%를 넘으면 알림이 발생합니다.

{
    "displayName": "Very high CPU usage",
    "combiner": "OR",
    "conditions": [
        {
            "displayName": "CPU usage is extremely high",
            "conditionThreshold": {
                "aggregations": [
                    {
                        "alignmentPeriod": "60s",
                        "crossSeriesReducer": "REDUCE_MEAN",
                        "groupByFields": [
                            "project",
                            "resource.label.instance_id",
                            "resource.label.zone"
                        ],
                        "perSeriesAligner": "ALIGN_MAX"
                    }
                ],
                "comparison": "COMPARISON_GT",
                "duration": "900s",
                "filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\"
                          AND resource.type=\"gce_instance\"",
                "thresholdValue": 0.9,
                "trigger": {
                    "count": 1
                }
            }
        }
    ],
}

측정항목 부재 정책

메트릭 부재 정책은 지정된 기간 동안 메트릭에 기록되는 데이터가 없을 때 트리거됩니다.

이를 보여주는 한 가지 방법은 아무 것도 기록되지 않는 커스텀 측정항목을 만드는 것입니다. 이러한 종류의 정책에는 커스텀 측정항목이 필요 없지만 시연을 위해 실제로 커스텀 측정항목이 사용되지 않음을 확인하는 것이 쉽습니다.

다음은 커스텀 측정항목의 샘플 설명자입니다. API 탐색기를 사용하여 측정항목을 만들 수 있습니다.

{
  "description": "Number of times the pipeline has run",
  "displayName": "Pipeline runs",
  "metricKind": "GAUGE",
  "type": "custom.googleapis.com/pipeline_runs",
  "labels": [
    {
      "description": "The name of the pipeline",
      "key": "pipeline_name",
      "valueType": "STRING"
    },
  ],
  "unit": "1",
  "valueType": "INT64"
}

자세한 내용은 커스텀 측정항목 사용하기를 참조하세요.

약 1시간 동안 이 메트릭에 데이터가 기록되지 않으면 다음 경고 정책이 트리거됩니다. 즉, 시간별 파이프라인 실행에 실패했습니다. 여기에 사용된 조건은 conditionAbsent입니다.

{
    "displayName": "Data ingestion functioning",
    "combiner": "OR",
    "conditions": [
        {
            "displayName": "Hourly pipeline is up",
            "conditionAbsent": {
                "duration": "3900s",
                "filter": "resource.type=\"global\"
                          AND metric.type=\"custom.googleapis.com/pipeline_runs\"
                          AND metric.label.pipeline_name=\"hourly\"",
            }
        }
    ],
}

변환율 정책

이 정책은 CPU 사용률이 빠르게 증가하고 있음을 알려줍니다.

{
  "displayName": "High CPU rate of change",
  "combiner": "OR",
  "conditions": [
    {
      "displayName": "CPU usage is increasing at a high rate",
      "conditionThreshold": {
         "aggregations": [
           {
             "alignmentPeriod": "900s",
             "perSeriesAligner": "ALIGN_PERCENT_CHANGE",
           }],
        "comparison": "COMPARISON_GT",
        "duration": "180s",
        "filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" AND resource.type=\"gce_instance\"",
        "thresholdValue": 0.5,
        "trigger": {
          "count": 1
         }
      }
    }
  ],
}

그룹 집계 정책

이 정책은 Google Kubernetes Engine 클러스터의 평균 CPU 사용률이 임계값을 초과하면 알려줍니다.

{
    "displayName": "CPU utilization across GKE cluster exceeds 10 percent",
    "combiner": "OR",
    "conditions": [
         {
            "displayName": "Group Aggregate Threshold across All Instances in Group GKE cluster",
            "conditionThreshold": {
                "filter": "group.id=\"3691870619975147604\" AND metric.type=\"compute.googleapis.com/instance/cpu/utilization\" AND resource.type=\"gce_instance\"",
                "comparison": "COMPARISON_GT",
                "thresholdValue": 0.1,
                "duration": "300s",
                "trigger": {
                    "count": 1
                },
                "aggregations": [
                    {
                        "alignmentPeriod": "60s",
                        "perSeriesAligner": "ALIGN_MEAN",
                        "crossSeriesReducer": "REDUCE_MEAN",
                        "groupByFields": [
                              "project",
                              "resource.label.instance_id",
                              "resource.label.zone"
                        ]
                    },
                    {
                        "alignmentPeriod": "60s",
                        "perSeriesAligner": "ALIGN_SUM",
                        "crossSeriesReducer": "REDUCE_MEAN"
                    }
                ]
            },
        }
    ],
}

이 정책은 다음 그룹이 있다고 가정합니다.

{
    "name": "projects/a-gcp-project/groups/3691870619975147604",
    "displayName": "GKE cluster",
    "filter": "resource.metadata.name=starts_with(\"gke-kuber-cluster-default-pool-6fe301a0-\")"
}

그룹에 해당하는 필드를 식별하려면 project.groups.list 참조 페이지에서 API 탐색기를 사용하여 그룹 세부정보를 나열하세요.

업타임 체크 정책

업타임 체크 상태가 모니터링 개요 페이지에 나타나지만 알림 정책을 사용하여 업타임 체크가 실패할 경우 바로 알림을 받을 수 있습니다.

예를 들어 다음 JSON은 Google Cloud 사이트의 HTTPS 업타임 체크를 설명합니다. 업타임 체크는 5분마다 가용성을 확인합니다.

업타임 체크는 Google Cloud Console에서 생성되었습니다. 여기에서 JSON 표현은 Monitoring API로 프로젝트의 업타임 체크를 나열하여 만들어졌습니다. uptimeCheckConfigs.list를 참조하세요. Monitoring API를 사용하여 업타임 체크를 만들 수도 있습니다.

{
    "name": "projects/a-gcp-project/uptimeCheckConfigs/uptime-check-for-google-cloud-site",
    "displayName": "Uptime check for Google Cloud site",
    "monitoredResource": {
        "type": "uptime_url",
        "labels": {
            "host": "cloud.google.com"
      }
    },
    "httpCheck": {
        "path": "/index.html",
        "useSsl": true,
        "port": 443,
        "authInfo": {}
    },
    "period": "300s",
    "timeout": "10s",
    "contentMatchers": [
        {}
    ]
}

업타임 체크 알림 정책을 만들려면 UPTIME_CHECK_ID의 업타임 체크를 참조하세요. 이 ID는 체크가 생성될 때 설정됩니다. ID는 name 필드의 마지막 구성요소로 표시되며 구성 요약에서 UI에 Check ID로 표시됩니다. Monitoring API를 사용하는 경우 uptimeCheckConfigs.create 메서드가 ID를 반환합니다.

ID는 이 경우 UI에 설정된 displayName에서 파생됩니다. 업타임 체크를 나열하고 name 값을 참조하여 이를 확인할 수 있습니다.

이전에 설명한 업타임 체크의 ID는 uptime-check-for-google-cloud-site입니다.

업타임 체크에 실패하거나 Google Cloud 사이트의 SSL 인증서가 15일 이내에 만료되면 아래의 알림 정책이 트리거됩니다. 두 조건 중 하나가 발생하면 알림 정책이 지정된 알림 채널로 알림을 보냅니다.

{
    "displayName": "Google Cloud site uptime failure",
    "combiner": "OR",
    "conditions": [
        {
            "displayName": "Failure of uptime check_id uptime-check-for-google-cloud-site",
            "conditionThreshold": {
                "aggregations": [
                    {
                        "alignmentPeriod": "1200s",
                        "perSeriesAligner": "ALIGN_NEXT_OLDER",
                        "crossSeriesReducer": "REDUCE_COUNT_FALSE",
                        "groupByFields": [ "resource.label.*" ]
                    }
                ],
                "comparison": "COMPARISON_GT",
                "duration": "600s",
                "filter": "metric.type=\"monitoring.googleapis.com/uptime_check/check_passed\"
                          AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"
                          AND resource.type=\"uptime_url\"",
                "thresholdValue": 1,
                "trigger": {
                    "count": 1
                }
            }
        },
        {
            "displayName": "SSL Certificate for google-cloud-site expiring soon",
            "conditionThreshold": {
                "aggregations": [
                    {
                        "alignmentPeriod": "1200s",
                        "perSeriesAligner": "ALIGN_NEXT_OLDER",
                        "crossSeriesReducer": "REDUCE_MEAN",
                        "groupByFields": [ "resource.label.*" ]
                    }
                ],
                "comparison": "COMPARISON_LT",
                "duration": "600s",
                "filter": "metric.type=\"monitoring.googleapis.com/uptime_check/time_until_ssl_cert_expires\"
                          AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"
                          AND resource.type=\"uptime_url\"",
                "thresholdValue": 15,
                "trigger": {
                    "count": 1
                }
            }
        }
    ],
}

알림 정책의 필터는 유형 및 라벨을 사용하여 모니터링되는 측정항목을 지정합니다. 측정항목 유형은 monitoring.googleapis.com/uptime_check/check_passedmonitoring.googleapis.com/uptime_check/time_until_ssl_cert_expires입니다. 측정항목 라벨은 모니터링되는 특정 업타임 체크를 식별합니다. 이 예시에서 라벨 필드 check_id에는 업타임 체크 ID가 포함되어 있습니다.

AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"

자세한 내용은 모니터링 필터를 참조하세요.

프로세스 상태 정책

프로세스 상태 정책은 패턴과 일치하는 프로세스 수가 임계값을 초과하면 사용자에게 알릴 수 있습니다. 예를 들어 이 정책을 사용하여 프로세스가 실행 중지되었음을 사용자에게 알릴 수 있습니다.

이 정책은 사용자 www로 실행되고 문자열 nginx와 일치하는 프로세스를 5분 이상 사용할 수 없을 때 지정된 알림 채널에 알림을 전송합니다.

{
    "displayName": "Server health",
    "combiner": "OR",
    "conditions": [
        {
            "displayName": "Process 'nginx' is not running",
            "conditionThreshold": {
                "filter": "select_process_count(\"has_substring(\\\"nginx\\\")\", \"www\") AND resource.type=\"gce_instance\"",
                "comparison": "COMPARISON_LT",
                "thresholdValue": 1,
                "duration": "300s"
            }
        }
    ],
}

다른 예는 프로세스 상태를 참조하세요.

측정항목 비율

API를 사용하면 관련 측정항목 2개의 비율을 계산하고 해당 비율이 임계값을 초과할 때 실행되는 정책을 만들고 볼 수 있습니다. 관련 측정항목은 동일한 MetricKind를 가져야 합니다. 예를 들어 두 측정항목이 모두 게이지 측정항목인 경우 비율 기반 알림 정책을 만들 수 있습니다. 측정항목 유형의 MetricKind를 확인하려면 측정항목 목록을 참조하세요.

비율 조건은 간단한 임계값 조건의 변이로, 비율 정책의 조건은 두 가지 필터를 사용합니다. 하나는 비율의 분자 역할을 하는 일반적인 filter이고 다른 하나는 비율의 분모 역할을 하는 denominatorFilter입니다.

두 필터의 시계열은 동일한 방식으로 집계되어야만 값의 비율 계산이 의미가 있습니다. 두 필터의 비율이 지정된 기간의 임계값을 위반하는 경우 알림 정책이 트리거됩니다.

다음 섹션에서는 모든 HTTP 응답에 대한 HTTP 오류 응답의 비율을 모니터링하는 알림 정책을 구성하는 방법을 설명합니다. 비율 기반 알림 정책의 또 다른 예시는 할당량 한도에 대한 할당량 사용 비율 알림을 참조하세요.

HTTP 오류 비율

다음 정책은 모든 HTTP 응답 수에 대한 HTTP 오류 응답 수의 비율에 따라 임계값 조건을 만듭니다.

{
    "displayName": "HTTP error count exceeds 50 percent for App Engine apps",
    "combiner": "OR",
    "conditions": [
        {
            "displayName": "Ratio: HTTP 500s error-response counts / All HTTP response counts",
            "conditionThreshold": {
                 "filter": "metric.label.response_code>=\"500\" AND
                            metric.label.response_code<\"600\" AND
                            metric.type=\"appengine.googleapis.com/http/server/response_count\" AND
                            project=\"a-gcp-project\" AND
                            resource.type=\"gae_app\"",
                 "aggregations": [
                    {
                        "alignmentPeriod": "300s",
                        "crossSeriesReducer": "REDUCE_SUM",
                        "groupByFields": [
                          "project",
                          "resource.label.module_id",
                          "resource.label.version_id"
                        ],
                        "perSeriesAligner": "ALIGN_DELTA"
                    }
                ],
                "denominatorFilter": "metric.type=\"appengine.googleapis.com/http/server/response_count\" AND
                                      project=\"a-gcp-project\" AND
                                      resource.type=\"gae_app\"",
                "denominatorAggregations": [
                   {
                      "alignmentPeriod": "300s",
                      "crossSeriesReducer": "REDUCE_SUM",
                      "groupByFields": [
                        "project",
                        "resource.label.module_id",
                        "resource.label.version_id"
                       ],
                      "perSeriesAligner": "ALIGN_DELTA",
                    }
                ],
                "comparison": "COMPARISON_GT",
                "thresholdValue": 0.5,
                "duration": "0s",
                "trigger": {
                    "count": 1
                }
            }
        }
    ]
}

측정항목 및 리소스 유형

이 정책의 측정항목 유형은 appengine.googleapis.com/http/server/response_count이며 두 개의 라벨이 있습니다.

  • response_code: 요청의 HTTP 상태 코드를 나타내는 64비트 정수입니다. 이 정책은 이 라벨의 시계열 데이터를 필터링하여 다음을 확인합니다.
    • 수신 응답 수
    • 수신 오류 응답 수
    • 모든 응답에 대한 오류 응답의 비율
  • loading, 요청이 로드되었는지 여부를 나타내는 부울 값 loading 라벨은 이 알림 정책에서 관련이 없습니다.

알림 정책은 App Engine 앱의 응답 데이터, 즉 모니터링 리소스 유형 gae_app에서 가져온 데이터와 관련이 있습니다. 모니터링 리소스에는 세 개의 라벨이 있습니다.

  • project_id: Google Cloud 프로젝트의 ID
  • module_id: 앱의 서비스 또는 모듈 이름
  • version_id: 앱의 버전

이러한 측정항목 및 모니터링 리소스 유형에 대한 참조 정보는 측정항목 목록의 App Engine 측정항목과 모니터링 리소스 목록의 gae_app 항목을 참조하세요.

이 정책의 기능

이 정책은 총 응답 대비 오류 응답의 비율을 계산합니다. 비율은 5분 정렬 기간 동안 비율이 50% 이상(즉, 0.5 이상)인 경우 알림을 트리거합니다.

이 정책은 각 필터의 시계열을 해당 라벨의 값으로 그룹화하여 조건을 위반하는 앱의 모듈과 버전을 캡처합니다.

  • 조건의 필터는 App Engine 앱의 HTTP 응답을 보고 오류 범위 5xx에서 응답을 선택합니다. 이는 비율의 분자입니다.
  • 조건의 분모 필터는 App Engine 앱의 모든 HTTP 응답을 확인합니다.

이 정책은 알림을 즉시 트리거합니다. 조건에 허용되는 기간은 0초입니다. 이 정책은 알림을 트리거하기 위해 조건을 위반해야 하는 시계열 수인 트리거 수 1을 사용합니다. 단일 서비스를 사용하는 App Engine 앱의 경우 트리거 수 1이 좋습니다. 앱에 20개의 서비스가 있는 경우 3개 이상의 서비스가 조건을 위반할 때 알림이 트리거되도록 하려면 트리거 수를 3으로 설정합니다.

비율 설정

분자 및 분모 필터는 분자의 조건 필터가 오류 범위의 응답 코드와 일치하고 분모의 조건 필터가 모든 응답 코드와 일치한다는 점을 제외하면 완전히 동일합니다. 다음 절은 분자 조건에만 나타납니다.

      metric.label.response_code>="500" AND
      metric.label.response_code<"600"

그렇지 않으면 분자 및 분모 필터는 동일합니다.

각 필터에서 선택한 시계열은 비율의 계산이 유효하도록 동일한 방식으로 집계되어야 합니다. 라벨의 각 값 조합에 대해 서로 다른 시계열이 있을 수 있으므로 각 필터는 여러 시계열을 수집할 수 있습니다. 이 정책은 시계열 집합을 그룹 집합으로 파티션을 나누는 지정된 리소스 라벨로 이 시계열 집합을 그룹화합니다. 각 그룹의 시계열 중 일부가 분자 필터와 일치하고 나머지는 분모 필터와 일치합니다.

비율을 계산하려면 각 필터와 일치하는 시계열 집합을 각각 하나의 시계열로 집계해야 합니다. 그러면 각 그룹에는 분자와 분모에 각각 두 개의 시계열이 남습니다. 다음으로 각 그룹의 분자 시계열과 분모 시계열에 있는 포인트의 비율을 계산할 수 있습니다.

이 정책에서 두 필터의 시계열은 다음과 같이 집계됩니다.

  • 각 필터는 5분 간격으로 정렬된 여러 시계열을 만들고 5분 정렬 간격의 값에 대한 ALIGN_DELTA 계산 값을 표시합니다. 이 정렬기는 해당 간격의 일치하는 응답 수를 64비트 정수로 반환합니다.

  • 각 필터 내의 시계열은 모듈 및 버전에 대한 리소스 라벨의 값으로도 그룹화되므로 각 그룹에는 분자 필터와 일치하는 시계열과 분모 필터와 일치하는 시계열의 정렬된 시계열 집합 2개가 포함됩니다.

  • 각 그룹 내에서 분자 또는 분모 필터와 일치하는 시계열은 REDUCER_SUM 교차 계열 감소기를 사용하여 개별 시계열의 값을 합산하여 하나의 시계열로 집계됩니다. 이렇게 하면 분자와 분모에 대한 시계열이 각각 하나씩 생성되며 각 시계열은 정렬 간격에서 일치하는 모든 시계열에서 응답 수를 보고합니다.

그러면 정책이 각 그룹을 나타내는 분자 및 분모 시계열에 대해 값의 비율을 계산합니다. 비율을 사용할 수 있게 되면 이 정책은 단순한 측정항목 임계값 정책입니다.