sách gpt4 ăn đã đi

Sử dụng Chẩn đoán (Nguồn chẩn đoán) để ghi lại thông tin theo dõi trong .NET Core

In lại Tác giả: qq735679552 Thời gian cập nhật: 27-09-2022 22:32:09 28 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết trên blog CFSDN này sử dụng Diagnostics (Diagnostic Source) trong .NET Core để ghi lại và theo dõi thông tin được tác giả thu thập và biên soạn. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.

Lời nói đầu

Gần đây tôi bận rộn với dự án và đã lâu không viết blog. Tôi xin gửi lời xin lỗi đến những người hâm mộ đã theo dõi tôi. Sau này tôi có thể chia sẻ thêm về một số kinh nghiệm của chúng tôi trong việc triển khai microservice. Vì vậy hôm nay tôi sẽ kể cho các bạn nghe về cơ chế sự kiện DiagnosticSource mới được giới thiệu trong .NET Core 2. Tại sao lại nói nó là hoàn toàn mới? Những sinh viên quan tâm đến .NET Framework trước đó nên biết rằng Chẩn đoán cũng đã có sẵn, vậy .NET Core mới có những thay đổi gì? Chúng ta hãy cùng nhau xem xét.

Chẩn đoán

Chẩn đoán luôn là thứ bị hầu hết các nhà phát triển bỏ qua. Tôi đoán đây có thể là lần đầu tiên nhiều sinh viên nghe đến Chẩn đoán khi họ nhìn thấy điều này. Chúng ta sẽ nói về vấn đề này sau, nhưng trước tiên hãy xem Chẩn đoán được sử dụng để làm gì.

Chẩn đoán là gì?

Hãy quay trở lại tháng 8 năm 2013. Microsoft đã phát hành gói Chẩn đoán mới có tên Microsoft.Diagnostics.Tracing.TraceEvent trên NuGet. Gói này được sử dụng để cung cấp tính năng theo dõi sự kiện mạnh mẽ cho Windows (ETW). Ghi lại sự kiện nhật ký giám sát từ đầu đến cuối trong môi trường đám mây và môi trường sản xuất. Nó nhẹ, hiệu quả và có thể tương tác với nhật ký hệ thống.

PS: Thông qua gói này, chúng tôi có thể có được một số thông tin chi tiết về hoạt động CLR. Do chủ đề của bài viết này, chúng tôi sẽ không giới thiệu quá nhiều về nó.

Nhìn thấy các chức năng mà gói này cung cấp, blogger sẽ tự tóm tắt và xác định Chẩn đoán: Khi ứng dụng có vấn đề, đặc biệt là khi có vấn đề về tính khả dụng hoặc hiệu suất, các nhà phát triển hoặc nhân viên CNTT thường sẽ dành nhiều thời gian để thảo luận về các vấn đề này. để chẩn đoán, nhiều khi các vấn đề trong môi trường sản xuất không thể tái tạo được, điều này có thể ảnh hưởng lớn đến hoạt động kinh doanh, Chẩn đoán Nó nhằm cung cấp một bộ chức năng cho phép chúng tôi dễ dàng ghi lại các thao tác chính xảy ra trong quá trình chạy ứng dụng và thời gian thực thi của chúng, v.v., để quản trị viên có thể tìm ra nguyên nhân cốt lõi của vấn đề, đặc biệt là trong môi trường sản xuất.

Một số sinh viên có thể nói, đây không phải là APM (Quản lý hiệu suất ứng dụng) à? Từ góc độ vĩ mô, đây là một phần của APM, nhưng APM còn hơn thế nữa.

.NET Framework với EventSource

Ở trên chúng ta đã tìm hiểu về Microsoft.Diagnostics.Tracing.TraceEvent và có hai gói NuGet khác được sử dụng cùng nhau, đó là gói Microsoft.Diagnostics.Tracing.EventSource Vì vậy tôi sẽ không nói ngắn gọn về nó. Quá nhiều chi tiết trong phần này. Cuối cùng, nó đã được thay thế.

Nguồn sự kiện 。

Trong .NET Framework, EventSource được tích hợp với Kênh ETW do Windows ETW cung cấp. Mã mẫu được đưa ra bên dưới:

?
1
2
3
4
5
6
7
8
9
10
11
12
[EventSource(Tên = "Mẫu-EventSourceDemos-Tối thiểu" )]
công cộng niêm phong lớp học MinimalEventSource: Sự kiệnNguồn
{
     // Định nghĩa thể hiện singleton
     công cộng tĩnh Nhật ký MinimalEventSource = mới Nguồn sự kiện tối thiểu();
 
     // Định nghĩa phương thức Sự kiện
     công cộng vô hiệu Trọng tải( dài Địa chỉ cơ sở, sợi dây tên hình ảnh)
     {
         WriteEvent(1, địa chỉ cơ sở, tên hình ảnh);
     }
}

Sau đó, chúng ta có thể xem thông tin sự kiện có liên quan trong ETW:

Sử dụng Chẩn đoán (Nguồn chẩn đoán) để ghi lại thông tin theo dõi trong .NET Core

Lưu ý rằng trong .NET Framework 4.5 trở lên, EventSource đã được tích hợp vào không gian tên Hệ thống.

Học tập cũng là một quá trình tóm tắt. Về vấn đề này, chúng ta có thể tóm tắt một thông tin quan trọng hơn: thông qua việc thay đổi không gian tên Diagnostics, từ Microsoft sang System, chúng ta có thể thấy rằng Diagnostics đã trở nên quan trọng hơn đối với ứng dụng của chúng ta. .

Vì EventSource chỉ hỗ trợ Windows nên nó đã được thay thế một cách lặng lẽ trong .NET Core mới. Chúng ta hãy xem DiagnosticSource mới.

Nguồn chẩn đoán mới của .NET Core

Trong .NET Core, nhóm .NET đã thiết kế một DiagnosticSource mới. DiagnosticSource mới rất đơn giản. Nó cho phép bạn ghi lại dữ liệu tải trọng phong phú trong môi trường sản xuất và sau đó bạn có thể sử dụng các bản ghi mà người dùng khác quan tâm. Nghe có vẻ hơi khó hiểu phải không? Không sao đâu, tôi sẽ giải thích chi tiết sau.

Trước tiên, hãy nói về sự khác biệt giữa DiagnosticSource và EventSource ở trên. Điểm khác biệt chính là dữ liệu được ghi bởi EventSource là dữ liệu có thể tuần tự hóa và sẽ được sử dụng bên ngoài quy trình, vì vậy đối tượng được yêu cầu ghi lại phải được ghi lại. Được tuần tự hóa. DiagnosticSource được thiết kế để xử lý dữ liệu trong quy trình, do đó bạn có thể nhận được thông tin dữ liệu phong phú hơn thông qua nó. Nó hỗ trợ các đối tượng không được tuần tự hóa, chẳng hạn như HttpContext, HttpResponseMessage, v.v. Nếu muốn lấy dữ liệu sự kiện trong DiagnosticSource trong EventSource, bạn có thể thực hiện bắc cầu dữ liệu thông qua đối tượng DiagnosticSourceEventSource.

Chúng ta hãy xem cách sử dụng đối tượng DiagnosticSource trong mã.

Trước đó, chúng ta cần hiểu một đối tượng khác, DiagnosticListener. Từ quan điểm đặt tên, DiagnosticListener là một đối tượng lắng nghe thông tin chẩn đoán. Nó thực sự là một lớp được sử dụng để nhận các sự kiện. Trong .NET Core, DiagnosticSource thực sự là một lớp trừu tượng. , được xác định Để ghi lại các phương thức cần thiết cho nhật ký sự kiện, chúng ta cần sử dụng các đối tượng cụ thể khi sử dụng chúng. DiagnosticListener là cách triển khai mặc định của DiagnosticSource.

Được rồi, bây giờ chúng ta hãy xem cách sử dụng nó.

Tạo nhật ký chẩn đoán

Làm cách nào để tạo nhật ký chẩn đoán? Đầu tiên chúng ta cần tạo một đối tượng DiagnosticListener, chẳng hạn như:

?
1
riêng tư tĩnh DiagnosticSource httpLogger = mới  Trình nghe chẩn đoán( "Hệ thống.Net.Http" );

Tên trong tham số DiagnosticListener là tên của sự kiện (thành phần) cần được lắng nghe. Tên này sẽ được sử dụng để người tiêu dùng của nó đăng ký trong tương lai.

Về cốt lõi, DiagnosticSource chỉ chứa hai phương thức, đó là:

?
1
2
bool Đã bật( sợi dây tên)
vô hiệu Viết( sợi dây tên, sự vật giá trị);

Sau đó chúng ta có thể gọi nó như thế này:

?
1
2
3
nếu như (httpLogger.IsEnabled( "Yêu cầu Bắt đầu" )){
     httpLogger.Viết( "Yêu cầu Bắt đầu" , mới { Địa chỉ = "http://clr" , Yêu cầu=mộtYêu cầu });
}

IsEnabled(string param1) Phương pháp này được sử dụng để xác định xem người tiêu dùng đã đăng ký trình nghe tên sự kiện (thành phần) hiện tại hay chưa. Thông thường, chúng tôi sẽ chỉ ghi lại sự kiện khi người tiêu dùng lo ngại về dữ liệu liên quan. Write(string param1, object param2) Phương thức này được sử dụng để ghi các bản ghi nhật ký vào DiagnosticSource. Param1 được sử dụng để chỉ định tên như trên, nghĩa là dữ liệu được ghi vào tên đã chỉ định. Param2 là dữ liệu tải trọng được ghi. các loại ẩn danh để ghi dữ liệu vào param2, sẽ thuận tiện hơn nhiều.

