파서 확장 프로그램 및 커스텀 파서의 로그 검증 우회

다음에서 지원:

커스텀 파서 및 파서 확장 프로그램 검증 프로세스는 일반적으로 기능적 무결성을 보장하기 위해 지난 30일간의 샘플 로그에 대해 엄격한 검사를 적용합니다. 그러나 지난 30일 동안 로그가 수집되지 않았거나 현재 로그에 아직 새 형식이 반영되지 않은 경우와 같이 검증 실패에도 불구하고 고객이 확장 프로그램을 배포해야 하는 시나리오가 있습니다.

이 문서에서는 파서 확장 프로그램 및 커스텀 파서의 필수 로그 검증을 우회하는 API 기반 워크플로를 간략하게 설명합니다.

구성요소 정의
API 메서드 CreateParserExtension (확장 프로그램용) 또는 CreateParser (커스텀 파서용)
우회 플래그 validation_skipped
플래그 유형 불리언 (기본값: false)
범위 ParserExtension 프로토 (확장 프로그램용) 및 Parser 프로토 (커스텀 파서용)

검증을 건너뛰면 파서가 validation_skipped 상태로 표시됩니다. 비동기 작업이므로 Create API에 대한 초기 호출은 새 상태를 표시합니다. 그러나 후속 Get API 요청은 처리된 후 validation_skipped 상태를 반영합니다.

API 실행

validation_skipped 플래그를 사용 설정한 상태로 관련 Create API 호출을 실행합니다. 이 플래그를 사용하면 고객 및 로그 유형에 대해 로그가 전혀 수집되지 않은 경우에도 커스텀 파서 또는 확장 프로그램을 활성화할 수 있습니다.

파서 확장 프로그램의 API 예시

  • CreateParserExtension 요청

    parent:    "projects/dummy/locations/us/instances/dummy/logTypes/dummy"
    parser_extension {
      cbn_snippet: "# Author:dummy@google.com\n# Note: Pls don\'t delete or update.\n\nfilter {\n  mutate {\n    convert => {\n      \"message\" => \"integer\"\n    }\n  }\n   mutate {\n    merge => {\n      \"@output\" => \"event\"\n    }\n  }\n}"
      validation_skipped: true
    }
    
  • CreateParserExtension 응답

    google.cloud.chronicle.v1main.ParserExtension { # [619B]
    name: "projects/dummy/locations/us/instances/dummy/logTypes/dummy/parserExtensions/dummy"
    state: NEW
    create_time: { # [12B]
    seconds: 1775133417
    nanos: 697098000
    }
    cbn_snippet: "# Author:dummy@google.com\n# Note: Pls don\'t delete or update.\n\nfilter {\n  mutate {\n    convert => {\n      \"message\" => \"integer\"\n    }\n  }\n   mutate {\n    merge => {\n      \"@output\" => \"event\"\n    }\n  }\n}"
    extension_validation_report:
    "projects/dummy/locations/us/instances/dummy/logTypes/dummy/parserExtensions/dummy/extensionValidationReports/dummy"
    validation_skipped: true
    }
    
  • GetParserExtension 요청

    name: "projects/dummy/locations/us/instances/dummy/logTypes/dummy/parserExtensions/dummy"
    
  • GetParserExtension 응답

    google.cloud.chronicle.v1main.ParserExtension { # [862B]
    name: "projects/dummy/locations/us/instances/dummy/logTypes/dummy/parserExtensions/dummy"
    state: VALIDATION_SKIPPED
    create_time: { # [12B]
    seconds: 1775133417
    nanos: 697098000
    }
    cbn_snippet: "# Author:dummy@google.com\n# Note: Pls don\'t delete or update.\n\nfilter {\n  mutate {\n    convert => {\n      \"message\" => \"integer\"\n    }\n  }\n   mutate {\n    merge => {\n      \"@output\" => \"event\"\n    }\n  }\n}"
    extension_validation_report: 
    "projects/dummy/locations/us/instances/dummy/logTypes/dummy/parserExtensions/dummy/extensionValidationReports/dummy"
    validation_report:"projects/dummy/locations/us/instances/dummy/logTypes/dummy/parserExtensions/dummy/validationReports/dummy"
    state_last_changed_time: { # [12B]
    seconds: 1775133417
    nanos: 976250000
    }
    last_live_time: { # [11B]
    seconds: 1775133418
    nanos: 189172000
    }
    validation_skipped: true
    }
    

