Créer un programme pour exécuter automatiquement une interrogation de recherche enregistrée

Après avoir créé une recherche enregistrée, vous pouvez programmer l'exécution périodique de l'interrogation dans la recherche enregistrée et acheminer le résultat de l'exécution de l'interrogation vers le service de surveillance.

Autres sujets pour les tâches programmées :

Les étapes suivantes sont présentées avec le service de surveillance comme cible de la surveillance de la tâche programmée. Les mesures générées par Oracle Logging Analytics sont stockées par le service de surveillance.

  1. Ouvrez le menu de navigation et cliquez sur Observabilité et gestion. Sous Logging Analytics, cliquez sur Administration. La page Aperçu de l'administration s'ouvre.

    Les ressources d'administration sont répertoriées dans le volet de navigation de gauche sous Ressources. Cliquez sur Règles de détection.

    La page Règles de détection s'ouvre. Cliquez sur Créer une règle.

    La boîte de dialogue Créer une règle de détection s'ouvre.

  2. Cliquez sur Règle de détection de recherche programmée.

  3. Spécifiez un nom de règle pour la tâche programmée.

  4. Sous Sélectionner une recherche enregistrée :

    Spécifiez la recherche enregistrée pour laquelle vous souhaitez créer une programmation. Sélectionnez d'abord le compartiment dans lequel la recherche enregistrée est enregistrée.

    Ensuite, dans le menu, sélectionnez la recherche enregistrée.

    Affiche les détails de la recherche enregistrée tels que l'interrogation et sa description.

  5. Sous Fréquence de configuration :

    Spécifiez l'intervalle, soit la fenêtre d'agrégation. Vous pouvez optimiser la programmation à exécuter selon les minutes, heures, jours ou semaines sélectionnés. En outre, lorsque vous sélectionnez des agrégations plus importantes, par exemple des jours, vous pouvez spécifier l'agrégation la plus fine dans l'intervalle, par exemple l'heure du jour où l'interrogation doit être exécutée.

    Vous pouvez spécifier la fréquence d'exécution de l'interrogation, par exemple Run indefinitely, Run once ou Custom.

    Vous pouvez également inclure Nombre de répétitions dans la spécification de fréquence pour le nombre de fois où l'interrogation doit être exécutée.

  6. Sous Sélectionner un service cible à configurer :

    1. Sélectionnez le service cible dans lequel les résultats de l'exécution de l'interrogation sont publiés, par exemple Surveillance.

      Le service de surveillance stocke les mesures pour le résultat de l'exécution de l'interrogation sur un programme.

    2. Sélectionnez Compartiment de mesures, le compartiment dans lequel la mesure sera créée. Un compartiment est sélectionné par défaut dans Oracle Logging Analytics.

    3. Sélectionnez Espace de noms de mesure, l'espace de noms de mesure où vous voulez placer la nouvelle mesure. La portée des options disponibles pour sélectionner l'espace de noms est définie par la sélection du compartiment de mesures à l'étape précédente. Si aucune option n'est disponible, vous pouvez également entrer une nouvelle valeur pour l'espace de noms.

      Note

      Lorsque vous spécifiez une nouvelle valeur pour l'espace de noms, sélectionnez un nom ne commençant pas par oracle_ et oci_. Il s'agit de préfixes réservés. Voir Publication de mesures personnalisées.
    4. Facultativement, sélectionnez Groupe de ressources, le groupe auquel la mesure appartient. Un groupe de ressources est une chaîne personnalisée fournie avec une mesure personnalisée.

    5. Entrez le nom de la mesure, utilisé dans l'explorateur du service de surveillance pour voir les mesures. Une seule mesure peut être spécifiée.

      Pour faciliter l'identification dans l'explorateur de mesures, il est recommandé d'inclure le nom de la recherche enregistrée dans votre nom de mesure, par exemple, <mysavedsearchname><metric_name>.

  7. Facultativement, développez la section Afficher les options avancées et ajoutez des marqueurs à votre règle de détection.

  8. Si les politiques GIA requises ne sont pas encore définies, un avis s'affiche qui répertorie les politiques pour :

    • Créer un groupe dynamique
    • Appliquer les politiques au groupe dynamique pour permettre l'exécution des tâches programmées

    Notez les politiques répertoriées et créez-les.

  9. Cliquez sur Créer une règle de détection.

    L'interrogation est maintenant programmée pour s'exécuter à intervalles réguliers et les mesures résultantes sont émises vers le service de surveillance.

  10. Dans la page de liste des règles de détection de recherche programmée, cliquez sur le nom de la recherche programmée. Dans la page des détails de la recherche programmée, puis cliquez sur Voir dans l'explorateur des mesures pour voir les mesures dans le service de surveillance.

