Log-Validierung für Parser-Erweiterungen und benutzerdefinierte Parser umgehen

Unterstützt in:

Bei der Validierung des benutzerdefinierten Parsers und der Parsererweiterung werden in der Regel Beispielprotokolle der letzten 30 Tage gründlich geprüft, um die funktionale Integrität sicherzustellen. Es gibt jedoch Szenarien, in denen Kunden eine Erweiterung trotz Validierungsfehlern bereitstellen müssen, z. B. wenn in den letzten 30 Tagen keine Logs erfasst wurden oder wenn aktuelle Logs noch kein neues Format widerspiegeln.

In diesem Dokument wird der API-basierte Workflow zum Umgehen der obligatorischen Log-Validierung für Parser-Erweiterungen und benutzerdefinierte Parser beschrieben.

Komponente Definition
API-Methode CreateParserExtension (für Erweiterungen) oder CreateParser (für benutzerdefinierte Parser)
Umgehungsflag validation_skipped
Flag-Typ Boolesch (Standard: „false“)
Umfang ParserExtension-Proto (für Erweiterungen) und Parser-Proto (für benutzerdefinierte Parser)

Wenn Sie die Validierung überspringen, wird der Parser mit dem Status validation_skipped angezeigt. Da es sich um einen asynchronen Vorgang handelt, wird bei ersten Aufrufen der Create API ein neuer Status angezeigt. Bei nachfolgenden Get API-Anfragen wird der Status validation_skipped jedoch nach der Verarbeitung berücksichtigt.

API-Ausführung

Führen Sie den entsprechenden Create API-Aufruf mit aktiviertem validation_skipped-Flag aus. Sie können dieses Flag verwenden, um den benutzerdefinierten Parser oder die benutzerdefinierte Erweiterung zu aktivieren, auch wenn für den Kunden und den Logtyp noch keine Logs erfasst wurden.

API-Beispiele für Parser-Erweiterungen

  • CreateParserExtension Anfrage

    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
    }
    
  • Antwort für 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 Anfrage

    name: "projects/dummy/locations/us/instances/dummy/logTypes/dummy/parserExtensions/dummy"
    
  • Antwort für 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
    }
    

Nachdem Sie die Parsererweiterungen erstellt haben, können Sie sie mit der Methode ActivateParserExtension bereitstellen.

API-Beispiele für benutzerdefinierte Parser

  • CreateParser Anfrage

    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
    }
    
  • Antwort für 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 Anfrage

    name: "projects/dummy/locations/us/instances/dummy/logTypes/dummy/parsers/dummy"
    
  • Antwort für 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"
    

Nachdem Sie die benutzerdefinierten Parser erstellt haben, können Sie sie mit der Methode ActivateParser bereitstellen.

Ablehnungskriterien und Risiken

  • Mit dem Flag validation_skipped können Nutzer zwar Prüfungen anhand von Beispielprotokollen umgehen, aber es ist nicht möglich, fehlerhaften Code bereitzustellen. Eine Erweiterung oder ein benutzerdefinierter Parser wird weiterhin abgelehnt, wenn der Code der Erweiterung oder des Parsers Syntaxfehler enthält. Die Option „Überspringen“ ist nur sinnvoll, wenn die Erweiterung syntaktisch korrekt ist, aber aufgrund der Parsing-Logik oder fehlender Logs fehlschlägt.

  • Wenn ein validation_skipped-Flag Systemprobleme oder Leistungseinbußen verursacht, kann es von den internen Engineering-Teams von Google deaktiviert werden.

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten