حدث
إنشاء تطبيقات ووكلاء الذكاء الاصطناعي
١٧ رمضان، ٩ م - ٢١ رمضان، ١٠ ص
انضم إلى سلسلة الاجتماعات لإنشاء حلول الذكاء الاصطناعي قابلة للتطوير استنادا إلى حالات الاستخدام في العالم الحقيقي مع المطورين والخبراء الآخرين.
تسجيل الآنلم يعد هذا المتصفح مدعومًا.
بادر بالترقية إلى Microsoft Edge للاستفادة من أحدث الميزات والتحديثات الأمنية والدعم الفني.
تنبيه
نوصي ب Azure Monitor OpenTelemetry Distro للتطبيقات الجديدة أو العملاء لتشغيل Azure Monitor Application Insights. يوفر Azure Monitor OpenTelemetry Distro وظيفة وتجربة مماثلة ل Application Insights SDK. من الممكن الترحيل من Application Insights SDK باستخدام أدلة الترحيل ل .NET Node.js وPython، ولكننا ما زلنا نعمل على إضافة بعض الميزات الإضافية للتوافق مع الإصدارات السابقة.
يمكن الإبلاغ عن الاستثناءات في تطبيقات الويب باستخدام Application Insights. يمكنك ربط الطلبات الفاشلة بالاستثناءات والأحداث الأخرى على كل من العميل والخادم، بحيث يمكنك تشخيص الأسباب بسرعة. في هذه المقالة، ستتعرف على كيفية إعداد تقارير الاستثناء، والإبلاغ عن الاستثناءات بشكل صريح، وتشخيص حالات الفشل، والمزيد.
يمكنك إعداد Application Insights لتقديم تقرير حول الاستثناءات التي تحدث في الخادم أو العميل. اعتمادًا على النظام الأساسي الذي يعتمد عليه التطبيق، ستحتاج إلى الملحق أو عدة تطوير البرامج المناسبة.
للإبلاغ عن استثناءات من تطبيق جانب الملقم الخاص بك، خذ بعين الاعتبار السيناريوهات التالية:
توفر عدة تطوير البرامج الخاصة بـ JavaScript القدرة على إنشاء تقارير على جانب العميل خاصة بالاستثناءات التي تحدث في مستعرضات الويب. لإعداد تقارير الاستثناءات على العميل، راجع Application Insights الخاص بصفحات الويب.
مع بعض أطر عمل التطبيق، يتطلب الأمر مزيدًا من التكوين. ضع في اعتبارك التقنيات التالية:
هام
تركز هذه المقالة بشكل خاص على تطبيقات .NET Framework من منظور مثال التعليمات البرمجية. بعض الأساليب التي تعمل نيابة عن .NET Framework تُعتبر قديمة في عدة تطوير البرامج الخاصة بـ.NET Core. لمزيد من المعلومات، راجع وثائق عدة تطوير البرامج الخاصة بـ.NET Core عند إنشاء تطبيقات باستخدام .NET Core.
افتح حل التطبيق في Visual Studio. قم بتشغيل التطبيق، إما على الخادم الخاص بك أو على جهاز التطوير الخاص بك باستخدام F5. أعد إنشاء الاستثناء.
افتح إطار القياس عن بُعد البحث عن Application Insights في Visual Studio. أثناء تصحيح الأخطاء، حدد خانة القائمة المنسدلة Application Insights.
حدد تقرير استثناء لإظهار تتبع المكدس الخاص به. لفتح ملف التعليمات البرمجية ذات الصلة، حدد مرجع الخط في تتبع المكدس.
إذا تم تمكين CodeLens، فسترى بيانات حول الاستثناءات:
يأتي Application Insights مع تجربة إدارة أداء التطبيق المجمّع لمساعدتك على تشخيص الفشل في التطبيقات التي تتم مراقبتها. للبدء، في قائمة مورد Application Insights على اليسار، ضمن Investigate، حدد الخيار Failures.
سترى اتجاهات معدل الفشل لطلباتك، وعدد الطلبات التي تفشل منها، وعدد المستخدمين المتأثرين. تعرض طريقة العرض الشاملة بعض التوزيعات الأكثر فائدة الخاصة بالعملية الفاشلة المحددة. سترى أهم ثلاثة رموز استجابة، وأهم ثلاثة أنواع من الاستثناءات، وأهم ثلاثة أنواع تبعية فاشلة.
لمراجعة عينات تمثيلية لكل مجموعة من هذه المجموعات الفرعية من العمليات، حدد الارتباط المطابق. على سبيل المثال، لتشخيص الاستثناءات، يمكنك تحديد عدد مرات حدوث استثناء معين ليتم تقديمه مع علامة التبويب تفاصيل المعاملة من طرف إلى طرف.
بدلا من ذلك، بدلاً من النظر إلى استثناءات عملية فشل معينة، يمكنك البدء من طريقة العرض الكلي للاستثناءات، عن طريق التبديل إلى علامة التبويب استثناءات الموجودة في الأعلى. هنا يمكنك رؤية جميع الاستثناءات التي تم جمعها للتطبيق الخاص بك الذي تتم مراقبته.
للحصول على بيانات تشخيصية خاصة بتطبيقك، يمكنك إدراج تعليمة برمجية لإرسال بيانات القياس عن بُعد الخاصة بك. يتم عرض بيانات القياس عن بُعد أو بيانات السجل المخصصة في البحث التشخيصي إلى جانب الطلب وعرض الصفحة والبيانات الأخرى التي يتم جمعها تلقائياً.
باستخدام Microsoft.VisualStudio.ApplicationInsights.TelemetryClient، تتوفر لديك عدة واجهات برمجة تطبيقات:
لمشاهدة هذه الأحداث، في القائمة اليسرى، افتح البحث. حدد أنواع أحداث القائمة المنسدلة، ثم اختر حدث مخصص أو تتبع أو استثناء.
ملاحظة
إذا كان التطبيق الخاص بك يولد الكثير من القياس عن بُعد، سوف تقلل وحدة أخذ العينات التكيفية تلقائياً من حجم الصوت الذي يتم إرساله إلى المدخل عن طريق إرسال جزء تمثيلي فقط من الأحداث. سيتم تحديد الأحداث التي تشكل جزءًا من العملية نفسها أو إلغاء تحديدها كمجموعة، بحيث يمكنك التنقل بين الأحداث ذات الصلة. لمزيد من المعلومات، راجع أخذ العينات في Application Insights.
لا تتضمن تفاصيل الطلب البيانات المرسلة إلى تطبيقك في استدعاء POST. للإبلاغ عن هذه البيانات:
في البداية، لن ترى في المدخل جميع الاستثناءات التي تتسبب في الفشل في التطبيق الخاص بك. سترى أي استثناءات خاصة بالمتصفح إذا كنت تستخدم عدة تطوير البرامج JavaScript في صفحات الويب الخاصة بك. ولكن يتم التقاط معظم استثناءات الخادم من قِبل IIS وعليك كتابة قليلاً من التعليمات البرمجية لرؤيتها.
يمكنك:
الطريقة الأبسط للإبلاغ هي إدخال استدعاء لـ trackException()
في معالج الاستثناء.
try
{
// ...
}
catch (ex)
{
appInsights.trackException(ex, "handler loc",
{
Game: currentGame.Name,
State: currentGame.State.ToString()
});
}
var telemetry = new TelemetryClient();
try
{
// ...
}
catch (Exception ex)
{
var properties = new Dictionary<string, string>
{
["Game"] = currentGame.Name
};
var measurements = new Dictionary<string, double>
{
["Users"] = currentGame.Users.Count
};
// Send the exception telemetry:
telemetry.TrackException(ex, properties, measurements);
}
Dim telemetry = New TelemetryClient
Try
' ...
Catch ex as Exception
' Set up some properties:
Dim properties = New Dictionary (Of String, String)
properties.Add("Game", currentGame.Name)
Dim measurements = New Dictionary (Of String, Double)
measurements.Add("Users", currentGame.Users.Count)
' Send the exception telemetry:
telemetry.TrackException(ex, properties, measurements)
End Try
تُعتبر الخصائص ومعلمات القياسات اختيارية، ولكنها مفيدة للمعلومات الإضافية الخاصة بـ التصفية والإضافة. على سبيل المثال، إذا كان لديك تطبيق يمكنه تشغيل العديد من الألعاب، يمكنك العثور على جميع تقارير الاستثناءات المتعلقة بلعبة معينة. يمكنك إضافة العديد من العناصر كما تريد إلى كل قاموس.
يتم الإبلاغ عن معظم استثناءات المستعرض.
إذا كانت صفحة الويب الخاصة بك تتضمن ملفات نصية من شبكات تسليم المحتوى أو مجالات أخرى، فتأكد من أن علامة البرنامج النصي تحتوي على السمة crossorigin="anonymous"
، وأن الخادم يرسل عناوين CORS. سيسمح لك هذا السلوك بالحصول على تتبع مكدس وتفاصيل استثناءات JavaScript التي لم تتم معالجتها من هذه الموارد.
ملاحظة
نوصي بإنشاء مثيل TelemetryClient
مرة واحدة وإعادة استخدامه طوال فترة استخدام التطبيق.
مع "حقن التبعية" (DI) في .NET، و عدة تطوير البرامج المناسبة من .NET وتكوين Application Insights بشكل صحيح لـ DI، يمكنك طلب TelemetryClient كمعلمة دالة إنشائية.
public class ExampleController : ApiController
{
private readonly TelemetryClient _telemetryClient;
public ExampleController(TelemetryClient telemetryClient)
{
_telemetryClient = telemetryClient;
}
}
في المثال السابق، يتم حقن TelemetryClient
في الفئة ExampleController
.
بالنسبة لنماذج الويب، ستتمكن وحدة HTTP النمطية من تجميع الاستثناءات عند عدم وجود عمليات إعادة توجيه تم تكوينها باستخدام CustomErrors
. ومع ذلك، عندما يكون لديك عمليات إعادة توجيه نشطة، قم بإضافة الأسطر التالية إلى الدالة Application_Error
في Global.asax.cs.
void Application_Error(object sender, EventArgs e)
{
if (HttpContext.Current.IsCustomErrorEnabled &&
Server.GetLastError () != null)
{
_telemetryClient.TrackException(Server.GetLastError());
}
}
في المثال السابق، يُعبر _telemetryClient
هو متغير ضمن نطاق الفئة من النوع TelemetryClient.
بدءًا من تطبيق عدة تطوير البرامج على الويب الخاصة بـ Application Insights الإصدار 2.6 (beta 3 والإصدارات الأحدث)، يقوم Application Insights بتجميع الاستثناءات التي لم تتم معالجتها والتي تم طرحها في أساليب وحدات تحكم MVC 5 + تلقائيًا. إذا قمت مسبقًا بإضافة معالج مخصص لتعقب مثل هذه الاستثناءات، يمكنك إزالته لمنع إجراء التعقب المزدوج للاستثناءات.
يوجد العديد من السيناريوهات عندما لا يمكن لعامل تصفية الاستثناء القيام بمعالجة الأخطاء بشكل صحيح، عند طرح الاستثناءات:
لا تزال تحتاج كافة الاستثناءات التي تمت معالجتها بواسطة التطبيق إلى تعقبها يدوياً. عادةً ما ينتج عن الاستثناءات التي لم تتم معالجة التي تنشأ من وحدات التحكم 500 استجابة "خطأ داخلي في الخادم". إذا تم إنشاء هذه الاستجابة يدويًا كنتيجة لاستثناء تمت معالجته (أو بدون أي استثناء على الإطلاق)، يتم تعقبه في عملية القياس عن بُعد المقابلة للطلب مع 500 ResultCode
. ومع ذلك، فإن عدة تطوير البرامج Application Insights غير قادرة على تتبع استثناء مطابق.
إذا كنت تستخدم MVC 4 (والإصدارات الأقدم) من عدة تطوير البرامج على الويب الخاصة بـApplication Insights 2.5 (والإصدارات الأقدم)، راجع الأمثلة التالية لتعقب الاستثناءات.
إذا كان تكوين CustomErrors هو Off
، فستتوفر استثناءات للوحدة النمطية HTTP لتقوم بجميعها. ومع ذلك، إذا كان RemoteOnly
(هو الوضع الافتراضي)، أو On
، سيتم مسح الاستثناء ولن يتوفر لـ Application Insights لإجراء الجمع التلقائي. يمكنك إصلاح ذلك السلوك عن طريق تجاوز الفئة System.Web.Mvc.HandleErrorAttribute، وتطبيق الفئة التي تم تجاوزها كما هو موضح بالنسبة لإصدارات MVC المختلفة أدناه (المصدر GitHub):
using System;
using System.Web.Mvc;
using Microsoft.ApplicationInsights;
namespace MVC2App.Controllers
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AiHandleErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
if (filterContext != null && filterContext.HttpContext != null && filterContext.Exception != null)
{
//The attribute should track exceptions only when CustomErrors setting is On
//if CustomErrors is Off, exceptions will be caught by AI HTTP Module
if (filterContext.HttpContext.IsCustomErrorEnabled)
{ //Or reuse instance (recommended!). See note above.
var ai = new TelemetryClient();
ai.TrackException(filterContext.Exception);
}
}
base.OnException(filterContext);
}
}
}
استبدل السمة HandleError واستخدام السمة الجديدة في وحدات التحكم الخاصة بك.
namespace MVC2App.Controllers
{
[AiHandleError]
public class HomeController : Controller
{
// Omitted for brevity
}
}
سجل AiHandleErrorAttribute
كعامل تصفية عمومي في Global.asax.cs:
public class MyMvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new AiHandleErrorAttribute());
}
}
سجل AiHandleErrorAttribute
كعامل تصفية عمومي في FilterConfig.cs:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
// Default replaced with the override to track unhandled exceptions
filters.Add(new AiHandleErrorAttribute());
}
}
بدءاً من تطبيق عدة تطوير البرامج على الويب الخاصة بـ Application Insights الإصدار 2.6 (beta 3 والإصدارات الأحدث)، يقوم Application Insights بتجميع الاستثناءات التي لم تتم معالجتها والتي تم طرحها في أساليب وحدة التحكم تلقائيًا بالنسبة لـ Web API 2+. إذا قمت مسبقا بإضافة معالج مخصص لتعقب مثل هذه الاستثناءات كما هو موضح في الأمثلة التالية، يمكنك إزالته لمنع إجراء التعقب المزدوج للاستثناءات.
توجد العديد من الحالات التي لا يمكن فيها لعوامل تصفية الاستثناء القيام بالمعالجة. على سبيل المثال:
لا تزال تحتاج كافة الاستثناءات التي تمت معالجتها بواسطة التطبيق إلى تعقبها يدوياً. عادةً ما ينتج عن الاستثناءات التي لم تتم معالجة التي تنشأ من وحدات التحكم 500 استجابة "خطأ داخلي في الخادم". إذا تم إنشاء هذه الاستجابة يدويًا كنتيجة لاستثناء تمت معالجته (أو بدون أي استثناء على الإطلاق)، يتم تعقبه في عملية القياس عن بُعد المقابلة للطلب مع 500 ResultCode
. ومع ذلك، فإنه يتعذر على عدة تطوير البرامج Application Insights تتبع استثناء مطابق.
إذا كنت تستخدم Web API 1 (والإصدارات الأقدم) من عدة تطوير البرامج على الويب الخاصة بـ Application Insights 2.5 (والإصدارات الأقدم)، راجع الأمثلة التالية لتعقب الاستثناءات.
تجاوز System.Web.Http.Filters.ExceptionFilterAttribute
:
using System.Web.Http.Filters;
using Microsoft.ApplicationInsights;
namespace WebAPI.App_Start
{
public class AiExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
if (actionExecutedContext != null && actionExecutedContext.Exception != null)
{ //Or reuse instance (recommended!). See note above.
var ai = new TelemetryClient();
ai.TrackException(actionExecutedContext.Exception);
}
base.OnException(actionExecutedContext);
}
}
}
يمكنك إضافة هذه السمة التي تم تجاوزها إلى وحدات تحكم معينة أو إضافتها إلى تكوين عامل التصفية العمومي في الفئة WebApiConfig
:
using System.Web.Http;
using WebApi1.x.App_Start;
namespace WebApi1.x
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
// ...
config.EnableSystemDiagnosticsTracing();
// Capture exceptions for Application Insights:
config.Filters.Add(new AiExceptionFilterAttribute());
}
}
}
إضافة تطبيق IExceptionLogger
:
using System.Web.Http.ExceptionHandling;
using Microsoft.ApplicationInsights;
namespace ProductsAppPureWebAPI.App_Start
{
public class AiExceptionLogger : ExceptionLogger
{
public override void Log(ExceptionLoggerContext context)
{
if (context != null && context.Exception != null)
{
//or reuse instance (recommended!). see note above
var ai = new TelemetryClient();
ai.TrackException(context.Exception);
}
base.Log(context);
}
}
}
أضف هذه القصاصة البرمجية إلى الخدمات في WebApiConfig
:
using System.Web.Http;
using System.Web.Http.ExceptionHandling;
using ProductsAppPureWebAPI.App_Start;
namespace WebApi2WithMVC
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
config.Services.Add(typeof(IExceptionLogger), new AiExceptionLogger());
}
}
}
كبدائل لهذه الإجراءات، يمكنك:
ExceptionHandler
بتنفيذ مخصص لـ IExceptionHandler
. يتم استدعاء معالج الاستثناء هذا فقط عندما يكون إطار العمل لا يزال قادراً على اختيار رسالة الاستجابة لإرسالها (وليس عند إحباط الاتصال لمثيل)أضف فئة تمتد Attribute
وتنفذ IErrorHandler
وIServiceBehavior
.
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;
using System.Web;
using Microsoft.ApplicationInsights;
namespace WcfService4.ErrorHandling
{
public class AiLogExceptionAttribute : Attribute, IErrorHandler, IServiceBehavior
{
public void AddBindingParameters(ServiceDescription serviceDescription,
System.ServiceModel.ServiceHostBase serviceHostBase,
System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints,
System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription,
System.ServiceModel.ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcher disp in serviceHostBase.ChannelDispatchers)
{
disp.ErrorHandlers.Add(this);
}
}
public void Validate(ServiceDescription serviceDescription,
System.ServiceModel.ServiceHostBase serviceHostBase)
{
}
bool IErrorHandler.HandleError(Exception error)
{//or reuse instance (recommended!). see note above
var ai = new TelemetryClient();
ai.TrackException(error);
return false;
}
void IErrorHandler.ProvideFault(Exception error,
System.ServiceModel.Channels.MessageVersion version,
ref System.ServiceModel.Channels.Message fault)
{
}
}
}
إضافة السمة إلى تطبيقات الخدمة:
namespace WcfService4
{
[AiLogException]
public class Service1 : IService1
{
// Omitted for brevity
}
}
إذا قمت بتثبيت عامل Azure Monitor Application Insights Agent على الخادم الخاص بك، يمكنك الحصول على مخطط معدل الاستثناءات، التي تم قياسها بواسطة .NET. يتم تضمين كلاً من استثناءات .NET المعالجَة وغير المعالجة.
افتح علامة تبويب مستكشف المقاييس، وأضف مخططًا جديدًا. ضمن عدّادات الأداء، حدد معدل الاستثناء.
يحسب إطار عمل .NET المعدل عن طريق حساب عدد الاستثناءات التي تحدث في فاصل زمني ما وقسمتها على طول الفاصل الزمني.
يختلف هذا عن عدد الاستثناءات المحسوبة بواسطة بوابة Application Insights الذي يحسب تقارير TrackException
. تختلف الفواصل الزمنية لأخذ العينات، ولا ترسل عدة تطوير البرامج تقارير TrackException
لكافة الاستثناءات المعالجة وغير المعالجة.
حدث
إنشاء تطبيقات ووكلاء الذكاء الاصطناعي
١٧ رمضان، ٩ م - ٢١ رمضان، ١٠ ص
انضم إلى سلسلة الاجتماعات لإنشاء حلول الذكاء الاصطناعي قابلة للتطوير استنادا إلى حالات الاستخدام في العالم الحقيقي مع المطورين والخبراء الآخرين.
تسجيل الآنالتدريب
مسار التعلم
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
الوثائق
Dependency tracking in Application Insights - Azure Monitor
Monitor dependency calls from your on-premises or Azure web application with Application Insights.
Explore .NET trace logs in Application Insights - Azure Monitor
Search logs generated by Trace, NLog, or Log4Net.
Filtering and preprocessing in the Application Insights SDK - Azure Monitor
Write telemetry processors and telemetry initializers for the SDK to filter or add properties to the data before the telemetry is sent to the Application Insights portal.