Autoriser les utilisateurs à effectuer toutes les opérations sur les tâches programmées

Pour créer des tâches programmées, configurez d'abord les autorisations appropriées en créant les politiques IAM suivantes :

  1. Créez un groupe dynamique pour permettre aux tâches programmées de publier des mesures dans le service de surveillance à partir d'un compartiment spécifique :

    ALL {resource.type='loganalyticsscheduledtask', resource.compartment.id='<compartment ocid>'}

    Vous pouvez également autoriser la publication de mesures à partir de tous les compartiments :

    ALL {resource.type='loganalyticsscheduledtask'}
  2. Créez des politiques pour permettre au groupe dynamique d'effectuer des opérations de tâche programmée dans la location :

    allow group <group_name> to use loganalytics-scheduled-task in tenancy
    allow dynamic-group <dynamic_group_name> to use metrics in tenancy
    allow dynamic-group <dynamic_group_name> to read management-saved-search in tenancy
    allow dynamic-group <dynamic_group_name> to {LOG_ANALYTICS_QUERY_VIEW} in tenancy
    allow dynamic-group <dynamic_group_name> to {LOG_ANALYTICS_QUERYJOB_WORK_REQUEST_READ} in tenancy
    allow dynamic-group <dynamic_group_name> to READ loganalytics-log-group in tenancy
    allow dynamic-group <dynamic_group_name> to {LOG_ANALYTICS_LOOKUP_READ} in tenancy
    allow dynamic-group <dynamic_group_name> to read compartments in tenancy

Voir toutes les tâches programmées dans un compartiment à l'aide de l'API

Pour voir les tâches programmées d'une recherche enregistrée spécifique, vous pouvez consulter la page des détails de la recherche enregistrée. Toutefois, si vous voulez lister toutes les tâches programmées dans un compartiment spécifique sans référence aux recherches enregistrées pour lesquelles les tâches programmées ont été créées, utilisez l'API pour interroger la liste des tâches programmées. Voir ListScheduledTasks.

Spécifiez les paramètres suivants dans votre commande GET :

  • taskType=SAVED_SEARCH
  • compartmentId=<compartment_OCID>
  • limit=1000
  • sortOrder=DESC
  • sortBy=timeUpdated

Pour exécuter la commande, vous aurez besoin des éléments suivants :

  • Espace de noms : Espace de noms Logging Analytics que vous avez spécifié lors de la création des tâches programmées.
  • OCID du compartiment : OCID du compartiment que vous voulez interroger pour obtenir la liste des tâches programmées qui y sont créées.

Surveiller les tâches programmées de votre recherche enregistrée

Vous pouvez surveiller l'état des tâches programmées de votre recherche enregistrée au moyen des mesures Statut d'exécution de la tâche programmée. En cas d'échec ou d'exécution ignorée d'une tâche en raison d'une anomalie d'infrastructure ou si une ressource ou une configuration dépendante est modifiée, la mesure fournit des détails sur l'échec pour vous aider à la corriger.

Pour savoir comment accéder à la mesure Statut d'exécution de la tâche programmée, voir Surveiller Logging Analytics à l'aide de mesures de service.

