JSON의 샘플 정책

이 문서에서는 알림 정책 샘플을 제공합니다. 샘플은 JSON으로 작성되며 Monitoring 필터를 사용합니다. Monitoring 필터 또는 Monitoring Query Language(MQL)를 사용하여 정책을 정의했는지 여부에 관계없이 JSON 또는 YAML로 정책을 만들 수 있습니다. Google Cloud CLI는 JSON과 YAML을 모두 읽고 쓸 수 있지만 REST API는 JSON을 읽을 수 있습니다.

MQL을 사용하는 알림 정책 샘플은 다음 문서를 참조하세요.

알림 정책 필드를 구성하는 방법은 다음을 참조하세요.

기존 정책에 대한 YAML 생성

기존 알림 정책의 YAML 표현을 생성하려면 gcloud alpha monitoring policies list 명령어를 사용하여 정책을 나열하고 gcloud alpha monitoring policies describe 명령어를 실행하여 정책을 출력합니다.

기존 알림 채널의 YAML 표현을 생성하려면 gcloud alpha monitoring channels list 명령어를 사용하여 채널을 나열하고 gcloud alpha monitoring channels describe 명령어를 사용하여 채널 구성을 출력합니다.

Google Cloud CLI 명령어에 --format 플래그를 포함하지 않으면 두 gcloud ... describe 명령어의 기본 형식이 YAML로 설정됩니다.

예를 들어 다음 gcloud alpha monitoring policies describe 명령어는 projects/a-gcp-project/alertPolicies/12669073143329903307이라는 단일 정책을 검색하고 리디렉션(>)은 출력을 test-policy.yaml 파일에 복사합니다.

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

기존 정책에 대한 JSON 생성

기존 알림 정책과 알림 채널의 JSON 표현을 생성하려면 다음 중 하나를 수행하세요.

정책 샘플

백업/복원 예시에 설명된 대로 저장된 정책을 사용하여 저장된 정책의 새 사본을 만들 수 있습니다.

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

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

이 문서의 정책은 Google Cloud 콘솔에서 사용하는 용어와 동일한 용어(예: 'rate-of-change policy')를 사용하여 구성되며 두 가지 유형의 조건이 있습니다.

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

다음 샘플에서 이러한 조건은 conditionThresholdconditionAbsent에 해당합니다. 자세한 내용은 Condition의 참조 페이지를 확인하세요.

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

측정항목 임계값 정책

측정항목 임계값 정책은 어떤 값이 미리 정의된 경계를 넘을 때 이를 감지합니다. 임계값 정책은 조치를 취할 수 있도록 무언가가 중요한 점에 접근하고 있음을 알려줍니다. 예를 들어 측정항목 임곗값 정책의 조건은 사용 가능한 디스크 공간이 총 디스크 공간의 10% 미만이 될 때 충족됩니다.

다음 알림 정책은 평균 CPU 사용량을 VM 그룹 상태 표시기로 사용합니다. 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"
                        ],
                        "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\"",
            }
        }
    ],
}

예측 정책

예측 조건기간의 시계열에 대한 모든 예측이 동일하고 시계열이 예측 범위 내 임곗값을 위반할 것으로 예측하는 경우에 충족됩니다.

예측 조건은 예측을 사용하도록 구성된 측정항목 임곗값 조건입니다. 다음 샘플에서 볼 수 있듯이 이러한 조건에는 예측을 사용 설정하고 예측 범위를 지정하는 forecastOptions 필드가 포함됩니다. 다음 샘플에서는 예측 범위가 최솟값인 1시간으로 설정됩니다.

{
    "displayName": "NFS free bytes alert",
    "combiner": "OR",
    "conditions": [
      {
        "displayName": "Filestore Instance - Free disk space percent",
        "conditionThreshold": {
          "aggregations": [
            {
              "alignmentPeriod": "300s",
              "perSeriesAligner": "ALIGN_MEAN"
            }
          ],
          "comparison": "COMPARISON_LT",
          "duration": "900s",
          "filter": "resource.type = \"filestore_instance\" AND metric.type = \"file.googleapis.com/nfs/server/free_bytes_percent\"",
          "forecastOptions": {
            "forecastHorizon": "3600s"
          },
          "thresholdValue": 20,
          "trigger": {
            "count": 1
          }
        }
      }
    ],
}

변환율 정책

변환율 조건은 시계열의 값이 최소한 임계값으로 지정된 비율만큼 증가하거나 감소할 때 충족됩니다. 이 유형의 조건을 만들면 임곗값과 비교하기 전에 변환율 계산이 시계열에 적용됩니다.

지난 10분간의 측정항목 값의 평균을 계산한 후 해당 기간 직전에 측정한 10분간의 평균 결과와 비교합니다. 측정항목 변환율 조건에서 사용하는 10분 전환 확인 기간은 고정 값으로서 변경할 수 없습니다. 하지만 조건을 만들 때 사용자가 기간을 지정할 수 있습니다.

이 정책은 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"
                        ]
                    },
                    {
                        "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 탐색기를 사용하여 그룹 세부정보를 나열하세요.

업타임 체크 정책

업타임 체크 상태가 업타임 체크 페이지에 나타나지만 업타임 체크가 실패하면 Cloud Monitoring에서 알림을 보내도록 알림 정책을 구성할 수 있습니다.

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

업타임 체크는 Google Cloud 콘솔에서 생성되었습니다. 여기에서 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일 이내에 만료되면 다음 알림 정책의 조건이 충족됩니다. 두 조건 중 하나가 충족되면 Monitoring이 지정된 알림 채널로 알림을 전송합니다.

{
    "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분 넘게 사용할 수 없을 때 Monitoring에서 지정된 알림 채널에 알림을 전송합니다.

{
    "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"
            }
        }
    ],
}

자세한 내용은 프로세스 상태를 참조하세요.

측정항목 비율

비율 기반 알림 정책을 만들려면 Monitoring Query Language(MQL)를 사용하는 것이 좋습니다. Cloud Monitoring API는 일부 필터 기반 비율 생성을 지원하지만 MQL은 보다 유연하고 강력한 솔루션을 제공합니다.

이 섹션에서는 필터 기반 비율을 설명합니다. 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 응답을 확인합니다.

조건이 충족되고 Monitoring에서 즉시 새 이슈에 대한 알림을 보내며, 조건에 허용되는 기간은 0초입니다. 이 조건은 한 개의 trigger를 사용하며, 이는 이슈를 발생시키기 위해 조건을 위반해야 하는 시계열 수입니다. 단일 서비스를 사용하는 App Engine 앱의 경우 trigger 수는 1개로 충분합니다. 앱에 20개의 서비스가 있고 3개 이상의 서비스가 조건을 위반하는 경우 이슈를 발생시키려면 trigger 수를 3으로 설정합니다.

비율 설정

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

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

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

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

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

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

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

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

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

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