VM Insights : Surveiller les performances et dépendances des VMs Azure

Surveiller ses environnements Azure est très important. Pour cela nous connaissons bien la solution Azure Monitor qui nous permet justement de surveiller et analyser nos environnements Azure. Azurer Monitor nous permet également d’être alerté si un incident survient sur notre plateforme.

              L’une des nouvelles fonctionnalités d’Azure Monitor est VM Insights. Elle nous permet de visualiser les performances et les dépendances de nos machines virtuelles. VM Insights se base sur les logs de VMS récupérés par les collecteurs de données Log Analytics.

              Voici les points qui seront traités :

  • Comment activer VM Insights : depuis le Portail et en PowerShell
  • Comment embarquer les VMs dans la solution : depuis le Portail et en PowerShell
  • Gérer les alertes en PowerShell

A l’issue de cet article vous saurez comment activer la solution et y embarquer les VMs automatiquement avec un script PowerShell complet et expliqué.

Activation de VM insights :

Il existe différentes méthodes pour activer VM Insights parmi lesquelles :

Directement sur le portail Azure

  • En ajoutant la solution au niveau d’un Log Analytics Workspace
    • En activant la solution depuis la machine virtuelle : dans le volet Monitoring de la VM > Insights > Enable / Activer.

L’activation de VM Insights directement depuis la VM, permet, en même temps d’activer la fonctionnalité VM Insights et d’embarquer la VM dans la solution. Une fois la fonctionnalité activée nous avons une visualisation des dépendances et performances de notre machine virtuelle comme représenté sur les Dashboards ci-dessous :

Visualisation des performances : Indicateur sur l’utilisation de la CPU, sur les espaces disques, les IOPS ou encore l’utilisation de la mémoire.

Visualisation des dépendances : nous permet notamment de voir avec quels environnements échange la VM et sur quels ports ou encore quels processus sont lancés sur la VM.

En ligne de commande

              Comme expliqué précédemment, la fonctionnalité VM Insights se base sur un Log Analytics Workspace. Nous devons donc commencer par en créer un ou récupérer les informations du Workspace déjà existant que l’on souhaite utiliser, ce sera le cas dans mon exemple. Voici le code permettant de récupérer les propriétés d’un Workspace existant puis d’ensuite activer la solution VM Insights :

# Get Log Analytics Workspace properties
$law = Get-AzOperationalInsightsWorkspace -ResourceGroupName $rgName 

#Set in a variable VM Insights solution Name
$SolutionName = "VMInsights"
 
#Enable VMInsights Solution on the Log Analytics Workspace
Set-AzOperationalInsightsIntelligencePack -ResourceGroupName $rgName -WorkspaceName $law.Name -IntelligencePackName $SolutionName -Enabled $true 

Comment embarquer les VMs dans la solution

              Pour embarquer des VMs dans la solution nous pouvons le faire comme expliqué précédemment directement depuis la VM ou bien via PowerShell. Il est important de comprendre comment le lien se fait entre les VMs et la solution VM Insights. Lors de l’activation de la solution pour une VM, 2 agents sont poussés dans la VM. Les agents sont les suivants :

  • Pour les VMs WINDOWS : Microsoft Monitoring Agent et Dependency Agent Windows
  • Pour les VMs Linux : Oms Agent For Linux et Dependency Agent Linux

              Si l’on souhaite déployer VM Insights sur un ensemble de VMs, nous n’allons pas passer par une activation de la solution à la main VM par VM depuis le portail. C’est tout l’intérêt du script PowerShell qui suit :

              Nous commençons par récupérer une liste de VMs pour lesquelles nous souhaitons analyser les performances et dépendances. Ici nous récupérons toutes les VMs d’un groupe de ressources :

# List all VMs in the resource group 
$azVMs = Get-AzVM -ResourceGroupName $rgName

              Ensuite, nous automatisons le déploiement des 2 Agents sur chaque VM de notre groupe de ressource en fonction de l’OS de la machine. Deux paramètres sont importants pour pousser l’installation des agents : l’ID du Workspace et la clé d’accès à ce dernier. Ce qui donne le code suivant :

$PublicSettings = @{"workspaceId" = $law.CustomerId}
$ProtectedSettings = @{"workspaceKey" = $lawKey}

# Push Agents Install on VMS to enable VM Insights
foreach ($vm in $azVMs) {
    # get VM's Os type

    $OsType = $vm.StorageProfile.OsDisk.OsType

    # Filter installation extension name by the Os type of the VM
    if($OsType -eq "Windows"){

        Set-AzVMExtension -ExtensionName "MMAExtension" `
            -ResourceGroupName $rgName `
            -VMName $vm.Name `
            -Publisher "Microsoft.EnterpriseCloud.Monitoring" `
            -ExtensionType "MicrosoftMonitoringAgent" `
            -TypeHandlerVersion 1.0 `
            -Settings $PublicSettings `
            -ProtectedSettings $ProtectedSettings `
            -Location $location

        Set-AzVMExtension -ExtensionName "DependencyAgentWindows" `
            -ResourceGroupName $rgName `
            -VMName $vm.Name `
            -Publisher "Microsoft.Azure.Monitoring.DependencyAgent" `
            -ExtensionType "DependencyAgentWindows" `
            -TypeHandlerVersion 9.1 `
            -Settings $PublicSettings `
            -ProtectedSettings $ProtectedSettings `
            -Location $location

    }

    if($OsType -eq "Linux"){

        Set-AzVMExtension -ExtensionName "OMSExtension" `
            -ResourceGroupName $rgName `
            -VMName $vm.Name `
            -Publisher "Microsoft.EnterpriseCloud.Monitoring" `
            -ExtensionType "OmsAgentForLinux" `
            -TypeHandlerVersion 1.0 `
            -Settings $PublicSettings `
            -ProtectedSettings $ProtectedSettings `
            -Location $location

        Set-AzVMExtension -ExtensionName "DependencyAgentLinux" `
            -ResourceGroupName $rgName `
            -VMName $vm.Name `
            -Publisher "Microsoft.Azure.Monitoring.DependencyAgent" `
            -ExtensionType "DependencyAgentLinux" `
            -TypeHandlerVersion 9.1 `
            -Settings $PublicSettings `
            -ProtectedSettings $ProtectedSettings `
            -Location $location

    }

    else{

        Write-Host "OS Type :" -ForegroundColor Red -NoNewline
        Write-Host $OsType -ForegroundColor White -NoNewline
        Write-Host "  not supported " -ForegroundColor Red -NoNewline
    }

} 

Création d’alertes

              Pour optimiser la surveillance de la plateforme et pouvoir suivre au mieux les performances de nos VMs, nous pouvons créer des règles d’alerte dans Azur Monitor en se basant sur les insights des VMs. Ici nous allons créer une alerte nous permettant d’être notifié par mail dès lors que l’utilisation de la CPU d’une VM dépasse 80%.

Créer un groupe d’action

              Pour commencer nous devons créer un groupe d’action dans lequel nous allons indiquer quelle action devra être effectuée lors du déclenchement de l’alerte, dans notre exemple un envoie de mail.


# Add new email where alerts should be send
$email = New-AzActionGroupReceiver -Name "alerts-mail" -EmailReceiver -EmailAddress "perfAlert@infeeny.com"

# Add Action group
$act = Set-AzActionGroup -Name "performance alerts" -ResourceGroup $rgName -ShortName "perfalerts" -Receiver $email

#$act = Get-AzActionGroup -ResourceGroupName $rgSocleName -Name "plateform alerts Action Group"
$action = New-AzActionGroup -ActionGroupId $act.id

Ajouter une règle d’alerte

      Maintenant nous créons le critère de l’alerte avec la métrique que nous souhaitons surveiller. Puis on crée l’alerte à laquelle nous allons associer ce critère et le groupe d’action créé juste avant.


### Add metric Rule for CPU ###

#set alert criteria for CPU utilization 
$criteriacpu = New-AzMetricAlertRuleV2Criteria -MetricName "Percentage CPU" `
-TimeAggregation average `
-Operator GreaterThanOrEqual `
-Threshold 80 

#Add alert rule     
Add-AzMetricAlertRuleV2 -Name "Windows and Linux CPU Alerts" `
    -ResourceGroupName $rgName `
    -WindowSize 00:05:00 `
    -Frequency 00:01:00 `
    -TargetResourceScope $rg.ResourceId `
    -Condition $criteriacpu `
    -TargetResourceType microsoft.compute/virtualmachines `
    -TargetResourceRegion $location `
    -ActionGroup $action `
    -Severity 3 