Chaque tâche programmée de recherche enregistrée a son propre intervalle, comme indiqué dans son programme de tâche. Une mesure est émise à votre location pour chaque exécution de tâche programmée. Positionnez le curseur de la souris sur les points de données du graphique pour afficher plus de détails sur la tâche. Suivez ces étapes pour filtrer les données de mesure en fonction de l'une des dimensions Status, DisplayName ou ResourceId :

  1. Cliquez sur le menu Options dans le coin supérieur droit de la mesure Statut d'exécution de la tâche programmée, puis sélectionnez Voir l'interrogation dans l'explorateur de mesures.

    La mesure est maintenant affichée dans l'explorateur des mesures. Ici, vous pouvez afficher le graphique plus en détail.

  2. Cliquez sur Modifier les interrogations et sélectionnez Nom de dimension et Valeur de dimension pour la mesure. Vous pouvez filtrer les données de mesure en fonction de taskResult le résultat de l'exécution de la tâche programmée, de Status de l'exécution de la tâche, de DisplayName de la tâche, de queryExecTimeRange ou de ResourceId.

    Note

    Pour voir les graphiques et les données tabulaires de l'explorateur de mesures en spécifiant un nom de dimension et une valeur de dimension, évitez d'utiliser des champs avec des parenthèses ou d'autres caractères spéciaux dans le nom. Si le champ sélectionné pour le nom de dimension comporte des caractères spéciaux, créez un champ virtuel à l'aide de la commande eval ou renommez le champ existant à l'aide de la commande rename de sorte que les parenthèses ou les caractères spéciaux soient supprimés. Par exemple, si le champ utilisé pour le nom de dimension est Host Name (Server), vous pouvez créer un champ virtuel hostname avec | eval hostname=“Host Name (Server)”.

    La dimension queryExecTimeRange est utile pour déterminer le temps nécessaire à l'exécution de l'interrogation de tâche programmée. Les valeurs disponibles sont < 5s, >= 5s and < 10s, >= 10s and < 30s et > 30s. En général, les interrogations qui prennent plus de 30 secondes à s'exécuter sont considérées comme coûteuses en termes de temps d'exécution. Voir Exécution des interrogations.

    La dimension taskResult peut avoir les valeurs Succeeded, Failed et Paused. La dimension Status fournit des détails supplémentaires sur taskResult. Par exemple, si la valeur de taskResult est Paused, la valeur de Status peut être Paused by User.

    Cliquez sur Mettre à jour le graphique pour actualiser la visualisation du graphique. Le graphique affiche maintenant uniquement les points de données pour lesquels vous avez appliqué le filtre.

    Vous pouvez passer à la vue Table de données pour obtenir une représentation tabulaire des points de données collectés.

  3. Modifiez le nom de la dimension pour afficher différentes perspectives dans le graphique.

Vous pouvez configurer des alertes pour vous aviser du statut par courriel, SMS, Slack, PagerDuty, URL de point d'extrémité HTTPS ou fonction. Voir Créer des alertes pour des événements détectés.

Voici les différentes valeurs de la dimension status signalées au moyen de cette mesure pour des valeurs taskResult spécifiques :

Valeur taskResult Valeur Status Description Correction recommandée

Succeeded

Succeeded

L'exécution de la tâche est normale

Non disponible

SucceededPostingDataTruncated

L'exécution de la tâche programmée a réussi, mais le report des mesures dans le service de surveillance a été tronqué en raison des limites des données de mesure.

Assurez-vous que les mesures restent dans les limites spécifiées. Voir Informations de référence sur les commandes de l'interface de ligne de commande OCI - Surveillance des données de mesure du service.

SucceededNoDataFound

Lorsque l'exécution de la tâche programmée a réussi, mais que l'interrogation n'a retourné aucun résultat. Il n'y a donc aucune donnée de mesure publiée dans le service de surveillance.

Vérifiez votre interrogation de recherche enregistrée.

En outre, ce statut peut ne pas impliquer une erreur. Il suggère seulement que l'événement pour lequel la requête est écrite n'a pas eu lieu. Par exemple, si l'interrogation doit compter le nombre d'erreurs dans les journaux au cours des 5 dernières minutes, et si les journaux arrivés au cours des 5 dernières minutes ne comportent pas d'erreurs, SucceededNoDataFound est affiché.

SucceededPartialResults

Résultats partiels en raison d'interrogations coûteuses qui prennent plus de deux minutes ou en raison d'une anomalie d'infrastructure.

Communiquez avec Oracle Support avec les informations sur le statut.

PartialResultsNoDataFound

Résultats partiels en raison d'interrogations coûteuses qui prennent plus de deux minutes ou en raison d'une anomalie d'infrastructure.

Communiquez avec Oracle Support avec les informations sur le statut.

Failed

Skipped

L'exécution de la tâche a échoué en raison d'une anomalie d'infrastructure ou d'une défaillance récupérable.

Communiquez avec Oracle Support avec les informations sur le statut.

Paused

InvalidManagementSavedSearch

La chaîne d'interrogation de recherche enregistrée ou les filtres de portée ne sont pas valides.

Vérifiez si la recherche enregistrée a été modifiée après la création de la tâche programmée et corrigez-la.

NotAuthorizedOrNotFoundManagementSavedSearch

La recherche enregistrée est supprimée ou la politique IAM qui fournit l'autorisation de lecture pour la recherche enregistrée a été modifiée.

Assurez-vous que la politique IAM est restaurée.

InvalidQuery

L'interrogation de recherche enregistrée n'est pas valide pour générer la mesure.

Vérifiez si la recherche enregistrée a été modifiée après la création de la tâche programmée et corrigez-la.

NotAuthorizedOrNotFoundPurgeResource

Si la tâche programmée est pour l'épuration des données de journal et que le compartiment d'épuration est supprimé ou si la politique IAM pour l'épuration a été modifiée après la création de la tâche programmée, ce statut s'affiche.

Vérifiez si le compartiment d'épuration est supprimé et restaurez-le.

Assurez-vous que la politique IAM est restaurée.

MetricExtractionNotValid

L'un des deux motifs suivants peut déclencher le statut :

  • Les détails de mesure spécifiés pour la tâche programmée sont incomplets ou non valides.
  • Le jeu de résultats de mesure n'est pas valide, c'est-à-dire que la colonne de mesure n'est pas numérique ou que la valeur de dimension n'est pas cardinale.

Si les détails de la mesure sont incomplets ou non valides, mettez-les à jour dans la définition de tâche programmée.

Si la colonne de mesure n'est pas numérique ou si la valeur de dimension n'est pas cardinale, mettez à jour la recherche enregistrée pour produire une mesure et une dimension valides.

PausedByUser

Lorsque la valeur de taskResult est Paused, cette valeur de Status n'est pas une indication de l'exécution de la tâche programmée. Il s'agit d'une indication de l'action de l'utilisateur au moyen de la console ou de l'API, qui a mis en pause la tâche programmée.

Identifiez l'action utilisateur qui a mis en pause l'exécution de la tâche programmée et exécutez la tâche programmée.

Facteurs importants pour la création de tâches programmées

