Colonnes standard dans les journaux Azure Monitor

Les données des journaux Azure Monitor sont stockées sous la forme d’un jeu d’enregistrements dans un espace de travail Log Analytics ou dans une application Application Insights, chacun ayant un type de données particulier associé à un ensemble unique de colonnes. De nombreux types de données comportent des colonnes standard qui sont communes à plusieurs types. Cet article décrit ces colonnes et fournit des exemples sur la façon dont vous pouvez les utiliser dans des requêtes.

Les applications basées sur un espace de travail dans Application Insights stockent leurs données dans un espace de travail Log Analytics et utilisent les mêmes colonnes standard que les autres tables de l'espace de travail. Les applications classiques stockent leurs données séparément et présentent des colonnes standard différentes, comme spécifié dans cet article.

Notes

Certaines des colonnes standard n'apparaîtront pas dans la vue schéma ou IntelliSense de Log Analytics, et n'apparaîtront pas dans les résultats des requêtes, à moins de spécifier explicitement la colonne dans la sortie.

TenantId

La colonne TenantId contient l’ID de l’espace de travail Log Analytics.

TimeGenerated

La colonne TimeGenerated contient la date et l’heure auxquelles l’enregistrement a été créé par la source de données. Pour plus d’informations, consultez Durée d’ingestion de données de journal dans Azure Monitor.

TimeGenerated fournit une colonne commune à utiliser pour filtrer ou résumer par heure. Quand vous sélectionnez un intervalle de temps pour un affichage ou un tableau de bord dans le portail Azure, TimeGenerated est utilisée pour filtrer les résultats.

Notes

Les tables prenant en charge les ressources Application Insights classiques utilisent la colonne Timestamp au lieu de la colonne TimeGenerated.

Notes

La valeur TimeGenerated ne peut pas être antérieure à 2 jours avant l’heure de réception ou plus d’un jour dans le futur. Si, dans une situation donnée, la valeur est antérieure à 2 jours ou plus d’un jour dans le futur, elle est remplacée par l’heure de réception réelle.

Exemples

La requête suivante renvoie le nombre d’événements d’erreur créés pour chaque jour de la semaine précédente.

Event
| where EventLevelName == "Error" 
| where TimeGenerated between(startofweek(ago(7days))..endofweek(ago(7days))) 
| summarize count() by bin(TimeGenerated, 1day) 
| sort by TimeGenerated asc 

_TimeReceived

La colonne _TimeReceived contient la date et l’heure auxquelles l’enregistrement a été reçu par le point d’ingestion Azure Monitor dans le cloud Azure. Cela peut être utile pour identifier les problèmes de latence entre la source de données et le cloud. Par exemple, un problème de mise en réseau entraîne un retard dans l’envoi des données par un agent. Pour plus d’informations, consultez Durée d’ingestion de données de journal dans Azure Monitor.

Notes

La colonne _TimeReceived est calculée chaque fois qu’elle est utilisée. Ce processus consomme beaucoup de ressources. Ne l’utilisez pas pour filtrer un grand nombre d’enregistrements. L’utilisation de cette fonction en parallèle peut entraîner une augmentation de la durée d’exécution de la requête.

La requête suivante fournit la latence moyenne par heure pour les enregistrements d'événements d'un agent. Cela comprend le temps entre l’agent et le cloud et le temps total pendant lequel l'enregistrement doit être disponible pour les requêtes du journal.

Event
| where TimeGenerated > ago(1d) 
| project TimeGenerated, TimeReceived = _TimeReceived, IngestionTime = ingestion_time() 
| extend AgentLatency = toreal(datetime_diff('Millisecond',TimeReceived,TimeGenerated)) / 1000
| extend TotalLatency = toreal(datetime_diff('Millisecond',IngestionTime,TimeGenerated)) / 1000
| summarize avg(AgentLatency), avg(TotalLatency) by bin(TimeGenerated,1hr)

Type

