6
votes

Supprimer les anciennes données de diagnostics Windows Azure du stockage de table (compteurs de performances, etc.)

Plusieurs machines virtuelles Windows s'exécutant sur Azure sont configurées pour collecter des compteurs de performances et des journaux d'événements.

Tout cela est configuré dans les "Paramètres de diagnostic ..." sur la ressource de machine virtuelle dans Azure Portal. Il existe un agent de diagnostics Windows Azure qui collecte ces données sur la machine virtuelle et les stocke dans un compte de stockage (dans Table Storage).

Toutes ces données collectées (compteurs de performance, métriques, journaux, etc.) n'ont pas de politique de rétention et il ne semble pas y avoir de moyen de les configurer . Il s'accumule donc pour toujours dans la table de stockage du compte de stockage.

C'est là que se situe mon problème - il y a maintenant trop de données dans ces tables (plusieurs téraoctets dans mon cas) et cela coûte beaucoup d'argent juste pour les conserver. Et cela ne fera qu'augmenter avec le temps.

Les tableaux de comptes de stockage pertinents sont des tableaux tels que:

  • WADMetrics * (Tableau des métriques de Windows Azure Diagnostics)
  • WADPerformanceCountersTable (tableau des compteurs de performances de Windows Azure Diagnostics)
  • WASWindowsEventLogsTable (Tableau des journaux d'événements Windows de Diagnostics Windows Azure)

Existe-t-il un moyen comment supprimer les anciennes données dans ces tableaux afin qu'elles ne cassent rien? Ou mieux encore, existe-t-il un moyen de configurer la politique de rétention ou de la configurer pour qu'elle ne continue pas à s'accumuler indéfiniment?


0 commentaires

3 Réponses :


3
votes

Existe-t-il un moyen de supprimer les anciennes données de ces tableaux afin ne casserait rien?

Vous devrez le faire manuellement. La façon dont cela fonctionnerait est que vous interrogerez d'abord les données qui doivent être supprimées, puis une fois que vous les aurez, vous les supprimerez. L'attribut PartitionKey des entités stockées dans ces tables représente en fait une valeur de date / heure (en graduations précédées de zéros pour en faire une chaîne de longueur égale), vous devrez donc prendre la date / heure de et à. valeurs, convertissez-les en graduations, créez-en une chaîne de 19 caractères (en ajoutant le nombre approprié de zéros au début) et interrogez les données. Une fois que vous avez obtenu les données côté client, vous renvoyez la demande de suppression au stockage de la table.

Pour accélérer l'ensemble du processus, vous pouvez faire plusieurs choses:

  • Lorsque vous interrogez les données, utilisez la projection de requête pour renvoyer uniquement les attributs PartitionKey et RowKey car seuls ces deux attributs sont nécessaires pour la suppression.
  • Pour la suppression, vous pouvez utiliser la transaction par lots d'entité. Cela pourrait accélérer considérablement l'opération de suppression.
  • Pour des suppressions plus rapides, vous pouvez faire démarrer une VM dans la même région que celle de votre compte de stockage. De cette façon, vous ne payez pas les frais de sortie de données.

J'ai écrit un article de blog il y a quelque temps que vous pourriez trouver utile: https://gauravmantri.com/2012/02/17/effective-way-of-fetching-diagnostics-data-from- windows-azure-diagnostics-table-hint-use-partitionkey / .

Ou mieux encore, existe-t-il un moyen de configurer ou de définir une politique de rétention pour qu'il ne s'accumule pas indéfiniment?

Malheureusement, il n'y en a pas du moins à ce jour. Il existe un paramètre de rétention, mais ce n'est que pour les objets blob.


2 commentaires

Merci beaucoup d'avoir répondu! Existe-t-il des outils logiciels qui peuvent aider à la suppression? Je pourrais écrire le mien en utilisant vos instructions, mais je n'ai jamais utilisé d'API de stockage de table auparavant, donc je recherche des raccourcis s'il y en a. Je m'attendais à ce que ce soit un problème courant pour quiconque utilise des machines virtuelles Azure, mais je ne pouvais trouver ni beaucoup de personnes avec le même problème ni aucune solution prête à l'emploi.


Nous avions un outil (Azure Management Studio) uniquement pour cela, mais nous l'avons récemment déconseillé. Nous avons un autre outil (Cerebrata Cerulean) où vous pouvez accomplir la même chose, bien que de manière un peu compliquée. Veuillez me contacter (gmantri à cerebrata dot com) en privé et je vous aiderai.



1
votes

Je viens de rencontrer ce problème alors que je recherchais ce qui coûte le plus cher dans l'abonnement.

Un outil utile est le Azure Storage Explorer . Vous pouvez parcourir une table, inspecter son contenu, utiliser le bouton Statistiques de la table pour compter les lignes de la table, sélectionner plusieurs fois et supprimer des lignes.

Pour une petite VM qui fonctionne depuis 2016, j'ai trouvé que le WADMetrics les tables semblent rouler tous les 10 jours, mais pas les autres. Un exemple de table WADMetrics contenait 5724 entrées. Le WASWindowsEventLogsTable contenait 10 022 entrées. J'ai annulé le décompte de WADPerformanceCountersTable lorsqu'il a atteint 5 millions d'entrées. Le stockage des statistiques coûte plus cher que le disque dur virtuel de la VM.

Cet article résume des informations utiles sur les commandes PowerShell pour manipuler les tables. Malheureusement, Azure Cloud Shell ne prend pas encore en charge les commandes permettant de travailler à l'intérieur d'une table, par exemple Get-AzTableRow (voir ce rapport ). Je suppose que cela fonctionnerait si vous configurez les dernières commandes Az PowerShell localement. Ensuite, vous pouvez sélectionner avec un filtre et utiliser Remove-AzTableRow pour supprimer certaines des lignes. Dans mon cas, la machine a été mise hors service donc j'avais juste besoin d'un moyen de supprimer beaucoup de tables sans avoir à cliquer sur chacune d'elles dans le tableau de bord. Voici quelques exemples de commandes pour commencer:

$location = "uswest"
$resourceGroup = "myRG"
$storageAccountName = "myData"
$storageAccount = get-AzStorageAccount -ResourceGroupName $resourceGroup -Name $storageAccountName
$ctx = $storageAccount.Context
# List all tables in storage account
Get-AzStorageTable -Context $ctx
# Count the WADMetrics tables
(Get-AzStorageTable -Context $ctx -Name "WADMetrics*").count
# Count the WADMetrics tables with "2018" in their name
(Get-AzStorageTable -Context $ctx -Name "WADMetrics*2018*").count
# Remove all WADMetrics tables with "2018" in their name without confirmation, then re-count 
# Only Get- supports wilcards, so pipe to Remove-AzStorageTable command
Get-AzStorageTable -Context $ctx -Name "WADMetrics*2018*" | Remove-AzStorageTable -Force
(Get-AzStorageTable -Context $ctx -Name "WADMetrics*2018*").count
# Remove the big tables. Confirmation takes a long time, so suppress it.
Remove-AzStorageTable -Context $ctx -Name "WADWindowsEventLogsTable" -Force
Remove-AzStorageTable -Context $ctx -Name "WADPerformanceCountersTable" -Force

# The following do NOT work in Azure Cloud Shell as of 07/16/2019.  See 
# https://github.com/MicrosoftDocs/azure-docs/issues/28608

# Count the rows in WADWindowsEventLogsTable
$tableName = "WADWindowsEventLogsTable"
$cloudTable = (Get-AzStorageTable -Context $ctx -Name $tableName).CloudTable
$cloudTableResults = Get-AzTableRow -table $cloudTable -columnName "RowKey"
$cloudTableResults.count


0 commentaires

1
votes

Une autre solution consiste à écrire un petit programme C # pour effacer les données de diagnostic Windows Azure (WAD).

L'article suivant vous propose une solution plus ou moins prête à l'emploi pour les méthodes qui peuvent effacer à la fois les tables et les lignes WADMetrics * contenues dans WADDiagnosticInfrastructureLogsTable , WADPerformanceCountersTable et WADWindowsEventLogsTable

En utilisant les deux méthodes DeleteOldTables () et DeleteOldData () , il est facile d'écrire un petit programme qui peut être exécuté mensuellement pour nettoyer les données WAD. Notez que le code utilise le package NuGet WindowsAzure.Storage, il doit donc être installé dans votre projet.

https: //mysharepointlearnings.wordpress.com/2019/08/20/managing-azure-vm-diagnostics-data-in-table-storage/


0 commentaires