Мониторинг функции Azure

#azure #azure-functions #azure-application-insights #azure-monitoring

#azure #azure-функции #azure-application-insights #azure-мониторинг

Вопрос:

У меня есть функция запуска таймера. Она выполняется каждую минуту, но я не вижу никаких журналов в разделе монитора на портале Azure.

Монитор

Однако, когда я нажимаю «Выполнить запрос в Application Insights» и исправляю cloudRoleName в запросе (по умолчанию для него задано имя приложения, но мы изменили его ITelemetryInitializer ), он отображает все выполнения правильно.

Запрос App insights

РЕДАКТИРОВАТЬ: это мой код запуска

 public class Startup : IWebJobsStartup
{
    public void Configure(IWebJobsBuilder builder)
    {
        builder.Services
            .AddSingleton<ITelemetryInitializer, CloudRoleNameInitializer>();

        // more registrations
    }
  

и инициализатор CloudRoleNameInitializer

  public class CloudRoleNameInitializer : ITelemetryInitializer
 {
    public void Initialize(ITelemetry telemetry)
    {
        telemetry.Context.Cloud.RoleName = "EmailPuller";
    }
 }
  

Когда я нажимаю выполнить запрос в Application Insights, генерируемый запрос

 requests
| project timestamp, id, operation_Name, success, resultCode, duration, operation_Id, cloud_RoleName, invocationId=customDimensions['InvocationId']
| where timestamp > ago(30d)
| where cloud_RoleName =~ 'emailpuller-UNIQUE_ID_FROM_ARM_TEMPLATE' and operation_Name =~ 'OurOperationName'
| order by timestamp desc
| take 20
  

Таким образом, вы можете видеть cloud_RoleName , отличается от установленного ITelemetryInitializer . Если я обновлю запрос, чтобы использовать ’emailpuller’, он возвращает информацию о выполнениях

Комментарии:

1. Я пытался, но не воспроизвел вашу проблему. можете ли вы предоставить дополнительную информацию? Код вашего функционального приложения, function.json, host.json и т.д…

2. Может быть, это потому, что вы не изменили CloudRoleName? Возможно, этот монитор использует тот же запрос, что и его отображение, когда я нажимаю Выполнить запрос в AppInsights — ОН ничего не возвращает, если я не исправлю в нем CloudRoleName.

3. @PiotrPerak, не могли бы вы, пожалуйста, сообщить нам, как вы регистрируете инициализатор телеметрии? насколько я знаю, существует связанная с этим ошибка, которая не может ее зарегистрировать. Если мы это знаем, нам будет легко воспроизвести проблему и найти первопричину.

Ответ №1:

Ваше предположение верно. Пользовательский интерфейс монитора используется the default CloudRoleName для запроса журналов.

Легко найти основную причину. Шаги следующие, как показано ниже:

1.Перейдите на портал Azure -> ваша функция Azure -> Монитор -> нажмите клавишу F12, чтобы открыть инструмент разработки браузера.

2. затем нажмите Refresh кнопку -> затем в инструменте разработки выберите api -> затем в Request Payload , вы можете видеть, что этот api использует значение по умолчанию CloudRoleName для запроса журналов.

Вот скриншот:

введите описание изображения здесь

Это может быть ошибкой, вы можете вызвать проблему в github функции Azure.

Комментарии:

1. Я действительно создал ошибку, хотя я сомневаюсь, что эта служба будет иметь доступ к моему пользовательскому имени облачной роли — github.com/Azure/Azure-Functions/issues/1755