Surveiller, diagnostiquer et résoudre les problèmes liés à Microsoft Azure StorageMonitor, diagnose, and troubleshoot Microsoft Azure Storage

Vue d’ensembleOverview

Le diagnostic et la résolution des problèmes dans une application distribuée hébergée dans un environnement cloud peuvent s'avérer plus complexes que dans des environnements traditionnels.Diagnosing and troubleshooting issues in a distributed application hosted in a cloud environment can be more complex than in traditional environments. Les applications peuvent être déployées dans une infrastructure PaaS ou IaaS, localement, sur un appareil mobile ou dans une combinaison de ces environnements.Applications can be deployed in a PaaS or IaaS infrastructure, on premises, on a mobile device, or in some combination of these environments. Le trafic réseau de votre application traverse généralement des réseaux publics et privés, et votre application peut utiliser différentes technologies de stockage, comme Stockage Table, Stockage Blob, Stockage File d’attente ou Stockage Fichier de Microsoft Azure, en plus d’autres magasins de données, comme des bases de données relationnelles et de documents.Typically, your application's network traffic may traverse public and private networks and your application may use multiple storage technologies such as Microsoft Azure Storage Tables, Blobs, Queues, or Files in addition to other data stores such as relational and document databases.

Pour gérer avec succès de telles applications, vous devez les analyser de façon proactive et savoir comment diagnostiquer et résoudre n'importe quel problème associé à leur fonctionnement et leurs technologies associées.To manage such applications successfully you should monitor them proactively and understand how to diagnose and troubleshoot all aspects of them and their dependent technologies. En tant qu'utilisateur des services Azure Storage, vous devez surveiller en permanence les services de stockage utilisés par votre application afin de détecter tout comportement imprévu (par ex., des temps de réponse plus lents que d'habitude), et utiliser la journalisation afin de collecter davantage de données détaillées et analyser chaque problème en profondeur.As a user of Azure Storage services, you should continuously monitor the Storage services your application uses for any unexpected changes in behavior (such as slower than usual response times), and use logging to collect more detailed data and to analyze a problem in depth. Les informations de diagnostic obtenues via l'analyse et la journalisation vous aideront à déterminer la cause première du problème rencontré par votre application.The diagnostics information you obtain from both monitoring and logging will help you to determine the root cause of the issue your application encountered. Vous pouvez alors résoudre le problème et déterminer la procédure appropriée pour y remédier.Then you can troubleshoot the issue and determine the appropriate steps you can take to remediate it. Azure Storage est l'un des principaux services de Azure et un élément essentiel de la plupart des solutions que les clients déploient dans l'infrastructure Azure.Azure Storage is a core Azure service, and forms an important part of the majority of solutions that customers deploy to the Azure infrastructure. Azure Storage inclut des fonctionnalités qui permettent de simplifier l'analyse, le diagnostic et la résolution des problèmes de stockage rencontrés par vos applications sur le cloud.Azure Storage includes capabilities to simplify monitoring, diagnosing, and troubleshooting storage issues in your cloud-based applications.

IntroductionIntroduction

Ce guide vous explique comment utiliser des fonctionnalités telles que Azure Storage Analytics, la journalisation côté client dans la bibliothèque cliente de Azure Storage, et d’autres outils tiers permettant d’identifier, diagnostiquer et résoudre les problèmes liés à Azure Storage.This guide shows you how to use features such as Azure Storage Analytics, client-side logging in the Azure Storage Client Library, and other third-party tools to identify, diagnose, and troubleshoot Azure Storage related issues.

Diagramme qui illustre le flux d'informations entre les applications des clients et les services de stockage Azure.

Ce guide est destiné principalement aux développeurs de services en ligne qui utilisent les services Azure Storage et aux professionnels de l’informatique responsables de la gestion de tels services en ligne.This guide is intended to be read primarily by developers of online services that use Azure Storage Services and IT Pros responsible for managing such online services. Ce guide a pour objectifs de :The goals of this guide are:

  • Vous aider à maintenir l'état d'intégrité et les performances de vos comptes Azure Storage.To help you maintain the health and performance of your Azure Storage accounts.
  • Mettre à votre disposition les processus et outils nécessaires pour vous aider à déterminer si un problème rencontré dans une application est lié à Stockage Azure.To provide you with the necessary processes and tools to help you decide whether an issue or problem in an application relates to Azure Storage.
  • Mettre à votre disposition des mesures concrètes pour la résolution des problèmes liés à Azure Storage.To provide you with actionable guidance for resolving problems related to Azure Storage.

Organisation de ce guideHow this guide is organized

La section «Analyse de votre service de stockage» explique comment analyser l'état d'intégrité et les performances de vos services Azure Storage à l'aide des métriques Azure Storage Analytics (métriques de stockage).The section "Monitoring your storage service" describes how to monitor the health and performance of your Azure Storage services using Azure Storage Analytics Metrics (Storage Metrics).

La section «Diagnostic des problèmes de stockage» explique comment diagnostiquer les problèmes à l'aide de la journalisation Azure Storage Analytics (journalisation du stockage).The section "Diagnosing storage issues" describes how to diagnose issues using Azure Storage Analytics Logging (Storage Logging). Elle explique également comment activer la journalisation côté client à l'aide des fonctionnalités dans une des bibliothèques clientes, telles que la bibliothèque cliente de stockage pour .NET ou le Kit de développement logiciel (SDK) pour Java.It also describes how to enable client-side logging using the facilities in one of the client libraries such as the Storage Client Library for .NET or the Azure SDK for Java.

La section «Suivi de bout en bout» explique comment mettre en corrélation les informations contenues dans divers fichiers journaux et les données métriques.The section "End-to-end tracing" describes how you can correlate the information contained in various log files and metrics data.

La section «Instructions pour la résolution des problèmes» fournit des instructions pour la résolution de certains des problèmes de stockage communs.The section "Troubleshooting guidance" provides troubleshooting guidance for some of the common storage-related issues you might encounter.

La section « Annexes » inclut des informations concernant l’utilisation d’autres outils tels que Wireshark et Netmon pour l’analyse des données des paquets réseau et Fiddler pour l’analyse des messages HTTP/HTTPS.The "Appendices" include information about using other tools such as Wireshark and Netmon for analyzing network packet data, and Fiddler for analyzing HTTP/HTTPS messages.

Analyse de votre service de stockageMonitoring your storage service

Si vous connaissez les outils d’analyse de performances Windows, vous pouvez considérer les métriques de stockage comme l’équivalent, dans Azure Storage, des compteurs de l’Analyseur de performances Windows.If you are familiar with Windows performance monitoring, you can think of Storage Metrics as being an Azure Storage equivalent of Windows Performance Monitor counters. Les métriques de stockage incluent un vaste éventail de métriques (appelées compteurs dans la terminologie de l’Analyseur de performances Windows) telles que la disponibilité du service, le nombre total de requêtes du service ou le pourcentage de requêtes réussies envoyées au service.In Storage Metrics, you will find a comprehensive set of metrics (counters in Windows Performance Monitor terminology) such as service availability, total number of requests to service, or percentage of successful requests to service. Pour obtenir une liste de toutes les métriques disponibles, consultez l’article Schéma de table de métriques Storage Analytics.For a full list of the available metrics, see Storage Analytics Metrics Table Schema. Vous pouvez spécifier si vous désirez que le service de stockage collecte et agrège les métriques toutes les heures ou toutes les minutes.You can specify whether you want the storage service to collect and aggregate metrics every hour or every minute. Pour plus d’informations sur la façon d’activer les métriques et d’analyser vos comptes de stockage, consultez la section Activation de Storage Metrics et affichage des données de métriques.For more information about how to enable metrics and monitor your storage accounts, see Enabling storage metrics and viewing metrics data.

Vous pouvez sélectionner les métriques horaires à afficher dans le portail Azure et configurer les règles de notification par e-mail des administrateurs lorsqu’une métrique horaire dépasse un seuil spécifique.You can choose which hourly metrics you want to display in the Azure portal and configure rules that notify administrators by email whenever an hourly metric exceeds a particular threshold. Pour plus d’informations, consultez Réception de notifications d’alerte.For more information, see Receive Alert Notifications.

Nous vous recommandons de consulter Azure Monitor pour le stockage (préversion).We recommend you review Azure Monitor for Storage (preview). Il s’agit d’une fonctionnalité d’Azure Monitor qui fournit une analyse complète de vos comptes de Stockage Azure en présentant une vue unifiée des performances, de la capacité et de la disponibilité de vos services de Stockage Azure.It is a feature of Azure Monitor that offers comprehensive monitoring of your Azure Storage accounts by delivering a unified view of your Azure Storage services performance, capacity, and availability. Vous n’avez pas besoin d’activer ou de configurer quoi que ce soit, et vous pouvez afficher immédiatement ces métriques à partir des graphiques interactifs prédéfinis et d’autres visualisations incluses.It does not require you to enable or configure anything, and you can immediately view these metrics from the pre-defined interactive charts and other visualizations included.

Le service de stockage collecte les métriques du mieux qu’il peut, mais peut ne pas enregistrer toutes les opérations de stockage.The storage service collects metrics using a best effort, but may not record every storage operation.

Dans le portail Azure, vous pouvez afficher des métriques telles que la disponibilité, le nombre total de demandes et les valeurs de latence moyenne pour un compte de stockage.In the Azure portal, you can view metrics such as availability, total requests, and average latency numbers for a storage account. Une règle de notification a également été configurée afin d'alerter l'administrateur lorsque la disponibilité chute en dessous d'un certain niveau.A notification rule has also been set up to alert an administrator if availability drops below a certain level. Lorsque ces données sont affichées, l'un des possibles éléments d'enquête est la présence d'un pourcentage inférieur à 100 % dans le service de table (pour plus d'informations, voir la section «Les métriques indiquent une valeur PercentSuccess faible ou les entrées du journal d’analyse incluent des opérations avec un statut de transaction ClientOtherErrors»).From viewing this data, one possible area for investigation is the table service success percentage being below 100% (for more information, see the section "Metrics show low PercentSuccess or analytics log entries have operations with transaction status of ClientOtherErrors").

Vous devez surveiller en permanence vos applications Azure afin de vous assurer qu’elles sont intègres et fonctionnent comme prévu en :You should continuously monitor your Azure applications to ensure they are healthy and performing as expected by:

  • Établissant certaines métriques de base pour l'application, qui vous permettront de comparer les données actuelles et d'identifier toute modification significative dans le comportement du stockage Azure et votre application.Establishing some baseline metrics for application that will enable you to compare current data and identify any significant changes in the behavior of Azure storage and your application. Les valeurs de vos métriques de base seront, dans de nombreux cas, spécifiques à l'application et doivent être établies lors des tests de performances de votre application.The values of your baseline metrics will, in many cases, be application specific and you should establish them when you are performance testing your application.
  • Enregistrant les métriques par minute et en les utilisant pour analyser activement les erreurs inattendues et anomalies telles que les pics au niveau du nombre d'erreurs ou du taux de demandes.Recording minute metrics and using them to monitor actively for unexpected errors and anomalies such as spikes in error counts or request rates.
  • Enregistrant les métriques horaires et en les utilisant pour analyser les valeurs moyennes telles que le nombre d'erreurs et le taux de demandes moyens.Recording hourly metrics and using them to monitor average values such as average error counts and request rates.
  • Enquêtant sur les problèmes potentiels à l'aide des outils de diagnostic abordés plus bas dans la section «Diagnostic des problèmes de stockage».Investigating potential issues using diagnostics tools as discussed later in the section "Diagnosing storage issues."

Les graphiques de l’image suivante illustrent comment la moyenne établie pour les métriques horaires peut cacher certains pics d'activité.The charts in the following image illustrate how the averaging that occurs for hourly metrics can hide spikes in activity. Les métriques horaires s'affichent pour indiquer un taux de demandes stable ; les métriques par minute révèlent les fluctuations réelles.The hourly metrics appear to show a steady rate of requests, while the minute metrics reveal the fluctuations that are really taking place.

Les graphiques illustrent comment la moyenne établie pour les métriques horaires peut cacher certains pics d’activité.

La suite de cette section décrit quelles métriques vous devriez analyser et pourquoi.The remainder of this section describes what metrics you should monitor and why.

Analyse de l’état d’intégrité du serviceMonitoring service health

Vous pouvez utiliser le portail Azure pour afficher l’état du service de stockage (et d’autres services Azure) dans toutes les régions Azure de par le monde.You can use the Azure portal to view the health of the Storage service (and other Azure services) in all the Azure regions around the world. La surveillance vous permet de savoir immédiatement si un problème sur lequel vous n’avez pas de contrôle affecte le service Stockage dans la région que vous utilisez pour l’application.Monitoring enables you to see immediately if an issue outside of your control is affecting the Storage service in the region you use for your application.

Le portail Azure peut également envoyer des notifications des incidents qui affectent les divers services Azure.The Azure portal can also provide notifications of incidents that affect the various Azure services. Remarque : Ces informations étaient accessibles avec les données d’historique dans le Tableau de bord des services Azure.Note: This information was previously available, along with historical data, on the Azure Service Dashboard. Pour plus d’informations sur Application Insights pour Azure DevOps, consultez « Annexe 5 : Supervision avec Application Insights pour Azure DevOps ».For more information about Application Insights for Azure DevOps, see the appendix "Appendix 5: Monitoring with Application Insights for Azure DevOps."

Analyse de la capacitéMonitoring capacity

Les métriques de stockage enregistrent uniquement les métriques de capacité pour le service d’objet blob, car les objets blob constituent généralement la majeure partie des données stockées (lors de l'écriture, il n'est pas possible d'utiliser les métriques de stockage pour analyser la capacité de vos tables et files d'attente).Storage Metrics only stores capacity metrics for the blob service because blobs typically account for the largest proportion of stored data (at the time of writing, it is not possible to use Storage Metrics to monitor the capacity of your tables and queues). Ces données sont accessibles dans la table $MetricsCapacityBlob si vous avez activé l'analyse pour le service d'objet blob.You can find this data in the $MetricsCapacityBlob table if you have enabled monitoring for the Blob service. Les métriques de stockage enregistrent ces données une fois par jour, et vous pouvez utiliser la valeur de la RowKey pour déterminer si la ligne contient une entité associée à des données utilisateur (valeur data) ou des données d’analyse (valeur analytics).Storage Metrics records this data once per day, and you can use the value of the RowKey to determine whether the row contains an entity that relates to user data (value data) or analytics data (value analytics). Chaque entité stockée contient des informations sur la quantité de stockage utilisée (Capacity mesurée en octets) et le nombre actuel de conteneurs (ContainerCount) et d’objets blob (ObjectCount) utilisés dans le compte de stockage.Each stored entity contains information about the amount of storage used (Capacity measured in bytes) and the current number of containers (ContainerCount) and blobs (ObjectCount) in use in the storage account. Pour plus d’informations sur les métriques de capacité stockées dans la table $MetricsCapacityBlob , consultez Schéma de table de métriques Storage Analytics.For more information about the capacity metrics stored in the $MetricsCapacityBlob table, see Storage Analytics Metrics Table Schema.

Notes

Ces valeurs doivent être analysées en guise de préavertissement lorsque vous approchez des limites de capacité de votre compte de stockage.You should monitor these values for an early warning that you are approaching the capacity limits of your storage account. Dans le portail Azure, vous pouvez ajouter des règles d’alerte pour être averti lorsque l’utilisation agrégée du stockage dépasse les seuils que vous définissez ou chute en dessous de ces seuils.In the Azure portal, you can add alert rules to notify you if aggregate storage use exceeds or falls below thresholds that you specify.

Pour plus d’informations sur l’estimation de la taille des divers objets de stockage tels que les objets blob, consultez le billet de blog Understanding Azure Storage Billing – Bandwidth, Transactions, and Capacity(Présentation de la facturation du stockage Azure - bande passante, transactions et capacité).For help estimating the size of various storage objects such as blobs, see the blog post Understanding Azure Storage Billing – Bandwidth, Transactions, and Capacity.

Analyse de la disponibilitéMonitoring availability

Vous devez analyser la disponibilité des services de stockage dans votre compte de stockage en examinant la colonne Availability de vos tables de métriques horaires ou par minute — $MetricsHourPrimaryTransactionsBlob, $MetricsHourPrimaryTransactionsTable, $MetricsHourPrimaryTransactionsQueue, $MetricsMinutePrimaryTransactionsBlob, $MetricsMinutePrimaryTransactionsTable, $MetricsMinutePrimaryTransactionsQueue, $MetricsCapacityBlob.You should monitor the availability of the storage services in your storage account by monitoring the value in the Availability column in the hourly or minute metrics tables — $MetricsHourPrimaryTransactionsBlob, $MetricsHourPrimaryTransactionsTable, $MetricsHourPrimaryTransactionsQueue, $MetricsMinutePrimaryTransactionsBlob, $MetricsMinutePrimaryTransactionsTable, $MetricsMinutePrimaryTransactionsQueue, $MetricsCapacityBlob. La colonne Availability contient une valeur de pourcentage qui indique la disponibilité du service ou de l’opération API représentée par la ligne (la RowKey s’affiche si la ligne contient des métriques pour l’ensemble du service ou pour une opération API spécifique).The Availability column contains a percentage value that indicates the availability of the service or the API operation represented by the row (the RowKey shows if the row contains metrics for the service as a whole or for a specific API operation).

Toute valeur inférieure à 100 % indique que certaines demandes de stockage échouent.Any value less than 100% indicates that some storage requests are failing. Vous pouvez connaître la raison de l'échec en examinant les autres colonnes dans les données métriques qui indiquent les nombres de demandes avec différents types d'erreur, tels que ServerTimeoutError.You can see why they are failing by examining the other columns in the metrics data that show the numbers of requests with different error types such as ServerTimeoutError. Il est normal que la valeur de la colonne Availability descende provisoirement en dessous de 100% pour des raisons telles que des délais d'expiration de serveur temporaires, lorsque le service déplace des partitions afin de mieux équilibrer la charge de la demande ; la logique de nouvelle tentative dans votre application client doit gérer ces conditions intermittentes.You should expect to see Availability fall temporarily below 100% for reasons such as transient server timeouts while the service moves partitions to better load-balance request; the retry logic in your client application should handle such intermittent conditions. L’article Opérations et messages d’état enregistrés Storage Analytics répertorie les types de transactions que Storage Metrics inclut dans son calcul Disponibilité .The article Storage Analytics Logged Operations and Status Messages lists the transaction types that Storage Metrics includes in its Availability calculation.

Dans le portail Azure, vous pouvez ajouter des règles d’alerte pour être averti lorsque la valeur Availability pour un service chute en dessous d’un seuil que vous spécifiez.In the Azure portal, you can add alert rules to notify you if Availability for a service falls below a threshold that you specify.

La section «Instructions pour la résolution des problèmes» de ce guide décrit certains des problèmes de service de stockage liés à la disponibilité.The "Troubleshooting guidance" section of this guide describes some common storage service issues related to availability.

Analyse des performancesMonitoring performance

Pour analyser les performances de vos services de stockage, vous pouvez utiliser les métriques suivantes des tables de métriques horaires ou par minute.To monitor the performance of the storage services, you can use the following metrics from the hourly and minute metrics tables.

  • Les valeurs des colonnes AverageE2ELatency et AverageServerLatency indiquent le temps moyen nécessaire au service de stockage ou à l’opération API pour traiter les demandes.The values in the AverageE2ELatency and AverageServerLatency columns show the average time the storage service or API operation type is taking to process requests. AverageE2ELatency est une mesure de la latence de bout en bout, qui inclut le temps nécessaire pour lire la demande et envoyer la réponse, en plus du temps nécessaire pour traiter la demande (elle inclut donc la latence réseau lorsque la demande parvient au service de stockage) ; AverageServerLatency est une mesure du seul temps de traitement et n’inclut donc aucune latence réseau associée à la communication avec le client.AverageE2ELatency is a measure of end-to-end latency that includes the time taken to read the request and send the response in addition to the time taken to process the request (therefore includes network latency once the request reaches the storage service); AverageServerLatency is a measure of just the processing time and therefore excludes any network latency related to communicating with the client. Voir la section «Les métriques indiquent une valeur AverageE2ELatency élevée et une valeur AverageServerLatency faible» plus bas dans ce guide pour examiner les raisons d'une éventuelle différence importante entre ces deux valeurs.See the section "Metrics show high AverageE2ELatency and low AverageServerLatency" later in this guide for a discussion of why there might be a significant difference between these two values.
  • Les valeurs dans les colonnes TotalIngress et TotalEgress indiquent le volume total des données (en octets) entrant dans et sortant de votre service de stockage, ou via un type d’opération API spécifique.The values in the TotalIngress and TotalEgress columns show the total amount of data, in bytes, coming in to and going out of your storage service or through a specific API operation type.
  • Les valeurs dans la colonne TotalRequests indiquent le nombre total de demandes que le service de stockage de l'opération API reçoit.The values in the TotalRequests column show the total number of requests that the storage service of API operation is receiving. TotalRequests est le nombre total de demandes que le service de stockage reçoit.TotalRequests is the total number of requests that the storage service receives.

Toute modification inattendue de ces valeurs est généralement l’indicateur d’un problème qui doit faire l’objet d’une enquête.Typically, you will monitor for unexpected changes in any of these values as an indicator that you have an issue that requires investigation.

Dans le portail Azure, vous pouvez ajouter des règles d’alerte pour être averti lorsque des métriques de performances pour ce service chutent en dessous ou dépassent un seuil que vous spécifiez.In the Azure portal, you can add alert rules to notify you if any of the performance metrics for this service fall below or exceed a threshold that you specify.

La section «Instructions pour la résolution des problèmes» de ce guide décrit certains des problèmes de service de stockage liés aux performances.The "Troubleshooting guidance" section of this guide describes some common storage service issues related to performance.

Diagnostic des problèmes de stockageDiagnosing storage issues

Il existe différentes façons de savoir si votre application a rencontré un problème :There are a number of ways that you might become aware of a problem or issue in your application, including:

  • Défaillance majeure qui provoque un blocage de l'application ou son arrêt.A major failure that causes the application to crash or to stop working.
  • Changements significatifs des valeurs de base dans les métriques que vous analysez, tel qu'indiqué dans la section précédente «Analyse de votre service de stockage».Significant changes from baseline values in the metrics you are monitoring as described in the previous section "Monitoring your storage service."
  • Rapports des utilisateurs de votre application indiquant qu'une certaine opération ne s'est pas effectuée comme prévu ou qu'une fonctionnalité est défectueuse.Reports from users of your application that some particular operation didn't complete as expected or that some feature is not working.
  • Erreurs générées au sein de votre application et affichées dans les fichiers journaux ou via d'autres méthodes de notification.Errors generated within your application that appear in log files or through some other notification method.

Les problèmes associés aux services de stockage Azure se répartissent généralement en quatre catégories principales :Typically, issues related to Azure storage services fall into one of four broad categories:

  • Votre application connaît un problème de performances signalé par les utilisateurs ou révélé par des changements dans les métriques de performances.Your application has a performance issue, either reported by your users, or revealed by changes in the performance metrics.
  • Il existe un problème au niveau de l'infrastructure Azure Storage dans une ou plusieurs régions.There is a problem with the Azure Storage infrastructure in one or more regions.
  • Votre application connaît un problème de performances signalé par les utilisateurs ou révélé par une augmentation dans les métriques de nombre d'erreurs que vous analysez.Your application is encountering an error, either reported by your users, or revealed by an increase in one of the error count metrics you monitor.
  • Pendant le développement et les tests, il se peut que vous utilisiez l'émulateur de stockage local et rencontriez des problèmes spécifiques à son utilisation.During development and test, you may be using the local storage emulator; you may encounter some issues that relate specifically to usage of the storage emulator.

Les sections suivantes expliquent les étapes à suivre pour le diagnostic et la résolution des problèmes dans chacune de ces quatre catégories.The following sections outline the steps you should follow to diagnose and troubleshoot issues in each of these four categories. La section «Instructions pour la résolution des problèmes» plus bas dans ce guide aborde plus en détail certains des problèmes que vous pouvez être amené à rencontrer.The section "Troubleshooting guidance" later in this guide provides more detail for some common issues you may encounter.

Problèmes d’état d’intégrité du serviceService health issues

Les problèmes d’état du service sont généralement des problèmes sur lesquels vous n’avez pas de contrôle.Service health issues are typically outside of your control. Le portail Azure fournit des informations sur n’importe quel problème en cours avec les services Azure, y compris les services de stockage.The Azure portal provides information about any ongoing issues with Azure services including storage services. Si vous avez opté pour un stockage géoredondant avec accès en lecture lors de la création de votre compte de stockage, si vos données ne sont plus accessibles depuis l’emplacement principal, votre application peut passer provisoirement à une copie en lecture seule dans l’emplacement secondaire.If you opted for Read-Access Geo-Redundant Storage when you created your storage account, then if your data becomes unavailable in the primary location, your application can switch temporarily to the read-only copy in the secondary location. Pour un accès en lecture à partir de l’emplacement secondaire, votre application doit être capable de passer indifféremment des emplacements de stockage principaux aux emplacements de stockage secondaires, et de fonctionner dans un mode de fonctionnalités réduites, avec des données en lecture seule.To read from the secondary, your application must be able to switch between using the primary and secondary storage locations, and be able to work in a reduced functionality mode with read-only data. Les bibliothèques clientes Azure Storage vous permettent de définir une stratégie de nouvelle tentative afin de passer à une lecture depuis le stockage secondaire lorsque la lecture depuis le stockage principal échoue.The Azure Storage Client libraries allow you to define a retry policy that can read from secondary storage in case a read from primary storage fails. Votre application doit également être capable de reconnaître que les données de l’emplacement secondaire sont cohérentes.Your application also needs to be aware that the data in the secondary location is eventually consistent. Pour plus d’informations, consultez le billet de blog Azure Storage Redundancy Options and Read Access Geo Redundant Storage.For more information, see the blog post Azure Storage Redundancy Options and Read Access Geo Redundant Storage.

Problèmes de performancesPerformance issues

Les performances d’une application peuvent être subjectives, en particulier du point de vue de l’utilisateur.The performance of an application can be subjective, especially from a user perspective. C'est pourquoi il est important de disposer de métriques de base afin de vous aider à identifier les problèmes de performances éventuels.Therefore, it is important to have baseline metrics available to help you identify where there might be a performance issue. De nombreux facteurs peuvent affecter les performances d'un service de stockage Azure du point de vue de l'application cliente.Many factors might affect the performance of an Azure storage service from the client application perspective. Ces facteurs peuvent affecter le service de stockage, l'infrastructure cliente ou l'infrastructure réseau ; il est donc important d'établir une stratégie d'identification de la cause initiale du problème de performances.These factors might operate in the storage service, in the client, or in the network infrastructure; therefore it is important to have a strategy for identifying the origin of the performance issue.

Après avoir identifié l'emplacement probable de la cause du problème de performances à partir des métriques, vous pouvez utiliser les fichiers journaux afin de disposer d'informations détaillées pour un diagnostic et une résolution en profondeur du problème.After you have identified the likely location of the cause of the performance issue from the metrics, you can then use the log files to find detailed information to diagnose and troubleshoot the problem further.

La section « Instructions pour la résolution des problèmes » plus bas dans ce guide aborde plus en détail certains des problèmes de performances que vous pouvez être amené à rencontrer.The section "Troubleshooting guidance" later in this guide provides more information about some common performance-related issues you may encounter.

Erreurs de diagnosticDiagnosing errors

Les utilisateurs de votre application peuvent vous signaler des erreurs identifiées par l'application cliente.Users of your application may notify you of errors reported by the client application. Les métriques de stockage enregistrent également les décomptes des différents types d’erreurs de vos services de stockage, tels que NetworkError, ClientTimeoutError ou AuthorizationError.Storage Metrics also records counts of different error types from your storage services such as NetworkError, ClientTimeoutError, or AuthorizationError. Les métriques de stockage enregistrent uniquement les décomptes des différents types d’erreurs, mais vous pouvez obtenir des informations plus détaillées concernant les demandes individuelles en examinant les journaux d’activité côté serveur, côté client et réseau.While Storage Metrics only records counts of different error types, you can obtain more detail about individual requests by examining server-side, client-side, and network logs. Le code d'état HTTP renvoyé par le service de stockage peut généralement servir d'indication pour expliquer l'échec de la demande.Typically, the HTTP status code returned by the storage service will give an indication of why the request failed.

Notes

N’oubliez pas que vous devriez voir des erreurs intermittentes : les erreurs dues à des problèmes réseau temporaires ou les erreurs d’application par exemple.Remember that you should expect to see some intermittent errors: for example, errors due to transient network conditions, or application errors.

Les ressources suivantes sont utiles pour comprendre les codes d’état et d’erreur liés au stockage :The following resources are useful for understanding storage-related status and error codes:

Problèmes liés à l’émulateur de stockageStorage emulator issues

Le Kit de développement logiciel (SDK) Azure inclut un émulateur de stockage que vous pouvez exécuter sur une station de travail de développement.The Azure SDK includes a storage emulator you can run on a development workstation. Cet émulateur simule la plupart des comportements des services de stockage Azure et est utile lors du développement et des tests, vous permettant d’exécuter les applications qui utilisent les services de stockage Azure sans avoir besoin d’un abonnement et d’un compte de stockage Azure.This emulator simulates most of the behavior of the Azure storage services and is useful during development and test, enabling you to run applications that use Azure storage services without the need for an Azure subscription and an Azure storage account.

La section «Instructions pour la résolution des problèmes» de ce guide décrit certains des problèmes liés à l'utilisation de l'émulateur de stockage.The "Troubleshooting guidance" section of this guide describes some common issues encountered using the storage emulator.

Outils de journalisation du stockageStorage logging tools

La journalisation du stockage permet de journaliser côté serveur les demandes de stockage dans votre compte de stockage Azure.Storage Logging provides server-side logging of storage requests in your Azure storage account. Pour plus d’informations concernant l’activation de la journalisation côté serveur et l’accès aux données de journalisation, consultez Activation de la journalisation du stockage et accès aux données des journaux.For more information about how to enable server-side logging and access the log data, see Enabling Storage Logging and Accessing Log Data.

La bibliothèque cliente de stockage pour .NET vous permet de collecter les données de journalisation côté client, liées aux opérations de stockage réalisées par votre application.The Storage Client Library for .NET enables you to collect client-side log data that relates to storage operations performed by your application. Pour plus d’informations, consultez Journalisation côté client avec la bibliothèque cliente de stockage .NET.For more information, see Client-side Logging with the .NET Storage Client Library.

Notes

Dans certains cas (par ex., erreurs d’autorisation SAS), il peut arriver qu’un utilisateur signale une erreur pour laquelle vous ne trouvez aucune donnée de demande dans les journaux d’activité de stockage côté serveur.In some circumstances (such as SAS authorization failures), a user may report an error for which you can find no request data in the server-side Storage logs. Vous pouvez utiliser les fonctionnalités de journalisation de la bibliothèque cliente de stockage pour savoir si la cause du problème se situe au niveau client ou utiliser les outils d'analyse de réseau pour examiner le réseau.You can use the logging capabilities of the Storage Client Library to investigate if the cause of the issue is on the client or use network monitoring tools to investigate the network.

Utilisation des outils de journalisation réseauUsing network logging tools

Vous pouvez capturer le trafic entre le client et le serveur afin d'obtenir des informations détaillées concernant les données échangées entre le client et le serveur, et concernant les conditions réseau sous-jacentes.You can capture the traffic between the client and server to provide detailed information about the data the client and server are exchanging and the underlying network conditions. Parmi les outils de journalisation réseau utiles, on retrouve :Useful network logging tools include:

Dans de nombreux cas, les données de journalisation issues de la journalisation du stockage et de la bibliothèque cliente de stockage seront suffisantes pour diagnostiquer un problème, mais dans certains scénarios, il se peut que vous ayez besoin de plus d’informations que celles fournies par ces outils de journalisation réseau.In many cases, the log data from Storage Logging and the Storage Client Library will be sufficient to diagnose an issue, but in some scenarios, you may need the more detailed information that these network logging tools can provide. Par exemple, utiliser Fiddler pour afficher les messages HTTP et HTTPS vous permet d'afficher les données d'en-tête et de charge utile envoyées aux et par les services de stockage, ce qui vous permet de vérifier comment une application cliente effectue les nouvelles tentatives d'opérations de stockage.For example, using Fiddler to view HTTP and HTTPS messages enables you to view header and payload data sent to and from the storage services, which would enable you to examine how a client application retries storage operations. Les analyseurs de protocole tels que Wireshark fonctionnent au niveau des paquets et vous permettent d'afficher les données TCP afin de résoudre les problèmes de perte de paquets et de connectivité.Protocol analyzers such as Wireshark operate at the packet level enabling you to view TCP data, which would enable you to troubleshoot lost packets and connectivity issues.

Suivi de bout en boutEnd-to-end tracing

Le suivi de bout en bout basé sur plusieurs fichiers journaux est une technique utile pour l’identification des problèmes potentiels.End-to-end tracing using a variety of log files is a useful technique for investigating potential issues. Vous pouvez utiliser les informations de date/heure de vos données métriques pour savoir où commencer à chercher des informations plus détaillées dans vos fichiers journaux afin de résoudre le problème.You can use the date/time information from your metrics data as an indication of where to start looking in the log files for the detailed information that will help you troubleshoot the issue.

Corrélation des données de journalisationCorrelating log data

Lors de l’affichage des journaux d’activité à partir des applications clientes, des suivis réseau et du stockage côté serveur, leur journalisation est essentielle afin de pouvoir mettre en corrélation les demandes à travers différents fichiers journaux.When viewing logs from client applications, network traces, and server-side storage logging it is critical to be able to correlate requests across the different log files. Les fichiers journaux incluent un certain nombre de champs différents, utiles en tant qu'identificateurs de corrélation.The log files include a number of different fields that are useful as correlation identifiers. L’ID de demande client est le champ le plus utile pour mettre en corrélation les entrées dans les différents journaux d’activité.The client request ID is the most useful field to use to correlate entries in the different logs. Toutefois, il peut parfois être utile d'utiliser l'ID de demande serveur ou les horodatages.However sometimes, it can be useful to use either the server request ID or timestamps. Les sections suivantes expliquent plus en détail ces options.The following sections provide more details about these options.

ID de la demande clientClient request ID

La bibliothèque cliente de stockage génère automatiquement un ID de demande client unique pour chaque demande.The Storage Client Library automatically generates a unique client request ID for every request.

  • Dans le journal côté client créé par la bibliothèque cliente de stockage, l'ID de demande client s'affiche dans le champ ID de demande client de chaque entrée de journal associée à la demande.In the client-side log that the Storage Client Library creates, the client request ID appears in the Client Request ID field of every log entry relating to the request.
  • Dans un suivi réseau comme celui capturé par Fiddler, l'ID de demande client s'affiche dans les messages de demande comme valeur d'en-tête HTTP x-ms-client-request-id.In a network trace such as one captured by Fiddler, the client request ID is visible in request messages as the x-ms-client-request-id HTTP header value.
  • Dans le journal de journalisation du stockage côté serveur, l’ID de demande client s’affiche dans la colonne ID de demande client.In the server-side Storage Logging log, the client request ID appears in the Client request ID column.

Notes

Plusieurs demandes peuvent partager le même ID de demande client, car le client peut affecter cette valeur (même si la bibliothèque cliente de stockage affecte une nouvelle valeur automatiquement).It is possible for multiple requests to share the same client request ID because the client can assign this value (although the Storage Client Library assigns a new value automatically). Lorsque le client renouvelle sa tentative, toutes les tentatives partagent le même ID de requête client.When the client retries, all attempts share the same client request ID. Quand un lot est envoyé par le client, le lot a un seul ID de demande client.In the case of a batch sent from the client, the batch has a single client request ID.

ID de la demande serveurServer request ID

Le service de stockage génère automatiquement les ID de demande serveur.The storage service automatically generates server request IDs.

  • Dans le journal de journalisation du stockage côté serveur, l'ID de demande serveur s'affiche dans la colonne En-tête d’ID de demande.In the server-side Storage Logging log, the server request ID appears the Request ID header column.
  • Dans un suivi réseau comme celui capturé par Fiddler, l'ID de demande serveur s'affiche dans les messages de réponse comme valeur d'en-tête HTTP x-ms-request-id .In a network trace such as one captured by Fiddler, the server request ID appears in response messages as the x-ms-request-id HTTP header value.
  • Dans le journal côté client créé par la bibliothèque cliente de stockage, l'ID de demande serveur s'affiche dans la colonne Texte de l’opération pour l'entrée de journal qui affiche les détails de la réponse du serveur.In the client-side log that the Storage Client Library creates, the server request ID appears in the Operation Text column for the log entry showing details of the server response.

Notes

Le service de stockage affecte toujours un ID de demande serveur unique à chaque demande qu’il reçoit. Par conséquent, chaque nouvelle tentative du client et chaque opération incluse dans un lot a un ID de demande serveur unique.The storage service always assigns a unique server request ID to every request it receives, so every retry attempt from the client and every operation included in a batch has a unique server request ID.

L’exemple de code ci-dessous montre comment utiliser un ID de demande client personnalisé.The code sample below demonstrates how to use a custom client request ID.


var connectionString = Constants.connectionString;

BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);

BlobContainerClient blobContainerClient = blobServiceClient.GetBlobContainerClient("demcontainer");

BlobClient blobClient = blobContainerClient.GetBlobClient("testImage.jpg");

string clientRequestID = String.Format("{0} {1} {2} {3}", HOSTNAME, APPNAME, USERID, Guid.NewGuid().ToString());

using (HttpPipeline.CreateClientRequestIdScope(clientRequestID))
{
    BlobDownloadInfo download = blobClient.Download();

    using (FileStream downloadFileStream = File.OpenWrite("C:\\testImage.jpg"))
    {
        download.Content.CopyTo(downloadFileStream);
        downloadFileStream.Close();
    }
}

HorodatagesTimestamps

Vous pouvez également utiliser les horodatages pour trouver des entrées de journal associées, mais sans oublier les éventuelles variations d'horloges entre le client et le serveur.You can also use timestamps to locate related log entries, but be careful of any clock skew between the client and server that may exist. La recherche des entrées côté serveur correspondantes doit s’appliquer dans une plage de plus ou moins 15 minutes par rapport à l’horodatage sur le client.Search plus or minus 15 minutes for matching server-side entries based on the timestamp on the client. N’oubliez pas que les métadonnées des objets blob contenant des métriques indiquent l’intervalle de temps pour les métriques stockées dans l’objet blob.Remember that the blob metadata for the blobs containing metrics indicates the time range for the metrics stored in the blob. Cet intervalle de temps est utile si vous avez plusieurs objets blob de métriques pour une même minute ou heure.This time range is useful if you have many metrics blobs for the same minute or hour.

Instructions pour la résolution des problèmesTroubleshooting guidance

Cette section est destinée à vous aider à diagnostiquer et résoudre certains des problèmes communs que votre application est susceptible de rencontrer lors de l’utilisation des services de stockage Azure.This section will help you with the diagnosis and troubleshooting of some of the common issues your application may encounter when using the Azure storage services. La liste ci-dessous permet d’identifier les informations pertinentes pour un problème spécifique.Use the list below to locate the information relevant to your specific issue.

Arbre de décision pour la résolution des problèmesTroubleshooting Decision Tree


Votre problème concerne-t-il les performances d'un des services de stockage ?Does your issue relate to the performance of one of the storage services?


Votre problème concerne-t-il la disponibilité d’un des services de stockage ?Does your issue relate to the availability of one of the storage services?


Votre application client reçoit-elle une réponse HTTP 4XX (telle que 404) d’un service de stockage ?Is your client application receiving an HTTP 4XX (such as 404) response from a storage service?


Les métriques indiquent une valeur PercentSuccess faible ou les entrées du journal d’analyse incluent des opérations avec un statut de transaction ClientOtherErrorsMetrics show low PercentSuccess or analytics log entries have operations with transaction status of ClientOtherErrors


Les métriques de capacité indiquent une augmentation inattendue de l’utilisation de la capacité de stockageCapacity metrics show an unexpected increase in storage capacity usage


[Vous constatez des redémarrages inattendus des machines virtuelles associées à un grand nombre de disques durs virtuels][You are experiencing unexpected reboots of Virtual Machines that have a large number of attached VHDs]


Votre problème provient de l’utilisation de l’émulateur de stockage pour le développement ou les testsYour issue arises from using the storage emulator for development or test


Vous rencontrez des problèmes pendant l’installation du Kit de développement logiciel (SDK) Azure pour .NETYou are encountering problems installing the Azure SDK for .NET


Vous rencontrez un autre problème avec un service de stockageYou have a different issue with a storage service


Les métriques indiquent une valeur AverageE2ELatency élevée et une valeur AverageServerLatency faibleMetrics show high AverageE2ELatency and low AverageServerLatency

L’illustration de l’outil d’analyse du portail Azure donne un exemple où la valeur AverageE2ELatency est nettement supérieure à la valeur AverageServerLatency.The illustration below from the Azure portal monitoring tool shows an example where the AverageE2ELatency is significantly higher than the AverageServerLatency.

L’illustration de l’outil d’analyse du Portail Azure donne un exemple où la valeur AverageE2ELatency est nettement supérieure à la valeur AverageServerLatency.

Le service de stockage calcule uniquement la métrique AverageE2ELatency pour les requêtes réussies et, contrairement à la valeur AverageServerLatency, inclut le temps nécessaire au client pour envoyer les données et recevoir l’accusé de réception du service de stockage.The storage service only calculates the metric AverageE2ELatency for successful requests and, unlike AverageServerLatency, includes the time the client takes to send the data and receive acknowledgment from the storage service. Par conséquent, une différence entre les valeurs AverageE2ELatency et AverageServerLatency peut être due à une réponse lente de l’application client ou aux conditions sur le réseau.Therefore, a difference between AverageE2ELatency and AverageServerLatency could be either due to the client application being slow to respond, or due to conditions on the network.

Notes

Vous pouvez également afficher les valeurs E2ELatency et ServerLatency pour des opérations de stockage individuelles dans les données de journalisation du stockage.You can also view E2ELatency and ServerLatency for individual storage operations in the Storage Logging log data.

Enquête sur les problèmes de performances clientInvestigating client performance issues

Les raisons possibles à une réponse lente du client incluent un nombre limité de connexions ou threads disponibles, ou l’insuffisance de ressources telles que le processeur, la mémoire ou la bande passante réseau.Possible reasons for the client responding slowly include having a limited number of available connections or threads, or being low on resources such as CPU, memory or network bandwidth. Il se peut que le problème puisse être résolu en modifiant le code client afin de le rendre plus efficace (par exemple, en utilisant des appels asynchrones vers le service de stockage), ou en utilisant une machine virtuelle plus puissante (avec davantage de cœurs et de mémoire).You may be able to resolve the issue by modifying the client code to be more efficient (for example by using asynchronous calls to the storage service), or by using a larger Virtual Machine (with more cores and more memory).

Pour les services Table et File d’attente, l’algorithme Nagle peut également provoquer des valeurs élevées de la métrique AverageE2ELatency par rapport à AverageServerLatency : pour plus d’informations, consultez la publication Nagle’s Algorithm is Not Friendly towards Small Requests (L’algorithme Nagle n’est pas convivial pour les petites requêtes).For the table and queue services, the Nagle algorithm can also cause high AverageE2ELatency as compared to AverageServerLatency: for more information, see the post Nagle's Algorithm is Not Friendly towards Small Requests. Vous pouvez désactiver l’algorithme Nagle dans le code en utilisant la classe ServicePointManager dans l’espace de noms System.Net.You can disable the Nagle algorithm in code by using the ServicePointManager class in the System.Net namespace. Cette opération doit être effectuée avant de réaliser des appels vers les services de table et de file d’attente dans votre application, car elle n’affecte pas les connexions déjà ouvertes.You should do this before you make any calls to the table or queue services in your application since this does not affect connections that are already open. L’exemple suivant provient de la méthode Application_Start dans un rôle de travail.The following example comes from the Application_Start method in a worker role.


var connectionString = Constants.connectionString;

QueueServiceClient queueServiceClient = new QueueServiceClient(connectionString);

ServicePoint queueServicePoint = ServicePointManager.FindServicePoint(queueServiceClient.Uri);
queueServicePoint.UseNagleAlgorithm = false;

Vous devez consulter les journaux d’activité côté client pour savoir combien de demandes votre application cliente soumet, et vérifier la présence dans votre client de goulots d’étranglement au niveau des performances générales de .NET, telles que l’UC, .NET garbage collection, l’utilisation du réseau ou la mémoire.You should check the client-side logs to see how many requests your client application is submitting, and check for general .NET related performance bottlenecks in your client such as CPU, .NET garbage collection, network utilization, or memory. La première étape pour la résolution des problèmes des applications clientes .NET consiste à consulter la section Débogage, suivi et profilage.As a starting point for troubleshooting .NET client applications, see Debugging, Tracing, and Profiling.

Enquête sur les problèmes de latence du réseauInvestigating network latency issues

Une latence de bout en bout élevée, causée par le réseau, est généralement associée à des conditions provisoires.Typically, high end-to-end latency caused by the network is due to transient conditions. Vous pouvez enquêter sur les problèmes de réseau provisoires et permanents (par ex., les paquets perdus) à l’aide d’outils tels que Wireshark.You can investigate both transient and persistent network issues such as dropped packets by using tools such as Wireshark.

Pour plus d’informations sur l’utilisation de Wireshark afin de résoudre des problèmes liés au réseau, consultez « Annexe 2 : Utilisation de Wireshark pour capturer le trafic réseau ».For more information about using Wireshark to troubleshoot network issues, see "Appendix 2: Using Wireshark to capture network traffic."

Les métriques indiquent une valeur AverageE2ELatency faible et une valeur AverageServerLatency faible, mais le client constate une latence élevéeMetrics show low AverageE2ELatency and low AverageServerLatency but the client is experiencing high latency

Dans ce scénario, la cause la plus probable est un retard des demandes de stockage à atteindre le service de stockage.In this scenario, the most likely cause is a delay in the storage requests reaching the storage service. Vous devez enquêter sur la raison pour laquelle les demandes envoyées par le client ne parviennent pas au service d'objet blob.You should investigate why requests from the client are not making it through to the blob service.

Les raisons possibles à un retard de l’envoi des demandes par le client incluent un nombre limité de connexions ou threads disponibles.One possible reason for the client delaying sending requests is that there are a limited number of available connections or threads.

Vérifiez également si le client effectue plusieurs nouvelles tentatives et, si tel est le cas, recherchez la raison justifiant ces tentatives.Also check whether the client is performing multiple retries, and investigate the reason if it is. Pour déterminer si le client effectue plusieurs tentatives, vous pouvez :To determine whether the client is performing multiple retries, you can:

  • Examiner les journaux d’activité d’analyse de stockage.Examine the Storage Analytics logs. En cas de tentatives répétées, plusieurs opérations avec le même ID de demande client mais différents ID de demande serveur apparaissent.If multiple retries are happening, you will see multiple operations with the same client request ID but with different server request IDs.
  • Examiner les journaux d’activité du client.Examine the client logs. Les nouvelles tentatives apparaissent dans la journalisation documentée.Verbose logging will indicate that a retry has occurred.
  • Déboguer votre code et vérifier les propriétés de l’objet OperationContext associé à la demande.Debug your code, and check the properties of the OperationContext object associated with the request. Si l’opération a effectué une nouvelle tentative, la propriété RequestResults inclut plusieurs ID de demande d’un seul serveur.If the operation has retried, the RequestResults property will include multiple unique server request IDs. Vous pouvez également vérifier les heures de début et de fin de chaque demande.You can also check the start and end times for each request. Pour plus d’informations, voir l’exemple de code de la section « ID de la demande serveur».For more information, see the code sample in the section Server request ID.

En l’absence de problèmes au niveau du client, vous pouvez enquêter sur la présence de problèmes potentiels au niveau du réseau, tels que la perte de paquets.If there are no issues in the client, you should investigate potential network issues such as packet loss. Vous pouvez utiliser des outils tels que Wireshark pour enquêter sur les problèmes de réseau.You can use tools such as Wireshark to investigate network issues.

Pour plus d’informations sur l’utilisation de Wireshark afin de résoudre des problèmes liés au réseau, consultez « Annexe 2 : Utilisation de Wireshark pour capturer le trafic réseau ».For more information about using Wireshark to troubleshoot network issues, see "Appendix 2: Using Wireshark to capture network traffic."

Les métriques indiquent une valeur AverageServerLatency élevéeMetrics show high AverageServerLatency

En présence d’une valeur AverageServerLatency élevée pour les demandes de téléchargement d’objet blob, vous devez utiliser les journaux d’activité de journalisation du stockage pour savoir si des demandes répétées ont été envoyées pour le même objet blob (ou ensemble d’objets blob).In the case of high AverageServerLatency for blob download requests, you should use the Storage Logging logs to see if there are repeated requests for the same blob (or set of blobs). Pour les requêtes de chargement d’objet blob, vous devez examiner la taille des blocs utilisés par le client (par exemple, des blocs d’une taille inférieure à 64 K peuvent entraîner des charges plus lourdes, sauf si les lectures se font également par blocs de taille inférieure à 64 K) et savoir si plusieurs clients chargent des blocs sur le même objet blob en parallèle.For blob upload requests, you should investigate what block size the client is using (for example, blocks less than 64 K in size can result in overheads unless the reads are also in less than 64 K chunks), and if multiple clients are uploading blocks to the same blob in parallel. Vous devez également vérifier dans les métriques par minute la présence de pics au niveau du nombre de demandes, provoquant un dépassement des valeurs cibles d’extensibilité par seconde : consultez également la section «Les métriques indiquent une augmentation de la valeur PercentTimeoutError».You should also check the per-minute metrics for spikes in the number of requests that result in exceeding the per second scalability targets: also see "Metrics show an increase in PercentTimeoutError."

Si vous constatez une valeur AverageServerLatency élevée pour les demandes de téléchargement d'objet blob lorsque des demandes répétées sont envoyées pour le même objet blob ou ensemble d'objets blob, vous devez envisager la mise en cache de ces objets blob à l'aide du cache Azure ou du réseau de distribution de contenu Azure.If you are seeing high AverageServerLatency for blob download requests when there are repeated requests the same blob or set of blobs, then you should consider caching these blobs using Azure Cache or the Azure Content Delivery Network (CDN). Pour les demandes de chargement, vous devez améliorer le débit en augmentant la taille des blocs.For upload requests, you can improve the throughput by using a larger block size. Pour les requêtes sur des tables, il est également possible d’implémenter une mise en cache côté client sur les clients qui effectuent les mêmes opérations de requête et où les données ne changent pas fréquemment.For queries to tables, it is also possible to implement client-side caching on clients that perform the same query operations and where the data doesn't change frequently.

Des valeurs AverageServerLatency élevées peuvent également indiquer la présence de tables mal conçues ou de requêtes donnant lieu à des opérations d'analyse ou qui suivent l'anti-modèle d'ajout/ajout de préfixe.High AverageServerLatency values can also be a symptom of poorly designed tables or queries that result in scan operations or that follow the append/prepend anti-pattern. Pour plus d’informations, voir « Les métriques indiquent une augmentation de la valeur PercentThrottlingError ».For more information, see "Metrics show an increase in PercentThrottlingError".

Notes

Vous trouverez ici une liste complète de contrôle des performances : Liste de contrôle des performances et de la scalabilité du Stockage Microsoft Azure.You can find a comprehensive checklist performance checklist here: Microsoft Azure Storage Performance and Scalability Checklist.

Vous constatez des retards inattendus dans la livraison des messages d’une file d’attenteYou are experiencing unexpected delays in message delivery on a queue

Si vous constatez un retard entre le moment où une application ajoute un message à une file d'attente et le moment où ce dernier peut être lu à partir de la file d'attente, procédez comme suit pour diagnostiquer le problème :If you are experiencing a delay between the time an application adds a message to a queue and the time it becomes available to read from the queue, then you should take the following steps to diagnose the issue:

  • Vérifiez que l'application ajoute avec succès les messages à la file d'attente.Verify the application is successfully adding the messages to the queue. Vérifiez que l'application n'effectue pas plusieurs tentatives de la méthode AddMessage avant d'effectuer l'opération avec succès.Check that the application is not retrying the AddMessage method several times before succeeding. Les journaux d’activité de la bibliothèque cliente de stockage affichent toutes les tentatives répétées d’opérations de stockage.The Storage Client Library logs will show any repeated retries of storage operations.
  • Vérifiez l'absence de variations d'horloges entre le rôle de travail qui ajoute le message à la file d'attente et le rôle de travail qui lit le message à partir de la file d'attente, donnant l'impression d'un retard de traitement.Verify there is no clock skew between the worker role that adds the message to the queue and the worker role that reads the message from the queue that makes it appear as if there is a delay in processing.
  • Vérifiez si le rôle de travail qui lit les messages à partir de la file d'attente échoue.Check if the worker role that reads the messages from the queue is failing. Si un client de file d’attente appelle la méthode GetMessage, mais ne parvient pas à répondre avec un accusé de réception, le message demeurera invisible dans la file d’attente jusqu’à ce que la période invisibilityTimeout expire.If a queue client calls the GetMessage method but fails to respond with an acknowledgment, the message will remain invisible on the queue until the invisibilityTimeout period expires. Ce n'est qu'à ce moment que le message pourra à nouveau être traité.At this point, the message becomes available for processing again.
  • Vérifiez si la longueur de la file d'attente augmente avec le temps.Check if the queue length is growing over time. Cela peut arriver si vous ne disposez pas d'assez de travailleurs pour traiter les messages que les autres travailleurs placent dans la file d'attente.This can occur if you do not have sufficient workers available to process all of the messages that other workers are placing on the queue. Consultez également les métriques indiquant si les requêtes de suppression échouent et le décompte de résorption de file d’attente des messages, pouvant indiquer l’échec de tentatives répétées de supprimer le message.Also check the metrics to see if delete requests are failing and the dequeue count on messages, which might indicate repeated failed attempts to delete the message.
  • Vérifiez dans les journaux d’activité de journalisation du stockage la présence d’opérations de file d’attente présentant des valeurs E2ELatency et ServerLatency supérieures à celles prévues, pendant une période plus longue que prévu.Examine the Storage Logging logs for any queue operations that have higher than expected E2ELatency and ServerLatency values over a longer period of time than usual.

Les métriques indiquent une augmentation de la valeur PercentThrottlingErrorMetrics show an increase in PercentThrottlingError

Les erreurs de limitation se produisent lorsque vous dépassez les valeurs cibles d’évolutivité d’un service de stockage.Throttling errors occur when you exceed the scalability targets of a storage service. Le service de stockage connaît des limitations afin de s’assurer qu’aucun client ni locataire ne peut utiliser le service au détriment des autres utilisateurs.The storage service throttles to ensure that no single client or tenant can use the service at the expense of others. Pour plus d’informations sur les objectifs de scalabilité des comptes de stockage et les objectifs de performances des partitions dans les comptes de stockage, consultez Cibles de scalabilité et de performances pour les comptes de stockage standard.For more information, see Scalability and performance targets for standard storage accounts for details on scalability targets for storage accounts and performance targets for partitions within storage accounts.

Si la métrique PercentThrottlingError indique une augmentation du pourcentage de demandes qui échouent avec une erreur de limitation, vous devez enquêter sur un des deux scénarios suivants :If the PercentThrottlingError metric show an increase in the percentage of requests that are failing with a throttling error, you need to investigate one of two scenarios:

Une augmentation de la valeur PercentThrottlingError se produit souvent en même temps qu'une augmentation du nombre de demandes de stockage, ou lors des tests initiaux de la charge de votre application.An increase in PercentThrottlingError often occurs at the same time as an increase in the number of storage requests, or when you are initially load testing your application. Elle peut également se manifester dans le client sous forme de messages d’état HTTP « 503 Server Busy » ou « 500 Operation Timeout » à partir des opérations de stockage.This may also manifest itself in the client as "503 Server Busy" or "500 Operation Timeout" HTTP status messages from storage operations.

Augmentation provisoire de la valeur PercentThrottlingErrorTransient increase in PercentThrottlingError

Si vous constatez des pics de la valeur PercentThrottlingError qui coïncident avec des périodes de forte activité de l’application, implémentez une stratégie d’interruption des nouvelles tentatives exponentielle (non linéaire) dans votre client.If you are seeing spikes in the value of PercentThrottlingError that coincide with periods of high activity for the application, you implement an exponential (not linear) back-off strategy for retries in your client. Les tentatives d’interruption réduisent la charge immédiate sur la partition et aident votre application à aplanir les pics de trafic.Back-off retries reduce the immediate load on the partition and help your application to smooth out spikes in traffic. Pour plus d’informations sur la façon d’implémenter des stratégies de nouvelle tentative à l’aide de la bibliothèque cliente de stockage, voir Espace de noms Microsoft.Azure.Storage.RetryPolicies.For more information about how to implement retry policies using the Storage Client Library, see the Microsoft.Azure.Storage.RetryPolicies namespace.

Notes

Vous pouvez également constater des pics de la valeur PercentThrottlingError qui ne coïncident pas avec des périodes de forte activité de l’application. La cause la plus probable est le déplacement de partitions, par le service de stockage, pour améliorer l’équilibrage de la charge.You may also see spikes in the value of PercentThrottlingError that do not coincide with periods of high activity for the application: the most likely cause here is the storage service moving partitions to improve load balancing.

Augmentation permanente de l’erreur PercentThrottlingErrorPermanent increase in PercentThrottlingError error

Si vous constatez une valeur constamment élevée pour PercentThrottlingError à la suite d'une augmentation permanente de vos volumes de transaction, ou lorsque vous effectuez vos tests de charge initiaux sur votre application, vous devez évaluer comment votre application utilise les partitions de stockage et si elle approche des cibles d'évolutivité pour un compte de stockage.If you are seeing a consistently high value for PercentThrottlingError following a permanent increase in your transaction volumes, or when you are performing your initial load tests on your application, then you need to evaluate how your application is using storage partitions and whether it is approaching the scalability targets for a storage account. Par exemple, si vous constatez des erreurs de limitation dans une file d'attente (considérée comme une partition unique), vous devez envisager l'utilisation de files d'attente supplémentaires afin de distribuer les transactions à travers plusieurs partitions.For example, if you are seeing throttling errors on a queue (which counts as a single partition), then you should consider using additional queues to spread the transactions across multiple partitions. Si vous constatez des erreurs de limitation sur une table, vous devez envisager l’utilisation d’un schéma de partitionnement différent afin de distribuer vos transactions à travers plusieurs partitions en utilisant une plage de valeurs de clé de partition plus large.If you are seeing throttling errors on a table, you need to consider using a different partitioning scheme to spread your transactions across multiple partitions by using a wider range of partition key values. Une cause fréquente à ce problème est l’anti-modèle d’ajout/ajout de préfixe où vous sélectionnez la date en tant que clé de partition, pour ensuite écrire toutes les données d’un jour spécifique sur une partition : en cas de charge, cela peut entraîner un goulot d’étranglement d’écriture.One common cause of this issue is the prepend/append anti-pattern where you select the date as the partition key and then all data on a particular day is written to one partition: under load, this can result in a write bottleneck. Pensez à une conception de partitionnement différente ou évaluez s’il ne vaut pas mieux utiliser un stockage d’objets blob.Either consider a different partitioning design or evaluate whether using blob storage might be a better solution. Vérifiez également si la limitation se produit suite à des pics de votre trafic et recherchez des moyens d’assouplir votre modèle de requêtes.Also check whether throttling is occurring as a result of spikes in your traffic and investigate ways of smoothing your pattern of requests.

Si vous distribuez vos transactions à travers plusieurs partitions, vous devez tenir compte des limites d'évolutivité définies pour le compte de stockage.If you distribute your transactions across multiple partitions, you must still be aware of the scalability limits set for the storage account. Par exemple, si vous utilisez dix files d'attente, chacune avec une capacité de traitement maximum de 2000 messages de 1Ko par seconde, votre limite globale sera de 20 000 messages par seconde pour le compte de stockage.For example, if you used ten queues each processing the maximum of 2,000 1KB messages per second, you will be at the overall limit of 20,000 messages per second for the storage account. Si vous devez traiter plus de 20 000 entités par seconde, vous devez envisager l’utilisation de plusieurs comptes de stockage.If you need to process more than 20,000 entities per second, you should consider using multiple storage accounts. Vous devez également garder à l’esprit que la taille de vos demandes et entités a un impact sur le moment où le service de stockage limite vos clients : si vous recevez des demandes et entités plus larges, vous pourrez être limité plus tôt.You should also bear in mind that the size of your requests and entities has an impact on when the storage service throttles your clients: if you have larger requests and entities, you may be throttled sooner.

Une requête mal conçue peut également vous amener à atteindre les limites d'évolutivité pour les partitions de table.Inefficient query design can also cause you to hit the scalability limits for table partitions. Par exemple, une requête avec un filtre qui ne sélectionne qu'un pour cent des entités dans une partition, mais recherche toutes les entités dans une partition devra accéder à chaque entité.For example, a query with a filter that only selects one percent of the entities in a partition but that scans all the entities in a partition will need to access each entity. Chaque lecture d’entité sera ajoutée au décompte total de transactions dans cette partition, vous amenant à atteindre rapidement les cibles d’évolutivité.Every entity read will count towards the total number of transactions in that partition; therefore, you can easily reach the scalability targets.

Notes

Vos tests de performances doivent mettre à jour toutes les requêtes mal conçues dans votre application.Your performance testing should reveal any inefficient query designs in your application.

Les métriques indiquent une augmentation de la valeur PercentTimeoutErrorMetrics show an increase in PercentTimeoutError

Vos métriques indiquent une augmentation de la valeur PercentTimeoutError pour un de vos services de stockage.Your metrics show an increase in PercentTimeoutError for one of your storage services. En même temps, le client reçoit un grand nombre de messages d'état HTTP « 500 Operation Timeout » à partir des opérations de stockage.At the same time, the client receives a high volume of "500 Operation Timeout" HTTP status messages from storage operations.

Notes

Il se peut qu’apparaissent des erreurs de délai d’expiration provisoires lorsque le service de stockage équilibre les demandes en déplaçant une partition vers un nouveau serveur.You may see timeout errors temporarily as the storage service load balances requests by moving a partition to a new server.

La métrique PercentTimeoutError est un agrégat des métriques suivantes : ClientTimeoutError, AnonymousClientTimeoutError, SASClientTimeoutError, ServerTimeoutError, AnonymousServerTimeoutError et SASServerTimeoutError.The PercentTimeoutError metric is an aggregation of the following metrics: ClientTimeoutError, AnonymousClientTimeoutError, SASClientTimeoutError, ServerTimeoutError, AnonymousServerTimeoutError, and SASServerTimeoutError.

Les délais d'expiration du serveur sont provoqués par une erreur sur le serveur.The server timeouts are caused by an error on the server. Les délais d’expiration clients se produisent lorsqu’une opération sur le serveur a dépassé le délai d’expiration spécifié par le client ; par exemple, un client qui utilise la bibliothèque cliente de stockage peut définir un délai d’expiration pour une opération en utilisant la propriété ServerTimeout de la classe QueueRequestOptions.The client timeouts happen because an operation on the server has exceeded the timeout specified by the client; for example, a client using the Storage Client Library can set a timeout for an operation by using the ServerTimeout property of the QueueRequestOptions class.

Les délais d'expiration du serveur indiquent un problème au niveau du service de stockage, qui exige une enquête plus approfondie.Server timeouts indicate a problem with the storage service that requires further investigation. Vous pouvez utiliser les métriques pour savoir si vous atteignez les limites d'évolutivité pour le service et identifier les pics de trafic susceptibles d'être la cause de ce problème.You can use metrics to see if you are hitting the scalability limits for the service and to identify any spikes in traffic that might be causing this problem. Si le problème est intermittent, il peut être dû à une activité d'équilibrage de charge dans le service.If the problem is intermittent, it may be due to load-balancing activity in the service. Si le problème persiste et n'est pas provoqué par le fait que votre application a atteint les limites d'évolutivité du service, vous devez signaler le problème au support.If the problem is persistent and is not caused by your application hitting the scalability limits of the service, you should raise a support issue. Pour les délais d’expiration clients, vous devez décider si le délai d’expiration est défini sur une valeur appropriée dans le client et soit modifier la valeur de délai d’expiration dans le client, soit rechercher un moyen d’améliorer les performances des opérations dans le service de stockage, par exemple, en optimisant vos requêtes de table ou en réduisant la taille de vos messages.For client timeouts, you must decide if the timeout is set to an appropriate value in the client and either change the timeout value set in the client or investigate how you can improve the performance of the operations in the storage service, for example by optimizing your table queries or reducing the size of your messages.

Les métriques indiquent une augmentation de la valeur PercentNetworkErrorMetrics show an increase in PercentNetworkError

Vos métriques indiquent une augmentation de la valeur PercentNetworkError pour un de vos services de stockage.Your metrics show an increase in PercentNetworkError for one of your storage services. La métrique PercentNetworkError est une agrégation des métriques suivantes : NetworkError, AnonymousNetworkError et SASNetworkError.The PercentNetworkError metric is an aggregation of the following metrics: NetworkError, AnonymousNetworkError, and SASNetworkError. Cela se produit lorsque le service de stockage détecte une erreur de réseau associée à une demande de stockage du client.These occur when the storage service detects a network error when the client makes a storage request.

La cause la plus fréquente de cette erreur est une déconnexion du client avant l'expiration d'un délai dans le service de stockage.The most common cause of this error is a client disconnecting before a timeout expires in the storage service. Examinez le code dans votre client afin de comprendre pourquoi et quand le client se déconnecte du service de stockage.Investigate the code in your client to understand why and when the client disconnects from the storage service. Vous pouvez également utiliser Wireshark ou Tcping pour enquêter sur les problèmes de connectivité réseau à partir du client.You can also use Wireshark, or Tcping to investigate network connectivity issues from the client. Ces outils sont décrits dans la section Annexes.These tools are described in the Appendices.

Le client reçoit des messages HTTP 403 (Forbidden)The client is receiving HTTP 403 (Forbidden) messages

Si votre application client génère des erreurs HTTP403 (Forbidden), l'une des causes probables est l'utilisation par le client d'une signature d'accès partagé (SAS) arrivée à expiration lors de l'envoi d'une demande de stockage (d'autres causes possibles incluent les variations d'horloges, les clés non valides et les en-têtes vides).If your client application is throwing HTTP 403 (Forbidden) errors, a likely cause is that the client is using an expired Shared Access Signature (SAS) when it sends a storage request (although other possible causes include clock skew, invalid keys, and empty headers). Si une clé SAS arrivée à expiration est la cause, aucune entrée ne s'affiche dans les données de journalisation du stockage côté serveur.If an expired SAS key is the cause, you will not see any entries in the server-side Storage Logging log data. Le tableau suivant inclut un exemple de journal côté client généré par la bibliothèque cliente de stockage, qui illustre ce type de problème :The following table shows a sample from the client-side log generated by the Storage Client Library that illustrates this issue occurring:

SourceSource CommentairesVerbosity CommentairesVerbosity ID de la demande clientClient request ID Operation TextOperation text
Microsoft.Azure.StorageMicrosoft.Azure.Storage InformationInformation 33 85d077ab-…85d077ab-… Démarrage de l'opération avec l'emplacement Primary par mode d'emplacement PrimaryOnly.Starting operation with location Primary per location mode PrimaryOnly.
Microsoft.Azure.StorageMicrosoft.Azure.Storage InformationInformation 33 85d077ab-…85d077ab -… Démarrage de la requête synchrone vers https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests#Synchronous_requestStarting synchronous request to https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests#Synchronous_request
Microsoft.Azure.StorageMicrosoft.Azure.Storage InformationInformation 33 85d077ab-…85d077ab -… Attente de la réponse.Waiting for response.
Microsoft.Azure.StorageMicrosoft.Azure.Storage AvertissementWarning 22 85d077ab-…85d077ab -… Exception levée pendant l’attente de la réponse : Le serveur distant a retourné une erreur : (403) Interdit.Exception thrown while waiting for response: The remote server returned an error: (403) Forbidden.
Microsoft.Azure.StorageMicrosoft.Azure.Storage InformationInformation 33 85d077ab-…85d077ab -… Réponse reçue.Response received. Code d'état = 403, ID de la demande = 9d67c64a-64ed-4b0d-9515-3b14bbcdc63d, Content-MD5 = , ETag = .Status code = 403, Request ID = 9d67c64a-64ed-4b0d-9515-3b14bbcdc63d, Content-MD5 = , ETag = .
Microsoft.Azure.StorageMicrosoft.Azure.Storage AvertissementWarning 22 85d077ab-…85d077ab -… Exception levée durant l’opération : Le serveur distant a retourné une erreur : (403) Interdit.Exception thrown during the operation: The remote server returned an error: (403) Forbidden..
Microsoft.Azure.StorageMicrosoft.Azure.Storage InformationInformation 33 85d077ab-…85d077ab -… Vérification si l’opération doit être tentée à nouveau.Checking if the operation should be retried. Nombre de nouvelles tentatives = 0, Code d’état HTTP = 403, Exception = Le serveur distant a retourné une erreur : (403) Interdit.Retry count = 0, HTTP status code = 403, Exception = The remote server returned an error: (403) Forbidden..
Microsoft.Azure.StorageMicrosoft.Azure.Storage InformationInformation 33 85d077ab-…85d077ab -… L'emplacement suivant a été défini sur Primary, sur base du mode d'emplacement.The next location has been set to Primary, based on the location mode.
Microsoft.Azure.StorageMicrosoft.Azure.Storage ErrorError 11 85d077ab-…85d077ab -… La stratégie de nouvelle tentative n’a pas autorisé de nouvelle tentative.Retry policy did not allow for a retry. Échec avec Le serveur distant a retourné une erreur : (403) Interdit.Failing with The remote server returned an error: (403) Forbidden.

Dans ce scénario, vous devez rechercher pourquoi le jeton SAS expire avant que le client n'envoie le jeton au serveur :In this scenario, you should investigate why the SAS token is expiring before the client sends the token to the server:

  • Généralement, vous ne devez pas définir d'heure de début lorsque vous créez une SAS à utiliser immédiatement par un client.Typically, you should not set a start time when you create a SAS for a client to use immediately. S'il existe de faibles variations d'horloges entre l'hôte qui génère la SAS sur base de l'heure actuelle et le service de stockage, il est possible que le service de stockage reçoive une SAS qui n'est pas encore valide.If there are small clock differences between the host generating the SAS using the current time and the storage service, then it is possible for the storage service to receive a SAS that is not yet valid.
  • Ne définissez pas une durée d’expiration très courte pour une SAS.Do not set a very short expiry time on a SAS. À nouveau, de petites variations d'horloges entre l'hôte qui génère la SAS et le service de stockage peuvent donner l'impression que la SAS a expiré plus tôt que prévu.Again, small clock differences between the host generating the SAS and the storage service can lead to a SAS apparently expiring earlier than anticipated.
  • Le paramètre de version dans la clé SAS (par exemple sv=2015-04-05) correspond-il à la version de la bibliothèque cliente de stockage que vous utilisez ?Does the version parameter in the SAS key (for example sv=2015-04-05) match the version of the Storage Client Library you are using? Vous devez toujours utiliser la dernière version de la bibliothèque cliente de stockage.We recommend that you always use the latest version of the Storage Client Library.
  • Si vous régénérez vos clés d’accès de stockage, les jetons SAS existants risquent d’être invalidés.If you regenerate your storage access keys, any existing SAS tokens may be invalidated. Ce problème peut survenir si vous générez des jetons SAS avec une durée d’expiration longue pour les applications clientes dans le cache.This issue may arise if you generate SAS tokens with a long expiry time for client applications to cache.

Si vous utilisez la bibliothèque cliente de stockage pour générer des jetons SAS, il est facile de créer un jeton valide.If you are using the Storage Client Library to generate SAS tokens, then it is easy to build a valid token. Néanmoins si vous utilisez l’API REST Stockage et créez les jetons SAS manuellement, voir Délégation de l’accès avec une signature d’accès partagé.However, if you are using the Storage REST API and constructing the SAS tokens by hand, see Delegating Access with a Shared Access Signature.

Le client reçoit des messages HTTP 404 (Non trouvé)The client is receiving HTTP 404 (Not found) messages

Si l’application client reçoit un message HTTP 404 (Non trouvé) du serveur, cela signifie que l’objet que le client tentait d’utiliser (tel qu’une entité, une table, un objet blob, un conteneur ou une file d’attente) n’existe pas dans le service de stockage.If the client application receives an HTTP 404 (Not found) message from the server, this implies that the object the client was attempting to use (such as an entity, table, blob, container, or queue) does not exist in the storage service. Il existe un certain nombre de raisons possibles à ce problème, dont :There are a number of possible reasons for this, such as:

Le client ou un autre processus a supprimé l’objetThe client or another process previously deleted the object

Dans les scénarios où le client tente de lire, mettre à jour ou supprimer des données dans un service de stockage, il est habituellement facile d’identifier dans les journaux d’activité côté serveur une précédente opération qui a supprimé l’objet en question du service de stockage.In scenarios where the client is attempting to read, update, or delete data in a storage service it is usually easy to identify in the server-side logs a previous operation that deleted the object in question from the storage service. Souvent, les données de journalisation indiquent qu’un autre utilisateur ou processus a supprimé l’objet.Often, the log data shows that another user or process deleted the object. Dans le journal de journalisation du stockage côté serveur, les colonnes operation-type et requested-object-key s'affichent lorsqu'un client a supprimé un objet.In the server-side Storage Logging log, the operation-type and requested-object-key columns show when a client deleted an object.

Dans le scénario où un client tente d'insérer un objet, la raison pour laquelle cette opération génère une réponse HTTP404 (Not found) peut ne pas être immédiatement identifiable, car le client est en train de créer un objet.In the scenario where a client is attempting to insert an object, it may not be immediately obvious why this results in an HTTP 404 (Not found) response given that the client is creating a new object. Toutefois, si le client crée un objet blob, il doit être possible de trouver son conteneur ; si le client crée le message, il doit être possible de trouver sa file d'attente, et si le client ajoute une ligne, il doit être possible de trouver sa table.However, if the client is creating a blob it must be able to find the blob container, if the client is creating a message it must be able to find a queue, and if the client is adding a row it must be able to find the table.

Vous pouvez utiliser le journal côté client de la bibliothèque cliente de stockage pour obtenir des informations plus détaillées concernant l'instant où le client envoie des demandes spécifiques au service de stockage.You can use the client-side log from the Storage Client Library to gain a more detailed understanding of when the client sends specific requests to the storage service.

Le journal côté client suivant, généré par la bibliothèque cliente de stockage, illustre le problème d'un client incapable de trouver le conteneur de l'objet blob qu'il est en train de créer.The following client-side log generated by the Storage Client library illustrates the problem when the client cannot find the container for the blob it is creating. Ce journal inclut les détails des opérations de stockage suivantes :This log includes details of the following storage operations:

ID de la demandeRequest ID OpérationOperation
07b26a5d-...07b26a5d-... DeleteIfExists pour supprimer le conteneur de l'objet blob.DeleteIfExists method to delete the blob container. Notez que cette opération inclut une demande HEAD pour vérifier l’existence du conteneur.Note that this operation includes a HEAD request to check for the existence of the container.
e2d06d78…e2d06d78… CreateIfNotExists pour créer le conteneur de l'objet blob.CreateIfNotExists method to create the blob container. Notez que cette opération inclut une demande HEAD qui vérifie l’existence du conteneur.Note that this operation includes a HEAD request that checks for the existence of the container. La demande HEAD renvoie un message 404, mais continue.The HEAD returns a 404 message but continues.
de8b1c3c-...de8b1c3c-... UploadFromStream pour créer l'objet blob.UploadFromStream method to create the blob. La demande PUT échoue avec un message 404.The PUT request fails with a 404 message

Entrées du journal :Log entries:

ID de la demandeRequest ID Operation TextOperation Text
07b26a5d-...07b26a5d-... Démarrage de la requête synchrone vers https://domemaildist.blob.core.windows.net/azuremmblobcontainer.Starting synchronous request to https://domemaildist.blob.core.windows.net/azuremmblobcontainer.
07b26a5d-...07b26a5d-... StringToSign = HEAD............x-ms-client-request-id:07b26a5d-....x-ms-date:Tue, 03 Jun 2014 10:33:11 GMT.x-ms-version:2014-02-14./domemaildist/azuremmblobcontainer.restype:container.StringToSign = HEAD............x-ms-client-request-id:07b26a5d-....x-ms-date:Tue, 03 Jun 2014 10:33:11 GMT.x-ms-version:2014-02-14./domemaildist/azuremmblobcontainer.restype:container.
07b26a5d-...07b26a5d-... Attente de la réponse.Waiting for response.
07b26a5d-...07b26a5d-... Réponse reçue.Response received. Code d’état = 200, ID de la demande = eeead849-...Content-MD5 = , ETag = "0x8D14D2DC63D059B".Status code = 200, Request ID = eeead849-...Content-MD5 = , ETag = "0x8D14D2DC63D059B".
07b26a5d-...07b26a5d-... Les en-têtes de réponse ont été traités avec succès ; passage à la suite de l'opération.Response headers were processed successfully, proceeding with the rest of the operation.
07b26a5d-...07b26a5d-... Téléchargement du corps de la réponse.Downloading response body.
07b26a5d-...07b26a5d-... Opération exécutée avec succès.Operation completed successfully.
07b26a5d-...07b26a5d-... Démarrage de la requête synchrone vers https://domemaildist.blob.core.windows.net/azuremmblobcontainer.Starting synchronous request to https://domemaildist.blob.core.windows.net/azuremmblobcontainer.
07b26a5d-...07b26a5d-... StringToSign = DELETE............x-ms-client-request-id:07b26a5d-....x-ms-date:Tue, 03 Jun 2014 10:33:12 GMT.x-ms-version:2014-02-14./domemaildist/azuremmblobcontainer.restype:container.StringToSign = DELETE............x-ms-client-request-id:07b26a5d-....x-ms-date:Tue, 03 Jun 2014 10:33:12 GMT.x-ms-version:2014-02-14./domemaildist/azuremmblobcontainer.restype:container.
07b26a5d-...07b26a5d-... Attente de la réponse.Waiting for response.
07b26a5d-...07b26a5d-... Réponse reçue.Response received. Code d'état = 202, ID de la demande = 6ab2a4cf-..., Content-MD5 = , ETag = .Status code = 202, Request ID = 6ab2a4cf-..., Content-MD5 = , ETag = .
07b26a5d-...07b26a5d-... Les en-têtes de réponse ont été traités avec succès ; passage à la suite de l'opération.Response headers were processed successfully, proceeding with the rest of the operation.
07b26a5d-...07b26a5d-... Téléchargement du corps de la réponse.Downloading response body.
07b26a5d-...07b26a5d-... Opération exécutée avec succès.Operation completed successfully.
e2d06d78-...e2d06d78-... Démarrage de la requête synchrone vers https://domemaildist.blob.core.windows.net/azuremmblobcontainer.Starting asynchronous request to https://domemaildist.blob.core.windows.net/azuremmblobcontainer.
e2d06d78-...e2d06d78-... StringToSign = HEAD............x-ms-client-request-id:e2d06d78-....x-ms-date:Tue, 03 Jun 2014 10:33:12 GMT.x-ms-version:2014-02-14./domemaildist/azuremmblobcontainer.restype:container.StringToSign = HEAD............x-ms-client-request-id:e2d06d78-....x-ms-date:Tue, 03 Jun 2014 10:33:12 GMT.x-ms-version:2014-02-14./domemaildist/azuremmblobcontainer.restype:container.
e2d06d78-...e2d06d78-... Attente de la réponse.Waiting for response.
de8b1c3c-...de8b1c3c-... Démarrage de la requête synchrone vers https://domemaildist.blob.core.windows.net/azuremmblobcontainer/blobCreated.txt.Starting synchronous request to https://domemaildist.blob.core.windows.net/azuremmblobcontainer/blobCreated.txt.
de8b1c3c-...de8b1c3c-... StringToSign = PUT...64.qCmF+TQLPhq/YYK50mP9ZQ==........x-ms-blob-type:BlockBlob.x-ms-client-request-id:de8b1c3c-....x-ms-date:Tue, 03 Jun 2014 10:33:12 GMT.x-ms-version:2014-02-14./domemaildist/azuremmblobcontainer/blobCreated.txt.StringToSign = PUT...64.qCmF+TQLPhq/YYK50mP9ZQ==........x-ms-blob-type:BlockBlob.x-ms-client-request-id:de8b1c3c-....x-ms-date:Tue, 03 Jun 2014 10:33:12 GMT.x-ms-version:2014-02-14./domemaildist/azuremmblobcontainer/blobCreated.txt.
de8b1c3c-...de8b1c3c-... Préparation de l'écriture des données de la demande.Preparing to write request data.
e2d06d78-...e2d06d78-... Exception levée pendant l’attente de la réponse : Le serveur distant a retourné une erreur : (404) Introuvable.Exception thrown while waiting for response: The remote server returned an error: (404) Not Found..
e2d06d78-...e2d06d78-... Réponse reçue.Response received. Code d'état = 404, ID de la demande = 353ae3bc-..., Content-MD5 = , ETag = .Status code = 404, Request ID = 353ae3bc-..., Content-MD5 = , ETag = .
e2d06d78-...e2d06d78-... Les en-têtes de réponse ont été traités avec succès ; passage à la suite de l'opération.Response headers were processed successfully, proceeding with the rest of the operation.
e2d06d78-...e2d06d78-... Téléchargement du corps de la réponse.Downloading response body.
e2d06d78-...e2d06d78-... Opération exécutée avec succès.Operation completed successfully.
e2d06d78-...e2d06d78-... Démarrage de la requête synchrone vers https://domemaildist.blob.core.windows.net/azuremmblobcontainer.Starting asynchronous request to https://domemaildist.blob.core.windows.net/azuremmblobcontainer.
e2d06d78-...e2d06d78-... StringToSign = PUT...0.........x-ms-client-request-id:e2d06d78-....x-ms-date:Tue, 03 Jun 2014 10:33:12 GMT.x-ms-version:2014-02-14./domemaildist/azuremmblobcontainer.restype:container.StringToSign = PUT...0.........x-ms-client-request-id:e2d06d78-....x-ms-date:Tue, 03 Jun 2014 10:33:12 GMT.x-ms-version:2014-02-14./domemaildist/azuremmblobcontainer.restype:container.
e2d06d78-...e2d06d78-... Attente de la réponse.Waiting for response.
de8b1c3c-...de8b1c3c-... Écriture des données de la demande.Writing request data.
de8b1c3c-...de8b1c3c-... Attente de la réponse.Waiting for response.
e2d06d78-...e2d06d78-... Exception levée pendant l’attente de la réponse : Le serveur distant a retourné une erreur : (409) Conflit.Exception thrown while waiting for response: The remote server returned an error: (409) Conflict..
e2d06d78-...e2d06d78-... Réponse reçue.Response received. Code d’état = 409, ID de la demande = c27da20e-..., Content-MD5 = , ETag = .Status code = 409, Request ID = c27da20e-..., Content-MD5 = , ETag = .
e2d06d78-...e2d06d78-... Erreur de téléchargement du corps de la réponse.Downloading error response body.
de8b1c3c-...de8b1c3c-... Exception levée pendant l’attente de la réponse : Le serveur distant a retourné une erreur : (404) Introuvable.Exception thrown while waiting for response: The remote server returned an error: (404) Not Found..
de8b1c3c-...de8b1c3c-... Réponse reçue.Response received. Code d’état = 404, ID de la demande = 0eaeab3e-..., Content-MD5 = , ETag = .Status code = 404, Request ID = 0eaeab3e-..., Content-MD5 = , ETag = .
de8b1c3c-...de8b1c3c-... Exception levée durant l’opération : Le serveur distant a retourné une erreur : (404) Introuvable.Exception thrown during the operation: The remote server returned an error: (404) Not Found..
de8b1c3c-...de8b1c3c-... La stratégie de nouvelle tentative n’a pas autorisé de nouvelle tentative.Retry policy did not allow for a retry. Échec avec Le serveur distant a retourné une erreur : (404) Introuvable.Failing with The remote server returned an error: (404) Not Found..
e2d06d78-...e2d06d78-... La stratégie de nouvelle tentative n’a pas autorisé de nouvelle tentative.Retry policy did not allow for a retry. Échec avec Le serveur distant a retourné une erreur : (409) Conflit.Failing with The remote server returned an error: (409) Conflict..

Dans cet exemple, le journal indique que le client entrelace les requêtes de la méthode CreateIfNotExists (ID de requête e2d06d78…) avec les requêtes de la méthode UploadFromStream (de8b1c3c-...). Cet entrelacement se produit, car l’application cliente appelle ces méthodes de façon asynchrone.In this example, the log shows that the client is interleaving requests from the CreateIfNotExists method (request ID e2d06d78…) with the requests from the UploadFromStream method (de8b1c3c-...). This interleaving happens because the client application is invoking these methods asynchronously. Modifiez le code asynchrone dans le client de façon à ce qu’il crée le conteneur avant de tenter de charger des données dans un objet blob de ce conteneur.Modify the asynchronous code in the client to ensure that it creates the container before attempting to upload any data to a blob in that container. Idéalement, vous devriez créer tous vos conteneurs à l’avance.Ideally, you should create all your containers in advance.

Problème d’autorisation de signature d’accès partagé (SAP)A Shared Access Signature (SAS) authorization issue

Si l’application cliente tente d’utiliser une clé SAS qui n’inclut pas les autorisations requises pour l’opération, le service de stockage renvoie un message HTTP 404 (Non trouvé) au client.If the client application attempts to use a SAS key that does not include the necessary permissions for the operation, the storage service returns an HTTP 404 (Not found) message to the client. Vous verrez également apparaître une valeur SASAuthorizationError non nulle dans les métriques.At the same time, you will also see a non-zero value for SASAuthorizationError in the metrics.

Le tableau suivant donne un exemple de message de journal côté serveur à partir du fichier journal de journalisation du stockage :The following table shows a sample server-side log message from the Storage Logging log file:

NomName ValeurValue
Heure de début de la demandeRequest start time 2014-05-30T06:17:48.4473697Z2014-05-30T06:17:48.4473697Z
Type d'opérationOperation type GetBlobPropertiesGetBlobProperties
État de la demandeRequest status SASAuthorizationErrorSASAuthorizationError
Code d'état HTTPHTTP status code 404404
Type d'authentificationAuthentication type SasSas
Type de serviceService type Objet blobBlob
URL de la demandeRequest URL https://domemaildist.blob.core.windows.net/azureimblobcontainer/blobCreatedViaSAS.txt
  ?sv=2014-02-14&sr=c&si=mypolicy&sig=XXXXX&;api-version=2014-02-14?sv=2014-02-14&sr=c&si=mypolicy&sig=XXXXX&;api-version=2014-02-14
En-tête d’ID de requêteRequest ID header a1f348d5-8032-4912-93ef-b393e5252a3ba1f348d5-8032-4912-93ef-b393e5252a3b
ID de la demande clientClient request ID 2d064953-8436-4ee0-aa0c-65cb874f79292d064953-8436-4ee0-aa0c-65cb874f7929

Recherchez pourquoi l’application cliente tente d’effectuer une opération qu’elle n’est pas autorisée à effectuer.Investigate why your client application is attempting to perform an operation for which it has not been granted permissions.

Le code JavaScript du côté client n’est pas autorisé à accéder à l’objetClient-side JavaScript code does not have permission to access the object

Si vous utilisez un client JavaScript et que le service de stockage renvoie des messages HTTP 404, vous devez vérifier la présence des erreurs JavaScript suivantes dans le navigateur :If you are using a JavaScript client and the storage service is returning HTTP 404 messages, you check for the following JavaScript errors in the browser:

SEC7120: Origin http://localhost:56309 not found in Access-Control-Allow-Origin header.
SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied.

Notes

Vous pouvez utiliser les Outils de développement F12 dans Internet Explorer pour procéder au suivi des messages échangés entre le navigateur et le service de stockage lors de la résolution des problèmes JavaScript côté client.You can use the F12 Developer Tools in Internet Explorer to trace the messages exchanged between the browser and the storage service when you are troubleshooting client-side JavaScript issues.

Ces erreurs sont dues au fait que le navigateur implémente la restriction de sécurité same origin policy , qui empêche une page web d’appeler une API dans un domaine différent de celui dont la page provient.These errors occur because the web browser implements the same origin policy security restriction that prevents a web page from calling an API in a different domain from the domain the page comes from.

Pour contourner le problème JavaScript, vous devez configurer le service Partage des ressources cross-origin (CORS) pour le service de stockage auquel le client accède.To work around the JavaScript issue, you can configure Cross Origin Resource Sharing (CORS) for the storage service the client is accessing. Pour plus d’informations, voir Prise en charge du service Partage des ressources cross-origine (CORS) pour les services Azure Storage.For more information, see Cross-Origin Resource Sharing (CORS) Support for Azure Storage Services.

L'exemple de code suivant montre comment configurer votre service d'objet blob afin de permettre l'exécution de JavaScript dans le domaine Contoso pour accéder à un objet blob dans votre service de stockage d'objets blob :The following code sample shows how to configure your blob service to allow JavaScript running in the Contoso domain to access a blob in your blob storage service:


 var connectionString = Constants.connectionString;

 BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);

 BlobServiceProperties sp = blobServiceClient.GetProperties();

 // Set the service properties.
 sp.DefaultServiceVersion = "2013-08-15";
 BlobCorsRule bcr = new BlobCorsRule();
 bcr.AllowedHeaders = "*";

 bcr.AllowedMethods = "GET,POST";
 bcr.AllowedOrigins = "http://www.contoso.com";
 bcr.ExposedHeaders = "x-ms-*";
 bcr.MaxAgeInSeconds = 5;
 sp.Cors.Clear();
 sp.Cors.Add(bcr);
 blobServiceClient.SetProperties(sp);