Notez les facteurs suivants pour créer des tâches programmées :

  • Exigences pour la rédaction d'interrogations :

    Lorsque vous rédigez des interrogations pour créer des tâches programmées, assurez-vous de respecter les exigences suivantes :

    • Notez ces limites pour les interrogations de règle de détection :
      • N'effectuez pas de recherche avec des caractères génériques dans le champ Contenu de journal initial de votre interrogation de tâche programmée. Pour plus d'informations sur les recherches avec des caractères génériques, voir Utiliser des mots clés, des phrases et des caractères génériques.

      • La commande timestats ne peut pas être suivie de eval, extract, jsonextract, xmlextract et lookup.

      • La commande regex ne doit pas être utilisée sur des champs volumineux tels que Message pour éviter de rendre les interrogations coûteuses à traiter.

        Les commandes de comparaison like et extract, jsonextract, xmlextract ne sont pas prises en charge dans les grands champs tels que Message.

        Les champs de lien ou les champs utilisés dans la clause BY ne peuvent pas être utilisés dans des champs volumineux tels que Message.

      • The commands which are not supported in the queries for scheduled tasks are cluster, clustercompare, clusterdetails, clustersplit, compare, createview, delta, eventstats, fieldsummary, highlightgroups, geostats, linkdetails, map, nlp and timecompare.

    • Limites maximales :

      Le nombre maximal de champs pris en charge pour la clause by est 3.

      Le nombre maximal de champs pris en charge pour la commande timestats est 3.

      Le nombre maximal de fonctions d'agrégation prises en charge dans une interrogation de tâche programmée est 1.

    • Utilisez les valeurs des champs link comme dimensions pour la publication des mesures :

      Sélectionnez jusqu'à trois champs de dimension et une mesure numérique à reporter dans le service de surveillance. Pour indiquer les champs à reporter dans la surveillance, les interrogations doivent se terminer par :

      ... | link ... | fields -*, dim1, dim2, dim3, metric1

      La commande link comporte plusieurs colonnes dans la sortie, telles que l'heure de début, l'heure de fin, le nombre, etc., par défaut. Utilisez -* dans la commande fields pour supprimer ces champs et spécifier éventuellement jusqu'à trois champs de dimension et un champ de mesure obligatoire.

      Vous pouvez avoir plusieurs énoncés eval après la commande stats et plusieurs fonctions stats pour calculer les résultats intermédiaires. Toutefois, l'interrogation doit se terminer par fields -*, dim1, dim2, dim3, metric1 indiquant les dimensions et la mesure qui doivent être publiées. Utilisez les directives suivantes pour les interrogations de règle de détection :

      • Utilisez jusqu'à la commande addfields 2.
      • Utilisez jusqu'à 3 fonctions stats.
      • Les énoncés eval sont requis pour calculer les résultats intermédiaires et finaux.

      Exemples d'interrogations :

      'Log Source' = 'OCI Email Delivery'
       | link 'Entity'
       | addfields [ * | where deliveryEventType = r and bounceType = hard | stats count as 'hard bounces' ],
                   [ * | where deliveryEventType = e and length(ipPoolName) > 0 | stats count as 'total sent messages' ]
       | eval 'Total Rate' = ('hard bounces' / 'total sent messages') * 100
       | fields -*, 'Entity', 'Total Rate'
      'Log Source' = 'My Network Logs'
       | stats sum(Success) as TotalSuccess, sum(Failure) as TotalFailure
       | eval SuccessRate = (TotalSuccess / (TotalSuccess + TotalFailure)) * 100 | fields -*, SuccessRate
  • Arrivée en retard des journaux :

    Si les tâches programmées s'exécutent avant l'arrivée des journaux, il se peut que les tâches programmées ne retournent pas les résultats comme prévu. Pour éviter de manquer de tels journaux dans les tâches programmées en raison de leur arrivée tardive, l'interrogation doit tenir compte de ces journaux en utilisant un ajustement de l'intervalle de temps.

    Par exemple, si la tâche programmée s'exécute toutes les 5 minutes pour vérifier le nombre d'erreurs d'authentification et s'il y a un délai de 3 minutes entre le moment où les journaux sont générés et le moment où ils atteignent Oracle Logging Analytics, la tâche programmée ne détectera pas les journaux. Considérez que la tâche programmée s'exécute toutes les 5 minutes, par exemple 01:00, 01:05, 01:10, etc. Si l'enregistrement de journal L1 généré à 01:04 atteint Oracle Logging Analytics à 01:07. L1 n'est pas détecté dans la tâche programmée qui s'est exécutée à 1:05, car le journal n'est pas arrivé à Oracle Logging Analytics pour le moment. Lors de l'exécution suivante à 01:10, l'interrogation recherche les journaux dont l'horodatage est compris entre 01:05 et 01:10. Dans ce cycle également, L1 n'est pas détecté car il a un horodatage de 01:04. L'interrogation suivante peut ne pas voir tous les enregistrements de journaux si les journaux arrivent en retard :

    Label = 'Authentication Error' | stats count as logrecords by 'Log Source'

    Pour déterminer le délai d'arrivée des journaux dans Oracle Logging Analytics, calculez la différence entre l'horodatage mentionné dans l'enregistrement de journal et l'heure de report du processeur de journaux. L'exemple d'interrogation suivant peut être utilisé pour vérifier s'il y a un délai :

    Label = 'Authentication Error' and 'Log Processor Posting Time (OMC INT)' != null | fields 'Agent Collection Time (OMC INT)', 'Data Services Load Time', 'Process Time', 'Log Processor Posting Time (OMC INT)'

    L'interrogation suivante utilise la fonction dateRelative pour ajuster le délai de 3 minutes dans une tâche qui s'exécute à un intervalle de 5 minutes :

    Label = 'Authentication Error' and Time between dateRelative(8minute, minute) and dateRelative(3minute, minute) | stats count as logrecords by 'Log Source'
  • Autres facteurs :

    • Pour comprendre comment les interrogations sont créées dans le service de surveillance, voir Création d'interrogations de mesure dans la documentation sur Oracle Cloud Infrastructure.

    • Notez les informations de limite pour la publication des données de mesure dans le service de surveillance. Les limites correspondent aux mesures d'une tâche programmée. Voir PostMetricData API dans la documentation sur Oracle Cloud Infrastructure.

      Lorsque votre recherche enregistrée peut générer plus de 50 valeurs uniques par champ, des résultats partiels sont reportés en raison des limites imposées par le service de surveillance. Dans de tels cas, pour voir les résultats en haut ou en bas 50, utilisez la commande trier.