La colonne Type contient le nom de la table dans laquelle l’enregistrement a été récupéré, qui peut également être considéré comme le type d’enregistrement. Cette colonne est utile dans les requêtes qui combinent des enregistrements issus de plusieurs tableaux, comme ceux utilisés par l’opérateur search pour distinguer les enregistrements de différents types. $table peut être utilisé à la place de Type dans certaines requêtes.

Notes

Les tables prenant en charge les ressources Application Insights classiques utilisent la colonne itemType au lieu de la colonne Type.

Exemples

La requête suivante renvoie le nombre d’enregistrements par type collectés au cours de la dernière heure.

search * 
| where TimeGenerated > ago(1h)
| summarize count() by Type

_ItemId

La colonne _ItemId contient l’identificateur unique de l’enregistrement.

_ResourceId

La colonne _ResourceId contient l’identificateur unique de la ressource à laquelle l’enregistrement est associé. Vous disposez ainsi d’une colonne standard à utiliser pour étendre votre requêtes aux enregistrements d’une ressource particulière seulement, ou pour associer des données liées entre plusieurs tables.

Pour les ressources Azure, la valeur de _ResourceId est l’URL d’ID de la ressource Azure. La colonne se limite aux ressources Azure, notamment les ressources Azure Arc, ou aux journaux personnalisés qui indiquent l’ID de la ressource lors de l’ingestion.

Notes

Certains types de données ont déjà des champs qui contiennent les ID de ressource Azure ou au moins des parties de ceux-ci, comme l’ID d’abonnement. Même si ces fichiers sont conservés à des fins de compatibilité descendante, il est recommandé d’utiliser la propriété _ResourceId pour établir une corrélation, puisqu’elle est plus cohérente.

Exemples

La requête suivante associe des données de performances et d’événement pour chaque ordinateur. Il montre tous les événements dont l’ID est 101 et l’utilisation des processeurs est supérieure à 50 %.

Perf 
| where CounterName == "% User Time" and CounterValue  > 50 and _ResourceId != "" 
| join kind=inner (     
    Event 
    | where EventID == 101 
) on _ResourceId

La requête suivante associe des enregistrements AzureActivity à des enregistrements SecurityEvent. Il montre toutes les opérations d’activité avec les utilisateurs qui se sont connectés à ces machines.

AzureActivity 
| where  
    OperationName in ("Restart Virtual Machine", "Create or Update Virtual Machine", "Delete Virtual Machine")  
    and ActivityStatus == "Succeeded"  
| join kind= leftouter (    
   SecurityEvent 
   | where EventID == 4624  
   | summarize LoggedOnAccounts = makeset(Account) by _ResourceId 
) on _ResourceId  

La requête suivante analyse _ResourceId et agrège les volumes de données facturés par groupe de ressources Azure.

union withsource = tt * 
| where _IsBillable == true 
| parse tolower(_ResourceId) with "/subscriptions/" subscriptionId "/resourcegroups/" 
    resourceGroup "/providers/" provider "/" resourceType "/" resourceName   
| summarize Bytes=sum(_BilledSize) by resourceGroup | sort by Bytes nulls last 

L’exécution d’analyses sur différents types de données étant coûteuse, utilisez ces requêtes union withsource = tt * avec parcimonie.

Il est toujours plus efficace d’utiliser la colonne _SubscriptionId que de l’extraire en analysant la colonne _ResourceId.

_SubscriptionId

La colonne _SubscriptionId contient l’ID d’abonnement de la ressource à laquelle l’enregistrement est associé. Vous disposez ainsi d’une colonne standard à utiliser pour étendre votre requête aux enregistrements d’une ressource particulière seulement, ou pour comparer différents abonnements.

Pour les ressources Azure, la valeur de __SubscriptionId est la partie de l’abonnement de l’URL d’ID de la ressource Azure. La colonne se limite aux ressources Azure, notamment les ressources Azure Arc, ou aux journaux personnalisés qui indiquent l’ID d’abonnement lors de l’ingestion.