파서 확장 프로그램을 만든 후 ActivateParserExtension 메서드를 사용하여 배포할 수 있습니다.

커스텀 파서의 API 예시

  • CreateParser 요청

    parent: "projects/dummy/locations/us/instances/dummy/logTypes/dummy"
    parser: { # [260B]
    cbn: "# Author: dummy@google.com\n# Note: Pls don\'t delete or update. This is used by normalizer custom prober.\n\nfilter {\n  mutate {\n    convert => {\n      \"message\" => \"integer\"\n    }\n  }\n   mutate {\n    merge => {\n      \"@output\" => \"event\"\n    }\n  }\n}"
    validation_skipped: true
    }
    
  • CreateParser 응답

    google.cloud.chronicle.v1main.Parser { # [489B]
    name: "projects/dummy/locations/us/instances/dummy/logTypes/dummy/parsers/dummy"
    creator: { # [85B]
    customer:"projects/dummy/locations/us/instances/dummy"
    source: CUSTOMER
    }
    cbn: "# Author: dummy@google.com\n# Note: Pls don\'t delete or update. This is used by normalizer custom prober.\n\nfilter {\n  mutate {\n    convert => {\n      \"message\" => \"integer\"\n    }\n  }\n   mutate {\n    merge => {\n      \"@output\" => \"event\"\n    }\n  }\n}"
    changelogs: { # [0B]
    }
    validation_stage: NEW
    type: CUSTOM
    state: INACTIVE
    validation_skipped: true
    }
    
  • GetParser 요청

    name: "projects/dummy/locations/us/instances/dummy/logTypes/dummy/parsers/dummy"
    
  • GetParser 응답

    name: "projects/dummy/locations/us/instances/dummy/logTypes/dummy/parsers/dummy"
    creator: { # [85B]
    customer:"projects/dummy/locations/us/instances/dummy"
    source: CUSTOMER
    }
    cbn: "# Author:dummy@google.com\n# Note: Pls don\'t delete or update. This is used by normalizer custom prober.\n\nfilter {\n  mutate {\n    convert => {\n      \"message\" => \"integer\"\n    }\n  }\n   mutate {\n    merge => {\n      \"@output\" => \"event\"\n    }\n  }\n}"
    create_time: { # [12B]
    seconds: 1775135466
    nanos: 795092000
    }
    changelogs: { # [0B]
    }
    validation_stage: VALIDATION_SKIPPED
    type: CUSTOM
    state: INACTIVE
    validation_report:"projects/dummy/locations/us/instances/dummy/logTypes/dummy/parsers/dummy/validationReports/dummy"
    

커스텀 파서를 만든 후 ActivateParser 메서드를 사용하여 배포할 수 있습니다.

거부 기준 및 위험

  • validation_skipped 플래그를 사용하면 사용자가 샘플 로그에 대한 검사를 우회할 수 있지만 손상된 코드를 배포할 수는 없습니다. 확장 프로그램 또는 파서 코드에 구문 관련 오류가 포함되어 있는 경우 확장 프로그램 또는 커스텀 파서는 여전히 거부됩니다. 건너뛰기 옵션은 확장 프로그램이 구문적으로 올바르지만 파싱 로직 또는 로그 부족으로 인해 실패하는 경우에만 실행 가능합니다.

  • validation_skipped 플래그로 인해 시스템 문제 또는 성능 회귀가 발생하는 경우 Google 내부 엔지니어링팀에서 비활성화할 수 있습니다.

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.