로그 기반 알림 정책 구성

포함된 로그에 특정 메시지가 표시될 때마다 알림을 받을 수 있도록 알림 정책을 구성할 수 있습니다. 예를 들어 감사 로그에서 특정 데이터 액세스 메시지를 기록하는 시기를 확인하려는 경우 메시지가 표시될 때 알림을 받을 수 있습니다. 이러한 유형의 알림 정책을 로그 기반 알림 정책이라고 합니다. 이 문서에서는 Google Cloud 콘솔 및 Cloud Monitoring API를 사용하여 다음을 수행하는 방법을 설명합니다.

  • 로그 기반 알림 정책을 만들고 테스트합니다.
  • 로그 기반 알림 정책을 수정합니다.
  • 로그 기반 알림 정책을 삭제합니다.

시작하기 전에

알림 비교를 검토해서 로그 기반 알림 정책이 로그 데이터에 적합한지 확인합니다. 예를 들면 다음과 같습니다.

  • 로그 기반 알림 정책은 제외된 로그에서는 작동하지 않습니다.

  • 로그 기반 알림 정책을 사용하여 로그에서 개수를 도출할 수 없습니다. 개수를 도출하려면 로그 기반 측정항목을 대신 사용해야 합니다.

로그 기준 알림 정책을 만들고 관리하려면 Identity and Access Management 역할에 로그 기반 알림 정책의 권한에 설명된 권한이 포함되어야 합니다.

로그 탐색기를 사용하여 로그 기반 알림 정책 만들기

Google Cloud 콘솔의 로그 탐색기 페이지에서 또는 Monitoring API를 사용하여 로그 기반 알림 정책을 만들 수 있습니다. 이 섹션에서는 로그 탐색기를 사용하여 로그 기반 알림 정책을 만드는 방법을 설명합니다. Monitoring API 정보는 Monitoring API를 사용하여 로그 기반 알림 정책 만들기를 참조하세요.

로그 탐색기 인터페이스는 다음 단계를 안내합니다.

  • 알림 정책의 이름과 설명을 입력합니다.
  • 알림을 수신할 로그 선택합니다.
  • 알림 시간 간격을 설정합니다.
  • 이슈 자동 종료 시간을 설정합니다.
  • 알림을 받을 대상을 지정합니다.

예를 들어 애플리케이션에서 네트워크 주소를 변경할 때 심각도가 NOTICEsyslog 로그 항목을 작성하는 애플리케이션이 있다고 가정해 보겠습니다. 네트워크 주소 변경에 따른 로그 항목에는 다음과 같은 JSON 페이로드가 포함됩니다.

"jsonPayload": {
  "type": "Configuration change",
  "action": "Set network address",
  "result": "IP_ADDRESS",
}

심각도가 NOTICEsyslogjsonPayload.result 로그 항목 필드에 잘못된 IPv4 주소가 표시되는 경우 알려주는 로그 기반 알림 정책을 만들려고 합니다.