Bằng cách này, chúng ta đã viết nhật ký sự kiện Chẩn đoán vào DiagnosticSource. Chẳng phải rất đơn giản sao? Chúng ta hãy xem cách tiêu thụ (giám sát) những thông tin sự kiện này.

Nghe ghi nhật ký chẩn đoán

Trước khi nghe Ghi nhật ký chẩn đoán, bạn cần biết tên của dữ liệu sự kiện mà bạn muốn quan tâm. Nếu bạn chỉ viết tất cả DiagnosticListeners vào mã người tiêu dùng đang nghe trong mã thì sẽ quá thiếu linh hoạt, vì vậy đây là Cơ chế được sử dụng. để khám phá DiagnosticListeners được kích hoạt khi chạy.

Bạn có thể sử dụng DiagnosticListener.AllListeners để lấy đối tượng IObservable Mọi người nên làm quen với giao diện IObservable (nếu không chắc chắn, bạn có thể đọc tại đây), sau đó sử dụng phương thức Đăng ký của nó để thực hiện "gọi lại" OnNext. dữ liệu sự kiện mà bạn quan tâm.

Mã mẫu:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
tĩnh Mạng dùng một lầnĐăng ký = vô giá trị ;
 
// Sử dụng AllListeners để lấy tất cả các đối tượng DiagnosticListeners và chuyển vào lệnh gọi lại IObserver
tĩnh IDisposable listenerSubscription = DiagnosticListener.AllListeners.Subscribe( đại biểu (Người nghe DiagnosticListener)
{
     // Khi DiagnosticsListener được kích hoạt, một cuộc gọi lại sẽ được thực hiện tại đây
     nếu như (tên người nghe == "Hệ thống.Net.Http" )
     {
         // Thuê bao theo dõi mã tiêu thụ
         khóa (tất cả người nghe)
         {
             nếu như (mạngĐăng ký != vô giá trị )
                 networkSubscription. Vứt bỏ();
            
             // Mã doanh nghiệp gọi lại
             Hành động<> sợi dây , sự vật >> gọi lại = (KeyValuePair< sợi dây , sự vật > có thể) =>
                 Console.WriteLine( "Từ Listener {0} Đã nhận sự kiện {1} với tải trọng {2}" , networkListener.Name, evnt.Key, evnt.Value);
           
             //Tạo một đối tượng Observer ẩn danh
             Người quan sát<> sợi dây , sự vật >> người quan sát = mới Người quan sát ẩn danh sợi dây , sự vật >>(gọi lại);
            
             // Lọc các sự kiện bạn quan tâm
             Vị ngữ< sợi dây > vị ngữ = ( sợi dây Tên sự kiện) => Tên sự kiện == "Yêu cầu Bắt đầu" ;
            
             networkSubscription = listener.Subscribe(người quan sát, vị ngữ);
         }
     }
});
 
// Thông thường, ở đây bạn cần luôn duy trì hoạt động của listenSubscription,
// Nếu bạn muốn hủy cuộc gọi lại, bạn có thể gọi listenSubscription.Dispose() để hủy người đăng ký

Bằng cách này, chúng ta có thể thực hiện một số thao tác mà chúng ta muốn sau khi kích hoạt lệnh gọi lại.

Bạn có thấy cách viết trên hơi rườm rà và xấu xí không? Nhóm ASP.NET đã cân nhắc điều này và đóng gói một thư viện bộ chuyển đổi để chúng tôi hỗ trợ một số hoạt động giám sát. Bạn có thể thực hiện các sự kiện liên quan bằng cách đánh dấu các thuộc tính Đăng ký, quan tâm. sinh viên có thể xem gói NuGet (Microsoft.Extensions.DiagnosticAdapte) này.

Bây giờ chúng ta có thể lấy dữ liệu, một số sinh viên có thể nói rằng có quá nhiều dữ liệu trong môi trường sản xuất, tôi nên lưu dữ liệu ở đâu và xử lý nó như thế nào? Hãy nhìn xuống.

Hỗ trợ Chẩn đoán cho khung của bạn

Với sự phổ biến của microservice, các vấn đề về theo dõi liên kết dịch vụ và hiệu suất ứng dụng ngày càng trở nên quan trọng và APM cũng đã trở thành một phần mềm trung gian rất quan trọng trong toàn bộ kiến ​​trúc microservice, có thể giúp chúng ta nhanh chóng tìm ra các vấn đề môi trường sản xuất gặp phải trong ứng dụng, và thu thập thông tin bối cảnh thời gian chạy bất thường để nhanh chóng khắc phục sự cố khi xảy ra ngoại lệ trong ứng dụng.

