Отслеживайте не-HTTP-запросы с помощью Application Insights

Как указано в этой ссылке, в приложении .net core2.1 web.api реализован приведенный ниже код для отслеживания запросов, отличных от HTTP (т. е. вызовов redis), с помощью Application Insights

 private ReviewModel<T> GetCachedData<T>(string id)
    {
        try
        {
            var obj = default(RedisValue);
            _retryPolicy.Execute(() =>
            {
                using (var getReviewsOperation = _telemetryClient.StartOperation<DependencyTelemetry>("RedisCall"))
                {
                    obj = _database.StringGet(id); // external call to redis server
                }
            });

            var review = string.IsNullOrEmpty(obj) || !obj.HasValue ?
                    default(ReviewModel<T>) : _serializer.Deserialize<ReviewModel<T>>(obj );
            return review;
        }
        catch (Exception ex)
            when (ex is RedisException)
        {
            //how to log the exception cases in dependency table of application insights log?
            _log.LogError($"Redis exception occurred : ", {ex.Message});
            return null;
        }
    }

Приведенный выше код успешно регистрирует сведения о вызове Redis в таблице зависимостей журнала аналитики приложения. Но как записать в журнал сведения о вызове Redis в таблице зависимостей журнала аналитики приложения в сценариях исключений со значением свойства успеха как false?


person EnthuAz    schedule 06.01.2021    source источник


Ответы (1)


Для этого можно использовать TrackDependency . TrackDependency используется для отслеживания времени отклика и успешности вызовов внешнего фрагмента кода. Результаты появятся в диаграммах зависимостей на портале. Приведенный ниже фрагмент кода необходимо добавить везде, где выполняется вызов зависимости:

var success = false;
var startTime = DateTime.UtcNow;
var timer = System.Diagnostics.Stopwatch.StartNew();
try
{
    success = dependency.Call();
}
catch(Exception ex) 
{
    success = false;
    telemetry.TrackException(ex);
    throw new Exception("Operation went wrong", ex);
}
finally
{
    timer.Stop();
    telemetry.TrackDependency("DependencyType", "myDependency", "myCall", startTime, timer.Elapsed, success);
}
person singhh-msft    schedule 06.01.2021
comment
Спасибо, таким образом, я знаю об этом. Но как регистрировать детали вызова redis в таблице зависимостей аналитики приложения. Журнал сценариев исключений со значением свойства успеха как false, использование TelemetryClient предоставляет методы расширения StartOperation и StopOperation, поскольку это рекомендованный MS подход docs.microsoft.com/en-us/ лазурный / лазурный монитор / приложение / - person EnthuAz; 06.01.2021
comment
Извините, вы можете объяснить, в чем вопрос? Что вам нужно, и такой подход не делает этого за вас? - person singhh-msft; 06.01.2021
comment
есть другой подход для отслеживания настраиваемых зависимостей docs.microsoft.com/en-us/azure/azure-monitor/app/…, в этом подходе, как регистрировать детали вызова redis в таблице зависимостей аналитики приложения. Журнал сценариев исключений? - person EnthuAz; 06.01.2021
comment
Ссылка не понятна. Пожалуйста, обновите ссылку. - person singhh-msft; 08.01.2021
comment
Вам это помогает? - person singhh-msft; 12.01.2021