Ignorer la validation des journaux pour les extensions d'analyseur et les analyseurs personnalisés

Compatible avec :

Le processus de validation des analyseurs personnalisés et des extensions d'analyseur effectue généralement une vérification rigoureuse par rapport aux exemples de journaux des 30 jours précédents pour garantir l'intégrité fonctionnelle. Toutefois, dans certains cas, les clients peuvent avoir besoin de déployer une extension malgré les échecs de validation, par exemple lorsqu'aucun journal n'a été ingéré au cours des 30 derniers jours ou lorsque les journaux actuels ne reflètent pas encore un nouveau format.

Ce document décrit le workflow basé sur l'API permettant d'ignorer la validation obligatoire des journaux pour les extensions d'analyseur et les analyseurs personnalisés.

Composant Définition
Méthode API CreateParserExtension (pour les extensions) ou CreateParser (pour les analyseurs personnalisés)
Indicateur de contournement validation_skipped
Type d'indicateur Booléen (par défaut : false)
Champ d'application Proto ParserExtension (pour les extensions) et proto Parser (pour les analyseurs personnalisés)

Lorsque vous ignorez la validation, l'analyseur affiche l'état validation_skipped. Comme il s'agit d'une opération asynchrone, les appels initiaux à l'API Create affichent un nouvel état. Toutefois, les requêtes Get API suivantes reflètent l'état validation_skipped une fois le traitement effectué.

Exécution de l'API

Exécutez l'appel d'API Create approprié avec l'indicateur validation_skipped activé. Vous pouvez utiliser cet indicateur et activer l'analyseur personnalisé ou l'extension, même si aucun journal n'a été ingéré pour le client et le type de journal.

Exemples d'API pour les extensions d'analyseur

  • Requête 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
    }
    
  • Réponse 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
    }
    
  • Requête GetParserExtension

    name: "projects/dummy/locations/us/instances/dummy/logTypes/dummy/parserExtensions/dummy"
    
  • Réponse 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
    }
    

Une fois les extensions d'analyseur créées, vous pouvez les déployer à l'aide de la méthode ActivateParserExtension.

Exemples d'API pour les analyseurs personnalisés

  • Requête 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
    }
    
  • Réponse 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
    }
    
  • Requête GetParser

    name: "projects/dummy/locations/us/instances/dummy/logTypes/dummy/parsers/dummy"
    
  • Réponse 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"
    

Une fois les analyseurs personnalisés créés, vous pouvez les déployer à l'aide de la méthode ActivateParser.

Critères de refus et risques

  • Bien que l'indicateur validation_skipped permette aux utilisateurs d'ignorer les vérifications par rapport aux exemples de journaux, il ne permet pas de déployer du code défectueux. Une extension ou un analyseur personnalisé est toujours refusé si le code de l'extension ou de l'analyseur contient des échecs liés à la syntaxe. L'option d'ignorance n'est viable que si l'extension est syntaxiquement correcte, mais échoue en raison de la logique d'analyse ou du manque de journaux.

  • Si un indicateur validation_skipped entraîne des problèmes système ou des régressions de performances, il peut être désactivé par les équipes d'ingénierie internes de Google.

Vous avez encore besoin d'aide ? Obtenez des réponses auprès des membres de la communauté et des professionnels Google SecOps.