Création d'une programmation pour exécuter automatiquement une requête de recherche enregistrée

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

Autres rubriques pour les tâches planifiées :

Les étapes suivantes s'appuient sur le service Monitoring comme cible pour la surveillance de la tâche programmée. Les mesures émises par Oracle Log Analytics sont stockées par le service Monitoring.

  1. Ouvrez le menu de navigation et cliquez sur Observation et gestion. Sous Log Analytics, cliquez sur Administration. La page Présentation de l'administration apparaît.

    Les ressources d'administration sont répertoriées dans le panneau 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. Indiquez un nom de règle pour la tâche planifiée.

  4. Sous Sélectionner une recherche enregistré :

    Indiquez la recherche enregistrée pour laquelle créer une programmation. Tout d'abord, sélectionnez 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 la requête et sa description.

  5. Sous Fréquence de configuration :

    Indiquez l'intervalle, ou fenêtre, d'agrégation. Vous pouvez optimiser la programmation en sélectionnant une fréquence d'exécution en minutes, heures, jours ou semaines. Si vous sélectionnez de plus longues agrégations, comme avec une fréquence en jours, vous pouvez affiner l'agrégation dans la plage, par exemple, l'heure d'exécution de la requête.

    Vous pouvez spécifier la fréquence d'exécution de la requête, telle que Run indefinitely, Run once ou Custom.

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

  6. Sous Sélectionner un service cible à configurer, procédez comme suit :

    1. Sélectionnez le service cible dans lequel les résultats de l'exécution de la requête sont publiés, par exemple, Monitoring.

      Le service Monitoring stocke les mesures du résultat de l'exécution de la requête sur programmation.

    2. Sélectionnez le compartiment de mesure, dans lequel la mesure est créée. Par défaut, un compartiment est sélectionné par Oracle Log Analytics.

    3. Sélectionnez l'espace de noms de mesure dans lequel 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 mesure à l'étape précédente. Si certaines options ne sont pas disponibles, vous pouvez également entrer une nouvelle valeur pour l'espace de noms.

      Remarque

      Lorsque vous indiquez une nouvelle valeur pour l'espace de noms, sélectionnez un nom qui ne commence pas par oracle_ et oci_. Il s'agit de préfixes réservés. Reportez-vous à Publication de mesures personnalisées.
    4. Vous pouvez éventuellement sélectionner le groupe de ressources 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 Monitoring pour visualiser les mesures. Vous ne pouvez spécifier qu'une seule mesure.

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

  7. Vous pouvez éventuellement développer la section Afficher les options avancées et ajouter des balises à la règle de détection.

  8. Si les stratégies IAM requises ne sont pas encore définies, une notification apparaît et répertorie les stratégies associées aux opérations suivantes :

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

    Prenez note des stratégies répertoriées et créez-les.

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

    L'exécution de la requête est à présent programmée à intervalles réguliers et les mesures obtenues sont émises vers le service Monitoring.

  10. Dans la page de liste Règles de détection de recherche programmée, cliquez sur le nom de la recherche programmée. Sur la page de détails de la recherche programmée, puis cliquez sur Afficher dans l'explorateur de mesures pour visualiser les mesures dans le service Monitoring.

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

Pour créer des tâches programmées, configurez d'abord les droits d'accès appropriés en créant les stratégies IAM suivantes :

  1. Créez un groupe dynamique pour autoriser les tâches programmées à publier des mesures sur 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 stratégies pour autoriser le groupe dynamique à 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

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

Afin d'afficher les tâches programmées pour une recherche enregistrée spécifique, vous pouvez accéder à la page de détails de cette recherche. Toutefois, si vous voulez la liste de 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 exécuter une requête de liste des tâches programmées. Reportez-vous à ListScheduledTasks.

Indiquez les paramètres suivants dans la commande GET :

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

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

  • Espace de noms : espace de noms Log Analytics indiqué lors de la création des tâches programmées.
  • OCID de compartiment : OCID du compartiment à interroger pour obtenir la liste des tâches programmées qui y sont créées

Surveiller les tâches planifiées de la recherche enregistrée

Vous pouvez surveiller l'état des tâches programmées de la recherche enregistrée via les mesures Statut d'exécution de tâche programmée dans le service Monitoring. En cas d'échec ou d'échec de l'exécution 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 rectifier.

Pour connaître les étapes permettant d'accéder à la mesure Statut d'exécution de tâche programmée, reportez-vous à Surveillance de Log Analytics à l'aide des mesures de service.

Chaque tâche planifiée de recherche enregistrée a son propre intervalle tel que spécifié dans sa programmation de tâche. Une mesure est émise vers votre location pour chaque exécution de tâche programmée. Positionnez le curseur sur les points de données du graphique pour afficher plus d'informations sur la tâche. Vous pouvez filtrer les données de mesure en fonction de l'une des dimensions Status, DisplayName ou ResourceId.

  1. Dans Log Analytics, cliquez sur Administration. La page Présentation de l'administration apparaît.

  2. Dans le menu Ressources de gauche, cliquez sur Règles de détection. Dans la page de liste des règles de détection, cliquez sur le nom de la règle de détection de recherche enregistrée à ouvrir. La page de détails de la règle de détection s'ouvre.

  3. Dans les liens de gauche, cliquez sur Mesures.


    Mesures de statut d'exécution

  4. Cliquez sur le menu Options dans l'angle supérieur droit de la mesure Statut d'exécution de tâche programmée, puis sélectionnez Afficher la requête dans l'explorateur de mesures.


    Afficher dans l'explorateur de mesure

    La mesure est maintenant affichée dans l'explorateur de mesures. Vous pouvez ainsi visualiser le graphique en détail.


    Mesures affichées dans l'explorateur de mesures

    Faites glisser le bouton Afficher la table de données pour afficher les détails des mesures :


    Mesures de statut sous forme de tableau

  5. Cliquez sur Modifier les requêtes, 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, du résultat de l'exécution de la tâche programmée, Status de l'exécution de la tâche, DisplayName de la tâche, queryExecTimeRange ou ResourceId.

    Remarque

    Pour afficher des graphiques et des données tabulaires à partir de l'explorateur de mesures en indiquant 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 la requête de tâche programmée. Les valeurs disponibles sont < 5s, >= 5s and < 10s, >= 10s and < 30s et > 30s. En général, les requêtes qui prennent plus de 30 secondes à être exécutées sont considérées comme coûteuses en termes de temps d'exécution. Reportez-vous à How to Make Your Queries Performant.

    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 le graphique à jour pour actualiser la visualisation du graphique. Le graphique affiche désormais uniquement les points de données pour lesquels vous avez appliqué le filtre.

    Vous pouvez basculer sur la vue Table des données pour bénéficier d'une représentation sous forme de tableau des points de données collectés.

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

Vous pouvez configurer des alertes pour vous informer du statut via un courriel, un SMS, Slack, PagerDuty, une URL endpoint HTTPS ou une fonction. Reportez-vous à Créer des alertes pour les événements détectés.

Voici les différentes valeurs de la dimension status indiquées via 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

S/O

SucceededPostingDataTruncated

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

Assurez-vous que les mesures restent dans les limites indiquées. Reportez-vous à Référence des 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 planifiée réussit, mais que la requête n'a renvoyé aucun résultat. Aucune donnée de mesure n'est donc publiée sur le service de surveillance.

Vérifiez votre requête de recherche enregistrée.

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

SucceededPartialResults

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

Contactez le support technique Oracle avec les informations de statut.

PartialResultsNoDataFound

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

Contactez le support technique Oracle avec les informations de 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.

Contactez le support technique Oracle avec les informations de statut.

Paused

InvalidManagementSavedSearch

La chaîne de requête 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 planifiée et corrigez-la.

NotAuthorizedOrNotFoundManagementSavedSearch

La recherche enregistrée est supprimée ou la stratégie IAM qui fournit le droit d'accès READ pour la recherche enregistrée a changé.

Assurez-vous que la stratégie IAM est restaurée.

InvalidQuery

La requête de recherche enregistrée n'est pas valide pour la génération de la mesure.

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

NotAuthorizedOrNotFoundPurgeResource

Si la tâche programmée est destinée à la purge des données de journal et que le compartiment de purge est supprimé ou si la stratégie IAM pour la purge a été modifiée après la création de la tâche programmée, ce statut est affiché.

Vérifiez si le compartiment de purge est supprimé et restaurez-le.

Assurez-vous que la stratégie IAM est restaurée.

MetricExtractionNotValid

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

  • Les détails de mesure indiqué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 mesure sont incomplets ou non valides, mettez à jour les détails de mesure 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. C'est une indication de l'action de l'utilisateur via la console ou l'API, qui a mis la tâche planifiée en pause.

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

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