알림 정책을 만들려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔의 탐색 패널에서 Logging을 선택한 후 로그 탐색기를 선택합니다.

    로그 탐색기로 이동

  2. 쿼리 창을 사용하여 로그 기반 알림 정책에 사용할 메시지와 일치하는 쿼리를 빌드합니다.

    예를 들어 JSON 페이로드에 잘못된 IP 주소가 포함된 syslog 로그에서 심각도 수준이 NOTICE인 로그 항목을 찾으려면 다음 쿼리를 사용합니다.

    log_id("syslog")
    severity = "NOTICE"
    jsonPayload.result !~ "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}$"
    

    쿼리 결과 창에서 쿼리 실행을 사용하여 쿼리의 유효성을 검사합니다.

  3. 쿼리 결과 창의 헤더에서  알림 만들기를 클릭합니다. 창의 범위가 좁혀지면 알림 만들기 옵션이 작업 메뉴에 대신 표시될 수 있습니다.

  4. 알림 세부정보 창에서 알림 정책 이름과 설명을 지정합니다.

    1. 알림 정책 이름 필드에 알림 정책 이름을 입력합니다. 예를 들면 '네트워크 주소: 잘못된 IPv4 값'입니다.

    2. 정책 심각도 수준 메뉴에서 옵션을 선택합니다. 이슈 및 알림에 심각도 수준이 표시됩니다.

    3. 알림 정책에 대한 설명을 입력합니다. 알림 수신자가 문제를 진단하는 데 도움이 되는 정보를 포함할 수도 있습니다. 다음 문자열은 알림이 표시된 이유를 요약해서 보여줍니다.

      Log-based alerting policy in project ${project} detected an invalid IPv4 value.
      

      이 필드의 콘텐츠 형식 지정 및 맞춤설정 방법에 대한 상세 내용은 문서 템플릿에서 마크다운 및 변수 사용을 참조하세요.

  5. 다음 단계로 이동하려면 다음을 클릭하세요.

  6. 알림에서 포함할 로그 선택 창에서 미리보기 로그를 클릭하여 쿼리와 결과를 확인합니다.

    로그 탐색기 쿼리 창에서 쿼리를 빌드하는 것을 권장합니다. 쿼리 창에서 빌드한 쿼리도 이 창에 표시됩니다. 예를 들면 다음과 같습니다.

    log_id("syslog")
    severity = "NOTICE"
    jsonPayload.result !~ "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}$"
    

    필요한 경우 이 창에서 쿼리를 수정할 수 있습니다. 쿼리를 수정하는 경우 로그 미리보기를 클릭하여 결과를 확인합니다.

  7. 다음을 클릭합니다.

  8. 알림 사이의 최소 시간을 선택합니다. 이 값을 사용하면 알림이 여러 번 트리거될 때 이 알림으로부터 받는 알림 수를 컨트롤할 수 있습니다. 이 예시에서는 옵션에서 5분을 선택합니다.

  9. 선택사항: 이슈 자동 종료 기간을 선택합니다. 기본적으로 이슈 자동 종료 기간은 7일로 설정됩니다.

  10. 다음을 클릭합니다.

  11. 알림을 받을 알림 채널을 하나 이상 선택하세요. 이 예시에서는 이메일 알림 채널을 선택합니다.

    이메일 알림 채널이 이미 구성되어 있으면 목록에서 선택할 수 있습니다. 그렇지 않으면 알림 채널 관리를 클릭하고 이메일 채널을 추가합니다. 알림 채널 만들기에 대한 자세한 내용은 알림 채널 관리를 참조하세요.

  12. 저장을 클릭합니다.

이제 로그 기반 알림 정책을 테스트할 수 있습니다.

예시 로그 기반 알림 정책 테스트

만든 알림 정책을 테스트하려면 쿼리와 일치하는 로그 항목을 수동으로 작성하면 됩니다. 로그 항목을 작성하려면 다음을 수행합니다.

  1. PROJECT_ID 변수를 프로젝트 ID로 변경하여 다음 로그 항목을 구성합니다.

    {
      "entries": [
      {
        "logName": "projects/PROJECT_ID/logs/syslog",
        "jsonPayload": {
          "type": "Configuration change",
          "action": "Set network address",
          "result": "999.027.405.1",
        },
        "severity": "NOTICE",
        "resource": {
          "type": "generic_task",
          "labels" : {
            "project_id": "PROJECT_ID",
            "location": "us-east1",
            "namespace": "fake-task-2",
            "job": "write-log-entry",
            "task_id": "11",
          },
        },
      },
      ],
    }
    
  2. logEntries.write 참조 페이지로 이동하거나 다음 버튼을 클릭합니다.

    logEntries.write로 이동

  3. 이전에 구성한 로그 항목을 복사합니다.

  4. API 사용해 보기 창에서 다음을 수행합니다.

    1. API 탐색기에서 요청 본문 필드의 내용을 이전 단계에서 복사한 로그 항목으로 바꿉니다.

    2. 실행을 클릭합니다. 메시지가 표시되면 인증 과정을 수행합니다.

      logEntries.write 호출이 성공하면 HTTP 200 응답 코드와 빈 응답 본문 {}가 표시됩니다. API 탐색기에 대한 상세 내용은 Monitoring 문서의 API 탐색기 사용을 참조하세요. API 탐색기는 Logging API와 동일한 방식으로 작동합니다.

로그 항목은 다음과 같은 방법으로 알림 정책에 지정된 필터와 일치합니다.

  • logName 값은 Google Cloud 프로젝트에 있는 syslog 로그를 지정합니다.
  • 이 로그 항목의 severity 값은 NOTICE입니다.
  • jsonPayload.result 값이 올바른 IPv4 주소가 아닙니다.

