Protokollvalidierung für Parsererweiterungen und benutzerdefinierte Parser umgehen

Unterstützt in:

Bei der Validierung von benutzerdefinierten Parsern und Parsererweiterungen wird in der Regel eine strenge Überprüfung anhand von Beispielprotokollen aus den letzten 30 Tagen durchgeführt, um die funktionale Integrität zu gewährleisten. Es gibt jedoch Szenarien, in denen Kunden eine Erweiterung trotz Validierungsfehlern bereitstellen müssen, z. B. wenn in den letzten 30 Tagen keine Protokolle aufgenommen wurden oder wenn aktuelle Protokolle noch kein neues Format aufweisen.

In diesem Dokument wird der API-basierte Workflow zum Umgehen der obligatorischen Protokollvalidierung für Parsererweiterungen 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 für den Parser der Status validation_skipped angezeigt. Da es sich um einen asynchronen Vorgang handelt, wird bei ersten Aufrufen der Create API ein neuer Status angezeigt. Nachfolgende Get API-Anfragen geben jedoch nach der Verarbeitung den Status validation_skipped zurück.

API-Ausführung

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

API-Beispiele für Parsererweiterungen

  • 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
    }
    
  • CreateParserExtension-Antwort

    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"
    
  • GetParserExtension-Antwort

    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
    }
    
  • CreateParser-Antwort

    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"
    
  • GetParser-Antwort

    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 Risiko

  • Mit dem Flag validation_skipped können Nutzer zwar Überprüfungen anhand von Beispielprotokollen umgehen, aber keinen fehlerhaften Code bereitstellen. Eine Erweiterung oder ein benutzerdefinierter Parser wird weiterhin abgelehnt, wenn der Code der Erweiterung oder des Parsers Syntaxfehler enthält. Die Option zum Überspringen ist nur sinnvoll, wenn die Erweiterung syntaktisch korrekt ist, aber aufgrund der Parserlogik oder fehlender Protokolle nicht funktioniert.

  • 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