Những sinh viên quen thuộc với giao thức Dapper hoặc OpenTracing của Google chắc hẳn đã nghĩ đến nó. Chúng tôi có thể sử dụng dữ liệu trên để đóng gói theo thỏa thuận của các giao thức này, sau đó gửi đến máy chủ APM hỗ trợ các giao thức này. công việc sẽ được thực hiện? Những máy chủ này giúp chúng tôi xử lý nó, bao gồm hiển thị đồ họa, xem hiệu suất, xem chuỗi cuộc gọi, v.v.

Hầu hết các dự án APM nguồn mở đều hỗ trợ các giao thức Dapper hoặc OpenTracing, chẳng hạn như Apache SkyWalking, ZipKin, pointpoint, v.v. Nhân tiện, Lemon, thành viên nhóm dự án nguồn mở NCC của chúng tôi đang viết dự án trình điều khiển máy khách C# cho SkyWalking. Đây là một công việc rất khó khăn. Những sinh viên quan tâm có thể bắt đầu nó.

Tôi tin rằng có nhiều kiến ​​trúc sư, tác giả dự án nguồn mở, nhà phát triển khung và thậm chí cả nhà phát triển ứng dụng đang đọc bài viết này, vì vậy tôi khuyên bạn nên bắt đầu cung cấp hỗ trợ Chẩn đoán cho dự án của mình kể từ bây giờ, CoreFx, ASP. cung cấp hỗ trợ cho Chẩn đoán.

CAP đã cung cấp hỗ trợ cho Chẩn đoán trong phiên bản 2.2.

Chẩn đoán trong CAP.

CAP: https://github.com/dotnetcore/CAP 。

CAP là một dự án mã nguồn mở của tôi, một giải pháp xử lý các giao dịch phân tán trong kiến ​​trúc microservice hoặc SOA. Bạn có thể xem thêm về CAP trong bài viết này. Nếu thích, bạn có thể cho nó một sao. Đó cũng là động lực cho tôi. để tiếp tục làm tốt hơn, cảm ơn bạn.

Tên của trình xử lý sự kiện do CAP cung cấp là: CapDiagnosticListener.

Thông tin sự kiện được cung cấp bên ngoài bởi Chẩn đoán trong CAP là:

  • Trước sự kiên trì của tin nhắn
  • Sau khi tin nhắn được duy trì
  • Ngoại lệ liên tục của tin nhắn
  • Trước khi tin nhắn được gửi đến MQ
  • Sau khi tin nhắn được gửi đến MQ
  • Tin nhắn gửi ngoại lệ tới MQ
  • Tin nhắn được lưu từ mức tiêu thụ MQ trước
  • Sau khi tin nhắn được lưu từ mức tiêu thụ MQ
  • Trước khi phương thức thuê bao được thực thi
  • Sau khi phương thức thuê bao được thực thi
  • Ngoại lệ thực thi phương thức thuê bao

Các đối tượng liên quan có thể được nhìn thấy trong không gian tên DotNetCore.CAP.Diagnostics.

Dựa trên những dữ liệu sự kiện bên ngoài này, chúng ta có thể kết nối với APM. Sau đây là hình ảnh về ZipKin mà tôi đã kết nối:

Sử dụng Chẩn đoán (Nguồn chẩn đoán) để ghi lại thông tin theo dõi trong .NET Core

Tóm tắt

Thông qua bài viết này, chúng tôi đã tìm hiểu về một đối tượng ghi dữ liệu sự kiện mới DiagnosticSource được cung cấp cho chúng tôi trong .NET Core. Thông qua đối tượng này, chúng tôi có thể cung cấp một số thông tin chẩn đoán cho thế giới bên ngoài để hỗ trợ các vấn đề về hiệu suất của ứng dụng của chúng tôi trong môi trường sản xuất. và theo dõi chuỗi cuộc gọi, chúng tôi đã tìm hiểu về một số sự kiện Chẩn đoán do CAP cung cấp.

Trên đây là chi tiết cách sử dụng Diagnostics (Diagnostic Source) để ghi lại thông tin theo dõi trong .NET Core. Để biết thêm thông tin về thông tin theo dõi bản ghi .NET Core, vui lòng theo dõi các bài viết liên quan khác của tôi! .

Liên kết gốc: https://www.cnblogs.com/savorboard/p/diagnostics.html.

Cuối cùng, bài viết này về cách sử dụng Chẩn đoán (Nguồn chẩn đoán) để ghi thông tin theo dõi trong .NET Core kết thúc tại đây. Nếu bạn muốn biết thêm về cách sử dụng Chẩn đoán (Nguồn chẩn đoán) để ghi thông tin theo dõi trong .NET Core, vui lòng Tìm kiếm các bài viết về CFSDN hoặc. tiếp tục duyệt các bài viết liên quan, tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress