Écrire des interrogations performantes pour la recherche et l'exportation de journaux
Nous discutons ici de certains des aspects importants que vous devez prendre en compte lors de la composition des interrogations pour la recherche et l'exportation des journaux.
Rubriques :
Présentation de l'index
Lors de l'ingestion du journal, l'enregistrement de journal est analysé à l'aide de l'analyseur, de la source de journaux, des champs, des champs étendus et des étiquettes sont extraits. Toutes ces valeurs sont stockées dans un index efficace pour les interrogations. En outre, les mots clés de l'enregistrement de journal entier sont également indexés. Les interrogations qui utilisent l'index sont plusieurs fois plus rapides que les interrogations qui n'utilisent pas l'index. Si vous interrogez une grande quantité de données, vous devez vous assurer que l'index est utilisé.
Quand l'index n'est-il pas utilisé?
Un index n'est pas utilisé lorsqu'une interrogation utilise des caractères génériques ou lorsqu'un champ est manipulé à l'aide d'une des fonctions de traitement de chaîne. Ci-dessous, se trouvent quelques exemples :
-
Éviter d'utiliser des caractères génériques dans l'interrogation
Un cas d'utilisation courant consiste à rechercher un modèle spécifique dans un champ comme suit :
'Error Text' like '%NullPointerException%'
L'interrogation ci-dessus n'utilisera pas l'index en raison de l'utilisation de caractères génériques. Si le champ Texte d'erreur contient une grande quantité de données, ou si l'interrogation est exécutée sur un grand nombre d'enregistrements, elle expire éventuellement. Pour éviter cela, ajoutez une condition dans la source de journaux pour détecter ce modèle et définir un champ. Vous pouvez ensuite utiliser directement ce champ dans l'interrogation.
Par exemple, vous pouvez alimenter un champ nommé Type d'erreur dans la source de journaux, en fonction de diverses conditions, puis mettre à jour l'interrogation pour utiliser ce champ :
'Error Type' = NullPointerException
Si vous ne pouvez pas ajouter le modèle à la source de journaux, vous pouvez également effectuer une recherche par mot clé comme suit :
NullPointerException
Cette action recherche le mot NullPointerException dans le champ Contenu du journal initial, qui représente l'enregistrement du journal brut. Cela est utile si vous n'avez pas besoin d'une correspondance exacte, car cette interrogation est plusieurs fois plus rapide que la précédente à l'aide des caractères génériques.
Note
L'utilisation de caractères génériques pour un champ stockant une grande quantité de champs est pire que pour un petit champ. Mais si le nombre d'enregistrements de journal impliqués est important, alors même les caractères génériques contre un petit champ sont lents. -
Évitez d'utiliser des opérateurs de chaîne coûteux
Un index n'est pas utilisé dans les champs générés à l'aide d'opérations de chaîne telles que
substr()
,extract
etjsonExtract
. Voici quelques exemples où l'index est ignoré :* | eval Prefix = substr('Host Name (Server)', 1, 3) | where Prefix = DBC * | where indexOf('Host Name (Server)', 'DBC') != -1
Si vous devez utiliser fréquemment des opérateurs de chaîne, vous devez envisager de les déplacer vers l'analyseur ou la source de journaux et de créer des champs distincts.
Intervalles de temps longs
L'interrogation d'une grande quantité de données sur une longue période est également coûteuse. Essayez de réduire l'intervalle de temps ou d'ajouter d'autres critères de recherche pour réduire la quantité de données à traiter.
Utiliser plusieurs jeux de journaux
Si le partitionnement des journaux est activé pour votre location, vous utilisez un jeu de journaux pour sélectionner une partie des données de journal. Les jeux de journaux sont optimisés pour réduire la charge sur le système. Si vous effectuez une interrogation sur un seul jeu de journaux, celle-ci est conservée sur un jeu de serveurs plus petit. Mais une interrogation sur un grand nombre de jeux de journaux entraîne davantage de transferts de données et d'interrogations sur un plus grand nombre de services. Cela peut entraîner un ralentissement important des interrogations.
Évitez d'utiliser plus de cinq jeux de journaux dans une interrogation pour obtenir des performances optimales.
Autres opérations coûteuses
Voici quelques-unes des autres opérations coûteuses qui peuvent ralentir les interrogations sur une grande quantité de données :
sort
- Commandes
head
outail
- Commandes
stats
outimestats
avec des champs de cardinalité élevée. Il s'agit des champs qui ont un grand nombre de valeurs distinctes. ID transaction, ECID, etc. sont des exemples de ces champs.