Remarque

Certains types de données possèdent déjà des champs qui contiennent l’ID d’abonnement Azure. Même si ces champs sont conservés à des fins de compatibilité descendante, il est recommandé d’utiliser la colonne _SubscriptionId pour établir une corrélation, puisqu’elle est plus cohérente.

Exemples

La requête suivante examine les données de performances pour les ordinateurs d’un abonnement spécifique.

Perf 
| where TimeGenerated > ago(24h) and CounterName == "memoryAllocatableBytes"
| where _SubscriptionId == "ebb79bc0-aa86-44a7-8111-cabbe0c43993"
| summarize avgMemoryAllocatableBytes = avg(CounterValue) by Computer

La requête suivante analyse _ResourceId et agrège les volumes de données facturés par abonnement Azure.

union withsource = tt * 
| where _IsBillable == true 
| summarize Bytes=sum(_BilledSize) by _SubscriptionId | sort by Bytes nulls last 

L’exécution d’analyses sur différents types de données étant coûteuse, utilisez ces requêtes union withsource = tt * avec parcimonie.

_IsBillable

La colonne _IsBillable spécifie si les données ingérées sont facturables. Les données pour lesquelles _IsBillable est égal à false n’entraînent pas de frais d’ingestion, de conservation ou d’archivage des données.

Exemples

Pour obtenir la liste des ordinateurs qui envoient des types de données facturés, utilisez la requête suivante :

Notes

Utilisez les requêtes accompagnées de union withsource = tt * avec parcimonie, car l’exécution d’analyses sur différents types de données est coûteuse.

union withsource = tt * 
| where _IsBillable == true 
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize TotalVolumeBytes=sum(_BilledSize) by computerName

Cela peut être étendu pour renvoyer le nombre d'ordinateurs par heure qui envoient des types de données facturés :

union withsource = tt * 
| where _IsBillable == true 
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize dcount(computerName) by bin(TimeGenerated, 1h) | sort by TimeGenerated asc

_BilledSize

La colonne _BilledSize spécifie la taille en octets des données qui seront facturées sur votre compte Azure si la propriété _IsBillable est true. Consultez Calcul de la taille des données pour en savoir plus sur le calcul de la taille facturée.

Exemples

Pour afficher la taille des événements facturables ingérés par ordinateur, utilisez la colonne _BilledSize qui fournit la taille en octets :

union withsource = tt * 
| where _IsBillable == true 
| summarize Bytes=sum(_BilledSize) by  Computer | sort by Bytes nulls last 

Pour connaître la taille des événements facturables ingérés par abonnement, exécutez la requête suivante :

union withsource=table * 
| where _IsBillable == true 
| summarize Bytes=sum(_BilledSize) by  _SubscriptionId | sort by Bytes nulls last 

Pour connaître la taille des événements facturables ingérés par groupe de ressources, exécutez la requête suivante :

union withsource=table * 
| where _IsBillable == true 
| parse _ResourceId with "/subscriptions/" SubscriptionId "/resourcegroups/" ResourceGroupName "/" *
| summarize Bytes=sum(_BilledSize) by  _SubscriptionId, ResourceGroupName | sort by Bytes nulls last 

Pour connaître le nombre d'événements ingérés par ordinateur, utilisez la requête suivante :

union withsource = tt *
| summarize count() by Computer | sort by count_ nulls last

Pour connaître le nombre d'événements facturables ingérés par ordinateur, utilisez la requête suivante :

union withsource = tt * 
| where _IsBillable == true 
| summarize count() by Computer  | sort by count_ nulls last

Pour connaître le nombre de types de données facturables issues d’un ordinateur spécifique, exécutez la requête suivante :

union withsource = tt *
| where Computer == "computer name"
| where _IsBillable == true 
| summarize count() by tt | sort by count_ nulls last 

Étapes suivantes