Logging 쿼리 언어 문제 해결

이 문서에서는 Logging 쿼리 언어를 사용할 때 발생할 수 있는 일반적인 문제에 대해 설명합니다.

구문 문제

쿼리의 표현식에 문제가 있는 경우 다음 사항을 확인해 보세요.

  • 쿼리가 문법 규칙을 준수하며 괄호와 따옴표가 제대로 되어 있습니다.

  • 로그 항목 필드 이름의 철자가 올바릅니다.

  • 불리언 연산이 대문자로 되어 있습니다(AND, OR, NOT).

  • JSON null 값을 나타내기 위해 [NULL_VALUE][json-null]을 사용 중인지 확인하세요.

  • 전역 제한 형태의 불리언 표현식 또는 비교의 오른쪽에 있는 불리언 표현식은 괄호로 묶어서 명확하게 구분하는 것이 좋습니다. 예를 들어 다음 두 쿼리는 같아 보이지만 다릅니다.

    insertId = "ABC-1" OR "ABC-2"  -- ERROR!?
    insertId = ("ABC-1" OR "ABC-2")
    
  • 따옴표로 묶여 있지 않은 텍스트에 특수문자가 있어서는 안 됩니다. 확실하지 않다면 큰따옴표를 추가하세요. 예를 들어 다음에서 첫 번째 비교는 하위 문자열 연산자(:)가 삽입되어 있으므로 잘못되었습니다. 비교는 따옴표로 묶어서 작성해야 합니다.

    insertId = abc:def  -- ILLEGAL!
    insertId = "abc:def"
    
  • Google Cloud CLI에서는 쿼리를 큰따옴표로 묶어야 합니다. gcloud logging 명령어를 사용하여 특수문자를 이스케이프하는 큰 따옴표를 사용하려면 전체 쿼리를 작은따옴표로 묶으세요.

    gcloud logging read 'resource.type=gce_instance AND jsonPayload.message="Stopped Unattended Upgrades Shutdown."'
    gcloud logging read 'timestamp>="2020-06-17T21:00:00Z"'
    

  • Any 메시지 유형과 연결된 필드를 필터링하면 value 필드가 자동으로 순회됩니다. 따라서 쿼리에 value를 포함하지 마세요.

    예를 들어 AuditLog 메시지의 Status 필드에는 google.protobuf.Any 유형의 details 필드가 있습니다. details 필드를 쿼리하려면 필터를 지정할 때 value 필드를 생략합니다.

    • 권장사항

      protoPayload.status.details.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"
      
    • 금지사항

      protoPayload.status.details.value.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"