Loupe

Visualiser les données d’AppInsights directement dans PowerBI

AppInsights, c’est la solution proposée par Microsoft pour faire du tracking d’usage de votre application. Vous disposez ainsi d’une API client qui vous permet de remonter le nombre de clics, de pages vues, la liste des sessions, les infos sur l’utilisateur (localisation, type de machine, etc.) et plein d’autre choses encore.

De base, dans le portail Azure, vous disposez d’un ensemble de report plutôt intéressants:

image

Mais vous pourriez vouloir allez plus loin en termes d’analyses (ou tout simplement vouloir éviter de donner l’accès au portail Azure à des personnes n’en n’ayant pas le besoin/droit) et c’est là que PowerBI entre en jeu.

Après vous être connecté et avoir enregistré un compte sur https://app.powerbi.com, vous pouvez, dans la liste des services, rajouter Application Insights:

image

Une fois les informations de connexion paramétrées, vous vous retrouvez avec un Dashboard contenant un ensemble de reports utilisables directement:

image

Le seul problème, c’est qu’en fonction de type d’application don’t vous disposez, les rapports de base ne vont peut être pas convenir.

En effet, dans le cas d’une application Windows Store par exemple, la métrique du nombre de pages vues en fonction des différents navigateurs ne fait pas sens….

Certes, il est possible de customiser les rapports pour enlever les charts qui ne sont pas nécessaires mais que faire lorsque l’on souhaite en ajouter ? En allant dans le Dataset de PowerBI, on voit que plusieurs tables sont disponibles, chacunes avec ces propres champs:

image

Cependant, ce Dataset est celui proposé de base par le service d’import depuis AppInsights, il n’est pas possible de venir le customiser pour rajouter nos propres champs (par exemple, il n’est pas possible de base de récupérer le numéro de version de l’application, information qui peut s’avérer importante dans certains cas).

La solution va donc être d’importer nos propres données dans un Dataset PowerBI, qui servira pour la création des rapports.

Pour cela, plusieurs étapes sont nécessaires. Tout d’abord, sur la ressource AppInsights, il faut venir configurer l’export en continu qui permettra de prendre les données d’AppInsights et de venir les insérer dans un Blob Storage:

image

Première subtilité ici: vous ne pouvez pas disposer de l’export en continu sur un AppInsights “gratuit”. Vous devez passer sur un tiers payant:

image

Une fois l’export mis en place, il faut passer sur l’ancien portail pour rajouter un Stream Analytics:

image

L’objectif de Stream Analytics est de servir de “proxy” entre une (ou plusieurs) source(s) de données en entrée et une (ou plusieurs) source(s) de données en sortie. Dans notre cas, la source d’entrée sera le Blob Storage et la source de données de sortie sera le Dataset de PowerBi.

Une fois le Stream Analytics de créé, il convient donc de rajouter une entrée, de type “Data Stream” puis “Blob Storage”:

image

Lors de la configuration du point d’entrée, pensez à bien activer la case “Configure Advanced Settings” qui va permettre de paramétrer le chemin d’accès des données, dans le Blob:

image

C’est là que la partie “marrant” commence Smile

 

image

Le champ “Path Prefix Pattern” permet d’indiquer à votre instance Stream Analytics où et comment, dans le Blob Storage, il peut aller chercher les données. En effet, si vous télécharger le contenu de ce blob (une fois que des données auront été insérées), vous pourrez voir quelque chose comme ceci:

image  image image image

Ainsi, le “Path Prefix Pattern” est constitué des éléments suivants:

  • testinsights: Le nom de votre AppInsights, en miniature
  • _: Un underscore “_” qui joue le rôle de séparateur
  • XXXXXX: L’Instrumentation Key de votre AppInsights (que vous pouvez obtenir dans ses paramètres), sans les tirets
  • PageViews: Nom de la ressources AppInsights à laquelle on souhaite accéder. Celle-ci dépends de ce qui a été configuré dans le service mais, à titre d’exemple, vous pouvez constater via les images ci-dessus que dans mon cas, j’ai demandé à ce qu’AppInsights me remonte les évènements (Event), les exceptions (Exceptions) et les différentes pages vues (PageViews).
  • {date} et {time}: Sont des constantes qui indique que, dans le Blob, il faut aller chercher les informations dans différents répertoires, le premier correspondant à la date et le deuxième correspondant à l’heure (le chiffre de l’heure pour être précis)

Une fois les paramètres {date} et {time} inscrits dans le Path Prefix Pattern, l’assistant dévérouille automatiquement les combobox de sélection des formats de dates et heures. Pour la date, assurez-vous de bien prendre “YYYY-MM-DD” et, pour l’heure, il faut sélectionner “HH” (c’est, au final, le format que vous retrouvez dans l’arborescence du Blob).

Le point d’entrée est ajouté, il reste à se connecter à la source PowerBI pour la sortie. Pour cela, cliquez sur “Outputs” et ajouter une sortie de type PowerBI:

image

Une fois connecté, on vous demande de rentrer le nom du Dataset et le nom de la table PowerBI:

image

 

Nos points d’entrée et de sortie sont maintenant configurés, il reste à spécifier la requête à jouer dans Stream Analytics pour “convertir” les données du Blob et les injecter dans le Dataset. Pour cela, dans l’onglet “Query”, saisissez la requête qui vous intéresse:

SELECT
    NameColumn.ArrayValue.Name AS [Name],
    A.context.[user].anonId AS [UserId],
    A.context.[location].country AS [Country],
    A.context.[data].eventTime AS [Time],
    COUNT(*)
INTO
    [pageviews]
FROM
    [export-input-pageviews] A 
OUTER APPLY
    GetElements(A.[view]) as NameColumn
GROUP BY
    TumblingWindow(minute, 1),
    NameColumn.ArrayValue.Name,
    A.context.[user].anonId, 
    A.context.[location].country,
    A.context.[location].city,
    A.context.[data].eventTime,
    A.context.[device].deviceModel,
    A.context.[application].version

image

Vous pouvez, si besoin, tester votre requête sur des fichiers exemple afin de vous assurez que les données remontent bien, dans le bon format, etc.

Une fois la requête écrite, il ne reste plus qu’à déclencher le streaming des données du Blob vers PowerBI en cliquant sur “Start”:

image

Une fois le streaming démarré, rendez-vous alors dans PowerBI pour constater l’apparition d’un nouveau Dataset avec une nouvelle table:

image

A vous alors d’utiliser ces données pour créer vos propres rapports:

image

 

Et voilà, le tour est joué!

 

Happy coding (and reporting!) Smile

 

PS:

Plus d’infos ici: https://azure.microsoft.com/en-us/documentation/articles/app-insights-export-power-bi/

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus