dotnet-trace는 어떻게 시작할 때부터 모니터링을 시작합니까
3505 단어 dotnet-tracedotnetC#
dotnet-trace는 v5.0.160202를 시작할 때부터 추적 로그를 수집할 수 있습니다.
이 기사에서 나는 어떻게 그 기능을 실현했는지 설명하고 싶다.
Dotnet-trace 소개
자세한 설명dotnet/diagnostics 문서 참조을 원하지만 주로 외부에서 이벤트소어스의 정보를 수집하는 데 사용되는 도구EventPipe를 사용한 구조입니다.
dotnettracev5.0.152202 이전에는 시작 과정에서 선택하고 수집하는 방법만 사용할 수 있습니다.
사용된 IPC 프로토콜은 연결할 때 PID가 필요하기 때문에 어쨌든 시작하지 않으면 알 수 없기 때문이다.
따라서 Diagnostic Ports라는 개념을 도입하여 시작할 때부터 감시할 수 있도록 했다.
Diagnostic Ports는
Diagnostic IPC Protocol은 PID를 포함하는 명명된 파이프나 유닉스 필드 플러그를 통해 통신하지만 위에서 설명한 바와 같이
기본적으로 사용되는 포트는 런타임 측면에서 PID를 포함하는 형식으로 작성됩니다.
다만 일부 시나리오에서는 이 구성이 불편한 부분이 있어 다음과 같은 동작을 추가했다.
DOTNET_DiagnosticPorts
그림의 Advertise 메시지는 다음 형식입니다.
오프셋
크기
이름:
개요
0
8
magic
고정 데이터
ADVR_V1\0
816
runtimeCookie
IPC ProcessInfo의 runtime Cookie와 동일한 GUID
24
8
PID
프로세스 ID(작은 끝 순서)
32
2
reserved
장래의 예약 구역(현재 항상 0)
ProcessInfodotnet/diagnostics의 IPC 프로토콜 문서 참조 정보
주의점
위의 프로그램은 현재 클라이언트 라이브러리 (Microsoft.Diagnostics.NETcore.Client) 에서 직접 실현할 수 없습니다.
... 때문에
1. 그림에 필요한 ResumeRuntime 메시지를 보내는 API는 인터넷입니다.
*소스https://github.com/dotnet/diagnostics/blob/5734230e3ee516339a4b0e4729def135027aa255/src/Microsoft.Diagnostics.NETCore.Client/DiagnosticsClient/DiagnosticsClient.cs#L155
2. Collector 사이드 파이프의 처리를 기다리는 것도 인터넷이다
* 소스는 https://github.com/dotnet/diagnostics/tree/v5.0.160202/src/Microsoft.Diagnostics.NETCore.Client/ReversedServer 근처
dotnet-trace에서 이 일대를 처리할 수 있는 것은 클라이언트 프로그램 라이브러리에서 인터넷 VisibleTo에 의해 처리되기 때문이다.
1에 관해서는 먼저 파이프 감청 처리에서 ResumeRuntime 메시지를 수동으로 보내는 것을 피하는 방법이 있다.
2에 관해서는 Advertise 메시지에 PID가 포함되어 있기 때문에 이 PID를 얻을 수 있으면 나중에 Diagnostic Client에 맡기면 통신할 수 있다.
이 점이 인터넷의 이유인데, 퍼블릭이 되면 규격 변경이 어려워지기 때문이라고 생각합니다.
dotnet-6.0의 타이밍에 대응하는 모습을 토론하는 거예요.이기 때문에 장래에 실현될 수 있을 것이다.
끝맺다
dotnet trace에서 시작할 때부터 이벤트소스의 로그를 얻을 수 있다는 것은 기쁜 일이다.
클라이언트 라이브러리 측이 이 일대를 처리할 수 있다면 꿈도 커질 것이다.
Reference
이 문제에 관하여(dotnet-trace는 어떻게 시작할 때부터 모니터링을 시작합니까), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/skitoy4321/items/53b61ee3601bf76abefa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)