로그 항목을 작성하면 다음과 같은 시퀀스가 발생합니다.

  • 새로운 로그 항목이 로그 탐색기에 나타나고 알림을 트리거합니다.
  • Cloud Monitoring에서 이슈가 열립니다.
  • 해당 이슈에 대한 알림을 받습니다. 이메일 알림 채널을 구성한 경우 알림은 다음 스크린샷과 같이 표시됩니다.

    로그 기반 알림 정책의 이메일 알림 예시입니다.

이메일에서 이슈 보기를 클릭하여 Cloud Monitoring에서 이슈를 볼 수 있습니다. 이슈에 대한 자세한 내용은 로그 기반 알림에 따른 이슈 관리를 참조하세요.

기타 시나리오: 감사 로그 알림

로그 기반 알림 만들기의 예시는 인위적으로 구성된 예시입니다. 일반적으로는 알림 정책을 만든 후 알림을 트리거하도록 로그 항목을 수동으로 작성하지 않습니다. 로그 항목은 일반적으로 애플리케이션 또는 다른 서비스에서 작성됩니다. 하지만 로그 항목의 소스가 일치하지 않으면 로그 기반 알림에서 로그 항목을 선택하기 위해 사용되는 쿼리가 중요합니다.

다음 섹션에서는 감사 로그 내용에 따라 로그 기반 알림에 대한 현실적인 시나리오를 설명합니다. 각 시나리오에서는 적절한 감사 로그 항목을 선택하는 쿼리를 만드는 방법을 보여줍니다. 그 이외의 경우에는 로그 기반 알림을 만드는 절차는 로그 기반 알림 만들기에서와 동일합니다.

보안 비밀에 대한 사용자 액세스 알림

프로젝트가 보안 비밀을 Secret Manager에 저장하고 이러한 보안 비밀 중 일부는 서비스 계정에서만 사용할 수 있다고 가정해 보겠습니다. 특수한 상황을 제외하고는 인간 사용자가 이러한 보안 비밀에 액세스하지 않습니다.

Secret Manager에 대해 감사 로깅을 사용 설정한 경우 보안 비밀에 액세스하려고 시도할 때마다 감사 로그 항목이 생성됩니다. 각 항목에는 보안 비밀 이름과 호출자 ID가 포함됩니다.

인간 사용자가 보안 비밀에 액세스할 때 알려주는 로그 기반 알림 정책을 만들 수 있습니다.

다음은 Secret Manager에서 작성한 감사 로그 항목의 일부입니다. 발췌문에는 로그 기반 알림에 대한 쿼리를 만들 때 유용한 필드가 나와 있습니다.

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "serviceName": "secretmanager.googleapis.com",
    "methodName": "google.cloud.secretmanager.v1.SecretManagerService.AccessSecretVersion",
    "authenticationInfo": {
      "principalEmail": "my-svc-account@PROJECT_ID.iam.gserviceaccount.com",
      "serviceAccountDelegationInfo": [],
      "principalSubject": "serviceAccount:my-svc-account@PROJECT_ID.iam.gserviceaccount.com"
    },
    ...
  },
  ...
}

다음은 특히 관심을 가질 만한 protoPayload 하위 필드입니다.

  • @type: 해당 로그 항목은 감사 로그 항목임을 나타냅니다.
  • serviceName: 감사 로그 항목을 작성한 서비스를 기록합니다. 이 필드를 사용하여 Secret Manager가 작성한 항목을 식별합니다.
  • methodName: 이 감사 로그 항목이 작성된 메서드를 식별합니다. 이 필드를 사용하여 이 항목을 만든 작업을 식별합니다. 이번 예시에서는 AccessSecretVersion 메서드입니다.
  • authenticationInfo.principalEmail: methodName 필드에 메서드를 호출한 계정을 기록합니다. 이 필드의 예상 값은 gserviceaccount.com로 끝나는 서비스 계정입니다.

인간 사용자가 보안 비밀에 액세스한 로그 항목을 찾으려면 Secret Manager에서 작성한 감사 로그 항목을 찾으세요. gserviceaccount.com으로 끝나지 않는 주 구성원이 AccessSecretVersion 메서드를 호출한 로그 항목을 찾아야 합니다. 다음 쿼리는 이러한 로그 항목을 분리합니다.

protoPayload.@type = "type.googleapis.com/google.cloud.audit.AuditLog"
protoPayload.serviceName = "secretmanager.googleapis.com"
protoPayload.methodName =~ "AccessSecretVersion$"
protoPayload.authenticationInfo.principalEmail !~ "gserviceaccount.com$"

보안 비밀의 액세스에 대해 로그 기반 알림 정책을 만들려면 알림에 포함할 로그 선택 창에서 이 쿼리를 사용합니다.

복호화 이벤트 알림

이전 예시에서의 분석은 다른 서비스에도 적용될 수 있습니다. 예를 들어 Cloud Key Management Service를 사용하여 민감한 정보를 암호화 및 복호화하는 경우 Cloud KMS에서 생성된 감사 로그를 사용하여 인간 사용자가 값을 복호화하는지 확인합니다.

인간 사용자가 수행한 복호화 로그 항목을 찾으려면 Cloud KMS에서 작성한 감사 로그 항목을 찾아보세요. Decrypt 메서드가 서비스 계정을 나타내는 gserviceaccount.com로 끝나지 않는 주 구성원이 호출한 로그 항목을 찾으려고 합니다. 다음 쿼리는 이러한 로그 항목을 분리합니다.

protoPayload.@type = "type.googleapis.com/google.cloud.audit.AuditLog"
protoPayload.serviceName = "cloudkms.googleapis.com"
protoPayload.methodName = "Decrypt"
protoPayload.authenticationInfo.principalEmail !~ "gserviceaccount.com$"

인간 사용자가 수행한 복호화의 로그 기반 알림 정책을 만들려면 알림에 포함할 로그 선택 창에서 다음 쿼리를 사용하세요.

모니터링에서 로그 기반 알림 관리

Monitoring용 Google Cloud 콘솔 또는 Monitoring API를 사용하여 로그 기반 알림을 확인, 수정, 삭제할 수 있습니다. 이 문서에서는 Google Cloud 콘솔을 사용하여 알림 정책을 관리하는 방법을 설명합니다. Monitoring API를 사용하여 알림 정책을 관리하는 방법에 대한 자세한 내용은 API로 알림 정책 관리를 참조하세요.

Google Cloud 프로젝트의 모든 알림 정책 목록을 보려면 다음 중에 하나를 수행하세요.

  • 로깅에서 이동하려면 다음 안내를 따르세요.

    1. Google Cloud 콘솔의 탐색 패널에서 Logging을 선택한 후 로그 탐색기를 선택합니다.

      로그 탐색기로 이동

    2. 쿼리 결과 창의 헤더에서 작업 메뉴를 선택하고 알림 관리를 선택합니다.

  • Monitoring에서 이동하려면 다음 안내를 따르세요.

    1. Google Cloud 콘솔의 탐색 패널에서 Monitoring을 선택한 후  알림을 선택합니다.

      알림으로 이동

    2. 모든 정책을 보고 필터링을 사용 설정하려면 정책 창에서 모든 정책 보기를 클릭합니다.

두 작업 모두 Google Cloud 프로젝트의 모든 알림 정책을 나열하는 Monitoring 정책 페이지로 이동합니다.

나열된 알림 정책을 제한하려면 필터를 추가합니다. 각 필터는 이름과 값으로 구성됩니다. 예를 들어 이 값을 정책 이름과 정확히 일치하거나 부분적으로 일치하도록 설정할 수 있습니다. 일치 항목은 대소문자를 구분하지 않습니다. 여러 필터를 지정하는 경우 OR 필터를 삽입하지 않는 한 논리적 AND로 필터가 암시적으로 조인됩니다. 다음은 2021년 1월 1일 이후에 생성되고 사용 설정된 알림 정책을 보여주는 스크린샷입니다.

2021년 1월 1일 이후에 생성되고 사용 설정된 알림 정책 목록

정책 페이지에서 알림 정책을 수정, 삭제, 복사, 사용 설정 또는 사용 중지할 수 있습니다.

  • 정책을 수정하거나 복사하려면 옵션 더보기를 클릭하고 옵션을 선택합니다. 정책 수정 및 복사는 로그 기반 알림 정책 만들기에 설명된 절차와 비슷합니다. 필드의 값을 변경하고 경우에 따라 값을 삭제할 수 있습니다. 완료되면 저장을 클릭합니다.

    또한 정책 목록에서 알림 정책 이름을 클릭하여 로그 기반 알림 정책을 수정할 수도 있습니다.

  • 정책을 삭제하려면 옵션 더보기 를 클릭하고 삭제를 선택합니다. 확인 대화상자에서 삭제를 선택합니다.

  • 알림 정책을 사용 설정 또는 중지하려면 사용 설정됨 제목 아래에 있는 전환 버튼을 클릭합니다.

Monitoring API를 사용하여 로그 기반 알림 정책 만들기

Monitoring API를 사용하여 로그 기반 알림을 만들 수 있습니다. Google Cloud 콘솔에서 로그 탐색기를 사용할 때 제공하는 것과 동일한 정보를 Monitoring API에 제공합니다.

  • 알림의 이름과 설명
  • 알림을 수신할 로그
  • 알림 사이의 시간
  • 이슈 자동 종료 시간
  • 알림을 보낼 사용자

Monitoring API를 사용하여 알림 정책을 만들려면 AlertPolicy 객체를 만들고, 이를 alertPolicies.create 메서드에 제출합니다.

Monitoring API를 사용하려면 먼저 API를 사용 설정하고 사용 승인을 받아야 합니다. 자세한 내용은 다음 문서를 참조하세요.

알림 정책의 구조

Monitoring API는 AlertPolicy 구조를 사용하여 알림 정책을 나타냅니다. AlertPolicy 구조에는 알림을 트리거하는 조건에 대한 설명을 포함하여 삽입된 구조가 여러 개 있습니다. 로그 기반 알림 정책은 측정항목 기반 알림 정책과 다음과 같은 점에서 차이가 있습니다.

  • LogMatch 조건 유형을 사용하여 조건을 설명합니다. 측정항목 기반 알림 정책은 서로 다른 조건 유형을 사용합니다.
  • 로그 기반 알림 정책은 하나의 조건만 가질 수 있습니다.
  • AlertStrategy 구조를 포함하여 알림과 자동 이슈 종료 기간 사이의 시간을 지정합니다. 측정항목 기반 알림 정책에는 알림 시간 간격이 포함되지 않습니다.

이 섹션에서는 로그 기반 알림 정책을 만드는 방법을 설명합니다. 이러한 정책은 사용하는 조건 유형에서의 측정항목 기반 알림 정책과 다릅니다. 로그 기반 알림의 경우 조건 유형은 LogMatch입니다. Monitoring API를 사용하여 알림 정책을 관리할 때 측정항목 및 로그 기반 정책을 나열, 수정, 삭제하는 방법에는 차이가 없습니다. API를 통한 알림 정책 관리에서는 Monitoring API를 사용하여 알림 정책을 생성, 나열, 수정, 삭제하는 방법에 대해 설명합니다.

알림 정책 설계

로그 탐색기를 사용하여 로그 기반 알림 정책 만들기 섹션에서는 로그 기반 알림을 만드는 한 가지 방법을 설명합니다. 이 섹션에서는 syslog 로그 항목의 심각도 수준이 NOTICE이고 jsonPayload.result 필드에 유효하지 않은 IPv4 주소가 있을 때 알려주는 로그 기반 알림 정책을 만드는 방법을 보여줍니다.

Monitoring API를 사용하여 동일한 로그 기반 알림 정책을 만들려면 다음 JSON 구조와 유사한 AlertPolicy 객체를 만드세요.

{
  "displayName": "Network address: invalid IPv4 value (API)",
  "documentation": {
    "content": "Log-based alerting policy in project ${project} detected an invalid IPv4 value.",
    "mimeType": "text/markdown"
  },

  "conditions": [
    {
      "displayName": "Log match condition: invalid IP addr (API)",
      "conditionMatchedLog": {
        "filter": "log_id(\"syslog\") severity = \"NOTICE\" jsonPayload.result !~ \"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\\.|$)){4}$\"",
      },
    }
  ],
  "combiner": "OR",

  "alertStrategy": {
    "notificationRateLimit": {
      "period": "300s"
    },
    "autoClose": "604800s",
  },

  "notificationChannels": [
    "projects/PROJECT_ID/notificationChannels/CHANNEL_ID"
  ]
}

이 JSON 코드는 로그 탐색기를 사용하여 로그 기반 알림 정책을 생성할 때 지정하는 것과 동일한 정보를 지정합니다. 다음 섹션에서는 이 AlertPolicy 구조의 내용을 로그 탐색기를 사용하여 로그 기반 알림을 만들 때 따라야 하는 단계에 매핑합니다. conditionMatchedLog 필드 값은 LogMatch 구조입니다.

이름 및 설명 입력

알림 정책에는 응답자를 지원하기 위해 알림과 함께 표시되는 표시 이름 및 관련 문서가 있습니다. 로그 탐색기에서는 이러한 필드를 알림 이름알림 설명이라고 부릅니다. 이러한 값을 AlertPolicy 구조로 표현하면 다음과 같습니다.

{
  "displayName": "Network address: invalid IPv4 value (API)",
  "documentation": {
    "content": "Log-based alerting policy in project ${project} detected an invalid IPv4 value.",
    "mimeType": "text/markdown"
  },
  ...
}

이 예시에서 displayName의 값에는 '(API)'가 포함됩니다. 따라서 Google Cloud 콘솔에서 정책 목록을 볼 때 이 두 개의 예시 정책을 서로 구분할 수 있습니다. 모니터링 정책 페이지에서는 표시 이름별로 정책이 나열되고 정책이 측정항목 또는 로그를 기반으로 하는지 여부가 표시됩니다. 자세한 내용은 모니터링에서 로그 기반 알림 관리를 참조하세요.

documentation 필드에는 content 하위 필드에 로그 탐색기를 사용할 때 제공할 수 있는 설명이 포함됩니다. documentation 필드의 값을 지정하는 경우, 두 번째 하위 필드인 mimeType가 필요합니다. 유일한 유효 값은 "text/markdown"입니다.

알림을 수신할 로그 선택

로그 기반 알림 정책에는 한 개 조건이 포함됩니다. 로그 탐색기에서 알림을 표시할 로그 항목 정의 필드에 쿼리를 제공할 때 조건을 지정하세요. 이러한 값을 AlertPolicy 구조로 표현하면 다음과 같습니다.

{ ...
  "conditions": [
    {
      "displayName": "Log match condition: invalid IP addr (API)",
      "conditionMatchedLog": {
        "filter": "log_id(\"syslog\" severity = \"NOTICE\" jsonPayload.result !~ \"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\\.|$)){4}$\"",
      },
    }
  ],
  "combiner": "OR",
  ...
}

conditions 필드는 Condition 구조의 목록을 사용합니다. 하지만 로그 기반 알림 정책에는 조건이 한 개만 있어야 합니다. 각 Condition에는 표시 이름과 조건에 대한 설명이 있습니다.

  • displayName 필드 값은 조건에 대한 간단한 설명입니다. 로그 탐색기를 사용하여 로그 기반 알림을 만들 때 표시 이름은 언제나 '로그 일치 조건'입니다. Monitoring API를 사용할 때 표시 이름을 더 정확하게 제공할 수 있습니다. 값은 필수 항목입니다.

  • conditionMatchedLog 필드 값은 LogMatch 구조이고 filter 필드 값은 로그 탐색기에서 지정한 쿼리입니다. 이 쿼리는 JSON 필드의 값으로 제공되므로 전체 쿼리는 따옴표로 묶이고 쿼리 자체의 따옴표를 \(백슬래시) 문자로 이스케이프해야 합니다.

  • LogMatch 구조에는 선택적 labelExtractors 필드도 포함됩니다. 라벨 추출기를 사용하여 로그 항목에서 커스텀 라벨을 작성한 후 알림에서 해당 라벨을 참조할 수 있습니다.

    예를 들어 로그 항목에서 labels."compute.googleapis.com/resource_id" 라벨 값을 vm_identifier라는 라벨로 추출하려면 이전 조건은 다음과 같을 수 있습니다.

    "conditions": [
      {
        "displayName": "Log match condition: invalid IP addr (API)",
        "conditionMatchedLog": {
          "filter": "log_id(\"syslog\" severity = \"NOTICE\" jsonPayload.result !~ \"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\\.|$)){4}$\"",
          "labelExtractors": {
            "vm_identifier": "EXTRACT(labels.\"compute.googleapis.com/resource_id\")"
          }
        },
      }
    ],
    

    EXTRACT 함수를 사용하여 전체 값을 일치시키거나 REGEXP_EXTRACT를 사용하여 정규 표현식에 따라 하위 문자열을 일치시킵니다. 이는 로그 기반 측정항목의 라벨 추출에 사용되는 함수와 동일한 함수입니다. 자세한 내용은 라벨 만들기를 참조하세요.

    알림 정책 문서에서 추출된 라벨을 사용할 수 있습니다. 그러면 추출된 라벨이 알림에 보고됩니다. 알림 정책의 documentation 필드에서 ${log.extracted_label.KEY} 형식 변수를 사용하여 추출된 라벨을 참조합니다. 여기서 KEY는 추출된 라벨의 이름입니다.

    다음 예시에서는 로그 라벨 labels."compute.googleapis.com/resource_id" 값이 알림에 포함되도록 추출된 라벨 vm_identifier의 키를 참조하는 방법을 보여줍니다.

    "documentation": {
      "content": "Log-based alerting policy in project ${project} detected an
       invalid IPv4 value on VM with ID ${log.extracted_label.vm_identifier}.",
      "mimeType": "text/markdown"
    },
    

combiner 필드의 값은 측정항목에 기반한 알림 정책에서 여러 조건의 결과를 결합하는 방법을 지정합니다. 로그 기반 알림에서는 하나의 조건만 사용할 수 있으며 combiner 필드를 "OR" 값으로 지정해야 합니다. 여러 개의 조건으로 로그 기반 알림을 만들 수 없습니다.

알림 및 자동 종료 값 설정

로그 기반 알림 정책은 최소 알림 시간 간격을 지정합니다. 로그 탐색기의 알림 시간 간격 메뉴에서 값을 선택합니다. AlertStrategy 구조에 삽입된 NotificationRateLimit 구조의 period 필드에 AlertPolicy 구조로 초 단위의 값을 지정하여 이 값을 표현합니다.

마찬가지로 알림 정책에는 이슈 자동 종료를 위한 기간이 포함됩니다. 기본값은 7일입니다. 로그 탐색기에서는 이슈 자동 종료 기간 메뉴에서 다른 값을 선택할 수 있습니다. 이 옵션은 AlertStrategy API 구조의 autoclose 필드에 해당합니다. 이 필드를 사용할 때는 초 단위로 값을 지정합니다. 최솟값은 1,800초, 즉 30분입니다.

{ ...
  "alertStrategy": {
    "notificationRateLimit": {
      "period": "300s"
    },
    "autoClose": "604800s",
  },
  ...
}

이 예시의 period 필드 값 300s는 5분과 동일합니다. autoclose604800s는 7일에 해당합니다.

알림을 보낼 대상 지정

알림 정책에는 알림 채널 목록이 포함될 수 있습니다. 로그 탐색기의 메뉴에서 채널을 선택합니다. 구성된 NotificationChannel 객체에 대한 하나 이상의 리소스 이름 목록을 제공하여 AlertPolicy 구조에서 이러한 값을 나타냅니다.

{ ...
  "notificationChannels": [
    "projects/PROJECT_ID/notificationChannels/CHANNEL_ID"
  ]
}

알림 채널을 만들면 리소스 이름이 할당됩니다. 리소스 이름을 포함하여 사용 가능한 알림 채널 목록을 검색하는 방법에 대한 자세한 내용은 모니터링 문서에서 채널 검색을 참조하세요. Google Cloud 콘솔을 사용하여 채널 ID를 가져올 수 없습니다.

Monitoring API에 알림 정책 보내기

Monitoring API를 사용하여 알림 정책을 만들려면 AlertPolicy 객체를 만든 뒤에 이를 alertPolicies.create 메서드에 제출합니다. Google Cloud CLI를 사용하고 Monitoring API를 직접 호출하여 alertPolicies.create를 호출할 수 있습니다.

C#, Go, 자바, Python 및 Ruby용 클라이언트 라이브러리를 사용하여 로그 기반 알림을 만들 수도 있습니다. 다른 클라이언트 라이브러리를 사용할 수도 있습니다. 해당 언어의 라이브러리에 LogMatch 조건 유형이 포함되어야 합니다.

gcloud CLI를 사용하여 알림 정책을 만들려면 다음 단계별 안내를 따르세요.

  1. 알림 정책의 JSON 표현을 텍스트 파일(예시: alert-invalid-ip.json 파일)에 배치합니다.

  2. 다음 명령어를 사용하여 이 JSON 파일을 gcloud CLI에 전달합니다.

    gcloud alpha monitoring policies create --policy-from-file="alert-invalid-ip.json"
    
  3. 성공할 경우 이 명령어는 다음과 같은 새 정책의 리소스 이름을 반환합니다.

    Created alerting policy [projects/PROJECT_ID/alertPolicies/POLICY_ID].
    

alertPolicies.create를 직접 호출하여 알림 정책을 만들려면 API 탐색기 도구를 다음과 같이 사용합니다.

  1. alertPolicies.create 참조 페이지로 이동하세요.

  2. API 사용해 보기 창에서 다음을 수행합니다.

    1. name 필드에 다음 값을 입력합니다.

      projects/PROJECT_ID
      
    2. 알림 정책의 JSON 표현을 복사하고 API 탐색기에서 요청 본문 필드의 콘텐츠를 복사된 알림 정책으로 바꿉니다.

    3. 실행을 클릭합니다.

      alertPolicies.create 호출이 성공하면 HTTP 200 응답 코드와 빈 응답 본문 {}가 표시됩니다. API 탐색기에 대한 상세 내용은 Monitoring 문서의 API 탐색기 사용을 참조하세요.

Monitoring API를 사용하여 알림 정책을 만드는 방법에 대한 자세한 내용은 정책 만들기를 참조하세요. 이 문서의 예시에서는 측정항목 기반 알림 정책용 조건 유형을 사용하지만 원칙은 동일합니다.

알림 정책 테스트

새 알림 정책을 테스트하려면 예시 로그 기반 알림 테스트에 설명된 것과 동일한 절차를 사용하면 됩니다.

예시: 로그 항목에 텍스트 문자열이 포함된 경우 알림 정책 만들기

이 예시에서는 Google Cloud 콘솔을 사용하여 알림 정책, 로그 항목을 보기 위한 로그 탐색기, 로그 항목을 작성할 Google Cloud CLI를 만듭니다.

  1. Google Cloud 콘솔의 탐색 패널에서 Logging을 선택한 후 로그 탐색기를 선택합니다.

    로그 탐색기로 이동

  2. 쿼리 창에서 PROJECT_ID 값을 업데이트한 후 다음 쿼리를 입력합니다.

    logName="projects/PROJECT_ID/logs/test-log"
    textPayload:"Oops"
    

    이 쿼리는 test-log라는 이름의 로그에서 'Oops' 문자열이 포함된 textPayload 필드를 가진 로그 항목을 검색합니다.

  3. 알림 만들기를 클릭하고 대화상자를 완료합니다. Alert on Oops와 같이 정책의 이름을 입력해야 합니다. 이전 단계에서 입력한 쿼리가 알림 정책에 자동으로 포함됩니다.

  4. 알림 정책을 테스트하려면 Cloud Shell을 열고 다음 명령어를 실행합니다.

    gcloud logging write test-log --severity=ERROR --payload-type=text 'This log entry contains Oops'
    

    이전 명령어는 test-log라는 로그에 항목을 작성합니다. 항목의 심각도 수준은 ERROR이며 textPayload 필드를 포함합니다.

  5. 로그 탐색기에서 쿼리 실행을 클릭합니다.

    화면이 새로고침되면 이전 단계에서 작성한 로그 항목의 세부정보를 확인할 수 있습니다.

  6. 알림을 보려면 탐색창에서 모니터링을 선택한 후 알림을 선택합니다. 이슈 창에는 알림 정책에 대한 이슈와 세부정보가 표시됩니다.

    알림 페이지를 열 때 이슈가 표시되지 않으면 몇 분 정도 기다린 후 페이지를 새로고침합니다.

Google Cloud CLI 명령어를 즉시 반복하면 다른 이슈가 표시되지 않거나 다른 알림이 표시되지 않습니다. 알림 정책 설정은 이슈 간의 최소 기간을 지정합니다. 정책을 수정하여 이러한 설정을 보고 변경할 수 있습니다.