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 consiste généralement à effectuer une vérification rigoureuse des journaux d'exemple des 30 jours précédents pour garantir l'intégrité fonctionnelle. Toutefois, il existe des scénarios dans lesquels les clients peuvent avoir besoin de déployer une extension malgré des é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 de contourner 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 de signalement 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 afficheront un nouvel état. Toutefois, les requêtes Get API suivantes refléteront l'état validation_skipped une fois traitées.

Exécution d'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

  • Demande 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
    }
    
  • Demande 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 que vous avez créé les extensions d'analyseur, vous pouvez les déployer à l'aide de la méthode ActivateParserExtension.

Exemples d'API pour les analyseurs personnalisés

  • Demande 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
    }
    
  • Demande 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 que vous avez créé les analyseurs personnalisé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 de contourner les vérifications par rapport aux journaux d'échantillon, il ne permet pas le déploiement de code défectueux. Une extension ou un analyseur personnalisé est toujours refusé si son code contient des erreurs de syntaxe. L'option "Ignorer" n'est viable que si l'extension est syntaxiquement correcte, mais qu'elle é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 de membres de la communauté et de professionnels Google SecOps.