Поделиться через


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

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

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

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

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

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

Открытая конфигурация диагностики

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

Конфигурация приемников диагностики с помощью 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 Insights. Атрибут scheduledTransferLogLevelFilter всегда должен собирать равные или более журналы, чем журналы, которые вы пытаетесь отправить в приемник.
  • Невозможно отправлять данные BLOB-объектов, собранные расширением Azure диагностика в Application Insights. Например, данные, указанные в узле Directories. Для аварийных дампов фактический дамп аварийного сбоя отправляется в хранилище BLOB-объектов и отправляется только уведомление о том, что аварийный дамп был создан в Application Insights.

Next Steps