Exemples d'interrogations pour les tâches programmées

Exemples d'interrogation pour l'affichage des mesures

  • Prenons un exemple où vous voulez connaître le nombre d'erreurs d'authentification dans une exécution programmée toutes les 5 minutes :

    Label = 'Authentication Error' | stats count as 'Number of Authentication Errors'

    Lorsque la visualisation Table sommaire est sélectionnée dans l'explorateur de journaux, la sortie suivante s'affiche :


    Sortie de l'explorateur de journaux pour l'interrogation

    Chaque fois que la tâche programmée exécute une mesure telle que ci-dessus, la même mesure est publiée dans le service de surveillance.

    Dans l'explorateur de mesures, la mesure publiée ci-dessus peut être consultée comme suit :


    Sortie de mesure pour la tâche programmée

    Cliquez sur Afficher la table de données pour voir la mesure dans le format tabulaire :


    Format tabulaire de la sortie de mesure pour la tâche programmée

  • Si vous voulez connaître la répartition des erreurs d'authentification dans chaque hôte :

    Label = 'Authentication Error' | stats count as 'Number of Authentication Errors' by 'Host IP Address (Client)'

    Utilisez la visualisation Sommaire pour prévisualiser la sortie d'une mesure pour votre interrogation.


    Sortie de l'interrogation dans la visualisation sommaire

    À partir de la page Explorateur de mesures, le graphique IP de mesure par hôte ressemble à ceci :


    Sortie de la mesure par adresse IP d'hôte

    Pour voir le nombre par adresse IP d'hôte, indiquez le nom de la dimension de mesure Host_IP_Address_Client et décochez la case Agréger les flux de mesures :


    Boîte de dialogue pour sélectionner le nom de la dimension Mesure

Comment rendre vos requêtes performantes

Certaines interrogations entraînent des temps d'exécution élevés ou, dans certains cas, une temporisation et, éventuellement, des exécutions retardées de leurs propres tâches. Dans de tels cas, il est recommandé de créer des champs étendus (EFD) ou des étiquettes et de les utiliser dans les filtres de vos interrogations programmées pour rendre les interrogations moins coûteuses.

Par exemple, si vous voulez reporter le nombre de temporisations de connexion dans les journaux d'alerte de base de données toutes les 5 minutes, l'interrogation suivante est l'une des façons de l'exécuter :

'Log Source' = 'Database Alert Logs' and 'TNS-12535' | stats count as 'Number of Timeouts'

L'interrogation ci-dessus recherche la chaîne TNS-12535 dans Contenu de journal initial. Cependant, ce n'est pas le moyen le plus efficace de rechercher les temporisations, en particulier lorsque la tâche est programmée pour s'exécuter toutes les 5 minutes en parcourant des millions d'enregistrements.

Utilisez plutôt le champ dans lequel cet ID erreur est extrait et composez l'interrogation comme indiqué ci-dessous :

'Log Source' = 'Database Alert Logs' and 'Error ID' = 'TNS-12535' | stats count as 'Number of Timeouts'

Vous pouvez également filtrer à l'aide de l'étiquette :

'Log Source' = 'Database Alert Logs' and Label = Timeout | stats count as 'Number of Timeouts'

De nombreuses sources de journaux définies par Oracle contiennent des EFD et des étiquettes. Pour les journaux personnalisés, il est recommandé de définir vos propres étiquettes et EFD et de les utiliser dans les interrogations programmées au lieu de rechercher dans Contenu du journal initial. Voir Créer une étiquette et Utiliser des champs étendus dans les sources.