Отправка в Application Insights диагностических данных облачной службы, виртуальной машины или Service Fabric

Облачные службы, виртуальные машины, масштабируемые наборы виртуальных машин и Service Fabric используют расширение системы диагностики Azure для сбора данных. Система диагностики Azure отправляет данные в таблицы службы хранилища Azure. Тем не менее эти данные можно также полностью или частично передавать в другие расположения, используя расширение системы диагностики Azure 1.5 или более поздней версии.

В этой статье описывается, как отправлять данные из расширения системы диагностики Azure в Application Insights.

Описание конфигурации системы диагностики

Расширение системы диагностики Azure 1.5 вводит понятие приемников — дополнительных расположений, в которые можно отправлять диагностические данные.

Ниже приведен пример конфигурации приемника для 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"
                    }
                ]
            }
        }
    ]
}
  • Атрибут Sinkname — это строковое значение, однозначно определяющее приемник.

  • Элемент ApplicationInsights указывает ключ инструментирования ресурса Application Insights, в который отправляется Диагностика Azure.

    • Если ресурс Application Insights еще не существует, см. статью Создание нового ресурса Application Insights, где содержатся дополнительные сведения о создании ресурса и получении ключа инструментирования.
    • При разработке облачной службы с использованием пакета SDK для Azure 2.8 и более поздних версий этот ключ инструментирования заполняется автоматически. При упаковке проекта облачной службы это значение задается на основе параметра конфигурации службы APPINSIGHTS_INSTRUMENTATIONKEY. См. статью Application Insights для облачных служб Azure
  • Элемент Channels содержит один или несколько элементов Channel.

    • Атрибут name однозначно ссылается на этот канал.
    • Атрибут Loglevel позволяет указать уровень ведения журнала для канала. Доступные уровни журнала в порядке наименьшей информации:
      • Подробный
      • Информация
      • Предупреждение
      • Ошибка
      • Критически важно

Канал действует как фильтр и позволяет выбрать конкретные уровни ведения журнала для отправки в приемник. Например, можно собирать подробные журналы и отправлять их в хранилище, а в приемник отправлять только журнал ошибок.

Эта взаимосвязь показана на следующем рисунке.

Diagnostics Public Configuration

На следующем рисунке показаны значения конфигурации и как они работают. В конфигурацию можно включить несколько приемников на разных уровнях иерархии. Приемник, указанный на верхнем уровне, действует как глобальный параметр, а приемник, указанный на уровне отдельного элемента, действует как переопределение для этого глобального параметра.

Diagnostics Sinks Configuration with Application Insights

Полный пример конфигурации приемника

Ниже приведен полный пример файла общедоступной конфигурации, которая:

  1. Отправляет все ошибки в службу Application Insights (указанную в узле DiagnosticMonitorConfiguration).
  2. Отправляет подробные журналы приложений (указанные в узле 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"
                        }
                    ]
                }
            }
        ]
    }
}

В предыдущей конфигурации приведенные ниже строки имеют следующий смысл.

Отправка всех данных, собираемых системой диагностики Azure

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

Отправка в приемник Application Insights только журналов ошибок

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

Отправка подробных журналов приложений в Application Insights

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

Ограничения

  • Каналы могут вести журнал типов, но не счетчиков производительности. Если указать канал с элементом счетчика производительности, он игнорируется.
  • Уровень ведения журнала для канала не может превышать уровень ведения журнала, данные которого собираются системой диагностики Azure. Например, нельзя собирать данные об ошибках в журнале приложений в элементе Logs и пытаться отправлять подробные журналы в приемник Application Insight. Атрибут ScheduledTransferLogLevelFilter должен всегда собирать равное или большее число журналов, чем число журналов, которые вы пытаетесь отправить в приемник.
  • В Application Insights нельзя отправлять собранные расширением системы диагностики Azure данные больших двоичных объектов. Например, данные, указанные в узле Directories. Что касается аварийных дампов, фактический аварийный дамп отправляется в хранилище BLOB-объектов, а в Application Insights отправляется только уведомление о том, что аварийный дамп был создан.

Дальнейшие действия