Conclusion

              Pour conclure, grâce à la nouvelle fonctionnalité VM Insights d’Azure Monitor, nous avons un suivi et une vision complète des performances de nos VMs. Cette fonctionnalité nous apporte des Dashboards complets que nous pouvons customiser afin d’afficher les métriques qui nous sont le plus cohérentes.
              Dans cet article, vous avez toutes les informations nécessaires pour déployer la fonctionnalité VM Insights sur vos VMs Azure et générer des alertes vous permettant ainsi de réagir au plus vite en cas d’incident ou de surcharge. Ici nous avons choisi PowerShell mais il est tout à fait possible de déployer la solution via Terraform ou Azure ARM si vous faites de l’InfrasAsCode.

Voici le lien Github vers le script complet :

https://github.com/infeeny/VMInsights/blob/master/VMInsights.ps1

Mise en place d’une architecture Lambda avec Power BI et Logic Apps

Par Nidhal BRIBECH, de la practice Data Experience

  1.     Introduction

 A travers ce tutoriel, nous allons mettre en place une architecture Lambda à l’aide des outils Microsoft à la fois sur le cloud et en local.

L’architecture Lambda permet de stocker et de traiter de larges volumes de données (batch) tout en intégrant les données les plus récentes dans un flux de streaming.

Pour nous rapprocher de cette architecture, j’ai choisi d’utiliser le service Microsoft Azure « Logic App » permettant de récupérer les données sous forme de batch et Power BI en ligne pour la partie donnée en temps réel.    

 2.     Scénario

 Nous souhaitons stocker les tweets provenant des médias français présent sur Twitter à la fois sous forme de fichiers csv dans un blob storage que l’on pourra exploiter une fois que l’on a une volumétrie importante. Mais aussi agrémenter une solution Power BI en ligne qui permettra d’étudier les tweets les plus récents (par exemple tendances des tweets du mois présent).

 3.     Architecture

                                 

 4.     Pré requis

 Créer un compte Twitter pour accéder aux données fourni par l’API (https://twitter.com/).

Installer Power BI Desktop (disponible gratuitement à l’adresse suivante : https://powerbi.microsoft.com/fr-fr/desktop/).

Avoir un compte Power BI (Choisir « partage et collaboration dans le cloud » https://powerbi.microsoft.com/fr-fr/get-started/).

Avoir un compte Azure (Compte gratuit avec 170€ de crédit https://azure.microsoft.com/fr-fr/).

 5.     Créer un blob Storage

 La première étape consiste à créer un blob storage pour stocker les tweets qui remplissent nos critères. Ce type de stockage enregistrera nos données sous la forme de fichiers textes.

 

 

 On renseigne son nom, son type, l’endroit où il se trouve et on renseigne une ressource group (sinon on la crée en même temps que le blob storage en cochant « Create New »).

 On aura besoin de la clé (key1) et du nom (Storage account name) pour la partie Power BI desktop, donc on les garde dans un fichier texte.

 

 

 Par la suite, on crée un container qui va recevoir nos tweets à la manière d’un dossier.

 6.     Créer un Logic Apps

 La logic app va permettre d’exécuter automatiquement un processus qui récupèrera les tweets selon des critères spécifiques, à une fréquence prédéfinie et selon un enchaînement d’opérations.

On renseigne son nom, la ressource groupe (la même que celle du blob storage) ainsi que sa localité.

En cliquant sur Logic App Designer, nous arrivons sur l’interface graphique. Une multitude de triggers (déclencheurs) sont disponibles mais celui qui nous intéresse est « When a new tweet is posted ».

 On se connecte à l’aide de nos identifiants Twitter pour permettre la connexion entre les flux Twitter et la logic app.

 

 On définit les filtres de recherche et l’intervalle entre chaque exécution (dans notre exemple, il s’agit de tweets provenant de comptes d’actualités en France que l’on recherche toutes les 5 minutes).

 Nous récupérons les tweets grâce à ce trigger et allons les traiter avec deux actions.

On crée une action à la suite du trigger (cliquer sur Add an action).

Et nous allons choisir Azure Blob Storage.

Plus précisément l’action « Create blob » pour stocker chaque tweet en fichier unique.

On établit une connexion avec notre container préalablement crée en renseignant un nom de connexion (au choix) puis en sélectionnant le blob storage correspondant :

Une fois la connexion établit, on renseigne le container de réception, le nom des blobs et le contenue des blobs.

Blob name prend comme nom la date au moment de la création du blob suivi de l’extension « .txt » pour que le fichier soit exploitable (on verra cela par la suite sur Power BI).

concat(utcNow(),'.txt')

 Blob content contiendra les éléments que nous souhaitons garder (User Name, CreatedAt et Tweet Text) et on les sépare à l’aide d’un point-virgule pour mieux les délimiter.

concat(triggerBody()?['UserDetails']?['FullName'],';',
triggerBody()?['CreatedAtIso'],';',triggerBody()?['TweetText'])

 

En parallèle à cela, nous allons ajouter une action qui permettra de charger les données dans un tableau de bord Power BI en ligne (service cloud).

Mais avant cela il faut créer un jeu de données sur son espace de travail en ligne (https://app.powerbi.com/).

 Une fois créé, cliquez sur « Créer » en haut à droite, puis sélectionnez « Jeu de données de streaming ».

 

 Il faut choisir « API ».

 

Ensuite, on renseigne les valeurs que l’on souhaite extraire des tweets (TweetText, UserName, CreatedAt).

 Pour cela on renseigne un nom de jeu de données et pour chaque valeur un nom et un type.

On valide la création puis cliquez sur « Terminé ».

 Maintenant que nous avons un jeu de données en ligne, il faut l’agrémenter d’éléments. Donc on retourne sur notre logic app et on ajoute une action en parallèle du blob storage.

 Recherchez Power BI puis sélectionnez l’icône correspondante.

Puis on choisit l’action « Add rows to a dataset » qui va permettre d’ajouter les valeurs à notre jeu de données en streaming.

On renseigne :

·        Le workplace, le dataset et la table de notre application Power BI en ligne.

·        Les valeurs pour les colonnes de notre table à agrémenter.

Sauvegardez en cliquant sur Save puis lancez la logic app (Run). Il faut que les comptes en écoute tweetent pour démarrer le processus automatiquement.

 

Suite à l’exécution nous avons confirmation du bon déroulement des actions.

En retournant sur le container, nous retrouvons les fichiers créés.

Et en allant sur Power BI dans le cloud, on retrouve aussi les données des tweets.

 En sélectionnant la visualisation Table puis en cochant les divers champs, on retrouve les tweets stockés depuis la première itération du Logic App. On pourrait ajouter un filtre afin de n’afficher que les tweets du mois en cours pour faire une analyse en temps réel.

 

7.     Exploitation sur Power BI desktop.

 Pour récupérer les fichiers et les exploiter sur Power BI desktop, on procède d’abord en ajoutant les données via le cloud « Azure ». Obtenir les données -> Plus.

On choisit « Stockage Blob Azure ».

 On renseigne les informations de connexion concernant notre blob storage (blob storage -> Access keys).

On renseigne la clé (key1), puis se connecter.

 

En cochant sur le container « tweets », on retrouve tous les fichiers blob créés (si rien ne s’affiche cliquez sur le bouton de rafraîchissement en haut à droite).

Puis chargez les en cliquant sur « Charger ».

Vous verrez qu’une table a été créée avec plusieurs champs. Cliquez sur « Modifier les requêtes », à partir du menu Accueil.

Nous retrouvons nos éléments, cependant il est nécessaire de les extraire pour en tirer les informations que l’on a concaténées.

Pour cela, il faut faire clic droit sur la colonne « Content » puis choisir Transformer -> Texte.

 On trouve les éléments mit à la suite et bien séparé de points-virgules. On peut ainsi transformer cette colonne en plusieurs données exploitables. Clic droit sur la colonne « Content » puis Fractionner la colonne -> Par délimiteur.

 On choisit les paramètres ci-dessous :

·        Délimiteur : Point-virgule.

·        Fractionner à : Chaque occurrence du délimiteur.

 On a bien les colonnes correspondantes aux éléments des tweets que l’on a souhaité garder, on peut changer le nom des colonnes pour plus de clarté.

Si une 4ème colonne sans données est créée, il suffit de la supprimer (clic droit sur la colonne, supprimer).

 

Voici les tweets que l’on a enregistré depuis le début du processus. On pourra faire une analyse une fois le volume de données devenu très important.

 

8.     Conclusion

 En suivant ce tutoriel, on retrouve une architecture lambda, d’un côté Power BI desktop avec les données stockées dans un blob storage, de l’autre Power BI Cloud avec les données les plus récentes et en temps réels.

Ainsi on peut choisir des axes d’analyses variés pour représenter l’information et le sens que nos données fournissent.

Cependant, cette architecture peut poser un problème car chaque tweet est stocké deux fois (fichier blob et ligne dans le cloud Power BI) ce qui pourrait s’avérer couteux en stockage avec une volumétrie de données importante.

[Power BI][Azure Analysis Service] Comment importer un modele Power BI dans Azure Analysis Services

De nombreux concepteur de rapports Power BI se sont souvent posé la question :

Comment industrialiser mon rapport et partager mes données avec mes collègues de bureau de manière automatisée.

Mon model est bon, la direction m’a validé les chiffres il ne reste plus qu’a le mettre en production malheureusement il est disponible que dans mon Power BI que j’ai créé, mes collègues ne peuvent pas utiliser ma base pour venir créer leurs rapports ni même agrémenté mes formules DAX avec d’autres formules sans devoir créer de nouveaux modèles.

Cette réflexion reviens à dire : Comment intégrer mon modele Power BI dans une instance Analysis Services en mode Tabulaire de manière automatique.

Réponse : Il existe 2 méthodes :

Méthode 1 : Je crée un nouveau projet Visual studio et je développe ce qui a été réalisé dans Power BI

Méthode 2 : J’importe depuis le portail Azure les données depuis mon fichier Power BI et l’outil va créer automatiquement le modèle tabulaire présent dans le fichier Power BI Desktop.

Dans ce blog je vais vous présenter brièvement la méthode N°2 qui permet d’uploader rapidement un modèle tabulaire issus de Power BI desktop

1

 

Cette option est en mode préview actuellement sur le portail, elle n’est pas encore complètement achevé et donc elle est susceptible de comporter des erreurs.

On sélectionne un fichier Power BI Destktop (on voit que nous pouvons importer des modèles depuis un Datawarehouse ou une SQL database également)

2

 

Pour notre test nous avons sélectionné le fichier pbix de notre choix :

3

 

Il nous importe le modele avec les formules en DAX qui sont incorporé dans notre projet Power BI desktop:

4.jpg

Il ne reste plus qu’a se connecter a ce modèle depuis notre instance Azure Analysis Services.

Les formules en DAX et le code M de transformation des données étant repris  lors de cet import.

Julien PIERRE

Consultant MSBI

[Azure] Optimisation de vos chargement dans Azure Datawarehouse

Contexte :

Suite à la mise en place de données dans un projet Azure chez un client nous avons été confronté à des problèmes de performance lors de l’intégration des données dans notre Azure Datawarehouse

Afin de gagner du temps nous récupérons différentes interfaces sous format Csv que nous transformons en format .parquet

L’intérêt du format parquet est de gagner du temps lors de l’exploitation de ces différentes interfaces car le format parquet permet de structurer les données et de stocker les données de manière pré formaté.

Dans notre cas nous avons souhaité héberger ces données dans un service distribué comme Azure Data Lake.

Ce service est un service distribué qui permet de stocker les fichiers « formatés ». L’intérêt de ce système de stockage est de gagner du temps sur l’interrogation de ces fichiers car nous sommes sur un système distribué.

Lire la suite

[Azure] Installation d’une Gateway DataFactory

Contexte : Dans notre exercice nous essayons de réaliser une copie de données entre des données en local et Azure Data Lake store.
Pour réaliser ce transfert nous allons utiliser le service Azure Data Factory et nous avons besoins de réaliser une Gateway pour sécuriser les données entre notre machine local et notre Azure Data Lake Store.

Lire la suite