2015-03-13 17 views
20

Tôi muốn thêm thuộc tính tùy chỉnh vào chỉ số được thực hiện bởi Thông tin chi tiết về ứng dụng cho mỗi yêu cầu của ứng dụng của tôi. Ví dụ, tôi muốn thêm đăng nhập người dùng và mã đối tượng thuê, chẳng hạn như tôi có thể phân đoạn/nhóm các số liệu trong cổng Azure.Thêm thuộc tính tùy chỉnh cho từng yêu cầu trong chỉ số Thông tin chi tiết về ứng dụng

Trang doc liên quan dường như là cái này: Set default property values

Nhưng ví dụ này là cho một sự kiện (ví dụ gameTelemetry.TrackEvent("WinGame");), không phải cho một yêu cầu HTTP:

var context = new TelemetryContext(); 
context.Properties["Game"] = currentGame.Name; 
var gameTelemetry = new TelemetryClient(context); 
gameTelemetry.TrackEvent("WinGame"); 

Câu hỏi của tôi:

  1. Mã có liên quan cho yêu cầu là gì vì tôi không có mã cụ thể tại thời điểm này (có vẻ như được SDK App Insights quản lý tự động): Chỉ cần tạo TelemetryContext có đủ không? Tôi có nên tạo một số TelemetryClient và nếu có, tôi có nên liên kết nó với yêu cầu hiện tại không? Làm sao ?
  2. Tôi nên đặt mã này ở đâu? Có ok trong phương thức Application_BeginRequest của global.asax không?

Trả lời

0

Trong tài liệu đó, cuộn xuống một vài dòng đến nơi nó nói về việc tạo triển khai IContextInitializer. Bạn có thể gọi nó bằng bất kỳ phương pháp nào sẽ được gọi trước khi bắt đầu từ xa.

Thuộc tính tùy chỉnh của bạn sẽ được thêm vào tất cả các sự kiện, ngoại lệ, số liệu, yêu cầu, mọi thứ.

+2

Tôi cũng muốn nói thêm rằng các thuộc tính được thêm vào khi Track được gọi và AI kêu gọi theo dõi cho yêu cầu theo yêu cầu kết thúc. –

1

Như đã đề cập bởi Alan, bạn có thể triển khai giao diện IContextInitializer để thêm thuộc tính tùy chỉnh cho TẤT CẢ từ xa được gửi bởi Thông tin chi tiết về ứng dụng. Tuy nhiên, tôi cũng khuyên bạn nên xem xét giao diện ITelemtryInitializer. Nó rất giống với bộ khởi tạo ngữ cảnh, nhưng nó được gọi cho mọi phần từ xa được gửi thay vì chỉ khi tạo ra một máy khách từ xa. Điều này có vẻ hữu ích hơn đối với tôi khi ghi lại các giá trị thuộc tính có thể thay đổi trong suốt thời gian tồn tại của ứng dụng của bạn, chẳng hạn như thông tin liên quan đến người dùng và người thuê nhà như bạn đã đề cập.

Tôi hy vọng sẽ giúp bạn. Dưới đây là blog post với ví dụ về cách sử dụng ITelemetryInitializer.

10

Liên quan đến câu hỏi đầu tiên "cách thêm sự kiện tùy chỉnh vào yêu cầu của tôi/mã có liên quan cho yêu cầu", tôi nghĩ sự nhầm lẫn chính ở đây có liên quan đến việc đặt tên.

Việc đầu tiên mà chúng ta cần phải chỉ ra là có nhiều loại thông tin khác nhau mà chúng ta có thể chụp với ứng dụng Insights:

  1. Event Tuỳ chỉnh
  2. Yêu cầu
  3. Exception
  4. vết
  5. Trang Xem
  6. Phụ thuộc

Khi chúng tôi biết điều này, chúng tôi có thể nói rằng TrackEvent có liên quan đến "Sự kiện tùy chỉnh", vì TrackRequest có liên quan đến Yêu cầu.

Khi chúng tôi muốn lưu một yêu cầu, những gì chúng ta cần làm là như sau:

var request = new RequestTelemetry(); 
var client = new TelemetryClient(); 
request.Name = "My Request"; 
client.TrackRequest(countEvent); 

Vì vậy, hãy tưởng tượng rằng người dùng đăng nhập và mã thuê nhà cả hai đều là chuỗi. Chúng ta có thể tạo một yêu cầu mới chỉ để đăng nhập thông tin này bằng cách sử dụng đoạn mã sau:

public void LogUserNameAndTenant(string userName, string tenantCode) 
    { 
     var request = new RequestTelemetry(); 

     request.Name = "My Request"; 
     request.Context.Properties["User Name"] = userName; 
     request.Context.Properties["Tenant Code"] = tenantCode; 

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

Làm chỉ là một TelemetryContext sẽ không đủ, bởi vì chúng ta cần một cách để gửi thông tin, và đó là nơi TelemetryClient được tại chỗ .

Tôi hy vọng điều đó sẽ hữu ích.

11

Dường như thêm thuộc tính mới vào yêu cầu hiện tại có thể sử dụng ITelemetryInitializer như đã đề cập here.

Tôi đã tạo lớp mẫu như được đưa ra bên dưới và thêm thuộc tính mới có tên "LoggedInUser" để yêu cầu từ xa.

public class CustomTelemetry : ITelemetryInitializer 
{ 
    public void Initialize(ITelemetry telemetry) 
    { 
     var requestTelemetry = telemetry as RequestTelemetry; 
     if (requestTelemetry == null) return; 
     requestTelemetry.Properties.Add("LoggedInUserName", "DummyUser"); 

    } 
} 

Đăng ký lớp học này tại sự kiện bắt đầu ứng dụng. Ví dụ dưới đây được khắc ra khỏi ứng dụng MVC mẫu tôi đã tạo

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 

     TelemetryConfiguration.Active.TelemetryInitializers 
    .Add(new CustomTelemetry()); 
    } 
} 

Bây giờ bạn có thể thấy tùy chỉnh tài sản "LoggedInUserName" được hiển thị dưới nhóm Tuỳ yêu cầu tài sản. (Vui lòng tham khảo màn hình lấy bên dưới)

Appinsight with custom property

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