2015-04-06 14 views
10

Chúng tôi đang gặp phải một loạt vấn đề (đọc thời gian phản hồi dài) với một vài dự án trong sản xuất và muốn xem chính xác những gì đã xảy ra trên máy chủ. Sau đó, tôi đã tiếp tục thêm Thông tin chi tiết về ứng dụng cho tất cả các dự án của chúng tôi bằng cách theo dõi this article. Vấn đề là cả hai dự án WebAPI của chúng tôi không gửi dữ liệu máy chủ đến cổng Azure, trong khi tất cả các dự án khác (MVC 5) là.Làm cách nào để bật tính năng từ xa máy chủ ứng dụng Insights trên dự án WebApi sử dụng OWIN?

Đây là những gì được hiển thị khi tôi truy cập vào các thông tin chi tiết ứng dụng tương ứng lưỡi trên Azure:

enter image description here

tôi đã cố gắng để vô hiệu hóa và kích hoạt lại thu thập dữ liệu trong Status Monitor Application Insights trong Azure máy ảo của chúng tôi, khởi động lại IIS một vài lần trong khi đưa ra yêu cầu cho API, không có kết quả. Khi tôi kích hoạt nó trên một dự án MVC, tôi có thể thấy dữ liệu gần như ngay lập tức trên cổng Azure khi tôi mở các trang trên trang web.

Khi tôi thấy dữ liệu đó không được gửi từ máy ảo Azure của chúng tôi cho các dự án cụ thể này, tôi đã cố gắng thiết lập cùng một bộ sưu tập trong môi trường dev, được lưu trữ trong cơ sở hạ tầng của chính chúng ta. loại trừ khả năng rằng điều này liên quan đến các dự án được lưu trữ trong máy ảo Azure. Tôi không chắc chắn chính xác những gì đang ngăn các dự án này gửi dữ liệu đến Azure, nhưng bằng cách xem xét các dự án làm việc so với các dự án không hoạt động, tôi nghĩ nó có thể liên quan đến thực tế là các dự án WebAPI của chúng tôi sử dụng đường ống OWIN mới trong khi MVC là các dự án MVC tiêu chuẩn. Tôi đã kiểm tra cả tệp web.config và thư mục bin cho cả hai loại dự án và chúng dường như được sửa đổi một cách chính xác bởi Insights Monitor (tôi có thể thấy các dll mới được thêm vào thư mục bin và cùng một mô đun http được thêm vào web. config).

Với ý nghĩ đó, làm cách nào để bật tính năng từ xa phía máy chủ bằng cách sử dụng Insights ứng dụng cho dự án WebAPI dựa trên đường ống OWIN/Katana? Tôi có thể làm gì để tìm hiểu chính xác những gì đang gây ra dự án không gửi dữ liệu đến Azure trong trường hợp này?

Trả lời

8

AI sử dụng httpmodule để thu thập thông tin về yêu cầu bắt đầu và gửi yêu cầu cuối cùng. Như được mô tả here Owin/Katana sử dụng các phần mềm để thực hiện logic trên các giai đoạn khác nhau. Như hầu hết các bộ sưu tập AI tự động là nội bộ, bạn không thể tái sử dụng nó trong middleware của bạn. Nhưng bạn có thể tự mình đặt mã của mình. Tạo TelemetryClient từ mã của bạn và bắt đầu gửi Yêu cầu, Dấu vết và Ngoại lệ (như được mô tả here)

+0

Vì vậy, về cơ bản bạn đang nói rằng không thể tích hợp AI trong dự án WebAPI sử dụng OWIN/Katana mà không sửa đổi mã? Tôi thực sự muốn tránh điều đó, vì những gì chúng ta cần bây giờ chỉ là một hồ sơ tạm thời để phát hiện và sửa chữa sự chậm lại và sau đó loại bỏ AI từ các dự án một lần nữa. Nếu sửa đổi mã là cần thiết, nó có nghĩa là chúng ta sẽ phải triển khai một phiên bản hoàn toàn mới để sản xuất chỉ để chẩn đoán vấn đề, đó là một rắc rối lớn vào lúc này. – julealgon

+1

AI không phải là một hồ sơ. Đó là SDK cho thiết bị mã hóa. Không có hỗ trợ hộp cho các ứng dụng asp.net sử dụng IIS stack thường xuyên. Nếu onBegin và onEnd không được gọi, mã AI sẽ không được gọi. –

+0

Tôi hiểu điều đó, nhưng kịch bản hiện tại của chúng tôi sẽ được hưởng lợi rất nhiều từ tính từ xa của Ứng dụng Insights trên môi trường sống. Nếu chúng ta tiếp cận mã này ngay bây giờ, có nghĩa là chúng ta sẽ phải đưa ra một kế hoạch về cách quản lý các khóa trên tất cả các môi trường khác nhau, cách thiết lập chúng, ở đâu trong mã này sẽ cần, vv không có thời gian cho các nhiệm vụ này ngay bây giờ và chúng tôi cần giải quyết vấn đề càng nhanh càng tốt, vì vậy rất buồn khi quá trình này không hoạt động. Bạn đến từ đội ngũ dev? Bạn đã xem xét hỗ trợ katana ra khỏi hộp bằng cách nào đó? – julealgon

5

Dưới đây là việc chúng tôi thực hiện Phần mềm trung gian cho ứng dụng.

/// <summary> 
/// Extensions to help adding middleware to the OWIN pipeline 
/// </summary> 
public static class OwinExtensions 
{ 
    /// <summary> 
    /// Add Application Insight Request Tracking to the OWIN pipeline 
    /// </summary> 
    /// <param name="app"><see cref="IAppBuilder"/></param> 
    public static void UseApplicationInsights(this IAppBuilder app) => app.Use(typeof(ApplicationInsights)); 

} 

/// <summary> 
/// Allows for tracking requests via Application Insight 
/// </summary> 
public class ApplicationInsights : OwinMiddleware 
{ 

    /// <summary> 
    /// Allows for tracking requests via Application Insight 
    /// </summary> 
    /// <param name="next"><see cref="OwinMiddleware"/></param> 
    public ApplicationInsights(OwinMiddleware next) : base(next) 
    { 
    } 

    /// <summary> 
    /// Tracks the request and sends telemetry to application insights 
    /// </summary> 
    /// <param name="context"><see cref="IOwinContext"/></param> 
    /// <returns></returns> 
    public override async Task Invoke(IOwinContext context) 
    { 
     // Start Time Tracking 
     var sw = new Stopwatch(); 
     var startTime = DateTimeOffset.Now; 
     sw.Start(); 

     await Next.Invoke(context); 

     // Send tracking to AI on request completion 
     sw.Stop(); 

     var request = new RequestTelemetry(
      name: context.Request.Path.Value, 
      startTime: startTime, 
      duration: sw.Elapsed, 
      responseCode: context.Response.StatusCode.ToString(), 
      success: context.Response.StatusCode >= 200 && context.Response.StatusCode < 300 
      ) 
     { 
      Url = context.Request.Uri, 
      HttpMethod = context.Request.Method 
     }; 

     var client = new TelemetryClient(); 
     client.TrackRequest(request); 

    } 
} 
+0

Trông khá tốt, sạch sẽ và đơn giản. Tôi không thấy bất kỳ tài sản quan trọng mặc dù, làm thế nào để các máy chủ AI biết ứng dụng để thêm từ xa đến? Liệu nó dựa trên tham số 'Tên' đó trên yêu cầu từ xa? – julealgon

+0

@julealgon Phím thiết bị đo được đọc từ tệp ApplicationInsights.config. Tôi đã thử giải pháp này, và nó hoạt động hoàn hảo! –

15

Đây là câu hỏi cũ nhưng vẫn nằm trong top 3 kết quả tìm kiếm "web api application insights owin". Sau rất nhiều tìm kiếm và không có nhiều câu trả lời mà không yêu cầu chúng tôi viết phần mềm trung gian của riêng chúng tôi hoặc giải thích tất cả mọi thứ. Chúng tôi tình cờ gặp một gói mở rộng mà làm cho mọi việc siêu đơn giản:

Đây là Github Repository cho nó và liên NuGet Package

Đối với những người quá lười biếng để xem xét các liên kết, tất cả những gì là cần thiết để được thêm vào là:

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     app.UseApplicationInsights(); 

     // rest of the config here... 
    } 
} 

và thêm mục này vào ứng dụngInInights của bạn.Cấu hình

<TelemetryInitializers> 
    <!-- other initializers.. --> 
    <Add Type="ApplicationInsights.OwinExtensions.OperationIdTelemetryInitializer, ApplicationInsights.OwinExtensions"/> 
</TelemetryInitializers> 
+0

sau đó truy xuất từ ​​phần mềm trung gian nợ với Request.GetOwinContext(). Nhận (); – WarrenDodsworth

Các vấn đề liên quan