Défaillance réseauNetwork Failure

Dans certaines circonstances, la perte de paquets réseau peut amener le service de stockage à renvoyer des messages HTTP 404 au client.In some circumstances, lost network packets can lead to the storage service returning HTTP 404 messages to the client. Par exemple, lorsque l'application cliente supprime une entité du service de table, le client génère une exception de stockage avec un message d'état « HTTP 404 (Not Found) » du service de table.For example, when your client application is deleting an entity from the table service you see the client throw a storage exception reporting an "HTTP 404 (Not Found)" status message from the table service. Lorsque vous recherchez la table dans le service de stockage de table, vous constatez que le service a supprimé l'entité comme prévu.When you investigate the table in the table storage service, you see that the service did delete the entity as requested.

Les détails de l’exception dans le client incluent l’ID de requête (7e84f12d...) attribué par le service de Table pour la requête : vous pouvez utiliser ces informations pour rechercher les détails de la requête dans les journaux d’activité de stockage côté serveur en effectuant une recherche dans la colonne request-id-header du fichier journal.The exception details in the client include the request ID (7e84f12d…) assigned by the table service for the request: you can use this information to locate the request details in the server-side storage logs by searching in the request-id-header column in the log file. Vous pouvez également utiliser les métriques pour savoir quand ce type d’erreurs se produit, puis effectuer une recherche dans les fichiers journaux sur base de l’heure à laquelle les métriques ont enregistré cette erreur.You could also use the metrics to identify when failures such as this occur and then search the log files based on the time the metrics recorded this error. L’entrée du journal indique que la suppression a échoué avec un message d’état « HTTP (404) Client Other Error ».This log entry shows that the delete failed with an "HTTP (404) Client Other Error" status message. La même entrée du journal inclut l’ID de requête généré par le client dans la colonne client-request-id (813ea74f…).The same log entry also includes the request ID generated by the client in the client-request-id column (813ea74f…).

Le journal côté serveur inclut également une autre entrée avec la même valeur client-request-id (813ea74f…) pour une opération de suppression réussie de la même entité, et provenant du même client.The server-side log also includes another entry with the same client-request-id value (813ea74f…) for a successful delete operation for the same entity, and from the same client. Cette opération de suppression réussie s'est produite peu avant l'échec de la demande de suppression.This successful delete operation took place very shortly before the failed delete request.

La cause la plus probable de ce scénario est que le client a envoyé une demande de suppression de l’entité au service de table, qui a réussi, mais n’a pas reçu d’accusé de réception du serveur (peut-être à cause d’un problème de réseau provisoire).The most likely cause of this scenario is that the client sent a delete request for the entity to the table service, which succeeded, but did not receive an acknowledgment from the server (perhaps due to a temporary network issue). Le client a ensuite tenté automatiquement d’effectuer à nouveau l’opération (en utilisant le même client-request-id). Cette tentative a échoué, car l’entité avait déjà été supprimée.The client then automatically retried the operation (using the same client-request-id), and this retry failed because the entity had already been deleted.

Si ce problème se produit fréquemment, vous devez rechercher pourquoi le client ne reçoit pas les accusés de réception du service de table.If this problem occurs frequently, you should investigate why the client is failing to receive acknowledgments from the table service. Si le problème est intermittent, vous devez capturer l’erreur « HTTP (404) Not Found » et la journaliser dans le client, mais permettre au client de continuer.If the problem is intermittent, you should trap the "HTTP (404) Not Found" error and log it in the client, but allow the client to continue.

Le client reçoit des messages HTTP 409 (Conflict)The client is receiving HTTP 409 (Conflict) messages

Le tableau suivant inclut un extrait du journal côté serveur pour deux opérations client : DeleteIfExists suivie de CreateIfNotExists avec le même nom de conteneur d’objet blob.The following table shows an extract from the server-side log for two client operations: DeleteIfExists followed immediately by CreateIfNotExists using the same blob container name. Chaque opération cliente génère l’envoi de deux requêtes au serveur : d’abord une requête GetContainerProperties afin de vérifier l’existence du conteneur, puis la requête DeleteContainer ou CreateContainer.Each client operation results in two requests sent to the server, first a GetContainerProperties request to check if the container exists, followed by the DeleteContainer or CreateContainer request.

TimestampTimestamp OpérationOperation RésultatResult Nom du conteneurContainer name ID de la demande clientClient request ID
05:10:13.716722505:10:13.7167225 GetContainerPropertiesGetContainerProperties 200200 mmcontmmcont c9f52c89-…c9f52c89-…
05:10:13.816732505:10:13.8167325 DeleteContainerDeleteContainer 202202 mmcontmmcont c9f52c89-…c9f52c89-…
05:10:13.898740705:10:13.8987407 GetContainerPropertiesGetContainerProperties 404404 mmcontmmcont bc881924-…bc881924-…
05:10:14.214772305:10:14.2147723 CreateContainerCreateContainer 409409 mmcontmmcont bc881924-…bc881924-…

Le code de l’application cliente supprime puis recrée immédiatement un conteneur d’objets blob du même nom : la méthode CreateIfNotExists (ID de demande client bc881924-...) échoue avec l’erreur HTTP 409 (Conflit).The code in the client application deletes and then immediately recreates a blob container using the same name: the CreateIfNotExists method (Client request ID bc881924-…) eventually fails with the HTTP 409 (Conflict) error. Lorsqu’un client supprime des conteneurs d’objet blob, des tables ou des files d’attente, le nom devient à nouveau disponible après une courte période.When a client deletes blob containers, tables, or queues there is a brief period before the name becomes available again.

Chaque fois qu'elle crée des conteneurs, l'application cliente utilise des noms de conteneur uniques si le modèle de suppression/recréation est commun.The client application should use unique container names whenever it creates new containers if the delete/recreate pattern is common.

Les métriques indiquent une valeur PercentSuccess faible ou les entrées du journal d’analyse incluent des opérations avec un statut de transaction ClientOtherErrorsMetrics show low PercentSuccess or analytics log entries have operations with transaction status of ClientOtherErrors

La métrique PercentSuccess capture le pourcentage d'opérations réussies sur base de leur code d'état HTTP.The PercentSuccess metric captures the percent of operations that were successful based on their HTTP Status Code. Les opérations avec des codes d’état 2XX sont considérées comme réussies ; celles avec des codes d’état dans les plages 3XX, 4XX et 5XX sont considérées comme non réussies et réduisent la valeur de la métrique PercentSuccess.Operations with status codes of 2XX count as successful, whereas operations with status codes in 3XX, 4XX and 5XX ranges are counted as unsuccessful and lower the PercentSuccess metric value. Dans les fichiers journaux de stockage côté serveur, ces opérations sont enregistrées avec un statut de transaction ClientOtherErrors.In the server-side storage log files, these operations are recorded with a transaction status of ClientOtherErrors.

Il est important de noter que ces opérations ont été réalisées avec succès et n'affectent donc pas d'autres métriques telles que la disponibilité.It is important to note that these operations have completed successfully and therefore do not affect other metrics such as availability. Voici quelques exemples d'opérations qui s'exécutent avec succès, mais qui génèrent des codes d'état HTTP d'échec :Some examples of operations that execute successfully but that can result in unsuccessful HTTP status codes include:

  • ResourceNotFound (Not Found 404), par exemple, à partir d'une demande GET vers un objet blob qui n'existe pas.ResourceNotFound (Not Found 404), for example from a GET request to a blob that does not exist.
  • ResouceAlreadyExists (Conflict 409), par exemple, à partir d’une opération CreateIfNotExist où la ressource existe déjà.ResourceAlreadyExists (Conflict 409), for example from a CreateIfNotExist operation where the resource already exists.
  • ConditionNotMet (Not Modified 304), par exemple, à partir d’une opération conditionnelle, comme lorsqu’un client envoie une valeur ETag et un en-tête HTTP If-None-Match pour demander une image uniquement si elle a été mise à jour depuis la dernière opération.ConditionNotMet (Not Modified 304), for example from a conditional operation such as when a client sends an ETag value and an HTTP If-None-Match header to request an image only if it has been updated since the last operation.

Vous trouverez une liste des codes d’erreur API REST communs renvoyés par les services de stockage à la page Codes d’erreur API REST communs.You can find a list of common REST API error codes that the storage services return on the page Common REST API Error Codes.

Les métriques de capacité indiquent une augmentation inattendue de l’utilisation de la capacité de stockageCapacity metrics show an unexpected increase in storage capacity usage

Si vous constatez des changements soudains, inattendus dans l'utilisation de la capacité de votre compte de stockage, vous pouvez rechercher les raisons en consultant d’abord vos métriques de disponibilité. Par exemple, une augmentation du nombre de demandes de suppression qui échouent peut provoquer une augmentation du volume de stockage blob que vous utilisez, car les opérations de nettoyage spécifiques de l'application supposées libérer de l'espace peuvent ne pas fonctionner comme prévu (par exemple, suite à l'expiration des jetons SAS utilisés pour libérer de l'espace).If you see sudden, unexpected changes in capacity usage in your storage account, you can investigate the reasons by first looking at your availability metrics; for example, an increase in the number of failed delete requests might lead to an increase in the amount of blob storage you are using as application-specific cleanup operations you might have expected to be freeing up space may not be working as expected (for example, because the SAS tokens used for freeing up space have expired).

Votre problème provient de l’utilisation de l’émulateur de stockage pour le développement ou les testsYour issue arises from using the storage emulator for development or test

On utilise généralement un émulateur de stockage lors du développement et des tests afin d'éviter l'utilisation d'un compte de stockage Azure.You typically use the storage emulator during development and test to avoid the requirement for an Azure storage account. Voici les problèmes communs que vous êtes susceptible de rencontrer lors de l’utilisation de l’émulateur de stockage :The common issues that can occur when you are using the storage emulator are:

La fonctionnalité « X » ne fonctionne pas dans l’émulateur de stockageFeature "X" is not working in the storage emulator

L'émulateur de stockage ne prend pas en charge toutes les fonctionnalités des services de stockage Azure (par ex., le service de fichiers).The storage emulator does not support all of the features of the Azure storage services such as the file service. Pour plus d’informations, consultez Utilisation de l’émulateur de stockage Azure pour le développement et le test.For more information, see Use the Azure Storage Emulator for Development and Testing.

Pour accéder à ces fonctions non prises en charge par l’émulateur de stockage, vous devez utiliser le service de stockage Azure dans le cloud.For those features that the storage emulator does not support, use the Azure storage service in the cloud.

Erreur « The value for one of the HTTP headers is not in the correct format » (Le format de la valeur d’un des en-têtes HTTP est incorrect) lors de l’utilisation de l’émulateur de stockageError "The value for one of the HTTP headers is not in the correct format" when using the storage emulator

Vous testez votre application qui utilise la bibliothèque cliente de stockage dans l'émulateur de stockage local, et les appels de méthode comme CreateIfNotExists échouent avec le message d'erreur « La valeur de l’un des en-têtes HTTP n’a pas un format correct ».You are testing your application that uses the Storage Client Library against the local storage emulator and method calls such as CreateIfNotExists fail with the error message "The value for one of the HTTP headers is not in the correct format." Cela indique que la version de l'émulateur de stockage que vous utilisez ne prend pas en charge la version de la bibliothèque cliente de stockage que vous utilisez.This indicates that the version of the storage emulator you are using does not support the version of the storage client library you are using. La bibliothèque cliente de stockage ajoute l'en-tête x-ms-version à toutes les demandes qu'elle effectue.The Storage Client Library adds the header x-ms-version to all the requests it makes. Si l'émulateur de stockage ne reconnaît pas la valeur dans l'en-tête x-ms-version , il refuse la demande.If the storage emulator does not recognize the value in the x-ms-version header, it rejects the request.

Vous pouvez utiliser les journaux d’activité de la bibliothèque cliente de stockage pour afficher la valeur de l’ en-tête x-ms-version envoyée.You can use the Storage Library Client logs to see the value of the x-ms-version header it is sending. Vous pouvez également afficher la valeur de l' en-tête x-ms-version si vous utilisez Fiddler pour procéder au suivi des demandes à partir de votre application cliente.You can also see the value of the x-ms-version header if you use Fiddler to trace the requests from your client application.

Ce scénario se produit généralement lorsque vous installez et utilisez la dernière version de la bibliothèque cliente de stockage sans mettre à jour l’émulateur de stockage.This scenario typically occurs if you install and use the latest version of the Storage Client Library without updating the storage emulator. Vous devez soit installer la dernière version de l’émulateur de stockage, soit utiliser le stockage cloud au lieu de l’émulateur pour le développement et les tests.You should either install the latest version of the storage emulator, or use cloud storage instead of the emulator for development and test.

L’exécution de l’émulateur de stockage exige des privilèges d’administrationRunning the storage emulator requires administrative privileges

Vous êtes invité à entrer vos informations d'identification d'administrateur lorsque vous exécutez l'émulateur de stockage.You are prompted for administrator credentials when you run the storage emulator. Cela ne se produit que lors de la toute première initialisation de l'émulateur de stockage.This only occurs when you are initializing the storage emulator for the first time. Une fois qu'il a été initialisé, vous n'avez plus besoin de privilèges d'administration pour l'exécuter à nouveau.After you have initialized the storage emulator, you do not need administrative privileges to run it again.

