Senden von Cloud Services-, Virtual Machines- oder Service Fabric-Diagnosedaten an Application Insights

Cloud Services, Virtual Machines, VM-Skalierungsgruppen und Service Fabric verwenden die Azure-Diagnoseerweiterung zum Sammeln von Daten. Die Azure-Diagnose sendet die Daten an Azure Storage-Tabellen. Sie können jedoch auch alle oder einen Teil der Daten mithilfe der Azure-Diagnoseerweiterung 1.5 oder höher an andere Speicherorte weiterleiten.

Dieser Artikel beschreibt, wie Daten der Azure-Diagnoseerweiterung an Application Insights gesendet werden.

Erläuterung der Diagnosekonfiguration

Mit der Azure-Diagnoseerweiterung 1.5 wurden Senken eingeführt, d. h. zusätzliche Speicherorte, an die Sie Diagnosedaten senden können.

Beispielkonfiguration einer Senke für 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"
                    }
                ]
            }
        }
    ]
}
  • Das Attribut Sink Name ist ein Zeichenfolgenwert, der die Senke eindeutig identifiziert.

  • Das Element ApplicationInsights gibt den Instrumentierungsschlüssel der Application Insights-Ressource an, an die die Azure-Diagnosedaten gesendet werden.

  • Das Element Channels enthält ein oder mehrere Channel-Elemente.

    • Das Attribut Name gibt diesen Kanal eindeutig an.
    • Mit dem Attribut logLevel können Sie den Protokolliergrad angeben, den der Kanal zulässt. Die verfügbaren Protokolliergrade in der Reihenfolge ihrer Ausführlichkeit:
      • Ausführlich
      • Information
      • Warnung
      • Fehler
      • Kritisch

Ein Kanal verhält sich wie ein Filter und ermöglicht es Ihnen, bestimmte Protokolliergrade auszuwählen, die an die Zielsenke gesendet werden. Beispielsweise könnten Sie ausführliche Protokolle sammeln und an den Speicher senden, aber nur Fehler an die Senke.

Die folgende Abbildung zeigt diese Beziehung.

Öffentliche Diagnosekonfiguration

Die folgende Abbildung fasst die Konfigurationswerte und deren Funktionsweise zusammen. Sie können in die Konfiguration mehrere Senken auf unterschiedlichen Ebenen der Hierarchie einschließen. Die Senke der obersten Ebene verhält sich wie eine globale Einstellung, und die für das einzelne Element angegebene Senke verhält sich wie eine Korrektur der globalen Einstellung.

Konfiguration von Diagnosesenken mit Application Insights

Vollständiges Beispiel für eine Senkenkonfiguration

Hier sehen Sie ein vollständiges Beispiel für eine öffentliche Konfigurationsdatei, mit der Folgendes ausgeführt wird:

  1. Sendet alle Fehler an Application Insights (angegeben im Knoten DiagnosticMonitorConfiguration)
  2. Sendet zudem ausführliche Anwendungsprotokolle (angegeben im Knoten 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"
                        }
                    ]
                }
            }
        ]
    }
}

In der vorherigen Konfiguration haben die folgenden Zeilen die folgende Bedeutung:

Sendet alle von Azure-Diagnose erfassten Daten

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

Ausschließliches Senden von Fehlerprotokollen an die Application Insights-Senke

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

Senden von ausführlichen Anwendungsprotokollen an Application Insights

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

Einschränkungen

  • Nur Kanäle werden protokolliert, keine Leistungsindikatoren. Wenn Sie einen Kanal mit einem Leistungsindikatorelement angeben, wird es ignoriert.
  • Der Protokolliergrad für einen Kanal darf den Protokolliergrad für die von der Azure-Diagnose erfassten Daten nicht überschreiten. Beispiel: Sie können keine Anwendungsprotokollfehler im Element „Logs“ erfassen und nicht versuchen, ausführliche Protokolle an die Application Insight-Senke zu senden. Das Attribut scheduledTransferLogLevelFilter muss immer mindestens genauso viele Protokolle erfassen, wie Sie an eine Senke senden möchten.
  • Sie können keine von der Azure-Diagnose-Erweiterung erfassten Blobdaten an Application Insights senden. Beispiel: Alle Daten unter dem Knoten Directories. Bei Absturzabbildern wird das tatsächliche Absturzabbild an Blob Storage gesendet und an Application Insights nur eine Benachrichtigung, dass das Absturzabbild generiert wurde.

Nächste Schritte