Notez les facteurs suivants pour la création de tâches planifiées :

  • Conditions requises pour la composition de requêtes :

    Lorsque vous composez des requêtes pour créer des tâches planifiées, assurez-vous de respecter les exigences suivantes :

    • Notez les limites suivantes pour les requêtes de règle de détection :
      • N'effectuez pas de recherche avec des caractères génériques dans le champ Contenu du journal d'origine de votre requête de tâche planifiée. Pour plus d'informations sur les recherches avec caractères génériques, reportez-vous à la section Use Keywords, Phrases, and Wildcards.

      • 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 requêtes coûteuses en traitement.

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

        Les champs de lien ou les champs utilisés dans la clause BY ne peuvent pas être utilisés sur 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, fieldsummary, highlightgroups, geostats, linkdetails, map, nlp and timecompare.

    • Limites maximales:

      Le nombre maximum 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 requête de tâche planifiée est 1.

    • Utilisez les valeurs des champs link en tant que dimensions pour l'imputation des mesures :

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

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

      Par défaut, la commande link comporte plusieurs colonnes dans la sortie, telles que Heure de début, Heure de fin, Nombre, etc. Utilisez -* dans la commande fields pour enlever ces champs et indiquez éventuellement jusqu'à trois champs de dimension et un champ de mesure obligatoire.

      Vous pouvez avoir plusieurs instructions eval après la commande stats et plusieurs fonctions stats pour le calcul des résultats intermédiaires. Toutefois, la requête doit se terminer par fields -*, dim1, dim2, dim3, metric1 indiquant les dimensions et la mesure à publier. Utilisez les instructions suivantes pour les requêtes de règle de détection :

      • Utilisez jusqu'à la commande 2 addfields.
      • Utilisez jusqu'à 3 fonctions stats.
      • Les instructions eval sont requises pour le calcul des résultats intermédiaires et finaux.

      Exemples de requête :

      '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 tardive des journaux :

    Si les tâches planifiées sont exécutées avant l'arrivée des journaux, il est possible que les tâches planifiées ne renvoient pas les résultats comme prévu. Pour éviter de manquer de tels journaux dans les tâches planifiées en raison de leur arrivée tardive, la requête doit en tenir compte en utilisant un ajustement de la période.

    Par exemple, si la tâche programmée est exécutée 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 l'heure de génération des journaux et l'heure à laquelle ils atteignent Oracle Log Analytics, la tâche programmée ne détecte pas les journaux. Considérez que la tâche planifié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 Log Analytics à 01:07. L1 n'est pas détecté dans la tâche programmée exécutée à 1:05 car le journal n'est pas arrivé à Oracle Log Analytics pour le moment. Lors de la prochaine exécution à 01:10, la requête recherche les journaux avec des horodatages compris entre 01:05 et 01:10. Dans ce cycle également, L1 n'est pas détecté car son horodatage est 01:04. La requête suivante peut ne pas voir tous les enregistrements de journal 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 Log Analytics, calculez la différence entre l'horodatage mentionné dans l'enregistrement de journal et l'heure de publication du processeur de journal. L'exemple de requête 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)'

    La requête 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 l'élaboration des requêtes dans le service Monitoring, reportez-vous à Construction de requêtes de mesure dans la documentation Oracle Cloud Infrastructure.

    • Notez les informations relatives aux limites pour la publication des données de mesure dans le service Monitoring. Les limites correspondent aux mesures pour une tâche programmée. Reportez-vous à PostMetricData API dans la documentation Oracle Cloud Infrastructure.

      Lorsque votre recherche enregistrée peut générer plus de 200 unique par champ valeurs, les résultats partiels sont publiés en raison des limites imposées par le service Monitoring. Dans ce cas, pour afficher les résultats top ou bottom 200, utilisez la commande sort.

Exemples de requêtes pour les tâches planifiées

Exemples de requête pour l'affichage des mesures

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

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

    Lorsque la visualisation Tableau récapitulatif est sélectionnée dans l'explorateur de journaux, la sortie suivante s'affiche :


    Sortie de l'explorateur de journaux pour la requête

    Chaque fois que la tâche programmée exécute une mesure telle que celle ci-dessus, elle est publiée dans le service Monitoring.

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


    Sortie de mesure pour la tâche programmée

    Cliquez sur Afficher la table de données pour visualiser la mesure sous forme de tableau :


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

  • Si vous souhaitez connaître la panne 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 récapitulative pour prévisualiser la sortie de mesure de votre requête.


    Sortie de la requête dans la visualisation récapitulative

    Dans la page Explorateur de mesures, le même graphique de mesures par adresse IP d'hôte se présente comme suit :


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

    Pour afficher le nombre par adresse IP d'hôte, indiquez le nom de la dimension de mesure Host_IP_Address_Client et désélectionnez la case Agréger les flux de données de mesure :


    Boîte de dialogue permettant de sélectionner le nom de la dimension de mesure

Comment rendre vos requêtes performantes

Certaines des requêtes entraînent des temps d'exécution élevés ou, dans certains cas, un délai d'expiration et, éventuellement, des exécutions retardées de leurs propres tâches. Dans ce cas, il est recommandé de créer des champs étendus (EFD) ou des libellés et de les utiliser dans les filtres de vos requêtes planifiées pour les rendre moins coûteuses.

Par exemple, si vous voulez publier le nombre d'expirations de connexion dans vos journaux d'alertes 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'

La requête ci-dessus recherche la chaîne TNS-12535 dans Contenu du journal d'origine. Cependant, ce n'est pas le moyen le plus efficace de rechercher les délais d'attente, en particulier lorsque la tâche est planifiée pour s'exécuter toutes les 5 minutes en parcourant des millions d'enregistrements.

Utilisez plutôt le champ dans lequel cet ID d'erreur est extrait et composez la requête 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 du libellé :

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

De nombreuses EFD et étiquettes sont définies dans les sources de journal définies par Oracle. Pour les journaux personnalisés, il est recommandé de définir vos propres étiquettes et EFD et de les utiliser dans les requêtes programmées au lieu de rechercher dans Contenu du journal d'origine. Reportez-vous à Création d'un libellé et à Utilisation de champs étendus dans les sources.