Pour plus d’informations, consultez Utilisation de l’émulateur de stockage Azure pour le développement et le test.For more information, see Use the Azure Storage Emulator for Development and Testing. Vous pouvez également initialiser l’émulateur de stockage dans Visual Studio, qui exige également des privilèges Administrateur.You can also initialize the storage emulator in Visual Studio, which will also require administrative privileges.

Vous rencontrez des problèmes pendant l’installation du Kit de développement logiciel (SDK) Azure pour .NETYou are encountering problems installing the Azure SDK for .NET

Lorsque vous tentez d'installer le Kit de développement logiciel (SDK), vous ne parvenez pas à installer l'émulateur de stockage sur votre machine locale.When you try to install the SDK, it fails trying to install the storage emulator on your local machine. Le journal d'installation contient un des messages suivants :The installation log contains one of the following messages:

  • CAQuietExec : Erreur : Impossible d’accéder à l’instance SQLCAQuietExec: Error: Unable to access SQL instance
  • CAQuietExec : Erreur : Impossible de créer la base de données.CAQuietExec: Error: Unable to create database

Cela est dû à un problème au niveau de l'installation LocalDB existante.The cause is an issue with existing LocalDB installation. Par défaut, l'émulateur de stockage utilise LocalDB pour conserver les données lorsqu'il simule les services de stockage Azure.By default, the storage emulator uses LocalDB to persist data when it simulates the Azure storage services. Vous pouvez réinitialiser votre instance LocalDB en exécutant les commandes suivantes dans une fenêtre d'invite de commandes avant de tenter d'installer le Kit de développement logiciel (SDK).You can reset your LocalDB instance by running the following commands in a command-prompt window before trying to install the SDK.

sqllocaldb stop v11.0
sqllocaldb delete v11.0
delete %USERPROFILE%\WAStorageEmulatorDb3*.*
sqllocaldb create v11.0

La commande delete supprime tous les anciens fichiers de base de données des installations précédentes de l'émulateur de stockage.The delete command removes any old database files from previous installations of the storage emulator.

Vous rencontrez un autre problème avec un service de stockageYou have a different issue with a storage service

Si les sections de résolution des problèmes précédentes n’incluent pas le problème que vous rencontrez avec un service de stockage, vous devez adopter l’approche suivante pour diagnostiquer et résoudre votre problème.If the previous troubleshooting sections do not include the issue you are having with a storage service, you should adopt the following approach to diagnosing and troubleshooting your issue.

  • Consultez vos métriques afin d'identifier tout changement par rapport au comportement de base normal.Check your metrics to see if there is any change from your expected base-line behavior. Sur base des métriques, vous pouvez déterminer si le problème est provisoire ou permanent, ainsi que les opérations de stockage affectées par le problème.From the metrics, you may be able to determine whether the issue is transient or permanent, and which storage operations the issue is affecting.
  • Vous pouvez utiliser les informations des métriques afin de faciliter vos recherches dans vos données de journalisation côté serveur et obtenir des informations plus détaillées concernant les erreurs rencontrées.You can use the metrics information to help you search your server-side log data for more detailed information about any errors that are occurring. Ces informations peuvent vous aider à analyser et résoudre le problème.This information may help you troubleshoot and resolve the issue.
  • Si les informations des journaux côté serveur ne suffisent pas pour résoudre le problème, vous pouvez utiliser les journaux côté client de la bibliothèque de client de stockage pour enquêter sur le comportement de votre application cliente, ainsi que des outils tels que Fiddler, ou Wireshark pour enquêter sur votre réseau.If the information in the server-side logs is not sufficient to troubleshoot the issue successfully, you can use the Storage Client Library client-side logs to investigate the behavior of your client application, and tools such as Fiddler, Wireshark to investigate your network.

Pour plus d’informations sur l’utilisation de Fiddler, consultez « Annexe 1 : Utilisation de Fiddler pour capturer le trafic HTTP et HTTPS. »For more information about using Fiddler, see "Appendix 1: Using Fiddler to capture HTTP and HTTPS traffic."

Pour plus d’informations sur l’utilisation de Wireshark, consultez « Annexe 2 : Utilisation de Wireshark pour capturer le trafic réseau ».For more information about using Wireshark, see "Appendix 2: Using Wireshark to capture network traffic."

AnnexesAppendices

Les annexes décrivent plusieurs outils qui peuvent s’avérer utiles lors du diagnostic et de la résolution des problèmes liés à Azure Storage (et aux autres services).The appendices describe several tools that you may find useful when you are diagnosing and troubleshooting issues with Azure Storage (and other services). Ces outils ne font pas partie de Azure Storage, et certains d'entre eux sont des produits tiers.These tools are not part of Azure Storage and some are third-party products. En tant que tels, les outils décrits dans les annexes ne sont couverts par aucun contrat de support technique que vous pourriez avoir établi avec Microsoft Azure ou Azure Storage ; vous devez donc procéder à votre propre évaluation et examiner les options de licence et de support technique disponibles proposées par les fournisseurs de ces outils.As such, the tools discussed in these appendices are not covered by any support agreement you may have with Microsoft Azure or Azure Storage, and therefore as part of your evaluation process you should examine the licensing and support options available from the providers of these tools.

Annexe 1 : Utilisation de Fiddler pour capturer le trafic HTTP et HTTPSAppendix 1: Using Fiddler to capture HTTP and HTTPS traffic

Fiddler est un outil utile pour l’analyse du trafic HTTP et HTTPS entre votre application cliente et le service de stockage Azure que vous utilisez.Fiddler is a useful tool for analyzing the HTTP and HTTPS traffic between your client application and the Azure storage service you are using.

Notes

Fiddler est capable de décoder le trafic HTTPS ; vous devez lire avec attention la documentation de Fiddler pour vous familiariser avec ce processus et comprendre les implications en matière de sécurité.Fiddler can decode HTTPS traffic; you should read the Fiddler documentation carefully to understand how it does this, and to understand the security implications.

Cette annexe explique brièvement comment configurer Fiddler pour capturer le trafic entre la machine locale sur laquelle vous avez installé Fiddler et les services de stockage Azure.This appendix provides a brief walkthrough of how to configure Fiddler to capture traffic between the local machine where you have installed Fiddler and the Azure storage services.

Après avoir lancé Fiddler, il commence à capturer le trafic HTTP et HTTPS de votre ordinateur local.After you have launched Fiddler, it will begin capturing HTTP and HTTPS traffic on your local machine. Voici quelques commandes utiles pour contrôler Fiddler :The following are some useful commands for controlling Fiddler:

  • Arrêt et démarrage de la capture du trafic.Stop and start capturing traffic. Dans le menu principal, accédez à File, puis cliquez sur Capture Traffic pour activer et désactiver la capture.On the main menu, go to File and then click Capture Traffic to toggle capturing on and off.
  • Enregistrement des données de trafic capturées.Save captured traffic data. Dans le menu principal, accédez à File, cliquez sur Save, puis sur All Sessions : cela vous permet d’enregistrer le trafic dans un fichier d’archive de la session.On the main menu, go to File, click Save, and then click All Sessions: this enables you to save the traffic in a Session Archive file. Vous pouvez charger à nouveau ultérieurement un fichier Session Archive à des fins d'analyse, ou l'envoyer, si nécessaire, au support Microsoft.You can reload a Session Archive later for analysis, or send it if requested to Microsoft support.

Pour limiter le volume de trafic capturé par Fiddler, vous pouvez utiliser des filtres que vous configurez dans l'onglet Filters . La capture d'écran suivante illustre un filtre qui capture uniquement le trafic envoyé au point de terminaison de stockage contosoemaildist.table.core.windows.net :To limit the amount of traffic that Fiddler captures, you can use filters that you configure in the Filters tab. The following screenshot shows a filter that captures only traffic sent to the contosoemaildist.table.core.windows.net storage endpoint:

Capture d'écran montrant un filtre qui capture uniquement le trafic envoyé au point de terminaison de stockage contosoemaildist.table.core.windows.net.

Annexe 2 : Utilisation de Wireshark pour capturer le trafic réseauAppendix 2: Using Wireshark to capture network traffic

Wireshark est un analyseur de protocole réseau qui vous permet d’afficher des informations détaillées concernant les paquets pour de nombreux protocoles réseau.Wireshark is a network protocol analyzer that enables you to view detailed packet information for a wide range of network protocols.

La procédure suivante explique comment capturer des informations détaillées concernant les paquets pour le trafic à partir de la machine locale où vous avez installé Wireshark, vers le service de table de votre compte de stockage Azure.The following procedure shows you how to capture detailed packet information for traffic from the local machine where you installed Wireshark to the table service in your Azure storage account.

  1. Lancez Wireshark sur votre ordinateur local.Launch Wireshark on your local machine.

  2. Dans la section Start , sélectionnez l'interface réseau locale ou des interfaces connectées à Internet.In the Start section, select the local network interface or interfaces that are connected to the internet.

  3. Cliquez sur Capture Options.Click Capture Options.

  4. Ajoutez un filtre à la zone de texte Capture Filter .Add a filter to the Capture Filter textbox. Par exemple, host contosoemaildist.table.core.windows.net configurera Wireshark pour capturer uniquement les paquets envoyés au ou par le point de terminaison de stockage du service de table dans le compte de stockage contosoemaildist.For example, host contosoemaildist.table.core.windows.net will configure Wireshark to capture only packets sent to or from the table service endpoint in the contosoemaildist storage account. Consultez la liste complète des filtres de capture.Check out the complete list of Capture Filters.

    Capture d’écran montrant comment ajouter un filtre à la zone de texte Filtre de capture.

  5. Cliquez sur Start.Click Start. Wireshark commence à capturer tous les paquets envoyés au ou par le point de terminaison de stockage du service de table lors de l'utilisation de votre application cliente sur votre ordinateur local.Wireshark will now capture all the packets send to or from the table service endpoint as you use your client application on your local machine.

  6. Lorsque vous avez terminé, dans le menu principal, cliquez sur Capture, puis sur Stop.When you have finished, on the main menu click Capture and then Stop.

  7. Pour enregistrer les données capturées dans un fichier de capture Wireshark, dans le menu principal, cliquez sur File, puis sur Save.To save the captured data in a Wireshark Capture File, on the main menu click File and then Save.

WireShark met en évidence toutes les erreurs détectées dans la fenêtre packetlist .WireShark will highlight any errors that exist in the packetlist window. Vous pouvez également utiliser la fenêtre Expert Info (cliquez sur Analyze, puis sur Expert Info) pour afficher un récapitulatif des erreurs et avertissements.You can also use the Expert Info window (click Analyze, then Expert Info) to view a summary of errors and warnings.

Capture d’écran qui montre la fenêtre info Expert dans laquelle vous pouvez afficher un résumé des erreurs et des avertissements.

Vous pouvez également choisir d'afficher les données TCP telles que la couche d'application les voit en cliquant avec le bouton droit sur les données TCP et en sélectionnant Suivre le flux TCP.You can also choose to view the TCP data as the application layer sees it by right-clicking on the TCP data and selecting Follow TCP Stream. Cette option est utile si vous avez capturé votre image mémoire sans filtre de capture.This is useful if you captured your dump without a capture filter. Pour plus d’informations, consultez Following TCP Streams(Suivi du flux TCP).For more information, see Following TCP Streams.

Capture d’écran montrant comment afficher les données TCP comme la couche application les voit.

Notes

Pour plus d’informations sur l’utilisation de Wireshark, consultez le Guide d’utilisation de Wireshark.For more information about using Wireshark, see the Wireshark Users Guide.

Annexe 4 : Utilisation d’Excel pour afficher les métriques et les données de journalisationAppendix 4: Using Excel to view metrics and log data

De nombreux outils vous permettent de télécharger les données métriques de stockage à partir du stockage de table Azure dans un format délimité, permettant leur chargement aisé dans Excel afin de les consulter ou les analyser.Many tools enable you to download the Storage Metrics data from Azure table storage in a delimited format that makes it easy to load the data into Excel for viewing and analysis. Les données de journalisation de Stockage Blob Azure sont déjà dans un format délimité qui peut être chargé dans Excel.Storage Logging data from Azure Blob Storage is already in a delimited format that you can load into Excel. Toutefois, vous devez ajouter des en-têtes de colonnes appropriés sur la base des informations des sections Format de journal de Storage Analytics et Schéma de table de métriques Storage Analytics.However, you will need to add appropriate column headings based in the information at Storage Analytics Log Format and Storage Analytics Metrics Table Schema.

Pour importer vos données de journalisation du stockage dans Excel, après les avoir téléchargées à partir stockage d’objets blob :To import your Storage Logging data into Excel after you download it from blob storage:

  • Dans le menu Data, cliquez sur From Text.On the Data menu, click From Text.
  • Accédez au fichier journal que vous souhaitez afficher et cliquez sur Import.Browse to the log file you want to view and click Import.
  • À l’étape 1 du Text Import Wizard, sélectionnez Delimited.On step 1 of the Text Import Wizard, select Delimited.

À l’étape 1 du Text Import Wizard, sélectionnez Semicolon comme unique délimiteur et guillemet double comme Text qualifier.On step 1 of the Text Import Wizard, select Semicolon as the only delimiter and choose double-quote as the Text qualifier. Ensuite, cliquez sur Finish et sélectionnez l'emplacement des données dans votre classeur.Then click Finish and choose where to place the data in your workbook.

Annexe 5 : Supervision avec Application Insights pour Azure DevOpsAppendix 5: Monitoring with Application Insights for Azure DevOps

Vous pouvez également utiliser la fonctionnalité Application Insights pour Azure DevOps dans le cadre de votre analyse des performances et de la disponibilité.You can also use the Application Insights feature for Azure DevOps as part of your performance and availability monitoring. Cet outil permet de :This tool can:

  • Vous assurer que votre service Web est disponible et réactif.Make sure your web service is available and responsive. Que votre application soit destinée à un site web ou à un appareil qui utilise un service web, il peut tester votre URL toutes les quelques minutes depuis différents emplacements de par le monde et vous signaler tout problème éventuel.Whether your app is a web site or a device app that uses a web service, it can test your URL every few minutes from locations around the world, and let you know if there's a problem.
  • Rapidement diagnostiquer tous les problèmes ou exceptions de performances rencontrés par votre service Web.Quickly diagnose any performance issues or exceptions in your web service. Découvrez si l'UC ou d'autres ressources sont en difficulté, obtenez les traces de la pile à partir des exceptions et effectuez des recherches aisées dans les suivis de journalisation.Find out if CPU or other resources are being stretched, get stack traces from exceptions, and easily search through log traces. Si les performances de l’application chutent en deçà des limites acceptables, Microsoft peut vous envoyer un e-mail.If the app's performance drops below acceptable limits, Microsoft can send you an email. Vous pouvez analyser les services Web .NET et Java.You can monitor both .NET and Java web services.

Plus d’informations sont disponibles dans Présentation d’Application Insights.You can find more information at What is Application Insights.

Étapes suivantesNext steps

Pour plus d’informations sur Analytics dans Stockage Azure, consultez ces ressources :For more information about analytics in Azure Storage, see these resources: