Envoyer des données de diagnostic de service cloud, de machine virtuelle ou de Service Fabric à Application Insights

Cloud services, Machines virtuelles, Virtual Machine Scale Sets et Service Fabric utilisent tous l’extension Diagnostics Azure pour collecter des données. Les diagnostics Azure envoient les données dans des tables de stockage Azure. Toutefois, vous pouvez également transmettre toutes les données ou un sous-ensemble de données vers d’autres emplacements à l’aide de l’extension Diagnostics Azure version 1.5 ou ultérieure.

Cet article décrit comment envoyer des données à partir de l’extension Diagnostics Azure vers Application Insights.

Explication de la configuration des diagnostics

L’extension Diagnostics Azure 1.5 a introduit des récepteurs, qui sont des emplacements supplémentaires où vous pouvez envoyer des données de diagnostic.

Exemple de configuration d’un récepteur pour Application Insights :

<SinksConfig>
    <Sink name="ApplicationInsights">
      <ApplicationInsights>{Insert InstrumentationKey}</ApplicationInsights>
      <Channels>
        <Channel logLevel="Error" name="MyTopDiagData"  />
        <Channel logLevel="Verbose" name="MyLogData"  />
      </Channels>
    </Sink>
</SinksConfig>
"SinksConfig": {
    "Sink": [
        {
            "name": "ApplicationInsights",
            "ApplicationInsights": "{Insert InstrumentationKey}",
            "Channels": {
                "Channel": [
                    {
                        "logLevel": "Error",
                        "name": "MyTopDiagData"
                    },
                    {
                        "logLevel": "Error",
                        "name": "MyLogData"
                    }
                ]
            }
        }
    ]
}
  • L’attribut Sink name est une valeur de chaîne qui identifie de façon unique le récepteur.

  • L’élément ApplicationInsights spécifie la clé d’instrumentation de la ressource Application Insights où les données des diagnostics Azure sont envoyées.

    • Si vous ne disposez pas d’une ressource Application Insights existante, consultez Créer une ressource Application Insights.
    • Si vous développez un service cloud avec le Kit de développement logiciel (SDK) Azure 2.8 ou version ultérieure, cette clé d’instrumentation est automatiquement renseignée. La valeur est basée sur le paramètre de configuration de service APPINSIGHTS_INSTRUMENTATIONKEY lors de l’empaquetage du projet de service cloud. Consultez Utiliser Application Insights avec Cloud Services.
  • L’élément Channels contient au moins un élément Channel.

    • L’attribut name fait référence uniquement à ce canal.
    • L’attribut loglevel vous permet de spécifier le niveau de consignation autorisé par le canal. Les niveaux de consignation disponibles sont, du plus informatif au moins informatif :
      • Commentaires
      • Information
      • Avertissement
      • Error
      • Critique

Un canal fonctionne comme un filtre et vous permet de sélectionner les niveaux de consignation spécifiques à envoyer au récepteur cible. Par exemple, vous pouvez collecter des journaux d’activité détaillés et les envoyer vers le stockage, mais envoyer uniquement les erreurs vers le récepteur.

Le graphique suivant illustre cette relation.

Configuration publique des diagnostics

Le graphique suivant résume les valeurs de configuration et leur fonctionnement. Vous pouvez inclure plusieurs récepteurs à la configuration à différents niveaux de la hiérarchie. Le récepteur spécifié au niveau supérieur fonctionne comme un paramètre global et celui spécifié au niveau des éléments individuels écrase ce paramètre global.

Récepteurs de diagnostics - Configuration avec Application Insights

Exemple de configuration complète de récepteur

Voici un exemple complet du fichier de configuration public qui :

  1. Envoie toutes les erreurs à Application Insights (spécifiées au niveau du nœud DiagnosticMonitorConfiguration).
  2. Envoie également des journaux détaillés pour les journaux des applications (spécifiés au niveau du nœud Logs).
<WadCfg>
  <DiagnosticMonitorConfiguration overallQuotaInMB="4096"
       sinks="ApplicationInsights.MyTopDiagData"> <!-- All info below sent to this channel -->
    <DiagnosticInfrastructureLogs />
    <PerformanceCounters>
      <PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT3M" />
      <PerformanceCounterConfiguration counterSpecifier="\Memory\Available MBytes" sampleRate="PT3M" />
    </PerformanceCounters>
    <WindowsEventLog scheduledTransferPeriod="PT1M">
      <DataSource name="Application!*" />
    </WindowsEventLog>
    <Logs scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Verbose"
            sinks="ApplicationInsights.MyLogData"/> <!-- This specific info sent to this channel -->
  </DiagnosticMonitorConfiguration>

<SinksConfig>
    <Sink name="ApplicationInsights">
      <ApplicationInsights>{Insert InstrumentationKey}</ApplicationInsights>
      <Channels>
        <Channel logLevel="Error" name="MyTopDiagData"  />
        <Channel logLevel="Verbose" name="MyLogData"  />
      </Channels>
    </Sink>
  </SinksConfig>
</WadCfg>
"WadCfg": {
    "DiagnosticMonitorConfiguration": {
        "overallQuotaInMB": 4096,
        "sinks": "ApplicationInsights.MyTopDiagData", "_comment": "All info below sent to this channel",
        "DiagnosticInfrastructureLogs": {
        },
        "PerformanceCounters": {
            "PerformanceCounterConfiguration": [
                {
                    "counterSpecifier": "\\Processor(_Total)\\% Processor Time",
                    "sampleRate": "PT3M"
                },
                {
                    "counterSpecifier": "\\Memory\\Available MBytes",
                    "sampleRate": "PT3M"
                }
            ]
        },
        "WindowsEventLog": {
            "scheduledTransferPeriod": "PT1M",
            "DataSource": [
                {
                    "name": "Application!*"
                }
            ]
        },
        "Logs": {
            "scheduledTransferPeriod": "PT1M",
            "scheduledTransferLogLevelFilter": "Verbose",
            "sinks": "ApplicationInsights.MyLogData", "_comment": "This specific info sent to this channel"
        }
    },
    "SinksConfig": {
        "Sink": [
            {
                "name": "ApplicationInsights",
                "ApplicationInsights": "{Insert InstrumentationKey}",
                "Channels": {
                    "Channel": [
                        {
                            "logLevel": "Error",
                            "name": "MyTopDiagData"
                        },
                        {
                            "logLevel": "Verbose",
                            "name": "MyLogData"
                        }
                    ]
                }
            }
        ]
    }
}

Dans la configuration précédente, les lignes ci-dessous ont les significations suivantes :

Envoyer toutes les données collectées par Diagnostics Azure

<DiagnosticMonitorConfiguration overallQuotaInMB="4096" sinks="ApplicationInsights">
"DiagnosticMonitorConfiguration": {
    "overallQuotaInMB": 4096,
    "sinks": "ApplicationInsights",
}

Envoyer uniquement les journaux d’activité d’erreurs au récepteur Application Insights

<DiagnosticMonitorConfiguration overallQuotaInMB="4096" sinks="ApplicationInsights.MyTopDiagdata">
"DiagnosticMonitorConfiguration": {
    "overallQuotaInMB": 4096,
    "sinks": "ApplicationInsights.MyTopDiagData",
}

Envoyer les journaux d’activité d’application détaillés à Application Insights

<Logs scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Verbose" sinks="ApplicationInsights.MyLogData"/>
"DiagnosticMonitorConfiguration": {
    "overallQuotaInMB": 4096,
    "sinks": "ApplicationInsights.MyLogData",
}

Limites

  • Les canaux consignent uniquement le type et non les compteurs de performances. Si vous spécifiez un canal comprenant un élément compteur de performances, il est ignoré.
  • Le niveau de consignation d’un canal ne peut pas dépasser le niveau de consignation de ce qui est collecté par Diagnostics Azure. Par exemple, vous ne pouvez pas collecter les erreurs du journal des applications dans l’élément Journaux et tenter d’envoyer des journaux détaillés au récepteur Application Insights. L’attribut scheduledTransferLogLevelFilter doit toujours collecter un nombre de journaux égal ou supérieur à celui des journaux que vous essayez d’envoyer à un récepteur.
  • Vous ne pouvez pas envoyer les données blob collectées par l’extension Diagnostics Azure à Application Insights. Par exemple, rien qui soit spécifié sous le nœud Directories. Concernant les images mémoire après incident, l’image mémoire réelle est envoyée au stockage d’objets blob, et seule une notification de la génération de l’image mémoire est envoyée à Application Insights.

Étapes suivantes